Skip to content

Commit 3421a4e

Browse files
committed
[BasicAA] More vscale tests. NFC
This time with i8 geps and scale intrinsics, along with mutiple vscale intrinsics that can be treated as identical.
1 parent 38476b0 commit 3421a4e

File tree

1 file changed

+168
-0
lines changed

1 file changed

+168
-0
lines changed

llvm/test/Analysis/BasicAA/vscale.ll

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,174 @@ define void @v1v2types(ptr %p) vscale_range(1,16) {
309309
ret void
310310
}
311311

312+
; VScale intrinsic offset tests
313+
314+
; CHECK-LABEL: vscale_neg_notscalable
315+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <4 x i32>* %vm16
316+
; CHECK-DAG: NoAlias: <4 x i32>* %m16, <4 x i32>* %p
317+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %vm16
318+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <4 x i32>* %vm16m16
319+
; CHECK-DAG: NoAlias: <4 x i32>* %vm16, <4 x i32>* %vm16m16
320+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %vm16m16
321+
; CHECK-DAG: MayAlias: <4 x i32>* %m16pv16, <4 x i32>* %p
322+
; CHECK-DAG: NoAlias: <4 x i32>* %m16pv16, <4 x i32>* %vm16
323+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %m16pv16
324+
; CHECK-DAG: MayAlias: <4 x i32>* %m16pv16, <4 x i32>* %vm16m16
325+
define void @vscale_neg_notscalable(ptr %p) {
326+
%v = call i64 @llvm.vscale.i64()
327+
%vp = mul i64 %v, 16
328+
%vm = mul i64 %v, -16
329+
%vm16 = getelementptr i8, ptr %p, i64 %vm
330+
%m16 = getelementptr <4 x i32>, ptr %p, i64 -1
331+
%vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 -1
332+
%m16pv16 = getelementptr i8, ptr %m16, i64 %vp
333+
load <4 x i32>, ptr %p
334+
load <4 x i32>, ptr %vm16
335+
load <4 x i32>, ptr %m16
336+
load <4 x i32>, ptr %vm16m16
337+
load <4 x i32>, ptr %m16pv16
338+
ret void
339+
}
340+
341+
; CHECK-LABEL: vscale_neg_scalable
342+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16
343+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p
344+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16
345+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16m16
346+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %vm16, <vscale x 4 x i32>* %vm16m16
347+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16m16
348+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %p
349+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16
350+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %m16pv16
351+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16m16
352+
define void @vscale_neg_scalable(ptr %p) {
353+
%v = call i64 @llvm.vscale.i64()
354+
%vp = mul i64 %v, 16
355+
%vm = mul i64 %v, -16
356+
%vm16 = getelementptr i8, ptr %p, i64 %vm
357+
%m16 = getelementptr <4 x i32>, ptr %p, i64 -1
358+
%vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 -1
359+
%m16pv16 = getelementptr i8, ptr %m16, i64 %vp
360+
load <vscale x 4 x i32>, ptr %p
361+
load <vscale x 4 x i32>, ptr %vm16
362+
load <vscale x 4 x i32>, ptr %m16
363+
load <vscale x 4 x i32>, ptr %vm16m16
364+
load <vscale x 4 x i32>, ptr %m16pv16
365+
ret void
366+
}
367+
368+
; CHECK-LABEL: vscale_pos_notscalable
369+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <4 x i32>* %vm16
370+
; CHECK-DAG: NoAlias: <4 x i32>* %m16, <4 x i32>* %p
371+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %vm16
372+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <4 x i32>* %vm16m16
373+
; CHECK-DAG: NoAlias: <4 x i32>* %vm16, <4 x i32>* %vm16m16
374+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %vm16m16
375+
; CHECK-DAG: MayAlias: <4 x i32>* %m16pv16, <4 x i32>* %p
376+
; CHECK-DAG: NoAlias: <4 x i32>* %m16pv16, <4 x i32>* %vm16
377+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %m16pv16
378+
; CHECK-DAG: MayAlias: <4 x i32>* %m16pv16, <4 x i32>* %vm16m16
379+
define void @vscale_pos_notscalable(ptr %p) {
380+
%v = call i64 @llvm.vscale.i64()
381+
%vp = mul i64 %v, 16
382+
%vm = mul i64 %v, -16
383+
%vm16 = getelementptr i8, ptr %p, i64 %vp
384+
%m16 = getelementptr <4 x i32>, ptr %p, i64 1
385+
%vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 1
386+
%m16pv16 = getelementptr i8, ptr %m16, i64 %vm
387+
load <4 x i32>, ptr %p
388+
load <4 x i32>, ptr %vm16
389+
load <4 x i32>, ptr %m16
390+
load <4 x i32>, ptr %vm16m16
391+
load <4 x i32>, ptr %m16pv16
392+
ret void
393+
}
394+
395+
; CHECK-LABEL: vscale_pos_scalable
396+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16
397+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p
398+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16
399+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16m16
400+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %vm16, <vscale x 4 x i32>* %vm16m16
401+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16m16
402+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %p
403+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16
404+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %m16pv16
405+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16pv16, <vscale x 4 x i32>* %vm16m16
406+
define void @vscale_pos_scalable(ptr %p) {
407+
%v = call i64 @llvm.vscale.i64()
408+
%vp = mul i64 %v, 16
409+
%vm = mul i64 %v, -16
410+
%vm16 = getelementptr i8, ptr %p, i64 %vp
411+
%m16 = getelementptr <4 x i32>, ptr %p, i64 1
412+
%vm16m16 = getelementptr <4 x i32>, ptr %vm16, i64 1
413+
%m16pv16 = getelementptr i8, ptr %m16, i64 %vm
414+
load <vscale x 4 x i32>, ptr %p
415+
load <vscale x 4 x i32>, ptr %vm16
416+
load <vscale x 4 x i32>, ptr %m16
417+
load <vscale x 4 x i32>, ptr %vm16m16
418+
load <vscale x 4 x i32>, ptr %m16pv16
419+
ret void
420+
}
421+
422+
; CHECK-LABEL: vscale_v1v2types
423+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <vscale x 4 x i32>* %p
424+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vm16
425+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <vscale x 4 x i32>* %vm16
426+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <4 x i32>* %vm16
427+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <4 x i32>* %vm16
428+
; CHECK-DAG: MayAlias: <4 x i32>* %vm16, <vscale x 4 x i32>* %vm16
429+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %p
430+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <4 x i32>* %p
431+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vm16
432+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <4 x i32>* %vm16
433+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <vscale x 4 x i32>* %p
434+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %p
435+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <vscale x 4 x i32>* %vm16
436+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <4 x i32>* %vm16
437+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <vscale x 4 x i32>* %m16
438+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %p, <vscale x 4 x i32>* %vp16
439+
; CHECK-DAG: MayAlias: <4 x i32>* %p, <vscale x 4 x i32>* %vp16
440+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %vm16, <vscale x 4 x i32>* %vp16
441+
; CHECK-DAG: MayAlias: <4 x i32>* %vm16, <vscale x 4 x i32>* %vp16
442+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %m16, <vscale x 4 x i32>* %vp16
443+
; CHECK-DAG: MayAlias: <4 x i32>* %m16, <vscale x 4 x i32>* %vp16
444+
define void @vscale_v1v2types(ptr %p) {
445+
%v = call i64 @llvm.vscale.i64()
446+
%vp = mul i64 %v, 16
447+
%vm = mul i64 %v, -16
448+
%vp16 = getelementptr i8, ptr %p, i64 %vp
449+
%vm16 = getelementptr i8, ptr %p, i64 %vm
450+
%m16 = getelementptr <4 x i32>, ptr %p, i64 -1
451+
load <vscale x 4 x i32>, ptr %p
452+
load <4 x i32>, ptr %p
453+
load <vscale x 4 x i32>, ptr %vm16
454+
load <4 x i32>, ptr %vm16
455+
load <vscale x 4 x i32>, ptr %m16
456+
load <4 x i32>, ptr %m16
457+
load <vscale x 4 x i32>, ptr %vp16
458+
ret void
459+
}
460+
461+
; CHECK-LABEL: twovscales
462+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %vp161, <vscale x 4 x i32>* %vp162
463+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %vp161, <vscale x 4 x i32>* %vp161b
464+
; CHECK-DAG: MayAlias: <vscale x 4 x i32>* %vp161b, <vscale x 4 x i32>* %vp162
465+
define void @twovscales(ptr %p) {
466+
%v1 = call i64 @llvm.vscale.i64()
467+
%v2 = call i64 @llvm.vscale.i64()
468+
%vp1 = mul i64 %v1, 16
469+
%vp2 = mul i64 %v2, 16
470+
%vp3 = mul i64 %v1, 17
471+
%vp161 = getelementptr i8, ptr %p, i64 %vp1
472+
%vp162 = getelementptr i8, ptr %p, i64 %vp2
473+
%vp161b = getelementptr i8, ptr %vp161, i64 %vp3
474+
load <vscale x 4 x i32>, ptr %vp161
475+
load <vscale x 4 x i32>, ptr %vp162
476+
load <vscale x 4 x i32>, ptr %vp161b
477+
ret void
478+
}
479+
312480
; getelementptr recursion
313481

314482
; CHECK-LABEL: gep_recursion_level_1

0 commit comments

Comments
 (0)