diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp index de8672b5352c0e..f2392ab96bef4b 100644 --- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp @@ -2371,10 +2371,13 @@ bool RISCVDAGToDAGISel::hasAllNBitUsers(SDNode *Node, unsigned Bits, case RISCV::ANDN: case RISCV::ORN: case RISCV::XNOR: + case RISCV::SH1ADD: + case RISCV::SH2ADD: + case RISCV::SH3ADD: RecCheck: - if (!hasAllNBitUsers(User, Bits, Depth + 1)) - return false; - break; + if (hasAllNBitUsers(User, Bits, Depth + 1)) + break; + return false; case RISCV::SRLI: { unsigned ShAmt = User->getConstantOperandVal(1); // If we are shifting right by less than Bits, and users don't demand any diff --git a/llvm/test/CodeGen/RISCV/addimm-mulimm.ll b/llvm/test/CodeGen/RISCV/addimm-mulimm.ll index 3437305402f014..4454af837004ae 100644 --- a/llvm/test/CodeGen/RISCV/addimm-mulimm.ll +++ b/llvm/test/CodeGen/RISCV/addimm-mulimm.ll @@ -217,7 +217,7 @@ define i32 @add_mul_combine_reject_c1(i32 %x) { ; ; RV64IMB-LABEL: add_mul_combine_reject_c1: ; RV64IMB: # %bb.0: -; RV64IMB-NEXT: addi a0, a0, 1000 +; RV64IMB-NEXT: addiw a0, a0, 1000 ; RV64IMB-NEXT: sh3add a1, a0, a0 ; RV64IMB-NEXT: sh3add a0, a1, a0 ; RV64IMB-NEXT: sext.w a0, a0 @@ -237,7 +237,7 @@ define signext i32 @add_mul_combine_reject_c2(i32 signext %x) { ; ; RV64IMB-LABEL: add_mul_combine_reject_c2: ; RV64IMB: # %bb.0: -; RV64IMB-NEXT: addi a0, a0, 1000 +; RV64IMB-NEXT: addiw a0, a0, 1000 ; RV64IMB-NEXT: sh3add a1, a0, a0 ; RV64IMB-NEXT: sh3add a0, a1, a0 ; RV64IMB-NEXT: sext.w a0, a0 @@ -483,7 +483,7 @@ define i32 @add_mul_combine_reject_g1(i32 %x) { ; ; RV64IMB-LABEL: add_mul_combine_reject_g1: ; RV64IMB: # %bb.0: -; RV64IMB-NEXT: addi a0, a0, 100 +; RV64IMB-NEXT: addiw a0, a0, 100 ; RV64IMB-NEXT: sh3add a1, a0, a0 ; RV64IMB-NEXT: sh3add a0, a1, a0 ; RV64IMB-NEXT: addiw a0, a0, 10 @@ -504,7 +504,7 @@ define signext i32 @add_mul_combine_reject_g2(i32 signext %x) { ; ; RV64IMB-LABEL: add_mul_combine_reject_g2: ; RV64IMB: # %bb.0: -; RV64IMB-NEXT: addi a0, a0, 100 +; RV64IMB-NEXT: addiw a0, a0, 100 ; RV64IMB-NEXT: sh3add a1, a0, a0 ; RV64IMB-NEXT: sh3add a0, a1, a0 ; RV64IMB-NEXT: addiw a0, a0, 10 diff --git a/llvm/test/CodeGen/RISCV/rv64zba.ll b/llvm/test/CodeGen/RISCV/rv64zba.ll index 02e5a4b8e5c144..d89d5885f25352 100644 --- a/llvm/test/CodeGen/RISCV/rv64zba.ll +++ b/llvm/test/CodeGen/RISCV/rv64zba.ll @@ -598,7 +598,7 @@ define i64 @zext_mul12884901888(i32 signext %a) { ; ; RV64ZBA-LABEL: zext_mul12884901888: ; RV64ZBA: # %bb.0: -; RV64ZBA-NEXT: zext.w a0, a0 +; RV64ZBA-NEXT: andi a0, a0, -1 ; RV64ZBA-NEXT: sh1add a0, a0, a0 ; RV64ZBA-NEXT: slli a0, a0, 32 ; RV64ZBA-NEXT: ret @@ -621,7 +621,7 @@ define i64 @zext_mul21474836480(i32 signext %a) { ; ; RV64ZBA-LABEL: zext_mul21474836480: ; RV64ZBA: # %bb.0: -; RV64ZBA-NEXT: zext.w a0, a0 +; RV64ZBA-NEXT: andi a0, a0, -1 ; RV64ZBA-NEXT: sh2add a0, a0, a0 ; RV64ZBA-NEXT: slli a0, a0, 32 ; RV64ZBA-NEXT: ret @@ -644,7 +644,7 @@ define i64 @zext_mul38654705664(i32 signext %a) { ; ; RV64ZBA-LABEL: zext_mul38654705664: ; RV64ZBA: # %bb.0: -; RV64ZBA-NEXT: zext.w a0, a0 +; RV64ZBA-NEXT: andi a0, a0, -1 ; RV64ZBA-NEXT: sh3add a0, a0, a0 ; RV64ZBA-NEXT: slli a0, a0, 32 ; RV64ZBA-NEXT: ret