@@ -9,6 +9,7 @@ define i8 @extractelt_v16i8(ptr %x) nounwind {
9
9
; CHECK: # %bb.0:
10
10
; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
11
11
; CHECK-NEXT: vle8.v v8, (a0)
12
+ ; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma
12
13
; CHECK-NEXT: vslidedown.vi v8, v8, 7
13
14
; CHECK-NEXT: vmv.x.s a0, v8
14
15
; CHECK-NEXT: ret
@@ -22,6 +23,7 @@ define i16 @extractelt_v8i16(ptr %x) nounwind {
22
23
; CHECK: # %bb.0:
23
24
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
24
25
; CHECK-NEXT: vle16.v v8, (a0)
26
+ ; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
25
27
; CHECK-NEXT: vslidedown.vi v8, v8, 7
26
28
; CHECK-NEXT: vmv.x.s a0, v8
27
29
; CHECK-NEXT: ret
@@ -35,6 +37,7 @@ define i32 @extractelt_v4i32(ptr %x) nounwind {
35
37
; CHECK: # %bb.0:
36
38
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
37
39
; CHECK-NEXT: vle32.v v8, (a0)
40
+ ; CHECK-NEXT: vsetivli zero, 1, e32, m1, ta, ma
38
41
; CHECK-NEXT: vslidedown.vi v8, v8, 2
39
42
; CHECK-NEXT: vmv.x.s a0, v8
40
43
; CHECK-NEXT: ret
@@ -71,6 +74,7 @@ define half @extractelt_v8f16(ptr %x) nounwind {
71
74
; CHECK: # %bb.0:
72
75
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
73
76
; CHECK-NEXT: vle16.v v8, (a0)
77
+ ; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
74
78
; CHECK-NEXT: vslidedown.vi v8, v8, 7
75
79
; CHECK-NEXT: vfmv.f.s fa0, v8
76
80
; CHECK-NEXT: ret
@@ -84,6 +88,7 @@ define float @extractelt_v4f32(ptr %x) nounwind {
84
88
; CHECK: # %bb.0:
85
89
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
86
90
; CHECK-NEXT: vle32.v v8, (a0)
91
+ ; CHECK-NEXT: vsetivli zero, 1, e32, m1, ta, ma
87
92
; CHECK-NEXT: vslidedown.vi v8, v8, 2
88
93
; CHECK-NEXT: vfmv.f.s fa0, v8
89
94
; CHECK-NEXT: ret
@@ -247,6 +252,7 @@ define i8 @extractelt_v16i8_idx(ptr %x, i32 zeroext %idx) nounwind {
247
252
; CHECK: # %bb.0:
248
253
; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
249
254
; CHECK-NEXT: vle8.v v8, (a0)
255
+ ; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma
250
256
; CHECK-NEXT: vslidedown.vx v8, v8, a1
251
257
; CHECK-NEXT: vmv.x.s a0, v8
252
258
; CHECK-NEXT: ret
@@ -260,6 +266,7 @@ define i16 @extractelt_v8i16_idx(ptr %x, i32 zeroext %idx) nounwind {
260
266
; CHECK: # %bb.0:
261
267
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
262
268
; CHECK-NEXT: vle16.v v8, (a0)
269
+ ; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
263
270
; CHECK-NEXT: vslidedown.vx v8, v8, a1
264
271
; CHECK-NEXT: vmv.x.s a0, v8
265
272
; CHECK-NEXT: ret
@@ -274,6 +281,7 @@ define i32 @extractelt_v4i32_idx(ptr %x, i32 zeroext %idx) nounwind {
274
281
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
275
282
; CHECK-NEXT: vle32.v v8, (a0)
276
283
; CHECK-NEXT: vadd.vv v8, v8, v8
284
+ ; CHECK-NEXT: vsetivli zero, 1, e32, m1, ta, ma
277
285
; CHECK-NEXT: vslidedown.vx v8, v8, a1
278
286
; CHECK-NEXT: vmv.x.s a0, v8
279
287
; CHECK-NEXT: ret
@@ -289,10 +297,10 @@ define i64 @extractelt_v2i64_idx(ptr %x, i32 zeroext %idx) nounwind {
289
297
; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma
290
298
; RV32-NEXT: vle64.v v8, (a0)
291
299
; RV32-NEXT: vadd.vv v8, v8, v8
300
+ ; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma
292
301
; RV32-NEXT: vslidedown.vx v8, v8, a1
293
302
; RV32-NEXT: vmv.x.s a0, v8
294
303
; RV32-NEXT: li a1, 32
295
- ; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma
296
304
; RV32-NEXT: vsrl.vx v8, v8, a1
297
305
; RV32-NEXT: vmv.x.s a1, v8
298
306
; RV32-NEXT: ret
@@ -302,6 +310,7 @@ define i64 @extractelt_v2i64_idx(ptr %x, i32 zeroext %idx) nounwind {
302
310
; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma
303
311
; RV64-NEXT: vle64.v v8, (a0)
304
312
; RV64-NEXT: vadd.vv v8, v8, v8
313
+ ; RV64-NEXT: vsetivli zero, 1, e64, m1, ta, ma
305
314
; RV64-NEXT: vslidedown.vx v8, v8, a1
306
315
; RV64-NEXT: vmv.x.s a0, v8
307
316
; RV64-NEXT: ret
@@ -317,6 +326,7 @@ define half @extractelt_v8f16_idx(ptr %x, i32 zeroext %idx) nounwind {
317
326
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
318
327
; CHECK-NEXT: vle16.v v8, (a0)
319
328
; CHECK-NEXT: vfadd.vv v8, v8, v8
329
+ ; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
320
330
; CHECK-NEXT: vslidedown.vx v8, v8, a1
321
331
; CHECK-NEXT: vfmv.f.s fa0, v8
322
332
; CHECK-NEXT: ret
@@ -332,6 +342,7 @@ define float @extractelt_v4f32_idx(ptr %x, i32 zeroext %idx) nounwind {
332
342
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
333
343
; CHECK-NEXT: vle32.v v8, (a0)
334
344
; CHECK-NEXT: vfadd.vv v8, v8, v8
345
+ ; CHECK-NEXT: vsetivli zero, 1, e32, m1, ta, ma
335
346
; CHECK-NEXT: vslidedown.vx v8, v8, a1
336
347
; CHECK-NEXT: vfmv.f.s fa0, v8
337
348
; CHECK-NEXT: ret
@@ -347,6 +358,7 @@ define double @extractelt_v2f64_idx(ptr %x, i32 zeroext %idx) nounwind {
347
358
; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
348
359
; CHECK-NEXT: vle64.v v8, (a0)
349
360
; CHECK-NEXT: vfadd.vv v8, v8, v8
361
+ ; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
350
362
; CHECK-NEXT: vslidedown.vx v8, v8, a1
351
363
; CHECK-NEXT: vfmv.f.s fa0, v8
352
364
; CHECK-NEXT: ret
@@ -517,8 +529,8 @@ define void @store_extractelt_v16i8(ptr %x, ptr %p) nounwind {
517
529
; CHECK: # %bb.0:
518
530
; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
519
531
; CHECK-NEXT: vle8.v v8, (a0)
520
- ; CHECK-NEXT: vslidedown.vi v8, v8, 7
521
532
; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma
533
+ ; CHECK-NEXT: vslidedown.vi v8, v8, 7
522
534
; CHECK-NEXT: vse8.v v8, (a1)
523
535
; CHECK-NEXT: ret
524
536
%a = load <16 x i8 >, ptr %x
@@ -532,8 +544,8 @@ define void @store_extractelt_v8i16(ptr %x, ptr %p) nounwind {
532
544
; CHECK: # %bb.0:
533
545
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
534
546
; CHECK-NEXT: vle16.v v8, (a0)
535
- ; CHECK-NEXT: vslidedown.vi v8, v8, 7
536
547
; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
548
+ ; CHECK-NEXT: vslidedown.vi v8, v8, 7
537
549
; CHECK-NEXT: vse16.v v8, (a1)
538
550
; CHECK-NEXT: ret
539
551
%a = load <8 x i16 >, ptr %x
@@ -547,8 +559,8 @@ define void @store_extractelt_v4i32(ptr %x, ptr %p) nounwind {
547
559
; CHECK: # %bb.0:
548
560
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
549
561
; CHECK-NEXT: vle32.v v8, (a0)
550
- ; CHECK-NEXT: vslidedown.vi v8, v8, 2
551
562
; CHECK-NEXT: vsetivli zero, 1, e32, m1, ta, ma
563
+ ; CHECK-NEXT: vslidedown.vi v8, v8, 2
552
564
; CHECK-NEXT: vse32.v v8, (a1)
553
565
; CHECK-NEXT: ret
554
566
%a = load <4 x i32 >, ptr %x
@@ -563,9 +575,9 @@ define void @store_extractelt_v2i64(ptr %x, ptr %p) nounwind {
563
575
; RV32: # %bb.0:
564
576
; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma
565
577
; RV32-NEXT: vle64.v v8, (a0)
578
+ ; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma
566
579
; RV32-NEXT: vslidedown.vi v8, v8, 1
567
580
; RV32-NEXT: li a0, 32
568
- ; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma
569
581
; RV32-NEXT: vsrl.vx v9, v8, a0
570
582
; RV32-NEXT: vmv.x.s a0, v9
571
583
; RV32-NEXT: vmv.x.s a2, v8
@@ -577,8 +589,8 @@ define void @store_extractelt_v2i64(ptr %x, ptr %p) nounwind {
577
589
; RV64: # %bb.0:
578
590
; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma
579
591
; RV64-NEXT: vle64.v v8, (a0)
580
- ; RV64-NEXT: vslidedown.vi v8, v8, 1
581
592
; RV64-NEXT: vsetivli zero, 1, e64, m1, ta, ma
593
+ ; RV64-NEXT: vslidedown.vi v8, v8, 1
582
594
; RV64-NEXT: vse64.v v8, (a1)
583
595
; RV64-NEXT: ret
584
596
%a = load <2 x i64 >, ptr %x
@@ -592,8 +604,8 @@ define void @store_extractelt_v2f64(ptr %x, ptr %p) nounwind {
592
604
; CHECK: # %bb.0:
593
605
; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
594
606
; CHECK-NEXT: vle64.v v8, (a0)
595
- ; CHECK-NEXT: vslidedown.vi v8, v8, 1
596
607
; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma
608
+ ; CHECK-NEXT: vslidedown.vi v8, v8, 1
597
609
; CHECK-NEXT: vse64.v v8, (a1)
598
610
; CHECK-NEXT: ret
599
611
%a = load <2 x double >, ptr %x
@@ -615,6 +627,7 @@ define i32 @extractelt_add_v4i32(<4 x i32> %x) {
615
627
; RV64: # %bb.0:
616
628
; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma
617
629
; RV64-NEXT: vadd.vi v8, v8, 13
630
+ ; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma
618
631
; RV64-NEXT: vslidedown.vi v8, v8, 2
619
632
; RV64-NEXT: vmv.x.s a0, v8
620
633
; RV64-NEXT: ret
@@ -637,6 +650,7 @@ define i32 @extractelt_sub_v4i32(<4 x i32> %x) {
637
650
; RV64: # %bb.0:
638
651
; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma
639
652
; RV64-NEXT: vrsub.vi v8, v8, 13
653
+ ; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma
640
654
; RV64-NEXT: vslidedown.vi v8, v8, 2
641
655
; RV64-NEXT: vmv.x.s a0, v8
642
656
; RV64-NEXT: ret
@@ -651,6 +665,7 @@ define i32 @extractelt_mul_v4i32(<4 x i32> %x) {
651
665
; RV32NOM-NEXT: li a0, 13
652
666
; RV32NOM-NEXT: vsetivli zero, 4, e32, m1, ta, ma
653
667
; RV32NOM-NEXT: vmul.vx v8, v8, a0
668
+ ; RV32NOM-NEXT: vsetivli zero, 1, e32, m1, ta, ma
654
669
; RV32NOM-NEXT: vslidedown.vi v8, v8, 2
655
670
; RV32NOM-NEXT: vmv.x.s a0, v8
656
671
; RV32NOM-NEXT: ret
@@ -669,6 +684,7 @@ define i32 @extractelt_mul_v4i32(<4 x i32> %x) {
669
684
; RV64-NEXT: li a0, 13
670
685
; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma
671
686
; RV64-NEXT: vmul.vx v8, v8, a0
687
+ ; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma
672
688
; RV64-NEXT: vslidedown.vi v8, v8, 2
673
689
; RV64-NEXT: vmv.x.s a0, v8
674
690
; RV64-NEXT: ret
@@ -696,6 +712,7 @@ define i32 @extractelt_sdiv_v4i32(<4 x i32> %x) {
696
712
; RV32NOM-NEXT: vsra.vv v9, v8, v11
697
713
; RV32NOM-NEXT: vsrl.vi v8, v8, 31
698
714
; RV32NOM-NEXT: vadd.vv v8, v9, v8
715
+ ; RV32NOM-NEXT: vsetivli zero, 1, e32, m1, ta, ma
699
716
; RV32NOM-NEXT: vslidedown.vi v8, v8, 2
700
717
; RV32NOM-NEXT: vmv.x.s a0, v8
701
718
; RV32NOM-NEXT: ret
@@ -731,6 +748,7 @@ define i32 @extractelt_sdiv_v4i32(<4 x i32> %x) {
731
748
; RV64-NEXT: vsra.vv v8, v8, v11
732
749
; RV64-NEXT: vsrl.vi v9, v8, 31
733
750
; RV64-NEXT: vadd.vv v8, v8, v9
751
+ ; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma
734
752
; RV64-NEXT: vslidedown.vi v8, v8, 2
735
753
; RV64-NEXT: vmv.x.s a0, v8
736
754
; RV64-NEXT: ret
@@ -747,6 +765,7 @@ define i32 @extractelt_udiv_v4i32(<4 x i32> %x) {
747
765
; RV32NOM-NEXT: lui a0, 322639
748
766
; RV32NOM-NEXT: addi a0, a0, -945
749
767
; RV32NOM-NEXT: vmulhu.vx v8, v8, a0
768
+ ; RV32NOM-NEXT: vsetivli zero, 1, e32, m1, ta, ma
750
769
; RV32NOM-NEXT: vslidedown.vi v8, v8, 2
751
770
; RV32NOM-NEXT: vmv.x.s a0, v8
752
771
; RV32NOM-NEXT: srli a0, a0, 2
@@ -771,6 +790,7 @@ define i32 @extractelt_udiv_v4i32(<4 x i32> %x) {
771
790
; RV64-NEXT: addiw a0, a0, -945
772
791
; RV64-NEXT: vmulhu.vx v8, v8, a0
773
792
; RV64-NEXT: vsrl.vi v8, v8, 2
793
+ ; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma
774
794
; RV64-NEXT: vslidedown.vi v8, v8, 2
775
795
; RV64-NEXT: vmv.x.s a0, v8
776
796
; RV64-NEXT: ret
0 commit comments