214 lines · plain
1; RUN: opt -passes=print-alias-sets -S -o - < %s 2>&1 | FileCheck %s2 3@s = global i8 1, align 14@d = global i8 2, align 15 6 7; CHECK: Alias sets for function 'test_known_size':8; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.9; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %d, LocationSize::precise(1))10; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Ref Memory locations: (ptr %s, LocationSize::precise(1))11define void @test_known_size(ptr noalias %s, ptr noalias %d) {12entry:13 call void @llvm.memcpy.p0.p0.i64(ptr %d, ptr %s, i64 1, i1 false)14 ret void15}16 17; CHECK: Alias sets for function 'test_unknown_size':18; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.19; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %d, unknown after)20; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Ref Memory locations: (ptr %s, unknown after)21define void @test_unknown_size(ptr noalias %s, ptr noalias %d, i64 %len) {22entry:23 call void @llvm.memcpy.p0.p0.i64(ptr %d, ptr %s, i64 %len, i1 false)24 ret void25}26 27 28; CHECK: Alias sets for function 'test1':29; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.30; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))31; CHECK-NOT: 1 Unknown instructions32; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Memory locations: (ptr %d, LocationSize::precise(1)), (ptr %s, LocationSize::precise(1))33; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))34define void @test1(ptr %s, ptr %d) {35entry:36 %a = alloca i8, align 137 %b = alloca i8, align 138 store i8 1, ptr %a, align 139 call void @llvm.memcpy.p0.p0.i64(ptr %d, ptr %s, i64 1, i1 false)40 store i8 1, ptr %b, align 141 ret void42}43 44; CHECK: Alias sets for function 'test1_atomic':45; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.46; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))47; CHECK-NOT: 1 Unknown instructions48; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Memory locations: (ptr %d, LocationSize::precise(1)), (ptr %s, LocationSize::precise(1))49; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))50define void @test1_atomic(ptr %s, ptr %d) {51entry:52 %a = alloca i8, align 153 %b = alloca i8, align 154 store atomic i8 1, ptr %a unordered, align 155 call void @llvm.memcpy.element.unordered.atomic.p0.p0.i64(ptr align 1 %d, ptr align 1 %s, i64 1, i32 1)56 store atomic i8 1, ptr %b unordered, align 157 ret void58}59 60; CHECK: Alias sets for function 'test2':61; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.62; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))63; CHECK-NOT: 1 Unknown instructions64; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Memory locations: (ptr %d, LocationSize::precise(1)), (ptr %s, LocationSize::precise(1))65; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))66define void @test2(ptr %s, ptr %d) {67entry:68 %a = alloca i8, align 169 %b = alloca i8, align 170 store i8 1, ptr %a, align 171 call void @llvm.memcpy.p0.p0.i64(ptr %d, ptr %s, i64 1, i1 true)72 store i8 1, ptr %b, align 173 ret void74}75 76; CHECK: Alias sets for function 'test3':77; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.78; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))79; CHECK-NOT: 1 Unknown instructions80; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Memory locations: (ptr %d, LocationSize::precise(1)), (ptr %s, LocationSize::precise(1))81; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))82define void @test3(ptr %s, ptr %d) {83entry:84 %a = alloca i8, align 185 %b = alloca i8, align 186 store i8 1, ptr %a, align 187 call void @llvm.memmove.p0.p0.i64(ptr %d, ptr %s, i64 1, i1 false)88 store i8 1, ptr %b, align 189 ret void90}91 92; CHECK: Alias sets for function 'test3_atomic':93; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.94; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))95; CHECK-NOT: 1 Unknown instructions96; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Memory locations: (ptr %d, LocationSize::precise(1)), (ptr %s, LocationSize::precise(1))97; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))98define void @test3_atomic(ptr %s, ptr %d) {99entry:100 %a = alloca i8, align 1101 %b = alloca i8, align 1102 store atomic i8 1, ptr %a unordered, align 1103 call void @llvm.memmove.element.unordered.atomic.p0.p0.i64(ptr align 1 %d, ptr align 1 %s, i64 1, i32 1)104 store atomic i8 1, ptr %b unordered, align 1105 ret void106}107 108; CHECK: Alias sets for function 'test4':109; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.110; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %a, LocationSize::precise(1))111; CHECK-NOT: 1 Unknown instructions112; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Memory locations: (ptr %d, LocationSize::precise(1)), (ptr %s, LocationSize::precise(1))113; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))114define void @test4(ptr %s, ptr %d) {115entry:116 %a = alloca i8, align 1117 %b = alloca i8, align 1118 store i8 1, ptr %a, align 1119 call void @llvm.memmove.p0.p0.i64(ptr %d, ptr %s, i64 1, i1 true)120 store i8 1, ptr %b, align 1121 ret void122}123 124; CHECK: Alias sets for function 'test5':125; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.126; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Memory locations: (ptr %a, LocationSize::precise(1))127; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))128define void @test5() {129entry:130 %a = alloca i8, align 1131 %b = alloca i8, align 1132 store i8 1, ptr %a, align 1133 call void @llvm.memcpy.p0.p0.i64(ptr %b, ptr %a, i64 1, i1 false)134 store i8 1, ptr %b, align 1135 ret void136}137 138; CHECK: Alias sets for function 'test5_atomic':139; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.140; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Memory locations: (ptr %a, LocationSize::precise(1))141; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))142define void @test5_atomic() {143entry:144 %a = alloca i8, align 1145 %b = alloca i8, align 1146 store atomic i8 1, ptr %a unordered, align 1147 call void @llvm.memcpy.element.unordered.atomic.p0.p0.i64(ptr align 1 %b, ptr align 1 %a, i64 1, i32 1)148 store atomic i8 1, ptr %b unordered, align 1149 ret void150}151 152; CHECK: Alias sets for function 'test6':153; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.154; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Memory locations: (ptr %a, LocationSize::precise(1))155; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))156define void @test6() {157entry:158 %a = alloca i8, align 1159 %b = alloca i8, align 1160 store i8 1, ptr %a, align 1161 call void @llvm.memmove.p0.p0.i64(ptr %b, ptr %a, i64 1, i1 false)162 store i8 1, ptr %b, align 1163 ret void164}165 166; CHECK: Alias sets for function 'test6_atomic':167; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.168; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Memory locations: (ptr %a, LocationSize::precise(1))169; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Memory locations: (ptr %b, LocationSize::precise(1))170define void @test6_atomic() {171entry:172 %a = alloca i8, align 1173 %b = alloca i8, align 1174 store atomic i8 1, ptr %a unordered, align 1175 call void @llvm.memmove.element.unordered.atomic.p0.p0.i64(ptr align 1 %b, ptr align 1 %a, i64 1, i32 1)176 store atomic i8 1, ptr %b unordered, align 1177 ret void178}179 180; CHECK: Alias sets for function 'test7':181; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.182; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Memory locations: (ptr %a, LocationSize::precise(1))183; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Memory locations: (ptr %b, LocationSize::precise(1))184define void @test7() {185entry:186 %a = alloca i8, align 1187 %b = alloca i8, align 1188 store i8 1, ptr %a, align 1189 call void @llvm.memcpy.p0.p0.i64(ptr %b, ptr %a, i64 1, i1 false)190 call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %b, i64 1, i1 false)191 store i8 1, ptr %b, align 1192 ret void193}194 195; CHECK: Alias sets for function 'test7_atomic':196; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.197; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Memory locations: (ptr %a, LocationSize::precise(1))198; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Memory locations: (ptr %b, LocationSize::precise(1))199define void @test7_atomic() {200entry:201 %a = alloca i8, align 1202 %b = alloca i8, align 1203 store atomic i8 1, ptr %a unordered, align 1204 call void @llvm.memcpy.element.unordered.atomic.p0.p0.i64(ptr align 1 %b, ptr align 1 %a, i64 1, i32 1)205 call void @llvm.memcpy.element.unordered.atomic.p0.p0.i64(ptr align 1 %a, ptr align 1 %b, i64 1, i32 1)206 store atomic i8 1, ptr %b unordered, align 1207 ret void208}209 210declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1)211declare void @llvm.memcpy.element.unordered.atomic.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i32)212declare void @llvm.memmove.p0.p0.i64(ptr nocapture, ptr nocapture readonly, i64, i1)213declare void @llvm.memmove.element.unordered.atomic.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i32)214