Skip to content

Commit 283c9f3

Browse files
committed
fixup! Address review comments.
1 parent 19ad1bc commit 283c9f3

File tree

3 files changed

+22
-28
lines changed

3 files changed

+22
-28
lines changed

llvm/lib/Target/RISCV/RISCVFoldMemOffset.cpp

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,15 @@ class FoldableOffset {
6262

6363
FoldableOffset &operator+=(int64_t RHS) {
6464
if (!Offset)
65-
Offset = RHS;
66-
else
67-
Offset = (uint64_t)*Offset + (uint64_t)RHS;
65+
Offset = 0;
66+
Offset = (uint64_t)*Offset + (uint64_t)RHS;
6867
return *this;
6968
}
7069

7170
FoldableOffset &operator-=(int64_t RHS) {
7271
if (!Offset)
73-
Offset = -(uint64_t)RHS;
74-
else
75-
Offset = (uint64_t)*Offset - (uint64_t)RHS;
72+
Offset = 0;
73+
Offset = (uint64_t)*Offset - (uint64_t)RHS;
7674
return *this;
7775
}
7876

@@ -245,9 +243,7 @@ bool RISCVFoldMemOffset::runOnMachineFunction(MachineFunction &MF) {
245243
if (MF.getFunction().hasOptSize())
246244
return false;
247245

248-
const MachineRegisterInfo &MRI = MF.getRegInfo();
249-
const RISCVSubtarget &ST = MF.getSubtarget<RISCVSubtarget>();
250-
const RISCVInstrInfo &TII = *ST.getInstrInfo();
246+
MachineRegisterInfo &MRI = MF.getRegInfo();
251247

252248
bool MadeChange = false;
253249
for (MachineBasicBlock &MBB : MF) {
@@ -277,10 +273,7 @@ bool RISCVFoldMemOffset::runOnMachineFunction(MachineFunction &MF) {
277273
for (auto [MemMI, NewOffset] : FoldableInstrs)
278274
MemMI->getOperand(2).setImm(NewOffset);
279275

280-
// Replace ADDI with a copy.
281-
BuildMI(MBB, MI, MI.getDebugLoc(), TII.get(RISCV::COPY))
282-
.add(MI.getOperand(0))
283-
.add(MI.getOperand(1));
276+
MRI.replaceRegWith(MI.getOperand(0).getReg(), MI.getOperand(1).getReg());
284277
MI.eraseFromParent();
285278
}
286279
}

llvm/lib/Target/RISCV/RISCVMergeBaseOffset.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -238,13 +238,6 @@ bool RISCVMergeBaseOffsetOpt::foldLargeOffset(MachineInstr &Hi,
238238
foldOffset(Hi, Lo, TailAdd, Offset);
239239
OffsetTail.eraseFromParent();
240240
return true;
241-
} else if (OffsetTail.getOpcode() == RISCV::COPY &&
242-
OffsetTail.getOperand(1).getReg() == RISCV::X0) {
243-
// Fold mem offset can leave copies from X0 in place of an ADDI and they
244-
// might not have been eliminated yet.
245-
foldOffset(Hi, Lo, TailAdd, 0);
246-
OffsetTail.eraseFromParent();
247-
return true;
248241
}
249242
return false;
250243
}

llvm/test/CodeGen/RISCV/fold-addi-loadstore.ll

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,8 +1167,10 @@ declare void @f(ptr)
11671167
define i32 @crash() {
11681168
; RV32I-LABEL: crash:
11691169
; RV32I: # %bb.0: # %entry
1170-
; RV32I-NEXT: lui a0, %hi(g+401)
1171-
; RV32I-NEXT: lbu a0, %lo(g+401)(a0)
1170+
; RV32I-NEXT: lui a0, %hi(g)
1171+
; RV32I-NEXT: addi a0, a0, %lo(g)
1172+
; RV32I-NEXT: add a0, a0, zero
1173+
; RV32I-NEXT: lbu a0, 401(a0)
11721174
; RV32I-NEXT: seqz a0, a0
11731175
; RV32I-NEXT: sw a0, 0(zero)
11741176
; RV32I-NEXT: li a0, 0
@@ -1177,17 +1179,21 @@ define i32 @crash() {
11771179
; RV32I-MEDIUM-LABEL: crash:
11781180
; RV32I-MEDIUM: # %bb.0: # %entry
11791181
; RV32I-MEDIUM-NEXT: .Lpcrel_hi14:
1180-
; RV32I-MEDIUM-NEXT: auipc a0, %pcrel_hi(g+401)
1181-
; RV32I-MEDIUM-NEXT: lbu a0, %pcrel_lo(.Lpcrel_hi14)(a0)
1182+
; RV32I-MEDIUM-NEXT: auipc a0, %pcrel_hi(g)
1183+
; RV32I-MEDIUM-NEXT: addi a0, a0, %pcrel_lo(.Lpcrel_hi14)
1184+
; RV32I-MEDIUM-NEXT: add a0, a0, zero
1185+
; RV32I-MEDIUM-NEXT: lbu a0, 401(a0)
11821186
; RV32I-MEDIUM-NEXT: seqz a0, a0
11831187
; RV32I-MEDIUM-NEXT: sw a0, 0(zero)
11841188
; RV32I-MEDIUM-NEXT: li a0, 0
11851189
; RV32I-MEDIUM-NEXT: ret
11861190
;
11871191
; RV64I-LABEL: crash:
11881192
; RV64I: # %bb.0: # %entry
1189-
; RV64I-NEXT: lui a0, %hi(g+401)
1190-
; RV64I-NEXT: lbu a0, %lo(g+401)(a0)
1193+
; RV64I-NEXT: lui a0, %hi(g)
1194+
; RV64I-NEXT: addi a0, a0, %lo(g)
1195+
; RV64I-NEXT: add a0, a0, zero
1196+
; RV64I-NEXT: lbu a0, 401(a0)
11911197
; RV64I-NEXT: seqz a0, a0
11921198
; RV64I-NEXT: sw a0, 0(zero)
11931199
; RV64I-NEXT: li a0, 0
@@ -1196,8 +1202,10 @@ define i32 @crash() {
11961202
; RV64I-MEDIUM-LABEL: crash:
11971203
; RV64I-MEDIUM: # %bb.0: # %entry
11981204
; RV64I-MEDIUM-NEXT: .Lpcrel_hi14:
1199-
; RV64I-MEDIUM-NEXT: auipc a0, %pcrel_hi(g+401)
1200-
; RV64I-MEDIUM-NEXT: lbu a0, %pcrel_lo(.Lpcrel_hi14)(a0)
1205+
; RV64I-MEDIUM-NEXT: auipc a0, %pcrel_hi(g)
1206+
; RV64I-MEDIUM-NEXT: addi a0, a0, %pcrel_lo(.Lpcrel_hi14)
1207+
; RV64I-MEDIUM-NEXT: add a0, a0, zero
1208+
; RV64I-MEDIUM-NEXT: lbu a0, 401(a0)
12011209
; RV64I-MEDIUM-NEXT: seqz a0, a0
12021210
; RV64I-MEDIUM-NEXT: sw a0, 0(zero)
12031211
; RV64I-MEDIUM-NEXT: li a0, 0

0 commit comments

Comments
 (0)