Skip to content

Commit c03bf2c

Browse files
committed
[RISCV] Improve hasAllNBitUsers for users of SLLI.
We can increase the number of Bits passes to the users by adding the shift amount.
1 parent 766f68d commit c03bf2c

File tree

4 files changed

+15
-13
lines changed

4 files changed

+15
-13
lines changed

llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,13 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
215215

216216
// these overwrite higher input bits, otherwise the lower word of output
217217
// depends only on the lower word of input. So check their uses read W.
218-
case RISCV::SLLI:
219-
if (Bits >= (ST.getXLen() - UserMI->getOperand(2).getImm()))
218+
case RISCV::SLLI: {
219+
unsigned ShAmt = UserMI->getOperand(2).getImm();
220+
if (Bits >= (ST.getXLen() - ShAmt))
220221
break;
221-
Worklist.push_back(std::make_pair(UserMI, Bits));
222+
Worklist.push_back(std::make_pair(UserMI, Bits + ShAmt));
222223
break;
224+
}
223225
case RISCV::ANDI: {
224226
uint64_t Imm = UserMI->getOperand(2).getImm();
225227
if (Bits >= (unsigned)llvm::bit_width(Imm))

llvm/test/CodeGen/RISCV/imm.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,7 @@ define i64 @imm64_8() nounwind {
896896
; RV64-NOPOOL-LABEL: imm64_8:
897897
; RV64-NOPOOL: # %bb.0:
898898
; RV64-NOPOOL-NEXT: lui a0, 583
899-
; RV64-NOPOOL-NEXT: addiw a0, a0, -1875
899+
; RV64-NOPOOL-NEXT: addi a0, a0, -1875
900900
; RV64-NOPOOL-NEXT: slli a0, a0, 14
901901
; RV64-NOPOOL-NEXT: addi a0, a0, -947
902902
; RV64-NOPOOL-NEXT: slli a0, a0, 12
@@ -925,7 +925,7 @@ define i64 @imm64_8() nounwind {
925925
; RV64IZBB-LABEL: imm64_8:
926926
; RV64IZBB: # %bb.0:
927927
; RV64IZBB-NEXT: lui a0, 583
928-
; RV64IZBB-NEXT: addiw a0, a0, -1875
928+
; RV64IZBB-NEXT: addi a0, a0, -1875
929929
; RV64IZBB-NEXT: slli a0, a0, 14
930930
; RV64IZBB-NEXT: addi a0, a0, -947
931931
; RV64IZBB-NEXT: slli a0, a0, 12
@@ -937,7 +937,7 @@ define i64 @imm64_8() nounwind {
937937
; RV64IZBS-LABEL: imm64_8:
938938
; RV64IZBS: # %bb.0:
939939
; RV64IZBS-NEXT: lui a0, 583
940-
; RV64IZBS-NEXT: addiw a0, a0, -1875
940+
; RV64IZBS-NEXT: addi a0, a0, -1875
941941
; RV64IZBS-NEXT: slli a0, a0, 14
942942
; RV64IZBS-NEXT: addi a0, a0, -947
943943
; RV64IZBS-NEXT: slli a0, a0, 12
@@ -949,7 +949,7 @@ define i64 @imm64_8() nounwind {
949949
; RV64IXTHEADBB-LABEL: imm64_8:
950950
; RV64IXTHEADBB: # %bb.0:
951951
; RV64IXTHEADBB-NEXT: lui a0, 583
952-
; RV64IXTHEADBB-NEXT: addiw a0, a0, -1875
952+
; RV64IXTHEADBB-NEXT: addi a0, a0, -1875
953953
; RV64IXTHEADBB-NEXT: slli a0, a0, 14
954954
; RV64IXTHEADBB-NEXT: addi a0, a0, -947
955955
; RV64IXTHEADBB-NEXT: slli a0, a0, 12
@@ -969,7 +969,7 @@ define i64 @imm64_8() nounwind {
969969
; RV64-REMAT-LABEL: imm64_8:
970970
; RV64-REMAT: # %bb.0:
971971
; RV64-REMAT-NEXT: lui a0, 583
972-
; RV64-REMAT-NEXT: addiw a0, a0, -1875
972+
; RV64-REMAT-NEXT: addi a0, a0, -1875
973973
; RV64-REMAT-NEXT: slli a0, a0, 14
974974
; RV64-REMAT-NEXT: addi a0, a0, -947
975975
; RV64-REMAT-NEXT: slli a0, a0, 12

llvm/test/CodeGen/RISCV/rv64-legal-i32/imm.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@ define i64 @imm64_8() nounwind {
582582
; RV64-NOPOOL-LABEL: imm64_8:
583583
; RV64-NOPOOL: # %bb.0:
584584
; RV64-NOPOOL-NEXT: lui a0, 583
585-
; RV64-NOPOOL-NEXT: addiw a0, a0, -1875
585+
; RV64-NOPOOL-NEXT: addi a0, a0, -1875
586586
; RV64-NOPOOL-NEXT: slli a0, a0, 14
587587
; RV64-NOPOOL-NEXT: addi a0, a0, -947
588588
; RV64-NOPOOL-NEXT: slli a0, a0, 12
@@ -611,7 +611,7 @@ define i64 @imm64_8() nounwind {
611611
; RV64IZBB-LABEL: imm64_8:
612612
; RV64IZBB: # %bb.0:
613613
; RV64IZBB-NEXT: lui a0, 583
614-
; RV64IZBB-NEXT: addiw a0, a0, -1875
614+
; RV64IZBB-NEXT: addi a0, a0, -1875
615615
; RV64IZBB-NEXT: slli a0, a0, 14
616616
; RV64IZBB-NEXT: addi a0, a0, -947
617617
; RV64IZBB-NEXT: slli a0, a0, 12
@@ -623,7 +623,7 @@ define i64 @imm64_8() nounwind {
623623
; RV64IZBS-LABEL: imm64_8:
624624
; RV64IZBS: # %bb.0:
625625
; RV64IZBS-NEXT: lui a0, 583
626-
; RV64IZBS-NEXT: addiw a0, a0, -1875
626+
; RV64IZBS-NEXT: addi a0, a0, -1875
627627
; RV64IZBS-NEXT: slli a0, a0, 14
628628
; RV64IZBS-NEXT: addi a0, a0, -947
629629
; RV64IZBS-NEXT: slli a0, a0, 12
@@ -635,7 +635,7 @@ define i64 @imm64_8() nounwind {
635635
; RV64IXTHEADBB-LABEL: imm64_8:
636636
; RV64IXTHEADBB: # %bb.0:
637637
; RV64IXTHEADBB-NEXT: lui a0, 583
638-
; RV64IXTHEADBB-NEXT: addiw a0, a0, -1875
638+
; RV64IXTHEADBB-NEXT: addi a0, a0, -1875
639639
; RV64IXTHEADBB-NEXT: slli a0, a0, 14
640640
; RV64IXTHEADBB-NEXT: addi a0, a0, -947
641641
; RV64IXTHEADBB-NEXT: slli a0, a0, 12

llvm/test/CodeGen/RISCV/rvv/fixed-vector-i8-index-cornercase.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ define <512 x i8> @two_source(<512 x i8> %a, <512 x i8> %b) {
140140
; CHECK-NEXT: vsetivli zero, 8, e64, m1, ta, ma
141141
; CHECK-NEXT: vmv.v.i v24, 0
142142
; CHECK-NEXT: lui a2, 1047552
143-
; CHECK-NEXT: addiw a2, a2, 1
143+
; CHECK-NEXT: addi a2, a2, 1
144144
; CHECK-NEXT: slli a2, a2, 23
145145
; CHECK-NEXT: addi a2, a2, 1
146146
; CHECK-NEXT: slli a2, a2, 18

0 commit comments

Comments
 (0)