Skip to content

Commit 0fb7fef

Browse files
committed
fixup! ensure we only check for users of virtual registers. Don't optimize addi with x0.
1 parent d38cdae commit 0fb7fef

File tree

2 files changed

+20
-20
lines changed

2 files changed

+20
-20
lines changed

llvm/lib/Target/RISCV/RISCVFoldMemOffset.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ bool RISCVFoldMemOffset::foldOffset(
103103
Register Reg = Worklist.front();
104104
Worklist.pop();
105105

106+
if (!Reg.isVirtual())
107+
return false;
108+
106109
for (auto &User : MRI.use_nodbg_instructions(Reg)) {
107110
FoldableOffset Offset;
108111

@@ -250,6 +253,10 @@ bool RISCVFoldMemOffset::runOnMachineFunction(MachineFunction &MF) {
250253
if (!MI.getOperand(1).isReg() || !MI.getOperand(2).isImm())
251254
continue;
252255

256+
// Ignore 'li'.
257+
if (MI.getOperand(1).getReg() == RISCV::X0)
258+
continue;
259+
253260
int64_t Offset = MI.getOperand(2).getImm();
254261
assert(isInt<12>(Offset));
255262

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

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,10 +1167,8 @@ declare void @f(ptr)
11671167
define i32 @crash() {
11681168
; RV32I-LABEL: crash:
11691169
; RV32I: # %bb.0: # %entry
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)
1170+
; RV32I-NEXT: lui a0, %hi(g+401)
1171+
; RV32I-NEXT: lbu a0, %lo(g+401)(a0)
11741172
; RV32I-NEXT: seqz a0, a0
11751173
; RV32I-NEXT: sw a0, 0(zero)
11761174
; RV32I-NEXT: li a0, 0
@@ -1179,21 +1177,17 @@ define i32 @crash() {
11791177
; RV32I-MEDIUM-LABEL: crash:
11801178
; RV32I-MEDIUM: # %bb.0: # %entry
11811179
; RV32I-MEDIUM-NEXT: .Lpcrel_hi14:
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)
1180+
; RV32I-MEDIUM-NEXT: auipc a0, %pcrel_hi(g+401)
1181+
; RV32I-MEDIUM-NEXT: lbu a0, %pcrel_lo(.Lpcrel_hi14)(a0)
11861182
; RV32I-MEDIUM-NEXT: seqz a0, a0
11871183
; RV32I-MEDIUM-NEXT: sw a0, 0(zero)
11881184
; RV32I-MEDIUM-NEXT: li a0, 0
11891185
; RV32I-MEDIUM-NEXT: ret
11901186
;
11911187
; RV64I-LABEL: crash:
11921188
; RV64I: # %bb.0: # %entry
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)
1189+
; RV64I-NEXT: lui a0, %hi(g+401)
1190+
; RV64I-NEXT: lbu a0, %lo(g+401)(a0)
11971191
; RV64I-NEXT: seqz a0, a0
11981192
; RV64I-NEXT: sw a0, 0(zero)
11991193
; RV64I-NEXT: li a0, 0
@@ -1202,22 +1196,21 @@ define i32 @crash() {
12021196
; RV64I-MEDIUM-LABEL: crash:
12031197
; RV64I-MEDIUM: # %bb.0: # %entry
12041198
; RV64I-MEDIUM-NEXT: .Lpcrel_hi14:
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)
1199+
; RV64I-MEDIUM-NEXT: auipc a0, %pcrel_hi(g+401)
1200+
; RV64I-MEDIUM-NEXT: lbu a0, %pcrel_lo(.Lpcrel_hi14)(a0)
12091201
; RV64I-MEDIUM-NEXT: seqz a0, a0
12101202
; RV64I-MEDIUM-NEXT: sw a0, 0(zero)
12111203
; RV64I-MEDIUM-NEXT: li a0, 0
12121204
; RV64I-MEDIUM-NEXT: ret
12131205
;
12141206
; RV64I-LARGE-LABEL: crash:
12151207
; RV64I-LARGE: # %bb.0: # %entry
1208+
; RV64I-LARGE-NEXT: li a0, 1
12161209
; RV64I-LARGE-NEXT: .Lpcrel_hi15:
1217-
; RV64I-LARGE-NEXT: auipc a0, %pcrel_hi(.LCPI21_0)
1218-
; RV64I-LARGE-NEXT: ld a0, %pcrel_lo(.Lpcrel_hi15)(a0)
1219-
; RV64I-LARGE-NEXT: add a0, a0, zero
1220-
; RV64I-LARGE-NEXT: lbu a0, 401(a0)
1210+
; RV64I-LARGE-NEXT: auipc a1, %pcrel_hi(.LCPI21_0)
1211+
; RV64I-LARGE-NEXT: ld a1, %pcrel_lo(.Lpcrel_hi15)(a1)
1212+
; RV64I-LARGE-NEXT: add a0, a1, a0
1213+
; RV64I-LARGE-NEXT: lbu a0, 400(a0)
12211214
; RV64I-LARGE-NEXT: seqz a0, a0
12221215
; RV64I-LARGE-NEXT: sw a0, 0(zero)
12231216
; RV64I-LARGE-NEXT: li a0, 0

0 commit comments

Comments
 (0)