[llvm] [RISCV] Improve hasAllNBitUsers for SLLIW. (PR #148344)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 12 00:04:09 PDT 2025
https://github.com/topperc created https://github.com/llvm/llvm-project/pull/148344
None
>From d7d62295b2f1a272c626269f073caa7a870306d9 Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Fri, 11 Jul 2025 23:57:42 -0700
Subject: [PATCH] [RISCV] IMprove hasAllNBitUsers for SLLIW.
---
llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp | 10 +++++++++-
llvm/test/CodeGen/RISCV/sextw-removal.ll | 3 +--
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp b/llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp
index d257f56cf4129..d8570d5d2b211 100644
--- a/llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp
+++ b/llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp
@@ -158,7 +158,6 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
case RISCV::MULW:
case RISCV::REMUW:
case RISCV::REMW:
- case RISCV::SLLIW:
case RISCV::SLLW:
case RISCV::SRAIW:
case RISCV::SRAW:
@@ -188,6 +187,7 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
if (Bits >= 32)
break;
return false;
+
case RISCV::SEXT_B:
case RISCV::PACKH:
if (Bits >= 8)
@@ -228,6 +228,14 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
Worklist.push_back(std::make_pair(UserMI, Bits + ShAmt));
break;
}
+ case RISCV::SLLIW: {
+ unsigned ShAmt = UserMI->getOperand(2).getImm();
+ if (Bits >= 32 - ShAmt)
+ break;
+ Worklist.push_back(std::make_pair(UserMI, Bits + ShAmt));
+ break;
+ }
+
case RISCV::ANDI: {
uint64_t Imm = UserMI->getOperand(2).getImm();
if (Bits >= (unsigned)llvm::bit_width(Imm))
diff --git a/llvm/test/CodeGen/RISCV/sextw-removal.ll b/llvm/test/CodeGen/RISCV/sextw-removal.ll
index 9c8230572b926..b128abb6b5bdd 100644
--- a/llvm/test/CodeGen/RISCV/sextw-removal.ll
+++ b/llvm/test/CodeGen/RISCV/sextw-removal.ll
@@ -1532,10 +1532,9 @@ define signext i32 @test21(i64 %arg1, i64 %arg2, i64 %arg3) {
; RV64I-NEXT: andi a0, a0, 1104
; RV64I-NEXT: or a0, a0, a6
; RV64I-NEXT: addi a2, a2, 1
-; RV64I-NEXT: add a0, a0, a1
+; RV64I-NEXT: addw a0, a0, a1
; RV64I-NEXT: bltu a2, a5, .LBB25_1
; RV64I-NEXT: # %bb.2: # %bb7
-; RV64I-NEXT: sext.w a0, a0
; RV64I-NEXT: ret
;
; RV64ZBB-LABEL: test21:
More information about the llvm-commits
mailing list