brintos

brintos / llvm-project-archived public Read only

0
0
Text · 30.4 KiB · 05b9b6b Raw
673 lines · plain
1; RUN: opt < %s -aa-pipeline=basic-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s2 3; getelementptr4 5; CHECK-LABEL: gep_alloca_const_offset_16; CHECK-DAG:  MustAlias:    <vscale x 4 x i32>* %alloc, <vscale x 4 x i32>* %gep17; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %alloc, <vscale x 4 x i32>* %gep28; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep29define void @gep_alloca_const_offset_1() {10  %alloc = alloca <vscale x 4 x i32>11  %gep1 = getelementptr <vscale x 4 x i32>, ptr %alloc, i64 012  %gep2 = getelementptr <vscale x 4 x i32>, ptr %alloc, i64 113  load <vscale x 4 x i32>, ptr %alloc14  load <vscale x 4 x i32>, ptr %gep115  load <vscale x 4 x i32>, ptr %gep216  ret void17}18 19; CHECK-LABEL: gep_alloca_const_offset_220; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %alloc, <vscale x 4 x i32>* %gep121; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %alloc, <vscale x 4 x i32>* %gep222; TODO: AliasResult for gep1,gep2 can be improved as MustAlias23; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep224define void @gep_alloca_const_offset_2() {25  %alloc = alloca <vscale x 4 x i32>26  %gep1 = getelementptr <vscale x 4 x i32>, ptr %alloc, i64 127  %gep2 = getelementptr <vscale x 4 x i32>, ptr %alloc, i64 128  load <vscale x 4 x i32>, ptr %alloc29  load <vscale x 4 x i32>, ptr %gep130  load <vscale x 4 x i32>, ptr %gep231  ret void32}33 34; CHECK-LABEL: gep_alloca_const_offset_335; CHECK-DAG:  MustAlias:    <vscale x 4 x i32>* %alloc, <vscale x 4 x i32>* %gep136; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %alloc, i32* %gep237; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %gep1, i32* %gep238define void @gep_alloca_const_offset_3() {39  %alloc = alloca <vscale x 4 x i32>40  %gep1 = getelementptr <vscale x 4 x i32>, ptr %alloc, i64 041  %gep2 = getelementptr <vscale x 4 x i32>, ptr %alloc, i64 0, i64 142  load <vscale x 4 x i32>, ptr %alloc43  load <vscale x 4 x i32>, ptr %gep144  load i32, ptr %gep245  ret void46}47 48; CHECK-LABEL: gep_alloca_const_offset_449; CHECK-DAG:  MustAlias:    <vscale x 4 x i32>* %alloc, <vscale x 4 x i32>* %gep150; CHECK-DAG:  MustAlias:    <vscale x 4 x i32>* %alloc, i32* %gep251; CHECK-DAG:  MustAlias:    <vscale x 4 x i32>* %gep1, i32* %gep252define void @gep_alloca_const_offset_4() {53  %alloc = alloca <vscale x 4 x i32>54  %gep1 = getelementptr <vscale x 4 x i32>, ptr %alloc, i64 055  %gep2 = getelementptr <vscale x 4 x i32>, ptr %alloc, i64 0, i64 056  load <vscale x 4 x i32>, ptr %alloc57  load <vscale x 4 x i32>, ptr %gep158  load i32, ptr %gep259  ret void60}61 62; CHECK-LABEL: gep_alloca_symbolic_offset63; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %alloc, <vscale x 4 x i32>* %gep164; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %alloc, <vscale x 4 x i32>* %gep265; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep266define void @gep_alloca_symbolic_offset(i64 %idx1, i64 %idx2) {67  %alloc = alloca <vscale x 4 x i32>68  %gep1 = getelementptr <vscale x 4 x i32>, ptr %alloc, i64 %idx169  %gep2 = getelementptr <vscale x 4 x i32>, ptr %alloc, i64 %idx270  load <vscale x 4 x i32>, ptr %alloc71  load <vscale x 4 x i32>, ptr %gep172  load <vscale x 4 x i32>, ptr %gep273  ret void74}75 76; CHECK-LABEL: gep_same_base_const_offset77; CHECK-DAG:  MayAlias:     i32* %gep1, <vscale x 4 x i32>* %p78; CHECK-DAG:  MayAlias:     i32* %gep2, <vscale x 4 x i32>* %p79; TODO: AliasResult for gep1,gep2 can be improved as NoAlias80; CHECK-DAG:  MayAlias:     i32* %gep1, i32* %gep281define void @gep_same_base_const_offset(ptr %p) {82  %gep1 = getelementptr <vscale x 4 x i32>, ptr %p, i64 1, i64 083  %gep2 = getelementptr <vscale x 4 x i32>, ptr %p, i64 1, i64 184  load <vscale x 4 x i32>, ptr %p85  load i32, ptr %gep186  load i32, ptr %gep287  ret void88}89 90; CHECK-LABEL: gep_same_base_symbolic_offset91; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %p92; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %gep2, <vscale x 4 x i32>* %p93; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep294define void @gep_same_base_symbolic_offset(ptr %p, i64 %idx1, i64 %idx2) {95  %gep1 = getelementptr <vscale x 4 x i32>, ptr %p, i64 %idx196  %gep2 = getelementptr <vscale x 4 x i32>, ptr %p, i64 %idx297  load <vscale x 4 x i32>, ptr %p98  load <vscale x 4 x i32>, ptr %gep199  load <vscale x 4 x i32>, ptr %gep2100  ret void101}102 103; CHECK-LABEL: gep_different_base_const_offset104; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %p1105; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %gep2, <vscale x 4 x i32>* %p2106; CHECK-DAG:  NoAlias:      <vscale x 4 x i32>* %p1, <vscale x 4 x i32>* %p2107; CHECK-DAG:  NoAlias:      <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %p2108; CHECK-DAG:  NoAlias:      <vscale x 4 x i32>* %gep2, <vscale x 4 x i32>* %p1109; CHECK-DAG:  NoAlias:      <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep2110define void @gep_different_base_const_offset(ptr noalias %p1, ptr noalias %p2) {111  %gep1 = getelementptr <vscale x 4 x i32>, ptr %p1, i64 1112  %gep2 = getelementptr <vscale x 4 x i32>, ptr %p2, i64 1113  load <vscale x 4 x i32>, ptr %p1114  load <vscale x 4 x i32>, ptr %p2115  load <vscale x 4 x i32>, ptr %gep1116  load <vscale x 4 x i32>, ptr %gep2117  ret void118}119 120; getelementptr @llvm.vscale tests121; CHECK-LABEL: gep_llvm_vscale_no_alias122; CHECK-DAG: MayAlias:     <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep2123; CHECK-DAG: MayAlias:     <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep3124; CHECK-DAG: MayAlias:     <vscale x 4 x i32>* %gep2, <vscale x 4 x i32>* %gep3125define void @gep_llvm_vscale_no_alias(ptr %p) {126  %t1 = tail call i64 @llvm.vscale.i64()127  %t2 = shl nuw nsw i64 %t1, 3128  %gep1 = getelementptr i32, ptr %p, i64 %t2129  %gep2 = getelementptr <vscale x 4 x i32>, ptr %p, i64 1130  %gep3 = getelementptr <vscale x 4 x i32>, ptr %p, i64 2131  load <vscale x 4 x i32>, ptr %gep1132  load <vscale x 4 x i32>, ptr %gep2133  load <vscale x 4 x i32>, ptr %gep3134  ret void135}136 137declare i64 @llvm.vscale.i64()138 139; CHECK-LABEL: gep_llvm_vscale_squared_may_alias140; CHECK-DAG: MayAlias:      <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep2141define void @gep_llvm_vscale_squared_may_alias(ptr %p) {142  %t1 = tail call i64 @llvm.vscale.i64()143  %gep1 = getelementptr <vscale x 4 x i32>, ptr %p, i64 %t1144  %gep2 = getelementptr i32, ptr %p, i64 1145  load <vscale x 4 x i32>, ptr %gep1146  load <vscale x 4 x i32>, ptr %gep2147  ret void148}149 150; getelementptr + bitcast151 152; CHECK-LABEL: gep_bitcast_1153; CHECK-DAG:   MustAlias:    i32* %p, <vscale x 4 x i32>* %p154; CHECK-DAG:   MayAlias:     i32* %gep1, <vscale x 4 x i32>* %p155; CHECK-DAG:   MayAlias:     i32* %gep1, i32* %p156; CHECK-DAG:   MayAlias:     i32* %gep2, <vscale x 4 x i32>* %p157; CHECK-DAG:   MayAlias:     i32* %gep1, i32* %gep2158; CHECK-DAG:   NoAlias:      i32* %gep2, i32* %p159define void @gep_bitcast_1(ptr %p) {160  %gep1 = getelementptr <vscale x 4 x i32>, ptr %p, i64 1, i64 0161  %gep2 = getelementptr i32, ptr %p, i64 4162  load <vscale x 4 x i32>, ptr %p163  load i32, ptr %gep1164  load i32, ptr %gep2165  load i32, ptr %p166  ret void167}168 169; CHECK-LABEL: gep_bitcast_2170; CHECK-DAG:  MustAlias:    <vscale x 4 x float>* %p, <vscale x 4 x i32>* %p171; CHECK-DAG:  MayAlias:     i32* %gep1, <vscale x 4 x i32>* %p172; CHECK-DAG:  MayAlias:     i32* %gep1, <vscale x 4 x float>* %p173; CHECK-DAG:  MayAlias:     float* %gep2, <vscale x 4 x i32>* %p174; CHECK-DAG:  MayAlias:     i32* %gep1, float* %gep2175; CHECK-DAG:  MayAlias:     float* %gep2, <vscale x 4 x float>* %p176define void @gep_bitcast_2(ptr %p) {177  %gep1 = getelementptr <vscale x 4 x i32>, ptr %p, i64 1, i64 0178  %gep2 = getelementptr <vscale x 4 x float>, ptr %p, i64 1, i64 0179  load i32, ptr %gep1180  load float, ptr %gep2181  load <vscale x 4 x i32>, ptr %p182  load <vscale x 4 x float>, ptr %p183  ret void184}185 186; negative offset tests187 188; CHECK-LABEL: gep_neg_notscalable189; CHECK-DAG:   MayAlias:    <4 x i32>* %p, <4 x i32>* %vm16190; CHECK-DAG:   NoAlias:     <4 x i32>* %m16, <4 x i32>* %p191; CHECK-DAG:   MayAlias:    <4 x i32>* %m16, <4 x i32>* %vm16192; CHECK-DAG:   MayAlias:    <4 x i32>* %p, <4 x i32>* %vm16m16193; CHECK-DAG:   NoAlias:     <4 x i32>* %vm16, <4 x i32>* %vm16m16194; CHECK-DAG:   MayAlias:    <4 x i32>* %m16, <4 x i32>* %vm16m16195; CHECK-DAG:   MayAlias:    <4 x i32>* %m16pv16, <4 x i32>* %p196; CHECK-DAG:   MayAlias:    <4 x i32>* %m16pv16, <4 x i32>* %vm16197; CHECK-DAG:   MayAlias:    <4 x i32>* %m16, <4 x i32>* %m16pv16198; CHECK-DAG:   MayAlias:    <4 x i32>* %m16pv16, <4 x i32>* %vm16m16199define void @gep_neg_notscalable(ptr %p) vscale_range(1,16) {200  %vm16 = getelementptr <vscale x 4 x i32>, ptr %p, i64 -1201  %m16 = getelementptr <4 x i32>, ptr %p, i64 -1202  %vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 -1203  %m16pv16 = getelementptr <vscale x 4 x i32>, ptr %m16, i64 1204  load <4 x i32>, ptr %p205  load <4 x i32>, ptr %vm16206  load <4 x i32>, ptr %m16207  load <4 x i32>, ptr %vm16m16208  load <4 x i32>, ptr %m16pv16209  ret void210}211 212; CHECK-LABEL: gep_neg_scalable213; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16214; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p215; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16216; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16m16217; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %vm16, <vscale x 4 x i32>* %vm16m16218; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16m16219; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %p220; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16221; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %m16pv16222; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16m16223define void @gep_neg_scalable(ptr %p) vscale_range(1,16) {224  %vm16 = getelementptr <vscale x 4 x i32>, ptr %p, i64 -1225  %m16 = getelementptr <4 x i32>, ptr %p, i64 -1226  %vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 -1227  %m16pv16 = getelementptr <vscale x 4 x i32>, ptr %vm16, i64 1228  load <vscale x 4 x i32>, ptr %p229  load <vscale x 4 x i32>, ptr %vm16230  load <vscale x 4 x i32>, ptr %m16231  load <vscale x 4 x i32>, ptr %vm16m16232  load <vscale x 4 x i32>, ptr %m16pv16233  ret void234}235 236; CHECK-LABEL: gep_pos_notscalable237; CHECK-DAG:   MayAlias:     <4 x i32>* %p, <4 x i32>* %vm16238; CHECK-DAG:   NoAlias:      <4 x i32>* %m16, <4 x i32>* %p239; CHECK-DAG:   MayAlias:     <4 x i32>* %m16, <4 x i32>* %vm16240; CHECK-DAG:   MayAlias:     <4 x i32>* %p, <4 x i32>* %vm16m16241; CHECK-DAG:   NoAlias:      <4 x i32>* %vm16, <4 x i32>* %vm16m16242; CHECK-DAG:   MayAlias:     <4 x i32>* %m16, <4 x i32>* %vm16m16243; CHECK-DAG:   MayAlias:     <4 x i32>* %m16pv16, <4 x i32>* %p244; CHECK-DAG:   MayAlias:     <4 x i32>* %m16pv16, <4 x i32>* %vm16245; CHECK-DAG:   MayAlias:     <4 x i32>* %m16, <4 x i32>* %m16pv16246; CHECK-DAG:   MayAlias:     <4 x i32>* %m16pv16, <4 x i32>* %vm16m16247define void @gep_pos_notscalable(ptr %p) vscale_range(1,16) {248  %vm16 = getelementptr <vscale x 4 x i32>, ptr %p, i64 1249  %m16 = getelementptr <4 x i32>, ptr %p, i64 1250  %vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 1251  %m16pv16 = getelementptr <vscale x 4 x i32>, ptr %vm16, i64 -1252  load <4 x i32>, ptr %p253  load <4 x i32>, ptr %vm16254  load <4 x i32>, ptr %m16255  load <4 x i32>, ptr %vm16m16256  load <4 x i32>, ptr %m16pv16257  ret void258}259 260; CHECK-LABEL: gep_pos_scalable261; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16262; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p263; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16264; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16m16265; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %vm16, <vscale x 4 x i32>* %vm16m16266; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16m16267; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %p268; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16269; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %m16pv16270; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16m16271define void @gep_pos_scalable(ptr %p) vscale_range(1,16) {272  %vm16 = getelementptr <vscale x 4 x i32>, ptr %p, i64 1273  %m16 = getelementptr <4 x i32>, ptr %p, i64 1274  %vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 1275  %m16pv16 = getelementptr <vscale x 4 x i32>, ptr %vm16, i64 -1276  load <vscale x 4 x i32>, ptr %p277  load <vscale x 4 x i32>, ptr %vm16278  load <vscale x 4 x i32>, ptr %m16279  load <vscale x 4 x i32>, ptr %vm16m16280  load <vscale x 4 x i32>, ptr %m16pv16281  ret void282}283 284; CHECK-LABEL: v1v2types285; CHECK-DAG:  MustAlias:    <4 x i32>* %p, <vscale x 4 x i32>* %p286; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16287; CHECK-DAG:  MayAlias:     <4 x i32>* %p, <vscale x 4 x i32>* %vm16288; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %p, <4 x i32>* %vm16289; CHECK-DAG:  MayAlias:     <4 x i32>* %p, <4 x i32>* %vm16290; CHECK-DAG:  MustAlias:    <4 x i32>* %vm16, <vscale x 4 x i32>* %vm16291; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p292; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %m16, <4 x i32>* %p293; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16294; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %m16, <4 x i32>* %vm16295; CHECK-DAG:  NoAlias:      <4 x i32>* %m16, <vscale x 4 x i32>* %p296; CHECK-DAG:  NoAlias:      <4 x i32>* %m16, <4 x i32>* %p297; CHECK-DAG:  MayAlias:     <4 x i32>* %m16, <vscale x 4 x i32>* %vm16298; CHECK-DAG:  MayAlias:     <4 x i32>* %m16, <4 x i32>* %vm16299; CHECK-DAG:  MustAlias:    <4 x i32>* %m16, <vscale x 4 x i32>* %m16300define void @v1v2types(ptr %p) vscale_range(1,16) {301  %vm16 = getelementptr <vscale x 4 x i32>, ptr %p, i64 -1302  %m16 = getelementptr <4 x i32>, ptr %p, i64 -1303  load <vscale x 4 x i32>, ptr %p304  load <4 x i32>, ptr %p305  load <vscale x 4 x i32>, ptr %vm16306  load <4 x i32>, ptr %vm16307  load <vscale x 4 x i32>, ptr %m16308  load <4 x i32>, ptr %m16309  ret void310}311 312; VScale intrinsic offset tests313 314; CHECK-LABEL: vscale_neg_notscalable315; CHECK-DAG:   NoAlias:     <4 x i32>* %p, <4 x i32>* %vm16316; CHECK-DAG:   NoAlias:     <4 x i32>* %m16, <4 x i32>* %p317; CHECK-DAG:   MayAlias:    <4 x i32>* %m16, <4 x i32>* %vm16318; CHECK-DAG:   MayAlias:    <4 x i32>* %p, <4 x i32>* %vm16m16319; CHECK-DAG:   NoAlias:     <4 x i32>* %vm16, <4 x i32>* %vm16m16320; CHECK-DAG:   NoAlias:     <4 x i32>* %m16, <4 x i32>* %vm16m16321; CHECK-DAG:   MayAlias:    <4 x i32>* %m16pv16, <4 x i32>* %p322; CHECK-DAG:   NoAlias:     <4 x i32>* %m16pv16, <4 x i32>* %vm16323; CHECK-DAG:   NoAlias:     <4 x i32>* %m16, <4 x i32>* %m16pv16324; CHECK-DAG:   MayAlias:    <4 x i32>* %m16pv16, <4 x i32>* %vm16m16325define void @vscale_neg_notscalable(ptr %p) {326  %v = call i64 @llvm.vscale.i64()327  %vp = mul nsw i64 %v, 16328  %vm = mul nsw i64 %v, -16329  %vm16 = getelementptr i8, ptr %p, i64 %vm330  %m16 = getelementptr <4 x i32>, ptr %p, i64 -1331  %vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 -1332  %m16pv16 = getelementptr i8, ptr %m16, i64 %vp333  load <4 x i32>, ptr %p334  load <4 x i32>, ptr %vm16335  load <4 x i32>, ptr %m16336  load <4 x i32>, ptr %vm16m16337  load <4 x i32>, ptr %m16pv16338  ret void339}340 341; CHECK-LABEL: vscale_neg_scalable342; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16343; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p344; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16345; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16m16346; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %vm16, <vscale x 4 x i32>* %vm16m16347; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16m16348; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %p349; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16350; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %m16pv16351; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16m16352define void @vscale_neg_scalable(ptr %p) {353  %v = call i64 @llvm.vscale.i64()354  %vp = mul nsw i64 %v, 16355  %vm = mul nsw i64 %v, -16356  %vm16 = getelementptr i8, ptr %p, i64 %vm357  %m16 = getelementptr <4 x i32>, ptr %p, i64 -1358  %vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 -1359  %m16pv16 = getelementptr i8, ptr %m16, i64 %vp360  load <vscale x 4 x i32>, ptr %p361  load <vscale x 4 x i32>, ptr %vm16362  load <vscale x 4 x i32>, ptr %m16363  load <vscale x 4 x i32>, ptr %vm16m16364  load <vscale x 4 x i32>, ptr %m16pv16365  ret void366}367 368; CHECK-LABEL: vscale_pos_notscalable369; CHECK-DAG:   NoAlias:      <4 x i32>* %p, <4 x i32>* %vm16370; CHECK-DAG:   NoAlias:      <4 x i32>* %m16, <4 x i32>* %p371; CHECK-DAG:   MayAlias:     <4 x i32>* %m16, <4 x i32>* %vm16372; CHECK-DAG:   MayAlias:     <4 x i32>* %p, <4 x i32>* %vm16m16373; CHECK-DAG:   NoAlias:      <4 x i32>* %vm16, <4 x i32>* %vm16m16374; CHECK-DAG:   NoAlias:      <4 x i32>* %m16, <4 x i32>* %vm16m16375; CHECK-DAG:   MayAlias:     <4 x i32>* %m16pv16, <4 x i32>* %p376; CHECK-DAG:   NoAlias:      <4 x i32>* %m16pv16, <4 x i32>* %vm16377; CHECK-DAG:   NoAlias:      <4 x i32>* %m16, <4 x i32>* %m16pv16378; CHECK-DAG:   MayAlias:     <4 x i32>* %m16pv16, <4 x i32>* %vm16m16379define void @vscale_pos_notscalable(ptr %p) {380  %v = call i64 @llvm.vscale.i64()381  %vp = mul nsw i64 %v, 16382  %vm = mul nsw i64 %v, -16383  %vm16 = getelementptr i8, ptr %p, i64 %vp384  %m16 = getelementptr <4 x i32>, ptr %p, i64 1385  %vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 1386  %m16pv16 = getelementptr i8, ptr %m16, i64 %vm387  load <4 x i32>, ptr %p388  load <4 x i32>, ptr %vm16389  load <4 x i32>, ptr %m16390  load <4 x i32>, ptr %vm16m16391  load <4 x i32>, ptr %m16pv16392  ret void393}394 395; CHECK-LABEL: vscale_pos_scalable396; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16397; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p398; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16399; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16m16400; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %vm16, <vscale x 4 x i32>* %vm16m16401; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16m16402; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %p403; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16404; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %m16pv16405; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16m16406define void @vscale_pos_scalable(ptr %p) {407  %v = call i64 @llvm.vscale.i64()408  %vp = mul nsw i64 %v, 16409  %vm = mul nsw i64 %v, -16410  %vm16 = getelementptr i8, ptr %p, i64 %vp411  %m16 = getelementptr <4 x i32>, ptr %p, i64 1412  %vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 1413  %m16pv16 = getelementptr i8, ptr %m16, i64 %vm414  load <vscale x 4 x i32>, ptr %p415  load <vscale x 4 x i32>, ptr %vm16416  load <vscale x 4 x i32>, ptr %m16417  load <vscale x 4 x i32>, ptr %vm16m16418  load <vscale x 4 x i32>, ptr %m16pv16419  ret void420}421 422; CHECK-LABEL: vscale_v1v2types423; CHECK-DAG:   MustAlias:    <4 x i32>* %p, <vscale x 4 x i32>* %p424; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16425; CHECK-DAG:   NoAlias:      <4 x i32>* %p, <vscale x 4 x i32>* %vm16426; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %p, <4 x i32>* %vm16427; CHECK-DAG:   NoAlias:      <4 x i32>* %p, <4 x i32>* %vm16428; CHECK-DAG:   MustAlias:    <4 x i32>* %vm16, <vscale x 4 x i32>* %vm16429; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p430; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <4 x i32>* %p431; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16432; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <4 x i32>* %vm16433; CHECK-DAG:   NoAlias:      <4 x i32>* %m16, <vscale x 4 x i32>* %p434; CHECK-DAG:   NoAlias:      <4 x i32>* %m16, <4 x i32>* %p435; CHECK-DAG:   MayAlias:     <4 x i32>* %m16, <vscale x 4 x i32>* %vm16436; CHECK-DAG:   MayAlias:     <4 x i32>* %m16, <4 x i32>* %vm16437; CHECK-DAG:   MustAlias:    <4 x i32>* %m16, <vscale x 4 x i32>* %m16438; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vp16439; CHECK-DAG:   NoAlias:      <4 x i32>* %p, <vscale x 4 x i32>* %vp16440; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %vm16, <vscale x 4 x i32>* %vp16441; CHECK-DAG:   MayAlias:     <4 x i32>* %vm16, <vscale x 4 x i32>* %vp16442; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vp16443; CHECK-DAG:   MayAlias:     <4 x i32>* %m16, <vscale x 4 x i32>* %vp16444define void @vscale_v1v2types(ptr %p) {445  %v = call i64 @llvm.vscale.i64()446  %vp = mul nsw i64 %v, 16447  %vm = mul nsw i64 %v, -16448  %vp16 = getelementptr i8, ptr %p, i64 %vp449  %vm16 = getelementptr i8, ptr %p, i64 %vm450  %m16 = getelementptr <4 x i32>, ptr %p, i64 -1451  load <vscale x 4 x i32>, ptr %p452  load <4 x i32>, ptr %p453  load <vscale x 4 x i32>, ptr %vm16454  load <4 x i32>, ptr %vm16455  load <vscale x 4 x i32>, ptr %m16456  load <4 x i32>, ptr %m16457  load <vscale x 4 x i32>, ptr %vp16458  ret void459}460 461; CHECK-LABEL: vscale_negativescale462; CHECK-DAG:   MayAlias:    <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16463define void @vscale_negativescale(ptr %p) vscale_range(1,16) {464  %v = call i64 @llvm.vscale.i64()465  %vm = mul nsw i64 %v, -15466  %vm16 = getelementptr i8, ptr %p, i64 %vm467  load <vscale x 4 x i32>, ptr %vm16468  load <vscale x 4 x i32>, ptr %p469  ret void470}471 472; CHECK-LABEL: onevscale473; CHECK-DAG:   MustAlias:    <vscale x 4 x i32>* %vp161, <vscale x 4 x i32>* %vp162474; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %vp161, <vscale x 4 x i32>* %vp161b475; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %vp161b, <vscale x 4 x i32>* %vp162476define void @onevscale(ptr %p) vscale_range(1,16) {477  %v1 = call i64 @llvm.vscale.i64()478  %vp1 = mul nsw i64 %v1, 16479  %vp2 = mul nsw i64 %v1, 16480  %vp3 = mul nsw i64 %v1, 17481  %vp161 = getelementptr i8, ptr %p, i64 %vp1482  %vp162 = getelementptr i8, ptr %p, i64 %vp2483  %vp161b = getelementptr i8, ptr %vp161, i64 %vp3484  load <vscale x 4 x i32>, ptr %vp161485  load <vscale x 4 x i32>, ptr %vp162486  load <vscale x 4 x i32>, ptr %vp161b487  ret void488}489 490; CHECK-LABEL: twovscales491; CHECK-DAG:   MustAlias:    <vscale x 4 x i32>* %vp161, <vscale x 4 x i32>* %vp162492; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %vp161, <vscale x 4 x i32>* %vp161b493; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %vp161b, <vscale x 4 x i32>* %vp162494define void @twovscales(ptr %p) vscale_range(1,16) {495  %v1 = call i64 @llvm.vscale.i64()496  %v2 = call i64 @llvm.vscale.i64()497  %vp1 = mul nsw i64 %v1, 16498  %vp2 = mul nsw i64 %v2, 16499  %vp3 = mul nsw i64 %v1, 17500  %vp161 = getelementptr i8, ptr %p, i64 %vp1501  %vp162 = getelementptr i8, ptr %p, i64 %vp2502  %vp161b = getelementptr i8, ptr %vp161, i64 %vp3503  load <vscale x 4 x i32>, ptr %vp161504  load <vscale x 4 x i32>, ptr %vp162505  load <vscale x 4 x i32>, ptr %vp161b506  ret void507}508 509; getelementptr recursion510 511; CHECK-LABEL: gep_recursion_level_1512; CHECK-DAG:  MayAlias:     i32* %a, <vscale x 4 x i32>* %p513; CHECK-DAG:  MayAlias:     i32* %a, i32* %gep514; CHECK-DAG:  MayAlias:     i32* %a, i32* %gep_rec_1515; CHECK-DAG:  MayAlias:     i32* %gep, <vscale x 4 x i32>* %p516; CHECK-DAG:  MayAlias:     i32* %gep_rec_1, <vscale x 4 x i32>* %p517; CHECK-DAG:  NoAlias:      i32* %gep, i32* %gep_rec_1518define void @gep_recursion_level_1(ptr %a, ptr %p) {519  %gep = getelementptr <vscale x 4 x i32>, ptr %p, i64 1, i64 2520  %gep_rec_1 = getelementptr i32, ptr %gep, i64 1521  load <vscale x 4 x i32>, ptr %p522  load i32, ptr %a523  load i32, ptr %gep524  load i32, ptr %gep_rec_1525  ret void526}527 528; CHECK-LABEL: gep_recursion_level_1_bitcast529; CHECK-DAG:  MustAlias:    i32* %a, <vscale x 4 x i32>* %a530; CHECK-DAG:  MayAlias:     i32* %a, i32* %gep531; CHECK-DAG:  MayAlias:     i32* %a, i32* %gep_rec_1532; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %a, i32* %gep533; CHECK-DAG:  MayAlias:     <vscale x 4 x i32>* %a, i32* %gep_rec_1534; CHECK-DAG:  NoAlias:      i32* %gep, i32* %gep_rec_1535define void @gep_recursion_level_1_bitcast(ptr %a) {536  %gep = getelementptr <vscale x 4 x i32>, ptr %a, i64 1, i64 2537  %gep_rec_1 = getelementptr i32, ptr %gep, i64 1538  load <vscale x 4 x i32>, ptr %a539  load i32, ptr %a540  load i32, ptr %gep541  load i32, ptr %gep_rec_1542  ret void543}544 545; CHECK-LABEL: gep_recursion_level_2546; CHECK-DAG:  MayAlias:     i32* %a, <vscale x 4 x i32>* %p547; CHECK-DAG:  MayAlias:     i32* %a, i32* %gep548; CHECK-DAG:  MayAlias:     i32* %a, i32* %gep_rec_1549; CHECK-DAG:  MayAlias:     i32* %a, i32* %gep_rec_2550; CHECK-DAG:  MayAlias:     i32* %gep, <vscale x 4 x i32>* %p551; CHECK-DAG:  MayAlias:     i32* %gep_rec_1, <vscale x 4 x i32>* %p552; CHECK-DAG:  MayAlias:     i32* %gep_rec_2, <vscale x 4 x i32>* %p553; CHECK-DAG:  NoAlias:      i32* %gep, i32* %gep_rec_1554; CHECK-DAG:  NoAlias:      i32* %gep, i32* %gep_rec_2555; CHECK-DAG:  NoAlias:      i32* %gep_rec_1, i32* %gep_rec_2556define void @gep_recursion_level_2(ptr %a, ptr %p) {557  %gep = getelementptr <vscale x 4 x i32>, ptr %p, i64 1, i64 2558  %gep_rec_1 = getelementptr i32, ptr %gep, i64 1559  %gep_rec_2 = getelementptr i32, ptr %gep_rec_1, i64 1560  load <vscale x 4 x i32>, ptr %p561  load i32, ptr %a562  load i32, ptr %gep563  load i32, ptr %gep_rec_1564  load i32, ptr %gep_rec_2565  ret void566}567 568; CHECK-LABEL: gep_recursion_max_lookup_depth_reached569; CHECK-DAG: MayAlias:     i32* %a, <vscale x 4 x i32>* %p570; CHECK-DAG: MayAlias:     i32* %a, i32* %gep571; CHECK-DAG: MayAlias:     i32* %a, i32* %gep_rec_1572; CHECK-DAG: MayAlias:     i32* %a, i32* %gep_rec_2573; CHECK-DAG: MayAlias:     i32* %a, i32* %gep_rec_3574; CHECK-DAG: MayAlias:     i32* %a, i32* %gep_rec_4575; CHECK-DAG: MayAlias:     i32* %a, i32* %gep_rec_5576; CHECK-DAG: MayAlias:     i32* %a, i32* %gep_rec_6577; CHECK-DAG: MayAlias:     i32* %gep, <vscale x 4 x i32>* %p578; CHECK-DAG: MayAlias:     i32* %gep_rec_1, <vscale x 4 x i32>* %p579; CHECK-DAG: MayAlias:     i32* %gep_rec_2, <vscale x 4 x i32>* %p580; CHECK-DAG: MayAlias:     i32* %gep_rec_3, <vscale x 4 x i32>* %p581; CHECK-DAG: MayAlias:     i32* %gep_rec_4, <vscale x 4 x i32>* %p582; CHECK-DAG: MayAlias:     i32* %gep_rec_5, <vscale x 4 x i32>* %p583; CHECK-DAG: MayAlias:     i32* %gep_rec_6, <vscale x 4 x i32>* %p584; CHECK-DAG: NoAlias:      i32* %gep, i32* %gep_rec_1585; CHECK-DAG: NoAlias:      i32* %gep, i32* %gep_rec_2586; CHECK-DAG: NoAlias:      i32* %gep, i32* %gep_rec_3587; CHECK-DAG: NoAlias:      i32* %gep, i32* %gep_rec_4588; CHECK-DAG: NoAlias:      i32* %gep, i32* %gep_rec_5589; CHECK-DAG: NoAlias:      i32* %gep, i32* %gep_rec_6590; CHECK-DAG: NoAlias:      i32* %gep_rec_1, i32* %gep_rec_2591; CHECK-DAG: NoAlias:      i32* %gep_rec_1, i32* %gep_rec_3592; CHECK-DAG: NoAlias:      i32* %gep_rec_1, i32* %gep_rec_4593; CHECK-DAG: NoAlias:      i32* %gep_rec_1, i32* %gep_rec_5594; CHECK-DAG: NoAlias:      i32* %gep_rec_1, i32* %gep_rec_6595; CHECK-DAG: NoAlias:      i32* %gep_rec_2, i32* %gep_rec_3596; CHECK-DAG: NoAlias:      i32* %gep_rec_2, i32* %gep_rec_4597; CHECK-DAG: NoAlias:      i32* %gep_rec_2, i32* %gep_rec_5598; CHECK-DAG: NoAlias:      i32* %gep_rec_2, i32* %gep_rec_6599; CHECK-DAG: NoAlias:      i32* %gep_rec_3, i32* %gep_rec_4600; CHECK-DAG: NoAlias:      i32* %gep_rec_3, i32* %gep_rec_5601; CHECK-DAG: NoAlias:      i32* %gep_rec_3, i32* %gep_rec_6602; CHECK-DAG: NoAlias:      i32* %gep_rec_4, i32* %gep_rec_5603; CHECK-DAG: NoAlias:      i32* %gep_rec_4, i32* %gep_rec_6604; CHECK-DAG: NoAlias:      i32* %gep_rec_5, i32* %gep_rec_6605; GEP max lookup depth was set to 6.606define void @gep_recursion_max_lookup_depth_reached(ptr %a, ptr %p) {607  %gep = getelementptr <vscale x 4 x i32>, ptr %p, i64 1, i64 2608  %gep_rec_1 = getelementptr i32, ptr %gep, i64 1609  %gep_rec_2 = getelementptr i32, ptr %gep_rec_1, i64 1610  %gep_rec_3 = getelementptr i32, ptr %gep_rec_2, i64 1611  %gep_rec_4 = getelementptr i32, ptr %gep_rec_3, i64 1612  %gep_rec_5 = getelementptr i32, ptr %gep_rec_4, i64 1613  %gep_rec_6 = getelementptr i32, ptr %gep_rec_5, i64 1614  load <vscale x 4 x i32>, ptr %p615  load i32, ptr %a616  load i32, ptr %gep617  load i32, ptr %gep_rec_1618  load i32, ptr %gep_rec_2619  load i32, ptr %gep_rec_3620  load i32, ptr %gep_rec_4621  load i32, ptr %gep_rec_5622  load i32, ptr %gep_rec_6623  ret void624}625 626; CHECK-LABEL: gep_2048627; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %off255, <vscale x 4 x i32>* %p628; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %p629; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %off255630; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %off256, <vscale x 4 x i32>* %p631; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %off255, <vscale x 4 x i32>* %off256632; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %off256633; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %p634; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %off255635; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %noff256636; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %off256637define void @gep_2048(ptr %p) {638  %off255 = getelementptr i8, ptr %p, i64 255639  %noff255 = getelementptr i8, ptr %p, i64 -255640  %off256 = getelementptr i8, ptr %p, i64 256641  %noff256 = getelementptr i8, ptr %p, i64 -256642  load <vscale x 4 x i32>, ptr %p643  load <vscale x 4 x i32>, ptr %off255644  load <vscale x 4 x i32>, ptr %noff255645  load <vscale x 4 x i32>, ptr %off256646  load <vscale x 4 x i32>, ptr %noff256647  ret void648}649 650; CHECK-LABEL: gep_2048_vscalerange651; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %off255, <vscale x 4 x i32>* %p652; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %p653; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %off255654; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %off256, <vscale x 4 x i32>* %p655; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %off255, <vscale x 4 x i32>* %off256656; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %off256657; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %p658; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %off255659; CHECK-DAG:   MayAlias:     <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %noff256660; CHECK-DAG:   NoAlias:      <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %off256661define void @gep_2048_vscalerange(ptr %p) vscale_range(1,16) {662  %off255 = getelementptr i8, ptr %p, i64 255663  %noff255 = getelementptr i8, ptr %p, i64 -255664  %off256 = getelementptr i8, ptr %p, i64 256665  %noff256 = getelementptr i8, ptr %p, i64 -256666  load <vscale x 4 x i32>, ptr %p667  load <vscale x 4 x i32>, ptr %off255668  load <vscale x 4 x i32>, ptr %noff255669  load <vscale x 4 x i32>, ptr %off256670  load <vscale x 4 x i32>, ptr %noff256671  ret void672}673