[llvm] c03bf2c - [RISCV] Improve hasAllNBitUsers for users of SLLI.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 3 18:23:02 PDT 2024
Author: Craig Topper
Date: 2024-08-03T18:19:40-07:00
New Revision: c03bf2c41bd3b89a8ed455b7f48cf95cf131656c
URL: https://github.com/llvm/llvm-project/commit/c03bf2c41bd3b89a8ed455b7f48cf95cf131656c
DIFF: https://github.com/llvm/llvm-project/commit/c03bf2c41bd3b89a8ed455b7f48cf95cf131656c.diff
LOG: [RISCV] Improve hasAllNBitUsers for users of SLLI.
We can increase the number of Bits passes to the users by adding
the shift amount.
Added:
Modified:
llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp
llvm/test/CodeGen/RISCV/imm.ll
llvm/test/CodeGen/RISCV/rv64-legal-i32/imm.ll
llvm/test/CodeGen/RISCV/rvv/fixed-vector-i8-index-cornercase.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp b/llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp
index 788d8f9cfc853..49be866448f2e 100644
--- a/llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp
+++ b/llvm/lib/Target/RISCV/RISCVOptWInstrs.cpp
@@ -215,11 +215,13 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
// these overwrite higher input bits, otherwise the lower word of output
// depends only on the lower word of input. So check their uses read W.
- case RISCV::SLLI:
- if (Bits >= (ST.getXLen() - UserMI->getOperand(2).getImm()))
+ case RISCV::SLLI: {
+ unsigned ShAmt = UserMI->getOperand(2).getImm();
+ if (Bits >= (ST.getXLen() - ShAmt))
break;
- Worklist.push_back(std::make_pair(UserMI, Bits));
+ 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/imm.ll b/llvm/test/CodeGen/RISCV/imm.ll
index 5fd25ab60db01..70bcb066fe4f0 100644
--- a/llvm/test/CodeGen/RISCV/imm.ll
+++ b/llvm/test/CodeGen/RISCV/imm.ll
@@ -896,7 +896,7 @@ define i64 @imm64_8() nounwind {
; RV64-NOPOOL-LABEL: imm64_8:
; RV64-NOPOOL: # %bb.0:
; RV64-NOPOOL-NEXT: lui a0, 583
-; RV64-NOPOOL-NEXT: addiw a0, a0, -1875
+; RV64-NOPOOL-NEXT: addi a0, a0, -1875
; RV64-NOPOOL-NEXT: slli a0, a0, 14
; RV64-NOPOOL-NEXT: addi a0, a0, -947
; RV64-NOPOOL-NEXT: slli a0, a0, 12
@@ -925,7 +925,7 @@ define i64 @imm64_8() nounwind {
; RV64IZBB-LABEL: imm64_8:
; RV64IZBB: # %bb.0:
; RV64IZBB-NEXT: lui a0, 583
-; RV64IZBB-NEXT: addiw a0, a0, -1875
+; RV64IZBB-NEXT: addi a0, a0, -1875
; RV64IZBB-NEXT: slli a0, a0, 14
; RV64IZBB-NEXT: addi a0, a0, -947
; RV64IZBB-NEXT: slli a0, a0, 12
@@ -937,7 +937,7 @@ define i64 @imm64_8() nounwind {
; RV64IZBS-LABEL: imm64_8:
; RV64IZBS: # %bb.0:
; RV64IZBS-NEXT: lui a0, 583
-; RV64IZBS-NEXT: addiw a0, a0, -1875
+; RV64IZBS-NEXT: addi a0, a0, -1875
; RV64IZBS-NEXT: slli a0, a0, 14
; RV64IZBS-NEXT: addi a0, a0, -947
; RV64IZBS-NEXT: slli a0, a0, 12
@@ -949,7 +949,7 @@ define i64 @imm64_8() nounwind {
; RV64IXTHEADBB-LABEL: imm64_8:
; RV64IXTHEADBB: # %bb.0:
; RV64IXTHEADBB-NEXT: lui a0, 583
-; RV64IXTHEADBB-NEXT: addiw a0, a0, -1875
+; RV64IXTHEADBB-NEXT: addi a0, a0, -1875
; RV64IXTHEADBB-NEXT: slli a0, a0, 14
; RV64IXTHEADBB-NEXT: addi a0, a0, -947
; RV64IXTHEADBB-NEXT: slli a0, a0, 12
@@ -969,7 +969,7 @@ define i64 @imm64_8() nounwind {
; RV64-REMAT-LABEL: imm64_8:
; RV64-REMAT: # %bb.0:
; RV64-REMAT-NEXT: lui a0, 583
-; RV64-REMAT-NEXT: addiw a0, a0, -1875
+; RV64-REMAT-NEXT: addi a0, a0, -1875
; RV64-REMAT-NEXT: slli a0, a0, 14
; RV64-REMAT-NEXT: addi a0, a0, -947
; RV64-REMAT-NEXT: slli a0, a0, 12
diff --git a/llvm/test/CodeGen/RISCV/rv64-legal-i32/imm.ll b/llvm/test/CodeGen/RISCV/rv64-legal-i32/imm.ll
index 561686374a9b9..5b8f7fe03b669 100644
--- a/llvm/test/CodeGen/RISCV/rv64-legal-i32/imm.ll
+++ b/llvm/test/CodeGen/RISCV/rv64-legal-i32/imm.ll
@@ -582,7 +582,7 @@ define i64 @imm64_8() nounwind {
; RV64-NOPOOL-LABEL: imm64_8:
; RV64-NOPOOL: # %bb.0:
; RV64-NOPOOL-NEXT: lui a0, 583
-; RV64-NOPOOL-NEXT: addiw a0, a0, -1875
+; RV64-NOPOOL-NEXT: addi a0, a0, -1875
; RV64-NOPOOL-NEXT: slli a0, a0, 14
; RV64-NOPOOL-NEXT: addi a0, a0, -947
; RV64-NOPOOL-NEXT: slli a0, a0, 12
@@ -611,7 +611,7 @@ define i64 @imm64_8() nounwind {
; RV64IZBB-LABEL: imm64_8:
; RV64IZBB: # %bb.0:
; RV64IZBB-NEXT: lui a0, 583
-; RV64IZBB-NEXT: addiw a0, a0, -1875
+; RV64IZBB-NEXT: addi a0, a0, -1875
; RV64IZBB-NEXT: slli a0, a0, 14
; RV64IZBB-NEXT: addi a0, a0, -947
; RV64IZBB-NEXT: slli a0, a0, 12
@@ -623,7 +623,7 @@ define i64 @imm64_8() nounwind {
; RV64IZBS-LABEL: imm64_8:
; RV64IZBS: # %bb.0:
; RV64IZBS-NEXT: lui a0, 583
-; RV64IZBS-NEXT: addiw a0, a0, -1875
+; RV64IZBS-NEXT: addi a0, a0, -1875
; RV64IZBS-NEXT: slli a0, a0, 14
; RV64IZBS-NEXT: addi a0, a0, -947
; RV64IZBS-NEXT: slli a0, a0, 12
@@ -635,7 +635,7 @@ define i64 @imm64_8() nounwind {
; RV64IXTHEADBB-LABEL: imm64_8:
; RV64IXTHEADBB: # %bb.0:
; RV64IXTHEADBB-NEXT: lui a0, 583
-; RV64IXTHEADBB-NEXT: addiw a0, a0, -1875
+; RV64IXTHEADBB-NEXT: addi a0, a0, -1875
; RV64IXTHEADBB-NEXT: slli a0, a0, 14
; RV64IXTHEADBB-NEXT: addi a0, a0, -947
; RV64IXTHEADBB-NEXT: slli a0, a0, 12
diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vector-i8-index-cornercase.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vector-i8-index-cornercase.ll
index 6b8d778bc3242..309ca1f964287 100644
--- a/llvm/test/CodeGen/RISCV/rvv/fixed-vector-i8-index-cornercase.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vector-i8-index-cornercase.ll
@@ -140,7 +140,7 @@ define <512 x i8> @two_source(<512 x i8> %a, <512 x i8> %b) {
; CHECK-NEXT: vsetivli zero, 8, e64, m1, ta, ma
; CHECK-NEXT: vmv.v.i v24, 0
; CHECK-NEXT: lui a2, 1047552
-; CHECK-NEXT: addiw a2, a2, 1
+; CHECK-NEXT: addi a2, a2, 1
; CHECK-NEXT: slli a2, a2, 23
; CHECK-NEXT: addi a2, a2, 1
; CHECK-NEXT: slli a2, a2, 18
More information about the llvm-commits
mailing list