Skip to content

Commit d5ac1b5

Browse files
authored
[RISCV] Improve hasAllNBitUsers for SLLIW. (#148344)
1 parent 301a1d5 commit d5ac1b5

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
158158
case RISCV::MULW:
159159
case RISCV::REMUW:
160160
case RISCV::REMW:
161-
case RISCV::SLLIW:
162161
case RISCV::SLLW:
163162
case RISCV::SRAIW:
164163
case RISCV::SRAW:
@@ -188,6 +187,7 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
188187
if (Bits >= 32)
189188
break;
190189
return false;
190+
191191
case RISCV::SEXT_B:
192192
case RISCV::PACKH:
193193
if (Bits >= 8)
@@ -228,6 +228,14 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
228228
Worklist.push_back(std::make_pair(UserMI, Bits + ShAmt));
229229
break;
230230
}
231+
case RISCV::SLLIW: {
232+
unsigned ShAmt = UserMI->getOperand(2).getImm();
233+
if (Bits >= 32 - ShAmt)
234+
break;
235+
Worklist.push_back(std::make_pair(UserMI, Bits + ShAmt));
236+
break;
237+
}
238+
231239
case RISCV::ANDI: {
232240
uint64_t Imm = UserMI->getOperand(2).getImm();
233241
if (Bits >= (unsigned)llvm::bit_width(Imm))

llvm/test/CodeGen/RISCV/sextw-removal.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1532,10 +1532,9 @@ define signext i32 @test21(i64 %arg1, i64 %arg2, i64 %arg3) {
15321532
; RV64I-NEXT: andi a0, a0, 1104
15331533
; RV64I-NEXT: or a0, a0, a6
15341534
; RV64I-NEXT: addi a2, a2, 1
1535-
; RV64I-NEXT: add a0, a0, a1
1535+
; RV64I-NEXT: addw a0, a0, a1
15361536
; RV64I-NEXT: bltu a2, a5, .LBB25_1
15371537
; RV64I-NEXT: # %bb.2: # %bb7
1538-
; RV64I-NEXT: sext.w a0, a0
15391538
; RV64I-NEXT: ret
15401539
;
15411540
; RV64ZBB-LABEL: test21:

0 commit comments

Comments
 (0)