Skip to content

Commit 76cda82

Browse files
cuviperJonPsson
andcommitted
[SystemZ] Use LA instead of AGR in eliminateFrameIndex(). (llvm#80)
Since AGR clobbers CC it should not be used here. Fixes https://bugs.llvm.org/show_bug.cgi?id=47736. Review: Ulrich Weigand Differential Revision: https://reviews.llvm.org/D89034 (cherry picked from commit d851495) Co-authored-by: Jonas Paulsson <paulsson@linux.vnet.ibm.com>
1 parent 20516a6 commit 76cda82

File tree

3 files changed

+17
-17
lines changed

3 files changed

+17
-17
lines changed

llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,8 @@ SystemZRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
321321
// Load the high offset into the scratch register and use it as
322322
// an index.
323323
TII->loadImmediate(MBB, MI, ScratchReg, HighOffset);
324-
BuildMI(MBB, MI, DL, TII->get(SystemZ::AGR),ScratchReg)
325-
.addReg(ScratchReg, RegState::Kill).addReg(BasePtr);
324+
BuildMI(MBB, MI, DL, TII->get(SystemZ::LA), ScratchReg)
325+
.addReg(BasePtr, RegState::Kill).addImm(0).addReg(ScratchReg);
326326
}
327327

328328
// Use the scratch register as the base. It then dies here.

llvm/test/CodeGen/SystemZ/frame-14.ll

