@@ -103,6 +103,19 @@ define <4 x i32> @v_dupQ32(i32 %A) nounwind {
103
103
ret <4 x i32 > %tmp4
104
104
}
105
105
106
+ define <4 x i16 > @v_dup16_const (i16 %y , ptr %p ) {
107
+ ; CHECK-LABEL: v_dup16_const:
108
+ ; CHECK: // %bb.0:
109
+ ; CHECK-NEXT: movi.4h v0, #10
110
+ ; CHECK-NEXT: mov w8, #10 // =0xa
111
+ ; CHECK-NEXT: strh w8, [x1]
112
+ ; CHECK-NEXT: ret
113
+ %i = insertelement <4 x i16 > undef , i16 10 , i32 0
114
+ %lo = shufflevector <4 x i16 > %i , <4 x i16 > undef , <4 x i32 > zeroinitializer
115
+ store i16 10 , ptr %p
116
+ ret <4 x i16 > %lo
117
+ }
118
+
106
119
define <4 x float > @v_dupQfloat (float %A ) nounwind {
107
120
; CHECK-LABEL: v_dupQfloat:
108
121
; CHECK: // %bb.0:
@@ -420,9 +433,9 @@ define <4 x i16> @test_perfectshuffle_dupext_v4i16(<4 x i16> %a, <4 x i16> %b) n
420
433
; CHECK-GI: // %bb.0:
421
434
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
422
435
; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1
423
- ; CHECK-GI-NEXT: adrp x8, .LCPI33_0
436
+ ; CHECK-GI-NEXT: adrp x8, .LCPI34_0
424
437
; CHECK-GI-NEXT: mov.d v0[1], v1[0]
425
- ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI33_0 ]
438
+ ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI34_0 ]
426
439
; CHECK-GI-NEXT: tbl.16b v0, { v0 }, v1
427
440
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
428
441
; CHECK-GI-NEXT: ret
@@ -443,9 +456,9 @@ define <4 x half> @test_perfectshuffle_dupext_v4f16(<4 x half> %a, <4 x half> %b
443
456
; CHECK-GI: // %bb.0:
444
457
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
445
458
; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1
446
- ; CHECK-GI-NEXT: adrp x8, .LCPI34_0
459
+ ; CHECK-GI-NEXT: adrp x8, .LCPI35_0
447
460
; CHECK-GI-NEXT: mov.d v0[1], v1[0]
448
- ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI34_0 ]
461
+ ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI35_0 ]
449
462
; CHECK-GI-NEXT: tbl.16b v0, { v0 }, v1
450
463
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
451
464
; CHECK-GI-NEXT: ret
@@ -462,9 +475,9 @@ define <4 x i32> @test_perfectshuffle_dupext_v4i32(<4 x i32> %a, <4 x i32> %b) n
462
475
;
463
476
; CHECK-GI-LABEL: test_perfectshuffle_dupext_v4i32:
464
477
; CHECK-GI: // %bb.0:
465
- ; CHECK-GI-NEXT: adrp x8, .LCPI35_0
478
+ ; CHECK-GI-NEXT: adrp x8, .LCPI36_0
466
479
; CHECK-GI-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
467
- ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI35_0 ]
480
+ ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI36_0 ]
468
481
; CHECK-GI-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
469
482
; CHECK-GI-NEXT: tbl.16b v0, { v0, v1 }, v2
470
483
; CHECK-GI-NEXT: ret
@@ -481,9 +494,9 @@ define <4 x float> @test_perfectshuffle_dupext_v4f32(<4 x float> %a, <4 x float>
481
494
;
482
495
; CHECK-GI-LABEL: test_perfectshuffle_dupext_v4f32:
483
496
; CHECK-GI: // %bb.0:
484
- ; CHECK-GI-NEXT: adrp x8, .LCPI36_0
497
+ ; CHECK-GI-NEXT: adrp x8, .LCPI37_0
485
498
; CHECK-GI-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
486
- ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI36_0 ]
499
+ ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI37_0 ]
487
500
; CHECK-GI-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
488
501
; CHECK-GI-NEXT: tbl.16b v0, { v0, v1 }, v2
489
502
; CHECK-GI-NEXT: ret
@@ -503,12 +516,12 @@ define void @disguised_dup(<4 x float> %x, ptr %p1, ptr %p2) {
503
516
;
504
517
; CHECK-GI-LABEL: disguised_dup:
505
518
; CHECK-GI: // %bb.0:
506
- ; CHECK-GI-NEXT: adrp x8, .LCPI37_1
519
+ ; CHECK-GI-NEXT: adrp x8, .LCPI38_1
507
520
; CHECK-GI-NEXT: // kill: def $q0 killed $q0 def $q0_q1
508
- ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI37_1 ]
509
- ; CHECK-GI-NEXT: adrp x8, .LCPI37_0
521
+ ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI38_1 ]
522
+ ; CHECK-GI-NEXT: adrp x8, .LCPI38_0
510
523
; CHECK-GI-NEXT: tbl.16b v0, { v0, v1 }, v2
511
- ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI37_0 ]
524
+ ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI38_0 ]
512
525
; CHECK-GI-NEXT: tbl.16b v2, { v0, v1 }, v2
513
526
; CHECK-GI-NEXT: str q0, [x0]
514
527
; CHECK-GI-NEXT: str q2, [x1]
@@ -531,8 +544,8 @@ define <2 x i32> @dup_const2(<2 x i32> %A) nounwind {
531
544
;
532
545
; CHECK-GI-LABEL: dup_const2:
533
546
; CHECK-GI: // %bb.0:
534
- ; CHECK-GI-NEXT: adrp x8, .LCPI38_0
535
- ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI38_0 ]
547
+ ; CHECK-GI-NEXT: adrp x8, .LCPI39_0
548
+ ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI39_0 ]
536
549
; CHECK-GI-NEXT: add.2s v0, v0, v1
537
550
; CHECK-GI-NEXT: ret
538
551
%tmp2 = add <2 x i32 > %A , <i32 8421378 , i32 8421378 >
@@ -550,8 +563,8 @@ define <2 x i32> @dup_const4_ext(<4 x i32> %A) nounwind {
550
563
;
551
564
; CHECK-GI-LABEL: dup_const4_ext:
552
565
; CHECK-GI: // %bb.0:
553
- ; CHECK-GI-NEXT: adrp x8, .LCPI39_0
554
- ; CHECK-GI-NEXT: ldr q1, [x8, :lo12:.LCPI39_0 ]
566
+ ; CHECK-GI-NEXT: adrp x8, .LCPI40_0
567
+ ; CHECK-GI-NEXT: ldr q1, [x8, :lo12:.LCPI40_0 ]
555
568
; CHECK-GI-NEXT: add.4s v0, v0, v1
556
569
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
557
570
; CHECK-GI-NEXT: ret
@@ -575,12 +588,12 @@ define <4 x i32> @dup_const24(<2 x i32> %A, <2 x i32> %B, <4 x i32> %C) nounwind
575
588
;
576
589
; CHECK-GI-LABEL: dup_const24:
577
590
; CHECK-GI: // %bb.0:
578
- ; CHECK-GI-NEXT: adrp x8, .LCPI40_1
591
+ ; CHECK-GI-NEXT: adrp x8, .LCPI41_1
579
592
; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1
580
- ; CHECK-GI-NEXT: ldr d3, [x8, :lo12:.LCPI40_1 ]
581
- ; CHECK-GI-NEXT: adrp x8, .LCPI40_0
593
+ ; CHECK-GI-NEXT: ldr d3, [x8, :lo12:.LCPI41_1 ]
594
+ ; CHECK-GI-NEXT: adrp x8, .LCPI41_0
582
595
; CHECK-GI-NEXT: add.2s v0, v0, v3
583
- ; CHECK-GI-NEXT: ldr q3, [x8, :lo12:.LCPI40_0 ]
596
+ ; CHECK-GI-NEXT: ldr q3, [x8, :lo12:.LCPI41_0 ]
584
597
; CHECK-GI-NEXT: mov.d v0[1], v1[0]
585
598
; CHECK-GI-NEXT: add.4s v1, v2, v3
586
599
; CHECK-GI-NEXT: eor.16b v0, v1, v0
@@ -687,3 +700,17 @@ define <8 x i16> @bitcast_v2f64_v8i16(<2 x i64> %a) {
687
700
ret <8 x i16 > %r
688
701
}
689
702
703
+ define <4 x i16 > @dup_i16_v4i16_constant () {
704
+ ; CHECK-SD-LABEL: dup_i16_v4i16_constant:
705
+ ; CHECK-SD: // %bb.0:
706
+ ; CHECK-SD-NEXT: mov w8, #9211 // =0x23fb
707
+ ; CHECK-SD-NEXT: dup.4h v0, w8
708
+ ; CHECK-SD-NEXT: ret
709
+ ;
710
+ ; CHECK-GI-LABEL: dup_i16_v4i16_constant:
711
+ ; CHECK-GI: // %bb.0:
712
+ ; CHECK-GI-NEXT: adrp x8, .LCPI50_0
713
+ ; CHECK-GI-NEXT: ldr d0, [x8, :lo12:.LCPI50_0]
714
+ ; CHECK-GI-NEXT: ret
715
+ ret <4 x i16 > <i16 9211 , i16 9211 , i16 9211 , i16 9211 >
716
+ }
0 commit comments