Skip to content

Commit 0da5f8c

Browse files
committed
[RISCV] Delay the transform so that vwsll has priority
1 parent fa18fca commit 0da5f8c

File tree

2 files changed

+10
-19
lines changed

2 files changed

+10
-19
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17343,16 +17343,16 @@ static SDValue combineScalarCTPOPToVCPOP(SDNode *N, SelectionDAG &DAG,
1734317343

1734417344
static SDValue combineSHL(SDNode *N, TargetLowering::DAGCombinerInfo &DCI,
1734517345
const RISCVSubtarget &Subtarget) {
17346-
if (DCI.isBeforeLegalize())
17347-
return SDValue();
17348-
1734917346
// (shl (zext x), y) -> (vwsll x, y)
1735017347
if (SDValue V = combineOp_VLToVWOp_VL(N, DCI, Subtarget))
1735117348
return V;
1735217349

1735317350
// (shl (sext x), C) -> (vwmulsu x, 1u << C)
1735417351
// (shl (zext x), C) -> (vwmulu x, 1u << C)
1735517352

17353+
if (!DCI.isAfterLegalizeDAG())
17354+
return SDValue();
17355+
1735617356
SDValue LHS = N->getOperand(0);
1735717357
if (!LHS.hasOneUse())
1735817358
return SDValue();

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

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -441,20 +441,12 @@ define <8 x i32> @vwsll_vi_v8i32(<8 x i16> %a) {
441441
; CHECK-NEXT: vmv2r.v v8, v10
442442
; CHECK-NEXT: ret
443443
;
444-
; CHECK-ZVBB-RV32-LABEL: vwsll_vi_v8i32:
445-
; CHECK-ZVBB-RV32: # %bb.0:
446-
; CHECK-ZVBB-RV32-NEXT: vsetivli zero, 8, e16, m1, ta, ma
447-
; CHECK-ZVBB-RV32-NEXT: vwsll.vi v10, v8, 2
448-
; CHECK-ZVBB-RV32-NEXT: vmv2r.v v8, v10
449-
; CHECK-ZVBB-RV32-NEXT: ret
450-
;
451-
; CHECK-ZVBB-RV64-LABEL: vwsll_vi_v8i32:
452-
; CHECK-ZVBB-RV64: # %bb.0:
453-
; CHECK-ZVBB-RV64-NEXT: li a0, 4
454-
; CHECK-ZVBB-RV64-NEXT: vsetivli zero, 8, e16, m1, ta, ma
455-
; CHECK-ZVBB-RV64-NEXT: vwmulu.vx v10, v8, a0
456-
; CHECK-ZVBB-RV64-NEXT: vmv2r.v v8, v10
457-
; CHECK-ZVBB-RV64-NEXT: ret
444+
; CHECK-ZVBB-LABEL: vwsll_vi_v8i32:
445+
; CHECK-ZVBB: # %bb.0:
446+
; CHECK-ZVBB-NEXT: vsetivli zero, 8, e16, m1, ta, ma
447+
; CHECK-ZVBB-NEXT: vwsll.vi v10, v8, 2
448+
; CHECK-ZVBB-NEXT: vmv2r.v v8, v10
449+
; CHECK-ZVBB-NEXT: ret
458450
%x = zext <8 x i16> %a to <8 x i32>
459451
%z = shl <8 x i32> %x, splat (i32 2)
460452
ret <8 x i32> %z
@@ -672,9 +664,8 @@ define <16 x i16> @vwsll_vi_v16i16(<16 x i8> %a) {
672664
;
673665
; CHECK-ZVBB-LABEL: vwsll_vi_v16i16:
674666
; CHECK-ZVBB: # %bb.0:
675-
; CHECK-ZVBB-NEXT: li a0, 4
676667
; CHECK-ZVBB-NEXT: vsetivli zero, 16, e8, m1, ta, ma
677-
; CHECK-ZVBB-NEXT: vwmulu.vx v10, v8, a0
668+
; CHECK-ZVBB-NEXT: vwsll.vi v10, v8, 2
678669
; CHECK-ZVBB-NEXT: vmv2r.v v8, v10
679670
; CHECK-ZVBB-NEXT: ret
680671
%x = zext <16 x i8> %a to <16 x i16>

0 commit comments

Comments
 (0)