From 0e9855c1f26b491b8d2f9ff7f08cf828f21e646d Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Wed, 28 Dec 2022 23:38:12 -0800 Subject: [PATCH] [RISCV] Add SH1ADD/SH2ADD/SH3ADD to RISCVDAGToDAGISel::hasAllNBitUsers. --- llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp | 9 ++++++--- llvm/test/CodeGen/RISCV/addimm-mulimm.ll | 8 ++++---- llvm/test/CodeGen/RISCV/rv64zba.ll | 6 +++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp index de8672b..f2392ab 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 3437305..4454af8 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 02e5a4b..d89d588 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 -- 2.7.4