Skip to content

Commit e7ebe51

Browse files
committed
[RISCV] Enable rematerialization for scalar loads
1 parent c1d9129 commit e7ebe51

File tree

6 files changed

+8
-12
lines changed

6 files changed

+8
-12
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfo.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ def BGE : BranchCC_rri<0b101, "bge">;
768768
def BLTU : BranchCC_rri<0b110, "bltu">;
769769
def BGEU : BranchCC_rri<0b111, "bgeu">;
770770

771-
let IsSignExtendingOpW = 1, canFoldAsLoad = 1 in {
771+
let IsSignExtendingOpW = 1, canFoldAsLoad = 1, isReMaterializable = 1 in {
772772
def LB : Load_ri<0b000, "lb">, Sched<[WriteLDB, ReadMemBase]>;
773773
def LH : Load_ri<0b001, "lh">, Sched<[WriteLDH, ReadMemBase]>;
774774
def LW : Load_ri<0b010, "lw">, Sched<[WriteLDW, ReadMemBase]>;
@@ -889,7 +889,7 @@ def CSRRCI : CSR_ii<0b111, "csrrci">;
889889
/// RV64I instructions
890890

891891
let Predicates = [IsRV64] in {
892-
let canFoldAsLoad = 1 in {
892+
let canFoldAsLoad = 1, isReMaterializable = 1 in {
893893
def LWU : Load_ri<0b110, "lwu">, Sched<[WriteLDW, ReadMemBase]>;
894894
def LD : Load_ri<0b011, "ld">, Sched<[WriteLDD, ReadMemBase]>;
895895
}

llvm/lib/Target/RISCV/RISCVInstrInfoD.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ defvar DExtsRV64 = [DExt, ZdinxExt];
7171
//===----------------------------------------------------------------------===//
7272

7373
let Predicates = [HasStdExtD] in {
74-
let canFoldAsLoad = 1 in
74+
let canFoldAsLoad = 1, isReMaterializable = 1 in
7575
def FLD : FPLoad_r<0b011, "fld", FPR64, WriteFLD64>;
7676

7777
// Operands for stores are in the order srcreg, base, offset rather than

llvm/lib/Target/RISCV/RISCVInstrInfoF.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ class PseudoFROUND<DAGOperand Ty, ValueType vt, ValueType intvt = XLenVT>
330330
//===----------------------------------------------------------------------===//
331331

332332
let Predicates = [HasStdExtF] in {
333-
let canFoldAsLoad = 1 in
333+
let canFoldAsLoad = 1, isReMaterializable = 1 in
334334
def FLW : FPLoad_r<0b010, "flw", FPR32, WriteFLD32>;
335335

336336
// Operands for stores are in the order srcreg, base, offset rather than

llvm/lib/Target/RISCV/RISCVInstrInfoZfh.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ defvar ZfhminDExts = [ZfhminDExt, ZhinxminZdinxExt, ZhinxminZdinx32Ext];
9090
//===----------------------------------------------------------------------===//
9191

9292
let Predicates = [HasHalfFPLoadStoreMove] in {
93-
let canFoldAsLoad = 1 in
93+
let canFoldAsLoad = 1, isReMaterializable = 1 in
9494
def FLH : FPLoad_r<0b001, "flh", FPR16, WriteFLD16>;
9595

9696
// Operands for stores are in the order srcreg, base, offset rather than

llvm/test/CodeGen/RISCV/remat.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,7 @@ define i32 @remat_ld(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32
238238
; RV32I-NEXT: lw a3, 64(sp)
239239
; RV32I-NEXT: lw a0, 72(sp)
240240
; RV32I-NEXT: lw a1, 76(sp)
241-
; RV32I-NEXT: sw a3, 0(sp) # 4-byte Folded Spill
242241
; RV32I-NEXT: sw a3, 0(a0)
243-
; RV32I-NEXT: sw a2, 4(sp) # 4-byte Folded Spill
244242
; RV32I-NEXT: sw a2, 0(a1)
245243
; RV32I-NEXT: #APP
246244
; RV32I-NEXT: #NO_APP
@@ -250,8 +248,8 @@ define i32 @remat_ld(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32
250248
; RV32I-NEXT: li a0, 0
251249
; RV32I-NEXT: j .LBB1_3
252250
; RV32I-NEXT: .LBB1_2: # %truebb
253-
; RV32I-NEXT: lw a0, 4(sp) # 4-byte Folded Reload
254-
; RV32I-NEXT: lw a1, 0(sp) # 4-byte Folded Reload
251+
; RV32I-NEXT: lw a0, 68(sp)
252+
; RV32I-NEXT: lw a1, 64(sp)
255253
; RV32I-NEXT: add a0, a1, a0
256254
; RV32I-NEXT: .LBB1_3: # %falsebb
257255
; RV32I-NEXT: lw ra, 60(sp) # 4-byte Folded Reload

llvm/test/CodeGen/RISCV/rvv/pr95865.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ define i32 @main(i1 %arg.1, i64 %arg.2, i1 %arg.3, i64 %arg.4, i1 %arg.5, <vscal
4040
; CHECK-NEXT: li t0, 12
4141
; CHECK-NEXT: li s0, 4
4242
; CHECK-NEXT: li t1, 20
43-
; CHECK-NEXT: ld a1, 112(sp)
44-
; CHECK-NEXT: sd a1, 0(sp) # 8-byte Folded Spill
4543
; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
4644
; CHECK-NEXT: vmv.v.i v8, 0
4745
; CHECK-NEXT: andi t3, a4, 1
@@ -142,7 +140,7 @@ define i32 @main(i1 %arg.1, i64 %arg.2, i1 %arg.3, i64 %arg.4, i1 %arg.5, <vscal
142140
; CHECK-NEXT: j .LBB0_11
143141
; CHECK-NEXT: .LBB0_12: # %for.body7.us.19
144142
; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
145-
; CHECK-NEXT: ld a0, 0(sp) # 8-byte Folded Reload
143+
; CHECK-NEXT: ld a0, 112(sp)
146144
; CHECK-NEXT: vmv.s.x v16, a0
147145
; CHECK-NEXT: vmv.v.i v8, 0
148146
; CHECK-NEXT: vsetivli zero, 2, e32, m1, tu, ma

0 commit comments

Comments
 (0)