Skip to content

Commit de4360d

Browse files
committed
[BasicAA] Add extra scalable typesize and offset tests. NFC
A collection of tests from #69152 and for constant offsets with scalable typesizes.
1 parent b205ea1 commit de4360d

File tree

1 file changed

+204
-0
lines changed

1 file changed

+204
-0
lines changed

llvm/test/Analysis/BasicAA/vscale.ll

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,36 @@ define void @gep_different_base_const_offset(ptr noalias %p1, ptr noalias %p2) {
117117
ret void
118118
}
119119

120+
; getelementptr @llvm.vscale tests
121+
; CHECK-LABEL: gep_llvm_vscale_no_alias
122+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep2
123+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep3
124+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %gep2, <vscale x 4 x i32>* %gep3
125+
define void @gep_llvm_vscale_no_alias(ptr %p) {
126+
%t1 = tail call i64 @llvm.vscale.i64()
127+
%t2 = shl nuw nsw i64 %t1, 3
128+
%gep1 = getelementptr i32, ptr %p, i64 %t2
129+
%gep2 = getelementptr <vscale x 4 x i32>, ptr %p, i64 1
130+
%gep3 = getelementptr <vscale x 4 x i32>, ptr %p, i64 2
131+
load <vscale x 4 x i32>, ptr %gep1
132+
load <vscale x 4 x i32>, ptr %gep2
133+
load <vscale x 4 x i32>, ptr %gep3
134+
ret void
135+
}
136+
137+
declare i64 @llvm.vscale.i64()
138+
139+
; CHECK-LABEL: gep_llvm_vscale_squared_may_alias
140+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %gep1, <vscale x 4 x i32>* %gep2
141+
define 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 %t1
144+
%gep2 = getelementptr i32, ptr %p, i64 1
145+
load <vscale x 4 x i32>, ptr %gep1
146+
load <vscale x 4 x i32>, ptr %gep2
147+
ret void
148+
}
149+
120150
; getelementptr + bitcast
121151

122152
; CHECK-LABEL: gep_bitcast_1
@@ -153,6 +183,132 @@ define void @gep_bitcast_2(ptr %p) {
153183
ret void
154184
}
155185

186+
; negative offset tests
187+
188+
; CHECK-LABEL: gep_neg_notscalable
189+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <4 x i32>* %vm16
190+
; CHECK-DAG: NoAlias: <4 x i32>* %m16, <4 x i32>* %p
191+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %vm16
192+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <4 x i32>* %vm16m16
193+
; CHECK-DAG: NoAlias: <4 x i32>* %vm16, <4 x i32>* %vm16m16
194+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %vm16m16
195+
; CHECK-DAG: MayAlias: <4 x i32>* %m16pv16, <4 x i32>* %p
196+
; CHECK-DAG: MayAlias: <4 x i32>* %m16pv16, <4 x i32>* %vm16
197+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %m16pv16
198+
; CHECK-DAG: MayAlias: <4 x i32>* %m16pv16, <4 x i32>* %vm16m16
199+
define void @gep_neg_notscalable(ptr %p) vscale_range(1,16) {
200+
%vm16 = getelementptr <vscale x 4 x i32>, ptr %p, i64 -1
201+
%m16 = getelementptr <4 x i32>, ptr %p, i64 -1
202+
%vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 -1
203+
%m16pv16 = getelementptr <vscale x 4 x i32>, ptr %m16, i64 1
204+
load <4 x i32>, ptr %p
205+
load <4 x i32>, ptr %vm16
206+
load <4 x i32>, ptr %m16
207+
load <4 x i32>, ptr %vm16m16
208+
load <4 x i32>, ptr %m16pv16
209+
ret void
210+
}
211+
212+
; CHECK-LABEL: gep_neg_scalable
213+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16
214+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p
215+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16
216+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16m16
217+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %vm16, <vscale x 4 x i32>* %vm16m16
218+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16m16
219+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %p
220+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16
221+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %m16pv16
222+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16m16
223+
define void @gep_neg_scalable(ptr %p) vscale_range(1,16) {
224+
%vm16 = getelementptr <vscale x 4 x i32>, ptr %p, i64 -1
225+
%m16 = getelementptr <4 x i32>, ptr %p, i64 -1
226+
%vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 -1
227+
%m16pv16 = getelementptr <vscale x 4 x i32>, ptr %vm16, i64 1
228+
load <vscale x 4 x i32>, ptr %p
229+
load <vscale x 4 x i32>, ptr %vm16
230+
load <vscale x 4 x i32>, ptr %m16
231+
load <vscale x 4 x i32>, ptr %vm16m16
232+
load <vscale x 4 x i32>, ptr %m16pv16
233+
ret void
234+
}
235+
236+
; CHECK-LABEL: gep_pos_notscalable
237+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <4 x i32>* %vm16
238+
; CHECK-DAG: NoAlias: <4 x i32>* %m16, <4 x i32>* %p
239+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %vm16
240+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <4 x i32>* %vm16m16
241+
; CHECK-DAG: NoAlias: <4 x i32>* %vm16, <4 x i32>* %vm16m16
242+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %vm16m16
243+
; CHECK-DAG: MayAlias: <4 x i32>* %m16pv16, <4 x i32>* %p
244+
; CHECK-DAG: MayAlias: <4 x i32>* %m16pv16, <4 x i32>* %vm16
245+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %m16pv16
246+
; CHECK-DAG: MayAlias: <4 x i32>* %m16pv16, <4 x i32>* %vm16m16
247+
define void @gep_pos_notscalable(ptr %p) vscale_range(1,16) {
248+
%vm16 = getelementptr <vscale x 4 x i32>, ptr %p, i64 1
249+
%m16 = getelementptr <4 x i32>, ptr %p, i64 1
250+
%vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 1
251+
%m16pv16 = getelementptr <vscale x 4 x i32>, ptr %vm16, i64 -1
252+
load <4 x i32>, ptr %p
253+
load <4 x i32>, ptr %vm16
254+
load <4 x i32>, ptr %m16
255+
load <4 x i32>, ptr %vm16m16
256+
load <4 x i32>, ptr %m16pv16
257+
ret void
258+
}
259+
260+
; CHECK-LABEL: gep_pos_scalable
261+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16
262+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p
263+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16
264+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16m16
265+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %vm16, <vscale x 4 x i32>* %vm16m16
266+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16m16
267+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %p
268+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16
269+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %m16pv16
270+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16m16
271+
define void @gep_pos_scalable(ptr %p) vscale_range(1,16) {
272+
%vm16 = getelementptr <vscale x 4 x i32>, ptr %p, i64 1
273+
%m16 = getelementptr <4 x i32>, ptr %p, i64 1
274+
%vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 1
275+
%m16pv16 = getelementptr <vscale x 4 x i32>, ptr %vm16, i64 -1
276+
load <vscale x 4 x i32>, ptr %p
277+
load <vscale x 4 x i32>, ptr %vm16
278+
load <vscale x 4 x i32>, ptr %m16
279+
load <vscale x 4 x i32>, ptr %vm16m16
280+
load <vscale x 4 x i32>, ptr %m16pv16
281+
ret void
282+
}
283+
284+
; CHECK-LABEL: v1v2types
285+
; CHECK-DAG: MustAlias: <4 x i32>* %p, <vscale x 4 x i32>* %p
286+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16
287+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <vscale x 4 x i32>* %vm16
288+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <4 x i32>* %vm16
289+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <4 x i32>* %vm16
290+
; CHECK-DAG: MustAlias: <4 x i32>* %vm16, <vscale x 4 x i32>* %vm16
291+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p
292+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <4 x i32>* %p
293+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16
294+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <4 x i32>* %vm16
295+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <vscale x 4 x i32>* %p
296+
; CHECK-DAG: NoAlias: <4 x i32>* %m16, <4 x i32>* %p
297+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <vscale x 4 x i32>* %vm16
298+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %vm16
299+
; CHECK-DAG: MustAlias: <4 x i32>* %m16, <vscale x 4 x i32>* %m16
300+
define void @v1v2types(ptr %p) vscale_range(1,16) {
301+
%vm16 = getelementptr <vscale x 4 x i32>, ptr %p, i64 -1
302+
%m16 = getelementptr <4 x i32>, ptr %p, i64 -1
303+
load <vscale x 4 x i32>, ptr %p
304+
load <4 x i32>, ptr %p
305+
load <vscale x 4 x i32>, ptr %vm16
306+
load <4 x i32>, ptr %vm16
307+
load <vscale x 4 x i32>, ptr %m16
308+
load <4 x i32>, ptr %m16
309+
ret void
310+
}
311+
156312
; getelementptr recursion
157313

