Skip to content
This repository was archived by the owner on Feb 5, 2019. It is now read-only.

Commit 562d4e5

Browse files
committed
[AArch64] Return true in enableMultipleCopyHints().
Enable multiple COPY hints to eliminate more COPYs during register allocation. Note that this is something all targets should do, see https://reviews.llvm.org/D38128. Review: Martin Storsjö git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@324720 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 5e12a21 commit 562d4e5

File tree

5 files changed

+28
-28
lines changed

5 files changed

+28
-28
lines changed

lib/Target/AArch64/AArch64RegisterInfo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ class AArch64RegisterInfo final : public AArch64GenRegisterInfo {
6969
const TargetRegisterClass *
7070
getCrossCopyRegClass(const TargetRegisterClass *RC) const override;
7171

72+
bool enableMultipleCopyHints() const override { return true; }
73+
7274
bool requiresRegisterScavenging(const MachineFunction &MF) const override;
7375
bool useFPForScavengingIndex(const MachineFunction &MF) const override;
7476
bool requiresFrameIndexScavenging(const MachineFunction &MF) const override;

test/CodeGen/AArch64/arm64-aapcs.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
; CHECK-LABEL: @test_i128_align
66
define i128 @test_i128_align(i32, i128 %arg, i32 %after) {
77
store i32 %after, i32* @var, align 4
8-
; CHECK: str w4, [{{x[0-9]+}}, :lo12:var]
8+
; CHECK-DAG: str w4, [{{x[0-9]+}}, :lo12:var]
99

1010
ret i128 %arg
11-
; CHECK: mov x0, x2
12-
; CHECK: mov x1, x3
11+
; CHECK-DAG: mov x0, x2
12+
; CHECK-DAG: mov x1, x3
1313
}
1414

1515
; CHECK-LABEL: @test_i64x2_align
1616
define [2 x i64] @test_i64x2_align(i32, [2 x i64] %arg, i32 %after) {
1717
store i32 %after, i32* @var, align 4
18-
; CHECK: str w3, [{{x[0-9]+}}, :lo12:var]
18+
; CHECK-DAG: str w3, [{{x[0-9]+}}, :lo12:var]
1919

2020
ret [2 x i64] %arg
21-
; CHECK: mov x0, x1
21+
; CHECK-DAG: mov x0, x1
2222
; CHECK: mov x1, x2
2323
}
2424

test/CodeGen/AArch64/func-argpassing.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,11 @@ define void @stacked_fpu(float %var0, double %var1, float %var2, float %var3,
164164
define i64 @check_i128_regalign(i32 %val0, i128 %val1, i64 %val2) {
165165
; CHECK-LABEL: check_i128_regalign
166166
store i128 %val1, i128* @var128
167-
; CHECK: add x[[VAR128:[0-9]+]], {{x[0-9]+}}, :lo12:var128
167+
; CHECK-DAG: add x[[VAR128:[0-9]+]], {{x[0-9]+}}, :lo12:var128
168168
; CHECK-DAG: stp x2, x3, [x[[VAR128]]]
169169

170170
ret i64 %val2
171-
; CHECK: mov x0, x4
171+
; CHECK-DAG: mov x0, x4
172172
}
173173

174174
define void @check_i128_stackalign(i32 %val0, i32 %val1, i32 %val2, i32 %val3,

test/CodeGen/AArch64/swifterror.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ define float @caller(i8* %error_ref) {
4040
; CHECK-APPLE: mov [[ID:x[0-9]+]], x0
4141
; CHECK-APPLE: mov x21, xzr
4242
; CHECK-APPLE: bl {{.*}}foo
43+
; CHECK-APPLE: mov x0, x21
4344
; CHECK-APPLE: cbnz x21
4445
; Access part of the error object and save it to error_ref
45-
; CHECK-APPLE: ldrb [[CODE:w[0-9]+]], [x21, #8]
46+
; CHECK-APPLE: ldrb [[CODE:w[0-9]+]], [x0, #8]
4647
; CHECK-APPLE: strb [[CODE]], [{{.*}}[[ID]]]
47-
; CHECK-APPLE: mov x0, x21
4848
; CHECK-APPLE: bl {{.*}}free
4949

5050
; CHECK-O0-LABEL: caller:
@@ -263,11 +263,11 @@ define float @caller3(i8* %error_ref) {
263263
; CHECK-APPLE: mov [[ID:x[0-9]+]], x0
264264
; CHECK-APPLE: mov x21, xzr
265265
; CHECK-APPLE: bl {{.*}}foo_sret
266+
; CHECK-APPLE: mov x0, x21
266267
; CHECK-APPLE: cbnz x21
267268
; Access part of the error object and save it to error_ref
268-
; CHECK-APPLE: ldrb [[CODE:w[0-9]+]], [x21, #8]
269+
; CHECK-APPLE: ldrb [[CODE:w[0-9]+]], [x0, #8]
269270
; CHECK-APPLE: strb [[CODE]], [{{.*}}[[ID]]]
270-
; CHECK-APPLE: mov x0, x21
271271
; CHECK-APPLE: bl {{.*}}free
272272

273273
; CHECK-O0-LABEL: caller3:
@@ -357,11 +357,11 @@ define float @caller4(i8* %error_ref) {
357357

358358
; CHECK-APPLE: mov x21, xzr
359359
; CHECK-APPLE: bl {{.*}}foo_vararg
360+
; CHECK-APPLE: mov x0, x21
360361
; CHECK-APPLE: cbnz x21
361362
; Access part of the error object and save it to error_ref
362-
; CHECK-APPLE: ldrb [[CODE:w[0-9]+]], [x21, #8]
363+
; CHECK-APPLE: ldrb [[CODE:w[0-9]+]], [x0, #8]
363364
; CHECK-APPLE: strb [[CODE]], [{{.*}}[[ID]]]
364-
; CHECK-APPLE: mov x0, x21
365365
; CHECK-APPLE: bl {{.*}}free
366366
entry:
367367
%error_ptr_ref = alloca swifterror %swift_error*

test/CodeGen/AArch64/win64_vararg.ll

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -161,25 +161,25 @@ attributes #6 = { "no-frame-pointer-elim"="true" }
161161
; CHECK: add x8, x8, #15
162162
; CHECK: mov x9, sp
163163
; CHECK: and x8, x8, #0x1fffffff0
164-
; CHECK: sub x20, x9, x8
164+
; CHECK: sub [[REG:x[0-9]+]], x9, x8
165165
; CHECK: mov x19, x1
166-
; CHECK: mov x23, sp
166+
; CHECK: mov [[REG2:x[0-9]+]], sp
167167
; CHECK: stp x6, x7, [x29, #48]
168168
; CHECK: stp x4, x5, [x29, #32]
169169
; CHECK: stp x2, x3, [x29, #16]
170-
; CHECK: mov sp, x20
171-
; CHECK: ldur x21, [x29, #-40]
172-
; CHECK: sxtw x22, w0
170+
; CHECK: mov sp, [[REG]]
171+
; CHECK: ldur [[REG3:x[0-9]+]], [x29, #-40]
172+
; CHECK: sxtw [[REG4:x[0-9]+]], w0
173173
; CHECK: bl __local_stdio_printf_options
174174
; CHECK: ldr x8, [x0]
175-
; CHECK: mov x1, x20
176-
; CHECK: mov x2, x22
175+
; CHECK: mov x1, [[REG]]
176+
; CHECK: mov x2, [[REG4]]
177177
; CHECK: mov x3, x19
178178
; CHECK: orr x0, x8, #0x2
179179
; CHECK: mov x4, xzr
180-
; CHECK: mov x5, x21
180+
; CHECK: mov x5, [[REG3]]
181181
; CHECK: bl __stdio_common_vsprintf
182-
; CHECK: mov sp, x23
182+
; CHECK: mov sp, [[REG2]]
183183
; CHECK: sub sp, x29, #48
184184
; CHECK: ldp x29, x30, [sp, #48]
185185
; CHECK: ldp x20, x19, [sp, #32]
@@ -255,17 +255,15 @@ define i32 @snprintf(i8*, i64, i8*, ...) local_unnamed_addr #5 {
255255

256256
; CHECK-LABEL: fixed_params
257257
; CHECK: sub sp, sp, #32
258-
; CHECK: mov w8, w3
259-
; CHECK: mov w9, w2
260-
; CHECK: mov w10, w1
258+
; CHECK-DAG: mov w6, w3
259+
; CHECK-DAG: mov [[REG1:w[0-9]+]], w2
260+
; CHECK: mov w2, w1
261261
; CHECK: str w4, [sp]
262262
; CHECK: fmov x1, d0
263263
; CHECK: fmov x3, d1
264264
; CHECK: fmov x5, d2
265265
; CHECK: fmov x7, d3
266-
; CHECK: mov w2, w10
267-
; CHECK: mov w4, w9
268-
; CHECK: mov w6, w8
266+
; CHECK: mov w4, [[REG1]]
269267
; CHECK: str x30, [sp, #16]
270268
; CHECK: str d4, [sp, #8]
271269
; CHECK: bl varargs

0 commit comments

Comments
 (0)