+13-13
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,13 @@ define void @f3() {
8585
define void @f4() {
8686
; CHECK-NOFP-LABEL: f4:
8787
; CHECK-NOFP: llilh %r1, 8
88-
; CHECK-NOFP: agr %r1, %r15
88+
; CHECK-NOFP: la %r1, 0(%r1,%r15)
8989
; CHECK-NOFP: mvi 0(%r1), 42
9090
; CHECK-NOFP: br %r14
9191
;
9292
; CHECK-FP-LABEL: f4:
9393
; CHECK-FP: llilh %r1, 8
94-
; CHECK-FP: agr %r1, %r11
94+
; CHECK-FP: la %r1, 0(%r1,%r11)
9595
; CHECK-FP: mvi 0(%r1), 42
9696
; CHECK-FP: br %r14
9797
%region1 = alloca [524104 x i8], align 8
@@ -108,13 +108,13 @@ define void @f4() {
108108
define void @f5() {
109109
; CHECK-NOFP-LABEL: f5:
110110
; CHECK-NOFP: llilh %r1, 8
111-
; CHECK-NOFP: agr %r1, %r15
111+
; CHECK-NOFP: la %r1, 0(%r1,%r15)
112112
; CHECK-NOFP: mvi 4095(%r1), 42
113113
; CHECK-NOFP: br %r14
114114
;
115115
; CHECK-FP-LABEL: f5:
116116
; CHECK-FP: llilh %r1, 8
117-
; CHECK-FP: agr %r1, %r11
117+
; CHECK-FP: la %r1, 0(%r1,%r11)
118118
; CHECK-FP: mvi 4095(%r1), 42
119119
; CHECK-FP: br %r14
120120
%region1 = alloca [524104 x i8], align 8
@@ -130,13 +130,13 @@ define void @f5() {
130130
define void @f6() {
131131
; CHECK-NOFP-LABEL: f6:
132132
; CHECK-NOFP: llilh %r1, 8
133-
; CHECK-NOFP: agr %r1, %r15
133+
; CHECK-NOFP: la %r1, 0(%r1,%r15)
134134
; CHECK-NOFP: mviy 4096(%r1), 42
135135
; CHECK-NOFP: br %r14
136136
;
137137
; CHECK-FP-LABEL: f6:
138138
; CHECK-FP: llilh %r1, 8
139-
; CHECK-FP: agr %r1, %r11
139+
; CHECK-FP: la %r1, 0(%r1,%r11)
140140
; CHECK-FP: mviy 4096(%r1), 42
141141
; CHECK-FP: br %r14
142142
%region1 = alloca [524104 x i8], align 8
@@ -155,13 +155,13 @@ define void @f6() {
155155
define void @f7() {
156156
; CHECK-NOFP-LABEL: f7:
157157
; CHECK-NOFP: llilh %r1, 23
158-
; CHECK-NOFP: agr %r1, %r15
158+
; CHECK-NOFP: la %r1, 0(%r1,%r15)
159159
; CHECK-NOFP: mviy 65535(%r1), 42
160160
; CHECK-NOFP: br %r14
161161
;
162162
; CHECK-FP-LABEL: f7:
163163
; CHECK-FP: llilh %r1, 23
164-
; CHECK-FP: agr %r1, %r11
164+
; CHECK-FP: la %r1, 0(%r1,%r11)
165165
; CHECK-FP: mviy 65535(%r1), 42
166166
; CHECK-FP: br %r14
167167
%region1 = alloca [1048400 x i8], align 8
@@ -178,13 +178,13 @@ define void @f7() {
178178
define void @f8() {
179179
; CHECK-NOFP-LABEL: f8:
180180
; CHECK-NOFP: llilh %r1, 24
181-
; CHECK-NOFP: agr %r1, %r15
181+
; CHECK-NOFP: la %r1, 0(%r1,%r15)
182182
; CHECK-NOFP: mvi 7(%r1), 42
183183
; CHECK-NOFP: br %r14
184184
;
185185
; CHECK-FP-LABEL: f8:
186186
; CHECK-FP: llilh %r1, 24
187-
; CHECK-FP: agr %r1, %r11
187+
; CHECK-FP: la %r1, 0(%r1,%r11)
188188
; CHECK-FP: mvi 7(%r1), 42
189189
; CHECK-FP: br %r14
190190
%region1 = alloca [1048408 x i8], align 8
@@ -233,15 +233,15 @@ define void @f10(i32 *%vptr) {
233233
; CHECK-NOFP-LABEL: f10:
234234
; CHECK-NOFP: stg [[REGISTER:%r[1-9][0-4]?]], [[OFFSET:160|168]](%r15)
235235
; CHECK-NOFP: llilh [[REGISTER]], 8
236-
; CHECK-NOFP: agr [[REGISTER]], %r15
236+
; CHECK-NOFP: la [[REGISTER]], 0([[REGISTER]],%r15)
237237
; CHECK-NOFP: mvi 0([[REGISTER]]), 42
238238
; CHECK-NOFP: lg [[REGISTER]], [[OFFSET]](%r15)
239239
; CHECK-NOFP: br %r14
240240
;
241241
; CHECK-FP-LABEL: f10:
242242
; CHECK-FP: stg [[REGISTER:%r[1-9][0-4]?]], [[OFFSET:160|168]](%r11)
243243
; CHECK-FP: llilh [[REGISTER]], 8
244-
; CHECK-FP: agr [[REGISTER]], %r11
244+
; CHECK-FP: la [[REGISTER]], 0([[REGISTER]],%r11)
245245
; CHECK-FP: mvi 0([[REGISTER]]), 42
246246
; CHECK-FP: lg [[REGISTER]], [[OFFSET]](%r11)
247247
; CHECK-FP: br %r14
@@ -273,7 +273,7 @@ define void @f11(i32 *%vptr) {
273273
; CHECK-NOFP: stmg %r6, %r15,
274274
; CHECK-NOFP: stg [[REGISTER:%r[1-9][0-4]?]], [[OFFSET:160|168]](%r15)
275275
; CHECK-NOFP: llilh [[REGISTER]], 8
276-
; CHECK-NOFP: agr [[REGISTER]], %r15
276+
; CHECK-NOFP: la [[REGISTER]], 0([[REGISTER]],%r15)
277277
; CHECK-NOFP: mvi 0([[REGISTER]]), 42
278278
; CHECK-NOFP: lg [[REGISTER]], [[OFFSET]](%r15)
279279
; CHECK-NOFP: lmg %r6, %r15,

llvm/test/CodeGen/SystemZ/frame-16.ll

+2-2
Original file line numberDiff line numberDiff line change
@@ -311,13 +311,13 @@ define void @f11(i32 *%vptr, i8 %byte) {
311311
define void @f12(i8 %byte, i64 %index) {
312312
; CHECK-NOFP-LABEL: f12:
313313
; CHECK-NOFP: llilh %r1, 8
314-
; CHECK-NOFP: agr %r1, %r15
314+
; CHECK-NOFP: la %r1, 0(%r1,%r15)
315315
; CHECK-NOFP: stc %r2, 0(%r3,%r1)
316316
; CHECK-NOFP: br %r14
317317
;
318318
; CHECK-FP-LABEL: f12:
319319
; CHECK-FP: llilh %r1, 8
320-
; CHECK-FP: agr %r1, %r11
320+
; CHECK-FP: la %r1, 0(%r1,%r11)
321321
; CHECK-FP: stc %r2, 0(%r3,%r1)
322322
; CHECK-FP: br %r14
323323
%region1 = alloca [524104 x i8], align 8

0 commit comments

Comments
 (0)