Skip to content

Commit 3b8ffb9

Browse files
committed
[RISCV] Add TH_EXT(U) to hasAllNBitUsers in RISCVOptWInstrs.
1 parent 82fe5d0 commit 3b8ffb9

File tree

4 files changed

+13
-7
lines changed

4 files changed

+13
-7
lines changed

llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,14 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
356356
return false;
357357
Worklist.emplace_back(UserMI, Bits);
358358
break;
359+
case RISCV::TH_EXT:
360+
case RISCV::TH_EXTU:
361+
unsigned Msb = UserMI->getOperand(2).getImm();
362+
unsigned Lsb = UserMI->getOperand(3).getImm();
363+
// Behavior of Msb < Lsb is not well documented.
364+
if (Msb >= Lsb && Bits > Msb)
365+
break;
366+
return false;
359367
}
360368
}
361369
}

llvm/test/CodeGen/RISCV/bitextract-mac.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ define i32 @f(i32 %A, i32 %B, i32 %C) {
107107
;
108108
; RV64XTHEADBB-LABEL: f:
109109
; RV64XTHEADBB: # %bb.0: # %entry
110-
; RV64XTHEADBB-NEXT: mulw a0, a1, a0
110+
; RV64XTHEADBB-NEXT: mul a0, a1, a0
111111
; RV64XTHEADBB-NEXT: th.extu a1, a0, 5, 2
112112
; RV64XTHEADBB-NEXT: th.extu a0, a0, 11, 5
113113
; RV64XTHEADBB-NEXT: mul a0, a1, a0
@@ -116,7 +116,7 @@ define i32 @f(i32 %A, i32 %B, i32 %C) {
116116
;
117117
; RV64XTHEAD-LABEL: f:
118118
; RV64XTHEAD: # %bb.0: # %entry
119-
; RV64XTHEAD-NEXT: mulw a0, a1, a0
119+
; RV64XTHEAD-NEXT: mul a0, a1, a0
120120
; RV64XTHEAD-NEXT: th.extu a1, a0, 5, 2
121121
; RV64XTHEAD-NEXT: th.extu a0, a0, 11, 5
122122
; RV64XTHEAD-NEXT: th.mulah a2, a1, a0

llvm/test/CodeGen/RISCV/ctlz-cttz-ctpop.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2438,7 +2438,7 @@ define i16 @test_ctpop_i16(i16 %a) nounwind {
24382438
; RV64XTHEADBB-NEXT: and a0, a0, a2
24392439
; RV64XTHEADBB-NEXT: add a0, a1, a0
24402440
; RV64XTHEADBB-NEXT: srli a1, a0, 4
2441-
; RV64XTHEADBB-NEXT: addw a0, a0, a1
2441+
; RV64XTHEADBB-NEXT: add a0, a0, a1
24422442
; RV64XTHEADBB-NEXT: th.extu a1, a0, 11, 8
24432443
; RV64XTHEADBB-NEXT: andi a0, a0, 15
24442444
; RV64XTHEADBB-NEXT: add a0, a0, a1

llvm/test/CodeGen/RISCV/rv64xtheadbb.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,10 +1244,9 @@ define signext i32 @hasAllNBitUsers_extu(i64 %arg1, i64 %arg2, i64 %arg3) {
12441244
; RV64XTHEADBB-NEXT: # =>This Inner Loop Header: Depth=1
12451245
; RV64XTHEADBB-NEXT: th.extu a0, a0, 16, 15
12461246
; RV64XTHEADBB-NEXT: addi a2, a2, 1
1247-
; RV64XTHEADBB-NEXT: add a0, a0, a1
1247+
; RV64XTHEADBB-NEXT: addw a0, a0, a1
12481248
; RV64XTHEADBB-NEXT: bltu a2, a3, .LBB38_1
12491249
; RV64XTHEADBB-NEXT: # %bb.2: # %bb7
1250-
; RV64XTHEADBB-NEXT: sext.w a0, a0
12511250
; RV64XTHEADBB-NEXT: ret
12521251
entry:
12531252
br label %bb2
@@ -1290,10 +1289,9 @@ define signext i32 @hasAllNBitUsers_ext(i64 %arg1, i64 %arg2, i64 %arg3) {
12901289
; RV64XTHEADBB-NEXT: # =>This Inner Loop Header: Depth=1
12911290
; RV64XTHEADBB-NEXT: th.extu a0, a0, 16, 15
12921291
; RV64XTHEADBB-NEXT: addi a2, a2, 1
1293-
; RV64XTHEADBB-NEXT: add a0, a0, a1
1292+
; RV64XTHEADBB-NEXT: addw a0, a0, a1
12941293
; RV64XTHEADBB-NEXT: bltu a2, a3, .LBB39_1
12951294
; RV64XTHEADBB-NEXT: # %bb.2: # %bb7
1296-
; RV64XTHEADBB-NEXT: sext.w a0, a0
12971295
; RV64XTHEADBB-NEXT: ret
12981296
entry:
12991297
br label %bb2

0 commit comments

Comments
 (0)