114 lines · plain
1; RUN: opt -passes=print-alias-sets -S -o - < %s 2>&1 | FileCheck %s --implicit-check-not="Unknown instructions"2 3; CHECK: Alias sets for function 'test1':4; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.5; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))6; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))7define void @test1(i32 %c) {8entry:9 %a = alloca i8, align 110 %b = alloca i8, align 111 store i8 1, ptr %a, align 112 %cond1 = icmp ne i32 %c, 013 call void @llvm.assume(i1 %cond1)14 store i8 1, ptr %b, align 115 ret void16}17 18; CHECK: Alias sets for function 'test2':19; CHECK: Alias Set Tracker: 3 alias sets for 2 pointer values.20; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))21; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Ref22; CHECK: 1 Unknown instructions: call void (i1, ...) @llvm.experimental.guard(i1 %cond1) [ "deopt"() ]23; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))24define void @test2(i32 %c) {25entry:26 %a = alloca i8, align 127 %b = alloca i8, align 128 store i8 1, ptr %a, align 129 %cond1 = icmp ne i32 %c, 030 call void (i1, ...) @llvm.experimental.guard(i1 %cond1)["deopt"()]31 store i8 1, ptr %b, align 132 ret void33}34 35; CHECK: Alias sets for function 'test3':36; CHECK: Alias Set Tracker: 1 alias sets for 2 pointer values.37; CHECK: AliasSet[0x{{[0-9a-f]+}}, 3] may alias, Mod/Ref Memory locations: (ptr %a, LocationSize::precise(1)), (ptr %b, LocationSize::precise(1))38; CHECK: 1 Unknown instructions: call void (i1, ...) @llvm.experimental.guard(i1 %cond1) [ "deopt"() ]39define void @test3(i32 %c, ptr %a, ptr %b) {40entry:41 store i8 1, ptr %a, align 142 %cond1 = icmp ne i32 %c, 043 call void (i1, ...) @llvm.experimental.guard(i1 %cond1)["deopt"()]44 store i8 1, ptr %b, align 145 ret void46}47 48; CHECK: Alias sets for function 'test4':49; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.50; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Memory locations: (ptr %a, LocationSize::precise(1))51; CHECK: 1 Unknown instructions: call void (i1, ...) @llvm.experimental.guard(i1 %cond1) [ "deopt"() ]52; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))53define void @test4(i32 %c, ptr %a) {54entry:55 %b = alloca i8, align 156 store i8 1, ptr %a, align 157 %cond1 = icmp ne i32 %c, 058 call void (i1, ...) @llvm.experimental.guard(i1 %cond1)["deopt"()]59 store i8 1, ptr %b, align 160 ret void61}62 63; CHECK: Alias sets for function 'test5':64; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.65; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))66; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))67define void @test5() {68entry:69 %a = alloca i8, align 170 %b = alloca i8, align 171 store i8 1, ptr %a, align 172 call void @llvm.experimental.noalias.scope.decl(metadata !0)73 store i8 1, ptr %b, align 174 ret void75}76 77; CHECK: Alias sets for function 'test_runtime':78; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.79; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))80; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))81define i1 @test_runtime() local_unnamed_addr {82entry:83 %a = alloca i8, align 184 %b = alloca i8, align 185 store i8 1, ptr %a, align 186 %allow = call i1 @llvm.allow.runtime.check(metadata !"test_check")87 store i8 1, ptr %b, align 188 ret i1 %allow89}90 91; CHECK: Alias sets for function 'test_ubsan':92; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.93; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))94; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))95define i1 @test_ubsan() local_unnamed_addr {96entry:97 %a = alloca i8, align 198 %b = alloca i8, align 199 store i8 1, ptr %a, align 1100 %allow = call i1 @llvm.allow.ubsan.check(i8 7)101 store i8 1, ptr %b, align 1102 ret i1 %allow103}104 105declare i1 @llvm.allow.ubsan.check(i8)106declare i1 @llvm.allow.runtime.check(metadata)107declare void @llvm.assume(i1)108declare void @llvm.experimental.guard(i1, ...)109declare void @llvm.experimental.noalias.scope.decl(metadata)110 111!0 = !{ !1 }112!1 = distinct !{ !1, !2, !"test5: var" }113!2 = distinct !{ !2, !"test5" }114