158314
; CHECK-LABEL: gep_recursion_level_1
@@ -269,3 +425,51 @@ define void @gep_recursion_max_lookup_depth_reached(ptr %a, ptr %p) {
269425
load i32, ptr %gep_rec_6
270426
ret void
271427
}
428+
429+
; CHECK-LABEL: gep_2048
430+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %off255, <vscale x 4 x i32>* %p
431+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %p
432+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %off255
433+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %off256, <vscale x 4 x i32>* %p
434+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %off255, <vscale x 4 x i32>* %off256
435+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %off256
436+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %p
437+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %off255
438+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %noff256
439+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %off256
440+
define void @gep_2048(ptr %p) {
441+
%off255 = getelementptr i8, ptr %p, i64 255
442+
%noff255 = getelementptr i8, ptr %p, i64 -255
443+
%off256 = getelementptr i8, ptr %p, i64 256
444+
%noff256 = getelementptr i8, ptr %p, i64 -256
445+
load <vscale x 4 x i32>, ptr %p
446+
load <vscale x 4 x i32>, ptr %off255
447+
load <vscale x 4 x i32>, ptr %noff255
448+
load <vscale x 4 x i32>, ptr %off256
449+
load <vscale x 4 x i32>, ptr %noff256
450+
ret void
451+
}
452+
453+
; CHECK-LABEL: gep_2048_vscalerange
454+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %off255, <vscale x 4 x i32>* %p
455+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %p
456+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %off255
457+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %off256, <vscale x 4 x i32>* %p
458+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %off255, <vscale x 4 x i32>* %off256
459+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %off256
460+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %p
461+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %off255
462+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff255, <vscale x 4 x i32>* %noff256
463+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %noff256, <vscale x 4 x i32>* %off256
464+
define void @gep_2048_vscalerange(ptr %p) vscale_range(1,16) {
465+
%off255 = getelementptr i8, ptr %p, i64 255
466+
%noff255 = getelementptr i8, ptr %p, i64 -255
467+
%off256 = getelementptr i8, ptr %p, i64 256
468+
%noff256 = getelementptr i8, ptr %p, i64 -256
469+
load <vscale x 4 x i32>, ptr %p
470+
load <vscale x 4 x i32>, ptr %off255
471+
load <vscale x 4 x i32>, ptr %noff255
472+
load <vscale x 4 x i32>, ptr %off256
473+
load <vscale x 4 x i32>, ptr %noff256
474+
ret void
475+
}

0 commit comments

Comments
 (0)