@@ -377,9 +377,11 @@ define i16 @orr_modimm_t6() nounwind {
377
377
declare i8 @f_v8i8 (<8 x i8 > %arg )
378
378
declare i16 @f_v4i16 (<4 x i16 > %arg )
379
379
declare i32 @f_v2i32 (<2 x i32 > %arg )
380
+ declare i64 @f_v1i64 (<1 x i64 > %arg )
380
381
declare i8 @f_v16i8 (<16 x i8 > %arg )
381
382
declare i16 @f_v8i16 (<8 x i16 > %arg )
382
383
declare i32 @f_v4i32 (<4 x i32 > %arg )
384
+ declare i64 @f_v2i64 (<2 x i64 > %arg )
383
385
384
386
; CHECK-LABEL: modimm_t1_call:
385
387
define void @modimm_t1_call () {
@@ -395,6 +397,9 @@ define void @modimm_t1_call() {
395
397
; CHECK-NEXT: rev64 v{{[0-9]+}}.2s, v[[REG1]].2s
396
398
; CHECK-NEXT: bl f_v2i32
397
399
call i32 @f_v2i32 (<2 x i32 > <i32 6 , i32 6 >)
400
+ ; CHECK: movi v{{[0-9]+}}.2s, #0x5
401
+ ; CHECK-NEXT: bl f_v1i64
402
+ call i64 @f_v1i64 (<1 x i64 > <i64 21474836485 >)
398
403
; CHECK: movi v[[REG1:[0-9]+]].4s, #0x5
399
404
; CHECK-NEXT: rev64 v[[REG2:[0-9]+]].16b, v[[REG1]].16b
400
405
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
@@ -410,6 +415,10 @@ define void @modimm_t1_call() {
410
415
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
411
416
; CHECK-NEXT: bl f_v4i32
412
417
call i32 @f_v4i32 (<4 x i32 > <i32 3 , i32 3 , i32 3 , i32 3 >)
418
+ ; CHECK: movi v[[REG:[0-9]+]].4s, #0x2
419
+ ; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
420
+ ; CHECK-NEXT: bl f_v2i64
421
+ call i64 @f_v2i64 (<2 x i64 > <i64 8589934594 , i64 8589934594 >)
413
422
414
423
ret void
415
424
}
@@ -428,6 +437,9 @@ define void @modimm_t2_call() {
428
437
; CHECK-NEXT: rev64 v{{[0-9]+}}.2s, v[[REG1]].2s
429
438
; CHECK-NEXT: bl f_v2i32
430
439
call i32 @f_v2i32 (<2 x i32 > <i32 1536 , i32 1536 >)
440
+ ; CHECK: movi v{{[0-9]+}}.2s, #0x5, lsl #8
441
+ ; CHECK-NEXT: bl f_v1i64
442
+ call i64 @f_v1i64 (<1 x i64 > <i64 5497558140160 >)
431
443
; CHECK: movi v[[REG1:[0-9]+]].4s, #0x5, lsl #8
432
444
; CHECK-NEXT: rev64 v[[REG2:[0-9]+]].16b, v[[REG1]].16b
433
445
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
@@ -443,6 +455,10 @@ define void @modimm_t2_call() {
443
455
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
444
456
; CHECK-NEXT: bl f_v4i32
445
457
call i32 @f_v4i32 (<4 x i32 > <i32 768 , i32 768 , i32 768 , i32 768 >)
458
+ ; CHECK: movi v[[REG:[0-9]+]].4s, #0x2, lsl #8
459
+ ; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
460
+ ; CHECK-NEXT: bl f_v2i64
461
+ call i64 @f_v2i64 (<2 x i64 > <i64 2199023256064 , i64 2199023256064 >)
446
462
447
463
ret void
448
464
}
@@ -461,6 +477,9 @@ define void @modimm_t3_call() {
461
477
; CHECK-NEXT: rev64 v{{[0-9]+}}.2s, v[[REG1]].2s
462
478
; CHECK-NEXT: bl f_v2i32
463
479
call i32 @f_v2i32 (<2 x i32 > <i32 393216 , i32 393216 >)
480
+ ; CHECK: movi v{{[0-9]+}}.2s, #0x5, lsl #16
481
+ ; CHECK-NEXT: bl f_v1i64
482
+ call i64 @f_v1i64 (<1 x i64 > <i64 1407374883880960 >)
464
483
; CHECK: movi v[[REG1:[0-9]+]].4s, #0x5, lsl #16
465
484
; CHECK-NEXT: rev64 v[[REG2:[0-9]+]].16b, v[[REG1]].16b
466
485
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
@@ -476,6 +495,10 @@ define void @modimm_t3_call() {
476
495
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
477
496
; CHECK-NEXT: bl f_v4i32
478
497
call i32 @f_v4i32 (<4 x i32 > <i32 196608 , i32 196608 , i32 196608 , i32 196608 >)
498
+ ; CHECK: movi v[[REG:[0-9]+]].4s, #0x2, lsl #16
499
+ ; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
500
+ ; CHECK-NEXT: bl f_v2i64
501
+ call i64 @f_v2i64 (<2 x i64 > <i64 562949953552384 , i64 562949953552384 >)
479
502
480
503
ret void
481
504
}
@@ -494,6 +517,9 @@ define void @modimm_t4_call() {
494
517
; CHECK-NEXT: rev64 v{{[0-9]+}}.2s, v[[REG1]].2s
495
518
; CHECK-NEXT: bl f_v2i32
496
519
call i32 @f_v2i32 (<2 x i32 > <i32 100663296 , i32 100663296 >)
520
+ ; CHECK: movi v{{[0-9]+}}.2s, #0x5, lsl #24
521
+ ; CHECK-NEXT: bl f_v1i64
522
+ call i64 @f_v1i64 (<1 x i64 > <i64 360287970273525760 >)
497
523
; CHECK: movi v[[REG1:[0-9]+]].4s, #0x5, lsl #24
498
524
; CHECK-NEXT: rev64 v[[REG2:[0-9]+]].16b, v[[REG1]].16b
499
525
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
@@ -509,6 +535,10 @@ define void @modimm_t4_call() {
509
535
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
510
536
; CHECK-NEXT: bl f_v4i32
511
537
call i32 @f_v4i32 (<4 x i32 > <i32 50331648 , i32 50331648 , i32 50331648 , i32 50331648 >)
538
+ ; CHECK: movi v[[REG:[0-9]+]].4s, #0x2, lsl #24
539
+ ; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
540
+ ; CHECK-NEXT: bl f_v2i64
541
+ call i64 @f_v2i64 (<2 x i64 > <i64 144115188109410304 , i64 144115188109410304 >)
512
542
513
543
ret void
514
544
}
@@ -527,6 +557,9 @@ define void @modimm_t5_call() {
527
557
; CHECK-NEXT: rev64 v{{[0-9]+}}.2s, v[[REG1]].2s
528
558
; CHECK-NEXT: bl f_v2i32
529
559
call i32 @f_v2i32 (<2 x i32 > <i32 393222 , i32 393222 >)
560
+ ; CHECK: movi v{{[0-9]+}}.4h, #0x5
561
+ ; CHECK-NEXT: bl f_v1i64
562
+ call i64 @f_v1i64 (<1 x i64 > <i64 1407396358717445 >)
530
563
; CHECK: movi v[[REG1:[0-9]+]].8h, #0x5
531
564
; CHECK-NEXT: rev64 v[[REG2:[0-9]+]].16b, v[[REG1]].16b
532
565
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
@@ -542,6 +575,10 @@ define void @modimm_t5_call() {
542
575
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
543
576
; CHECK-NEXT: bl f_v4i32
544
577
call i32 @f_v4i32 (<4 x i32 > <i32 196611 , i32 196611 , i32 196611 , i32 196611 >)
578
+ ; CHECK: movi v[[REG:[0-9]+]].8h, #0x2
579
+ ; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
580
+ ; CHECK-NEXT: bl f_v2i64
581
+ call i64 @f_v2i64 (<2 x i64 > <i64 562958543486978 , i64 562958543486978 >)
545
582
546
583
ret void
547
584
}
@@ -560,6 +597,9 @@ define void @modimm_t6_call() {
560
597
; CHECK-NEXT: rev64 v{{[0-9]+}}.2s, v[[REG1]].2s
561
598
; CHECK-NEXT: bl f_v2i32
562
599
call i32 @f_v2i32 (<2 x i32 > <i32 100664832 , i32 100664832 >)
600
+ ; CHECK: movi v{{[0-9]+}}.4h, #0x5, lsl #8
601
+ ; CHECK-NEXT: bl f_v1i64
602
+ call i64 @f_v1i64 (<1 x i64 > <i64 360293467831665920 >)
563
603
; CHECK: movi v[[REG1:[0-9]+]].8h, #0x5, lsl #8
564
604
; CHECK-NEXT: rev64 v[[REG2:[0-9]+]].16b, v[[REG1]].16b
565
605
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
@@ -575,6 +615,10 @@ define void @modimm_t6_call() {
575
615
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
576
616
; CHECK-NEXT: bl f_v4i32
577
617
call i32 @f_v4i32 (<4 x i32 > <i32 50332416 , i32 50332416 , i32 50332416 , i32 50332416 >)
618
+ ; CHECK: movi v[[REG:[0-9]+]].8h, #0x2, lsl #8
619
+ ; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
620
+ ; CHECK-NEXT: bl f_v2i64
621
+ call i64 @f_v2i64 (<2 x i64 > <i64 144117387132666368 , i64 144117387132666368 >)
578
622
579
623
ret void
580
624
}
@@ -593,6 +637,9 @@ define void @modimm_t7_call() {
593
637
; CHECK-NEXT: rev64 v{{[0-9]+}}.2s, v[[REG1]].2s
594
638
; CHECK-NEXT: bl f_v2i32
595
639
call i32 @f_v2i32 (<2 x i32 > <i32 1791 , i32 1791 >)
640
+ ; CHECK: movi v{{[0-9]+}}.2s, #0x5, msl #8
641
+ ; CHECK-NEXT: bl f_v1i64
642
+ call i64 @f_v1i64 (<1 x i64 > <i64 6592774800895 >)
596
643
; CHECK: movi v[[REG1:[0-9]+]].4s, #0x5, msl #8
597
644
; CHECK-NEXT: rev64 v[[REG2:[0-9]+]].16b, v[[REG1]].16b
598
645
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
@@ -608,6 +655,10 @@ define void @modimm_t7_call() {
608
655
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
609
656
; CHECK-NEXT: bl f_v4i32
610
657
call i32 @f_v4i32 (<4 x i32 > <i32 1023 , i32 1023 , i32 1023 , i32 1023 >)
658
+ ; CHECK: movi v[[REG:[0-9]+]].4s, #0x2, msl #8
659
+ ; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
660
+ ; CHECK-NEXT: bl f_v2i64
661
+ call i64 @f_v2i64 (<2 x i64 > <i64 3294239916799 , i64 3294239916799 >)
611
662
612
663
ret void
613
664
}
@@ -626,6 +677,9 @@ define void @modimm_t8_call() {
626
677
; CHECK-NEXT: rev64 v{{[0-9]+}}.2s, v[[REG1]].2s
627
678
; CHECK-NEXT: bl f_v2i32
628
679
call i32 @f_v2i32 (<2 x i32 > <i32 458751 , i32 458751 >)
680
+ ; CHECK: movi v{{[0-9]+}}.2s, #0x5, msl #16
681
+ ; CHECK-NEXT: bl f_v1i64
682
+ call i64 @f_v1i64 (<1 x i64 > <i64 1688845565689855 >)
629
683
; CHECK: movi v[[REG1:[0-9]+]].4s, #0x5, msl #16
630
684
; CHECK-NEXT: rev64 v[[REG2:[0-9]+]].16b, v[[REG1]].16b
631
685
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
@@ -641,6 +695,10 @@ define void @modimm_t8_call() {
641
695
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
642
696
; CHECK-NEXT: bl f_v4i32
643
697
call i32 @f_v4i32 (<4 x i32 > <i32 262143 , i32 262143 , i32 262143 , i32 262143 >)
698
+ ; CHECK: movi v[[REG:[0-9]+]].4s, #0x2, msl #16
699
+ ; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
700
+ ; CHECK-NEXT: bl f_v2i64
701
+ call i64 @f_v2i64 (<2 x i64 > <i64 844420635361279 , i64 844420635361279 >)
644
702
645
703
ret void
646
704
}
@@ -725,6 +783,9 @@ define void @modimm_t11_call() {
725
783
; CHECK-NEXT: rev64 v{{[0-9]+}}.2s, v[[REG1]].2s
726
784
; CHECK-NEXT: bl f_v2i32
727
785
call i32 @f_v2i32 (<2 x i32 > <i32 1080033280 , i32 1080033280 >)
786
+ ; CHECK: fmov v{{[0-9]+}}.2s, #0.39062500
787
+ ; CHECK-NEXT: bl f_v1i64
788
+ call i64 @f_v1i64 (<1 x i64 > <i64 4523865826746957824 >)
728
789
; CHECK: fmov v[[REG1:[0-9]+]].4s, #3.25000000
729
790
; CHECK-NEXT: rev64 v[[REG2:[0-9]+]].16b, v[[REG1]].16b
730
791
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
@@ -740,6 +801,10 @@ define void @modimm_t11_call() {
740
801
; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
741
802
; CHECK-NEXT: bl f_v4i32
742
803
call i32 @f_v4i32 (<4 x i32 > <i32 1076887552 , i32 1076887552 , i32 1076887552 , i32 1076887552 >)
804
+ ; CHECK: fmov v[[REG:[0-9]+]].4s, #2.5000000
805
+ ; CHECK-NEXT: ext v[[REG2]].16b, v[[REG2]].16b, v[[REG2]].16b, #8
806
+ ; CHECK-NEXT: bl f_v2i64
807
+ call i64 @f_v2i64 (<2 x i64 > <i64 4620693218757967872 , i64 4620693218757967872 >)
743
808
744
809
ret void
745
810
}
0 commit comments