@@ -309,6 +309,174 @@ define void @v1v2types(ptr %p) vscale_range(1,16) {
309
309
ret void
310
310
}
311
311
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
+
312
480
; getelementptr recursion
313
481
314
482
; CHECK-LABEL: gep_recursion_level_1
0 commit comments