Skip to content

Commit 3852b8c

Browse files
committed
[RISCV] Select vector shl by 1 to a vector add.
A vector add may be faster than a vector shift. Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D106689
1 parent 48ad446 commit 3852b8c

11 files changed

+219
-102
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,21 @@ defm : VPatBinarySDNode_VV_VX_VI<shl, "PseudoVSLL", uimm5>;
429429
defm : VPatBinarySDNode_VV_VX_VI<srl, "PseudoVSRL", uimm5>;
430430
defm : VPatBinarySDNode_VV_VX_VI<sra, "PseudoVSRA", uimm5>;
431431

432+
foreach vti = AllIntegerVectors in {
433+
// Emit shift by 1 as an add since it might be faster.
434+
def : Pat<(shl (vti.Vector vti.RegClass:$rs1),
435+
(vti.Vector (splat_vector (XLenVT 1)))),
436+
(!cast<Instruction>("PseudoVADD_VV_"# vti.LMul.MX)
437+
vti.RegClass:$rs1, vti.RegClass:$rs1, vti.AVL, vti.Log2SEW)>;
438+
}
439+
foreach vti = [VI64M1, VI64M2, VI64M4, VI64M8] in {
440+
def : Pat<(shl (vti.Vector vti.RegClass:$rs1),
441+
(vti.Vector (rv32_splat_i64 (XLenVT 1)))),
442+
(!cast<Instruction>("PseudoVADD_VV_"# vti.LMul.MX)
443+
vti.RegClass:$rs1, vti.RegClass:$rs1, vti.AVL, vti.Log2SEW)>;
444+
445+
}
446+
432447
// 12.8. Vector Integer Comparison Instructions
433448
defm : VPatIntegerSetCCSDNode_VV_VX_VI<SETEQ, "PseudoVMSEQ">;
434449
defm : VPatIntegerSetCCSDNode_VV_VX_VI<SETNE, "PseudoVMSNE">;

llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,15 @@ defm : VPatBinaryVL_VV_VX_VI<riscv_shl_vl, "PseudoVSLL", uimm5>;
683683
defm : VPatBinaryVL_VV_VX_VI<riscv_srl_vl, "PseudoVSRL", uimm5>;
684684
defm : VPatBinaryVL_VV_VX_VI<riscv_sra_vl, "PseudoVSRA", uimm5>;
685685

686-
686+
foreach vti = AllIntegerVectors in {
687+
// Emit shift by 1 as an add since it might be faster.
688+
def : Pat<(riscv_shl_vl (vti.Vector vti.RegClass:$rs1),
689+
(riscv_vmv_v_x_vl 1, (XLenVT srcvalue)),
690+
(vti.Mask true_mask),
691+
VLOpFrag),
692+
(!cast<Instruction>("PseudoVADD_VV_"# vti.LMul.MX)
693+
vti.RegClass:$rs1, vti.RegClass:$rs1, GPR:$vl, vti.Log2SEW)>;
694+
}
687695

688696
// 12.7. Vector Narrowing Integer Right Shift Instructions
689697
foreach vtiTowti = AllWidenableIntVectors in {

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-bitreverse.ll

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ define void @bitreverse_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
3333
; LMULMAX2-RV32-NEXT: lui a1, 5
3434
; LMULMAX2-RV32-NEXT: addi a1, a1, 1365
3535
; LMULMAX2-RV32-NEXT: vand.vx v26, v25, a1
36-
; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 1
36+
; LMULMAX2-RV32-NEXT: vadd.vv v26, v26, v26
3737
; LMULMAX2-RV32-NEXT: lui a1, 11
3838
; LMULMAX2-RV32-NEXT: addi a1, a1, -1366
3939
; LMULMAX2-RV32-NEXT: vand.vx v25, v25, a1
@@ -70,7 +70,7 @@ define void @bitreverse_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
7070
; LMULMAX2-RV64-NEXT: lui a1, 5
7171
; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365
7272
; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1
73-
; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 1
73+
; LMULMAX2-RV64-NEXT: vadd.vv v26, v26, v26
7474
; LMULMAX2-RV64-NEXT: lui a1, 11
7575
; LMULMAX2-RV64-NEXT: addiw a1, a1, -1366
7676
; LMULMAX2-RV64-NEXT: vand.vx v25, v25, a1
@@ -107,7 +107,7 @@ define void @bitreverse_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
107107
; LMULMAX1-RV32-NEXT: lui a1, 5
108108
; LMULMAX1-RV32-NEXT: addi a1, a1, 1365
109109
; LMULMAX1-RV32-NEXT: vand.vx v26, v25, a1
110-
; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 1
110+
; LMULMAX1-RV32-NEXT: vadd.vv v26, v26, v26
111111
; LMULMAX1-RV32-NEXT: lui a1, 11
112112
; LMULMAX1-RV32-NEXT: addi a1, a1, -1366
113113
; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a1
@@ -144,7 +144,7 @@ define void @bitreverse_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
144144
; LMULMAX1-RV64-NEXT: lui a1, 5
145145
; LMULMAX1-RV64-NEXT: addiw a1, a1, 1365
146146
; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1
147-
; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 1
147+
; LMULMAX1-RV64-NEXT: vadd.vv v26, v26, v26
148148
; LMULMAX1-RV64-NEXT: lui a1, 11
149149
; LMULMAX1-RV64-NEXT: addiw a1, a1, -1366
150150
; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a1
@@ -198,7 +198,7 @@ define void @bitreverse_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
198198
; LMULMAX2-RV32-NEXT: lui a1, 349525
199199
; LMULMAX2-RV32-NEXT: addi a1, a1, 1365
200200
; LMULMAX2-RV32-NEXT: vand.vx v26, v25, a1
201-
; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 1
201+
; LMULMAX2-RV32-NEXT: vadd.vv v26, v26, v26
202202
; LMULMAX2-RV32-NEXT: lui a1, 699051
203203
; LMULMAX2-RV32-NEXT: addi a1, a1, -1366
204204
; LMULMAX2-RV32-NEXT: vand.vx v25, v25, a1
@@ -248,7 +248,7 @@ define void @bitreverse_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
248248
; LMULMAX2-RV64-NEXT: lui a1, 349525
249249
; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365
250250
; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1
251-
; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 1
251+
; LMULMAX2-RV64-NEXT: vadd.vv v26, v26, v26
252252
; LMULMAX2-RV64-NEXT: lui a1, 171
253253
; LMULMAX2-RV64-NEXT: addiw a1, a1, -1365
254254
; LMULMAX2-RV64-NEXT: slli a1, a1, 12
@@ -296,7 +296,7 @@ define void @bitreverse_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
296296
; LMULMAX1-RV32-NEXT: lui a1, 349525
297297
; LMULMAX1-RV32-NEXT: addi a1, a1, 1365
298298
; LMULMAX1-RV32-NEXT: vand.vx v26, v25, a1
299-
; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 1
299+
; LMULMAX1-RV32-NEXT: vadd.vv v26, v26, v26
300300
; LMULMAX1-RV32-NEXT: lui a1, 699051
301301
; LMULMAX1-RV32-NEXT: addi a1, a1, -1366
302302
; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a1
@@ -346,7 +346,7 @@ define void @bitreverse_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
346346
; LMULMAX1-RV64-NEXT: lui a1, 349525
347347
; LMULMAX1-RV64-NEXT: addiw a1, a1, 1365
348348
; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1
349-
; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 1
349+
; LMULMAX1-RV64-NEXT: vadd.vv v26, v26, v26
350350
; LMULMAX1-RV64-NEXT: lui a1, 171
351351
; LMULMAX1-RV64-NEXT: addiw a1, a1, -1365
352352
; LMULMAX1-RV64-NEXT: slli a1, a1, 12
@@ -452,7 +452,7 @@ define void @bitreverse_v2i64(<2 x i64>* %x, <2 x i64>* %y) {
452452
; LMULMAX2-RV32-NEXT: vmv.v.x v26, a1
453453
; LMULMAX2-RV32-NEXT: vsetivli zero, 2, e64, m1, ta, mu
454454
; LMULMAX2-RV32-NEXT: vand.vv v26, v25, v26
455-
; LMULMAX2-RV32-NEXT: vsll.vi v26, v26, 1
455+
; LMULMAX2-RV32-NEXT: vadd.vv v26, v26, v26
456456
; LMULMAX2-RV32-NEXT: lui a1, 699051
457457
; LMULMAX2-RV32-NEXT: addi a1, a1, -1366
458458
; LMULMAX2-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu
@@ -550,7 +550,7 @@ define void @bitreverse_v2i64(<2 x i64>* %x, <2 x i64>* %y) {
550550
; LMULMAX2-RV64-NEXT: slli a1, a1, 12
551551
; LMULMAX2-RV64-NEXT: addi a1, a1, 1365
552552
; LMULMAX2-RV64-NEXT: vand.vx v26, v25, a1
553-
; LMULMAX2-RV64-NEXT: vsll.vi v26, v26, 1
553+
; LMULMAX2-RV64-NEXT: vadd.vv v26, v26, v26
554554
; LMULMAX2-RV64-NEXT: lui a1, 1026731
555555
; LMULMAX2-RV64-NEXT: addiw a1, a1, -1365
556556
; LMULMAX2-RV64-NEXT: slli a1, a1, 12
@@ -652,7 +652,7 @@ define void @bitreverse_v2i64(<2 x i64>* %x, <2 x i64>* %y) {
652652
; LMULMAX1-RV32-NEXT: vmv.v.x v26, a1
653653
; LMULMAX1-RV32-NEXT: vsetivli zero, 2, e64, m1, ta, mu
654654
; LMULMAX1-RV32-NEXT: vand.vv v26, v25, v26
655-
; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 1
655+
; LMULMAX1-RV32-NEXT: vadd.vv v26, v26, v26
656656
; LMULMAX1-RV32-NEXT: lui a1, 699051
657657
; LMULMAX1-RV32-NEXT: addi a1, a1, -1366
658658
; LMULMAX1-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu
@@ -750,7 +750,7 @@ define void @bitreverse_v2i64(<2 x i64>* %x, <2 x i64>* %y) {
750750
; LMULMAX1-RV64-NEXT: slli a1, a1, 12
751751
; LMULMAX1-RV64-NEXT: addi a1, a1, 1365
752752
; LMULMAX1-RV64-NEXT: vand.vx v26, v25, a1
753-
; LMULMAX1-RV64-NEXT: vsll.vi v26, v26, 1
753+
; LMULMAX1-RV64-NEXT: vadd.vv v26, v26, v26
754754
; LMULMAX1-RV64-NEXT: lui a1, 1026731
755755
; LMULMAX1-RV64-NEXT: addiw a1, a1, -1365
756756
; LMULMAX1-RV64-NEXT: slli a1, a1, 12
@@ -801,7 +801,7 @@ define void @bitreverse_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
801801
; LMULMAX2-RV32-NEXT: lui a1, 5
802802
; LMULMAX2-RV32-NEXT: addi a1, a1, 1365
803803
; LMULMAX2-RV32-NEXT: vand.vx v28, v26, a1
804-
; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 1
804+
; LMULMAX2-RV32-NEXT: vadd.vv v28, v28, v28
805805
; LMULMAX2-RV32-NEXT: lui a1, 11
806806
; LMULMAX2-RV32-NEXT: addi a1, a1, -1366
807807
; LMULMAX2-RV32-NEXT: vand.vx v26, v26, a1
@@ -838,7 +838,7 @@ define void @bitreverse_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
838838
; LMULMAX2-RV64-NEXT: lui a1, 5
839839
; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365
840840
; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1
841-
; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 1
841+
; LMULMAX2-RV64-NEXT: vadd.vv v28, v28, v28
842842
; LMULMAX2-RV64-NEXT: lui a1, 11
843843
; LMULMAX2-RV64-NEXT: addiw a1, a1, -1366
844844
; LMULMAX2-RV64-NEXT: vand.vx v26, v26, a1
@@ -877,7 +877,7 @@ define void @bitreverse_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
877877
; LMULMAX1-RV32-NEXT: lui a1, 5
878878
; LMULMAX1-RV32-NEXT: addi a1, a1, 1365
879879
; LMULMAX1-RV32-NEXT: vand.vx v27, v25, a1
880-
; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 1
880+
; LMULMAX1-RV32-NEXT: vadd.vv v27, v27, v27
881881
; LMULMAX1-RV32-NEXT: lui a2, 11
882882
; LMULMAX1-RV32-NEXT: addi a2, a2, -1366
883883
; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a2
@@ -897,7 +897,7 @@ define void @bitreverse_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
897897
; LMULMAX1-RV32-NEXT: vsrl.vi v26, v26, 2
898898
; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27
899899
; LMULMAX1-RV32-NEXT: vand.vx v27, v26, a1
900-
; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 1
900+
; LMULMAX1-RV32-NEXT: vadd.vv v27, v27, v27
901901
; LMULMAX1-RV32-NEXT: vand.vx v26, v26, a2
902902
; LMULMAX1-RV32-NEXT: vsrl.vi v26, v26, 1
903903
; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27
@@ -935,7 +935,7 @@ define void @bitreverse_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
935935
; LMULMAX1-RV64-NEXT: lui a1, 5
936936
; LMULMAX1-RV64-NEXT: addiw a1, a1, 1365
937937
; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a1
938-
; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1
938+
; LMULMAX1-RV64-NEXT: vadd.vv v27, v27, v27
939939
; LMULMAX1-RV64-NEXT: lui a2, 11
940940
; LMULMAX1-RV64-NEXT: addiw a2, a2, -1366
941941
; LMULMAX1-RV64-NEXT: vand.vx v25, v25, a2
@@ -955,7 +955,7 @@ define void @bitreverse_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
955955
; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 2
956956
; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27
957957
; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a1
958-
; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1
958+
; LMULMAX1-RV64-NEXT: vadd.vv v27, v27, v27
959959
; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a2
960960
; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 1
961961
; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27
@@ -1008,7 +1008,7 @@ define void @bitreverse_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
10081008
; LMULMAX2-RV32-NEXT: lui a1, 349525
10091009
; LMULMAX2-RV32-NEXT: addi a1, a1, 1365
10101010
; LMULMAX2-RV32-NEXT: vand.vx v28, v26, a1
1011-
; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 1
1011+
; LMULMAX2-RV32-NEXT: vadd.vv v28, v28, v28
10121012
; LMULMAX2-RV32-NEXT: lui a1, 699051
10131013
; LMULMAX2-RV32-NEXT: addi a1, a1, -1366
10141014
; LMULMAX2-RV32-NEXT: vand.vx v26, v26, a1
@@ -1058,7 +1058,7 @@ define void @bitreverse_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
10581058
; LMULMAX2-RV64-NEXT: lui a1, 349525
10591059
; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365
10601060
; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1
1061-
; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 1
1061+
; LMULMAX2-RV64-NEXT: vadd.vv v28, v28, v28
10621062
; LMULMAX2-RV64-NEXT: lui a1, 171
10631063
; LMULMAX2-RV64-NEXT: addiw a1, a1, -1365
10641064
; LMULMAX2-RV64-NEXT: slli a1, a1, 12
@@ -1108,7 +1108,7 @@ define void @bitreverse_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
11081108
; LMULMAX1-RV32-NEXT: lui a2, 349525
11091109
; LMULMAX1-RV32-NEXT: addi a2, a2, 1365
11101110
; LMULMAX1-RV32-NEXT: vand.vx v27, v25, a2
1111-
; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 1
1111+
; LMULMAX1-RV32-NEXT: vadd.vv v27, v27, v27
11121112
; LMULMAX1-RV32-NEXT: lui a4, 699051
11131113
; LMULMAX1-RV32-NEXT: addi a4, a4, -1366
11141114
; LMULMAX1-RV32-NEXT: vand.vx v25, v25, a4
@@ -1134,7 +1134,7 @@ define void @bitreverse_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
11341134
; LMULMAX1-RV32-NEXT: vsrl.vi v26, v26, 2
11351135
; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27
11361136
; LMULMAX1-RV32-NEXT: vand.vx v27, v26, a2
1137-
; LMULMAX1-RV32-NEXT: vsll.vi v27, v27, 1
1137+
; LMULMAX1-RV32-NEXT: vadd.vv v27, v27, v27
11381138
; LMULMAX1-RV32-NEXT: vand.vx v26, v26, a4
11391139
; LMULMAX1-RV32-NEXT: vsrl.vi v26, v26, 1
11401140
; LMULMAX1-RV32-NEXT: vor.vv v26, v26, v27
@@ -1185,7 +1185,7 @@ define void @bitreverse_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
11851185
; LMULMAX1-RV64-NEXT: lui a2, 349525
11861186
; LMULMAX1-RV64-NEXT: addiw a2, a2, 1365
11871187
; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a2
1188-
; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1
1188+
; LMULMAX1-RV64-NEXT: vadd.vv v27, v27, v27
11891189
; LMULMAX1-RV64-NEXT: lui a4, 171
11901190
; LMULMAX1-RV64-NEXT: addiw a4, a4, -1365
11911191
; LMULMAX1-RV64-NEXT: slli a4, a4, 12
@@ -1213,7 +1213,7 @@ define void @bitreverse_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
12131213
; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 2
12141214
; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27
12151215
; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a2
1216-
; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1
1216+
; LMULMAX1-RV64-NEXT: vadd.vv v27, v27, v27
12171217
; LMULMAX1-RV64-NEXT: vand.vx v26, v26, a4
12181218
; LMULMAX1-RV64-NEXT: vsrl.vi v26, v26, 1
12191219
; LMULMAX1-RV64-NEXT: vor.vv v26, v26, v27
@@ -1316,7 +1316,7 @@ define void @bitreverse_v4i64(<4 x i64>* %x, <4 x i64>* %y) {
13161316
; LMULMAX2-RV32-NEXT: vmv.v.x v28, a1
13171317
; LMULMAX2-RV32-NEXT: vsetivli zero, 4, e64, m2, ta, mu
13181318
; LMULMAX2-RV32-NEXT: vand.vv v28, v26, v28
1319-
; LMULMAX2-RV32-NEXT: vsll.vi v28, v28, 1
1319+
; LMULMAX2-RV32-NEXT: vadd.vv v28, v28, v28
13201320
; LMULMAX2-RV32-NEXT: lui a1, 699051
13211321
; LMULMAX2-RV32-NEXT: addi a1, a1, -1366
13221322
; LMULMAX2-RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu
@@ -1414,7 +1414,7 @@ define void @bitreverse_v4i64(<4 x i64>* %x, <4 x i64>* %y) {
14141414
; LMULMAX2-RV64-NEXT: slli a1, a1, 12
14151415
; LMULMAX2-RV64-NEXT: addi a1, a1, 1365
14161416
; LMULMAX2-RV64-NEXT: vand.vx v28, v26, a1
1417-
; LMULMAX2-RV64-NEXT: vsll.vi v28, v28, 1
1417+
; LMULMAX2-RV64-NEXT: vadd.vv v28, v28, v28
14181418
; LMULMAX2-RV64-NEXT: lui a1, 1026731
14191419
; LMULMAX2-RV64-NEXT: addiw a1, a1, -1365
14201420
; LMULMAX2-RV64-NEXT: slli a1, a1, 12
@@ -1518,7 +1518,7 @@ define void @bitreverse_v4i64(<4 x i64>* %x, <4 x i64>* %y) {
15181518
; LMULMAX1-RV32-NEXT: vmv.v.x v10, a5
15191519
; LMULMAX1-RV32-NEXT: vsetivli zero, 2, e64, m1, ta, mu
15201520
; LMULMAX1-RV32-NEXT: vand.vv v12, v31, v10
1521-
; LMULMAX1-RV32-NEXT: vsll.vi v12, v12, 1
1521+
; LMULMAX1-RV32-NEXT: vadd.vv v12, v12, v12
15221522
; LMULMAX1-RV32-NEXT: lui a5, 699051
15231523
; LMULMAX1-RV32-NEXT: addi a5, a5, -1366
15241524
; LMULMAX1-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu
@@ -1559,7 +1559,7 @@ define void @bitreverse_v4i64(<4 x i64>* %x, <4 x i64>* %y) {
15591559
; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 2
15601560
; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26
15611561
; LMULMAX1-RV32-NEXT: vand.vv v26, v25, v10
1562-
; LMULMAX1-RV32-NEXT: vsll.vi v26, v26, 1
1562+
; LMULMAX1-RV32-NEXT: vadd.vv v26, v26, v26
15631563
; LMULMAX1-RV32-NEXT: vand.vv v25, v25, v13
15641564
; LMULMAX1-RV32-NEXT: vsrl.vi v25, v25, 1
15651565
; LMULMAX1-RV32-NEXT: vor.vv v25, v25, v26
@@ -1659,7 +1659,7 @@ define void @bitreverse_v4i64(<4 x i64>* %x, <4 x i64>* %y) {
16591659
; LMULMAX1-RV64-NEXT: slli a1, a1, 12
16601660
; LMULMAX1-RV64-NEXT: addi a1, a1, 1365
16611661
; LMULMAX1-RV64-NEXT: vand.vx v27, v26, a1
1662-
; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1
1662+
; LMULMAX1-RV64-NEXT: vadd.vv v27, v27, v27
16631663
; LMULMAX1-RV64-NEXT: lui s0, 1026731
16641664
; LMULMAX1-RV64-NEXT: addiw s0, s0, -1365
16651665
; LMULMAX1-RV64-NEXT: slli s0, s0, 12
@@ -1703,7 +1703,7 @@ define void @bitreverse_v4i64(<4 x i64>* %x, <4 x i64>* %y) {
17031703
; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 2
17041704
; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27
17051705
; LMULMAX1-RV64-NEXT: vand.vx v27, v25, a1
1706-
; LMULMAX1-RV64-NEXT: vsll.vi v27, v27, 1
1706+
; LMULMAX1-RV64-NEXT: vadd.vv v27, v27, v27
17071707
; LMULMAX1-RV64-NEXT: vand.vx v25, v25, s0
17081708
; LMULMAX1-RV64-NEXT: vsrl.vi v25, v25, 1
17091709
; LMULMAX1-RV64-NEXT: vor.vv v25, v25, v27

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-int-buildvec.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ define void @buildvec_vid_step2_add0_v4i8(<4 x i8>* %z0, <4 x i8>* %z1, <4 x i8>
6868
; CHECK: # %bb.0:
6969
; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, mu
7070
; CHECK-NEXT: vid.v v25
71-
; CHECK-NEXT: vsll.vi v25, v25, 1
71+
; CHECK-NEXT: vadd.vv v25, v25, v25
7272
; CHECK-NEXT: vse8.v v25, (a0)
7373
; CHECK-NEXT: vse8.v v25, (a1)
7474
; CHECK-NEXT: vse8.v v25, (a2)
@@ -86,7 +86,7 @@ define void @buildvec_vid_step2_add1_v4i8(<4 x i8>* %z0, <4 x i8>* %z1, <4 x i8>
8686
; CHECK: # %bb.0:
8787
; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, mu
8888
; CHECK-NEXT: vid.v v25
89-
; CHECK-NEXT: vsll.vi v25, v25, 1
89+
; CHECK-NEXT: vadd.vv v25, v25, v25
9090
; CHECK-NEXT: vadd.vi v25, v25, 1
9191
; CHECK-NEXT: vse8.v v25, (a0)
9292
; CHECK-NEXT: vse8.v v25, (a1)
@@ -127,7 +127,7 @@ define void @buildvec_vid_stepn2_add0_v4i8(<4 x i8>* %z0, <4 x i8>* %z1, <4 x i8
127127
; CHECK: # %bb.0:
128128
; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, mu
129129
; CHECK-NEXT: vid.v v25
130-
; CHECK-NEXT: vsll.vi v25, v25, 1
130+
; CHECK-NEXT: vadd.vv v25, v25, v25
131131
; CHECK-NEXT: vrsub.vi v25, v25, 0
132132
; CHECK-NEXT: vse8.v v25, (a0)
133133
; CHECK-NEXT: vse8.v v25, (a1)
@@ -146,7 +146,7 @@ define void @buildvec_vid_stepn2_add3_v4i8(<4 x i8>* %z0, <4 x i8>* %z1, <4 x i8
146146
; CHECK: # %bb.0:
147147
; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, mu
148148
; CHECK-NEXT: vid.v v25
149-
; CHECK-NEXT: vsll.vi v25, v25, 1
149+
; CHECK-NEXT: vadd.vv v25, v25, v25
150150
; CHECK-NEXT: vrsub.vi v25, v25, 3
151151
; CHECK-NEXT: vse8.v v25, (a0)
152152
; CHECK-NEXT: ret
@@ -232,7 +232,7 @@ define <4 x i64> @buildvec_vid_step2_add0_v4i64() {
232232
; RV64: # %bb.0:
233233
; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, mu
234234
; RV64-NEXT: vid.v v25
235-
; RV64-NEXT: vsll.vi v8, v25, 1
235+
; RV64-NEXT: vadd.vv v8, v25, v25
236236
; RV64-NEXT: vadd.vi v9, v8, 4
237237
; RV64-NEXT: ret
238238
ret <4 x i64> <i64 0, i64 2, i64 4, i64 6>

0 commit comments

Comments
 (0)