xref: /aosp_15_r20/external/llvm/test/Analysis/CFLAliasAnalysis/Steensgaard/opaque-call-alias.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; We previously had a case where we would put results from a no-args call in
2*9880d681SAndroid Build Coastguard Worker; its own stratified set. This would make cases like the one in @test say that
3*9880d681SAndroid Build Coastguard Worker; nothing (except %Escapes and %Arg) can alias
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -disable-basicaa -cfl-steens-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; CHECK:     Function: test
8*9880d681SAndroid Build Coastguard Worker; CHECK:     NoAlias: i8* %Arg, i8* %Escapes
9*9880d681SAndroid Build Coastguard Worker; CHECK:     MayAlias: i8* %Arg, i8* %Retrieved
10*9880d681SAndroid Build Coastguard Worker; CHECK:     MayAlias: i8* %Escapes, i8* %Retrieved
11*9880d681SAndroid Build Coastguard Workerdefine void @test(i8* %Arg) {
12*9880d681SAndroid Build Coastguard Worker  %Noalias = alloca i8
13*9880d681SAndroid Build Coastguard Worker  %Escapes = alloca i8
14*9880d681SAndroid Build Coastguard Worker  call void @set_thepointer(i8* %Escapes)
15*9880d681SAndroid Build Coastguard Worker  %Retrieved = call i8* @get_thepointer()
16*9880d681SAndroid Build Coastguard Worker  ret void
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdeclare void @set_thepointer(i8* %P)
20*9880d681SAndroid Build Coastguard Workerdeclare i8* @get_thepointer()
21