diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -9167,9 +9167,6 @@ 0)) return SDValue(); - if (!ScalarV.hasOneUse()) - return SDValue(); - SDValue NewStart = N->getOperand(1 - ReduceIdx); SDLoc DL(N); diff --git a/llvm/test/CodeGen/RISCV/rvv/fold-binary-reduce.ll b/llvm/test/CodeGen/RISCV/rvv/fold-binary-reduce.ll --- a/llvm/test/CodeGen/RISCV/rvv/fold-binary-reduce.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fold-binary-reduce.ll @@ -282,13 +282,12 @@ ; CHECK-LABEL: reduce_fadd4: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma -; CHECK-NEXT: vmv.s.x v10, zero +; CHECK-NEXT: vfmv.s.f v10, fa0 ; CHECK-NEXT: vfredusum.vs v8, v8, v10 ; CHECK-NEXT: vfmv.f.s fa5, v8 -; CHECK-NEXT: vfredusum.vs v8, v9, v10 +; CHECK-NEXT: vfmv.s.f v8, fa1 +; CHECK-NEXT: vfredusum.vs v8, v9, v8 ; CHECK-NEXT: vfmv.f.s fa4, v8 -; CHECK-NEXT: fadd.s fa5, fa5, fa0 -; CHECK-NEXT: fadd.s fa4, fa4, fa1 ; CHECK-NEXT: fdiv.s fa0, fa5, fa4 ; CHECK-NEXT: ret entry: