Skip to content

Commit 189900e

Browse files
committed
X86: Stop assigning register costs for longer encodings.
This stops reporting CostPerUse 1 for `R8`-`R15` and `XMM8`-`XMM31`. This was previously done because instruction encoding require a REX prefix when using them resulting in longer instruction encodings. I found that this regresses the quality of the register allocation as the costs impose an ordering on eviction candidates. I also feel that there is a bit of an impedance mismatch as the actual costs occure when encoding instructions using those registers, but the order of VReg assignments is not primarily ordered by number of Defs+Uses. I did extensive measurements with the llvm-test-suite wiht SPEC2006 + SPEC2017 included, internal services showed similar patterns. Generally there are a log of improvements but also a lot of regression. But on average the allocation quality seems to improve at a small code size regression. Results for measuring static and dynamic instruction counts: Dynamic Counts (scaled by execution frequency) / Optimization Remarks: Spills+FoldedSpills -5.6% Reloads+FoldedReloads -4.2% Copies -0.1% Static / LLVM Statistics: regalloc.NumSpills mean -1.6%, geomean -2.8% regalloc.NumReloads mean -1.7%, geomean -3.1% size..text mean +0.4%, geomean +0.4% Static / LLVM Statistics: mean -2.2%, geomean -3.1%) regalloc.NumSpills mean -2.6%, geomean -3.9%) regalloc.NumReloads mean +0.6%, geomean +0.6%) size..text Static / LLVM Statistics: regalloc.NumSpills mean -3.0% regalloc.NumReloads mean -3.3% size..text mean +0.3%, geomean +0.3% Differential Revision: https://reviews.llvm.org/D133902
1 parent dbca7b4 commit 189900e

File tree

243 files changed

+38411
-38903
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

243 files changed

+38411
-38903
lines changed

llvm/lib/Target/X86/X86RegisterInfo.td

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ def CH : X86Reg<"ch", 5>;
6161
def BH : X86Reg<"bh", 7>;
6262

6363
// X86-64 only, requires REX.
64-
let CostPerUse = [1] in {
6564
def SIL : X86Reg<"sil", 6>;
6665
def DIL : X86Reg<"dil", 7>;
6766
def BPL : X86Reg<"bpl", 5>;
@@ -74,7 +73,6 @@ def R12B : X86Reg<"r12b", 12>;
7473
def R13B : X86Reg<"r13b", 13>;
7574
def R14B : X86Reg<"r14b", 14>;
7675
def R15B : X86Reg<"r15b", 15>;
77-
}
7876

7977
let isArtificial = 1 in {
8078
// High byte of the low 16 bits of the super-register:
@@ -126,8 +124,7 @@ def SP : X86Reg<"sp", 4, [SPL,SPH]>;
126124
def IP : X86Reg<"ip", 0>;
127125

128126
// X86-64 only, requires REX.
129-
let SubRegIndices = [sub_8bit, sub_8bit_hi_phony], CostPerUse = [1],
130-
CoveredBySubRegs = 1 in {
127+
let SubRegIndices = [sub_8bit, sub_8bit_hi_phony], CoveredBySubRegs = 1 in {
131128
def R8W : X86Reg<"r8w", 8, [R8B,R8BH]>;
132129
def R9W : X86Reg<"r9w", 9, [R9B,R9BH]>;
133130
def R10W : X86Reg<"r10w", 10, [R10B,R10BH]>;
@@ -152,8 +149,7 @@ def EIP : X86Reg<"eip", 0, [IP, HIP]>, DwarfRegNum<[-2, 8, 8]>;
152149
}
153150

154151
// X86-64 only, requires REX
155-
let SubRegIndices = [sub_16bit, sub_16bit_hi], CostPerUse = [1],
156-
CoveredBySubRegs = 1 in {
152+
let SubRegIndices = [sub_16bit, sub_16bit_hi], CoveredBySubRegs = 1 in {
157153
def R8D : X86Reg<"r8d", 8, [R8W,R8WH]>;
158154
def R9D : X86Reg<"r9d", 9, [R9W,R9WH]>;
159155
def R10D : X86Reg<"r10d", 10, [R10W,R10WH]>;
@@ -176,7 +172,6 @@ def RBP : X86Reg<"rbp", 5, [EBP]>, DwarfRegNum<[6, -2, -2]>;
176172
def RSP : X86Reg<"rsp", 4, [ESP]>, DwarfRegNum<[7, -2, -2]>;
177173

178174
// These also require REX.
179-
let CostPerUse = [1] in {
180175
def R8 : X86Reg<"r8", 8, [R8D]>, DwarfRegNum<[ 8, -2, -2]>;
181176
def R9 : X86Reg<"r9", 9, [R9D]>, DwarfRegNum<[ 9, -2, -2]>;
182177
def R10 : X86Reg<"r10", 10, [R10D]>, DwarfRegNum<[10, -2, -2]>;
@@ -186,7 +181,7 @@ def R13 : X86Reg<"r13", 13, [R13D]>, DwarfRegNum<[13, -2, -2]>;
186181
def R14 : X86Reg<"r14", 14, [R14D]>, DwarfRegNum<[14, -2, -2]>;
187182
def R15 : X86Reg<"r15", 15, [R15D]>, DwarfRegNum<[15, -2, -2]>;
188183
def RIP : X86Reg<"rip", 0, [EIP]>, DwarfRegNum<[16, -2, -2]>;
189-
}}
184+
}
190185

191186
// MMX Registers. These are actually aliased to ST0 .. ST7
192187
def MM0 : X86Reg<"mm0", 0>, DwarfRegNum<[41, 29, 29]>;
@@ -219,7 +214,6 @@ def XMM6: X86Reg<"xmm6", 6>, DwarfRegNum<[23, 27, 27]>;
219214
def XMM7: X86Reg<"xmm7", 7>, DwarfRegNum<[24, 28, 28]>;
220215

221216
// X86-64 only
222-
let CostPerUse = [1] in {
223217
def XMM8: X86Reg<"xmm8", 8>, DwarfRegNum<[25, -2, -2]>;
224218
def XMM9: X86Reg<"xmm9", 9>, DwarfRegNum<[26, -2, -2]>;
225219
def XMM10: X86Reg<"xmm10", 10>, DwarfRegNum<[27, -2, -2]>;
@@ -246,8 +240,6 @@ def XMM29: X86Reg<"xmm29", 29>, DwarfRegNum<[80, -2, -2]>;
246240
def XMM30: X86Reg<"xmm30", 30>, DwarfRegNum<[81, -2, -2]>;
247241
def XMM31: X86Reg<"xmm31", 31>, DwarfRegNum<[82, -2, -2]>;
248242

249-
} // CostPerUse
250-
251243
// YMM0-15 registers, used by AVX instructions and
252244
// YMM16-31 registers, used by AVX-512 instructions.
253245
let SubRegIndices = [sub_xmm] in {

llvm/test/CodeGen/X86/2007-01-13-StackPtrIndex.ll

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,43 +14,43 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
1414
; CHECK-NEXT: .cfi_offset %rbp, -16
1515
; CHECK-NEXT: movq %rsp, %rbp
1616
; CHECK-NEXT: .cfi_def_cfa_register %rbp
17-
; CHECK-NEXT: movslq (%rdi), %rdi
18-
; CHECK-NEXT: movslq (%rsi), %r8
19-
; CHECK-NEXT: movslq (%rdx), %r10
20-
; CHECK-NEXT: movl (%rcx), %esi
17+
; CHECK-NEXT: movslq (%rdi), %r8
18+
; CHECK-NEXT: movslq (%rsi), %rax
19+
; CHECK-NEXT: movslq (%rdx), %rsi
20+
; CHECK-NEXT: movl (%rcx), %edi
2121
; CHECK-NEXT: movq %rsp, %rcx
22-
; CHECK-NEXT: subl %edi, %r8d
23-
; CHECK-NEXT: movslq %r8d, %rdx
22+
; CHECK-NEXT: subl %r8d, %eax
23+
; CHECK-NEXT: movslq %eax, %rdx
2424
; CHECK-NEXT: js .LBB0_1
2525
; CHECK-NEXT: # %bb.11: # %b63
2626
; CHECK-NEXT: testq %rdx, %rdx
2727
; CHECK-NEXT: js .LBB0_14
2828
; CHECK-NEXT: # %bb.12:
29-
; CHECK-NEXT: xorl %edi, %edi
29+
; CHECK-NEXT: xorl %r8d, %r8d
3030
; CHECK-NEXT: .p2align 4, 0x90
3131
; CHECK-NEXT: .LBB0_13: # %a25b
3232
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
33-
; CHECK-NEXT: testb %dil, %dil
33+
; CHECK-NEXT: testb %r8b, %r8b
3434
; CHECK-NEXT: je .LBB0_13
3535
; CHECK-NEXT: .LBB0_14: # %b85
36-
; CHECK-NEXT: movb $1, %al
37-
; CHECK-NEXT: testb %al, %al
36+
; CHECK-NEXT: movb $1, %r8b
37+
; CHECK-NEXT: testb %r8b, %r8b
3838
; CHECK-NEXT: jne .LBB0_1
3939
; CHECK-NEXT: # %bb.15:
40-
; CHECK-NEXT: xorl %edi, %edi
40+
; CHECK-NEXT: xorl %r8d, %r8d
4141
; CHECK-NEXT: .p2align 4, 0x90
4242
; CHECK-NEXT: .LBB0_16: # %a25b140
4343
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
44-
; CHECK-NEXT: testb %dil, %dil
44+
; CHECK-NEXT: testb %r8b, %r8b
4545
; CHECK-NEXT: je .LBB0_16
4646
; CHECK-NEXT: .LBB0_1: # %a29b
47-
; CHECK-NEXT: cmpl %r10d, %esi
47+
; CHECK-NEXT: cmpl %esi, %edi
4848
; CHECK-NEXT: js .LBB0_10
4949
; CHECK-NEXT: # %bb.2: # %b158
5050
; CHECK-NEXT: movslq (%r9), %rsi
5151
; CHECK-NEXT: xorl %edi, %edi
5252
; CHECK-NEXT: xorps %xmm0, %xmm0
53-
; CHECK-NEXT: movb $1, %r9b
53+
; CHECK-NEXT: movb $1, %r8b
5454
; CHECK-NEXT: jmp .LBB0_3
5555
; CHECK-NEXT: .p2align 4, 0x90
5656
; CHECK-NEXT: .LBB0_9: # %b1606
@@ -73,7 +73,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
7373
; CHECK-NEXT: # Child Loop BB0_33 Depth 3
7474
; CHECK-NEXT: # Child Loop BB0_34 Depth 2
7575
; CHECK-NEXT: # Child Loop BB0_36 Depth 2
76-
; CHECK-NEXT: testl %r8d, %r8d
76+
; CHECK-NEXT: testl %eax, %eax
7777
; CHECK-NEXT: js .LBB0_4
7878
; CHECK-NEXT: # %bb.17: # %b179
7979
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
@@ -87,7 +87,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
8787
; CHECK-NEXT: je .LBB0_37
8888
; CHECK-NEXT: .LBB0_18: # %b188
8989
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
90-
; CHECK-NEXT: testb %r9b, %r9b
90+
; CHECK-NEXT: testb %r8b, %r8b
9191
; CHECK-NEXT: jne .LBB0_4
9292
; CHECK-NEXT: .p2align 4, 0x90
9393
; CHECK-NEXT: .LBB0_19: # %a30b294
@@ -97,23 +97,23 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
9797
; CHECK-NEXT: je .LBB0_19
9898
; CHECK-NEXT: .LBB0_4: # %a33b
9999
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
100-
; CHECK-NEXT: movl %esi, %r10d
101-
; CHECK-NEXT: orl %r8d, %r10d
100+
; CHECK-NEXT: movl %esi, %r9d
101+
; CHECK-NEXT: orl %eax, %r9d
102102
; CHECK-NEXT: jns .LBB0_20
103103
; CHECK-NEXT: .LBB0_5: # %a50b
104104
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
105-
; CHECK-NEXT: shrl $31, %r10d
106-
; CHECK-NEXT: movl %r8d, %eax
107-
; CHECK-NEXT: orl %esi, %eax
105+
; CHECK-NEXT: shrl $31, %r9d
106+
; CHECK-NEXT: movl %eax, %r10d
107+
; CHECK-NEXT: orl %esi, %r10d
108108
; CHECK-NEXT: jns .LBB0_26
109109
; CHECK-NEXT: .LBB0_6: # %a57b
110110
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
111-
; CHECK-NEXT: shrl $31, %eax
112-
; CHECK-NEXT: testb %r10b, %r10b
111+
; CHECK-NEXT: shrl $31, %r10d
112+
; CHECK-NEXT: testb %r9b, %r9b
113113
; CHECK-NEXT: je .LBB0_30
114114
; CHECK-NEXT: .LBB0_7: # %a66b
115115
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
116-
; CHECK-NEXT: testb %al, %al
116+
; CHECK-NEXT: testb %r10b, %r10b
117117
; CHECK-NEXT: jne .LBB0_8
118118
; CHECK-NEXT: .p2align 4, 0x90
119119
; CHECK-NEXT: .LBB0_34: # %a74b
@@ -127,7 +127,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
127127
; CHECK-NEXT: jne .LBB0_34
128128
; CHECK-NEXT: .LBB0_8: # %a93b
129129
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
130-
; CHECK-NEXT: testl %r8d, %r8d
130+
; CHECK-NEXT: testl %eax, %eax
131131
; CHECK-NEXT: js .LBB0_9
132132
; CHECK-NEXT: .p2align 4, 0x90
133133
; CHECK-NEXT: .LBB0_36: # %a97b
@@ -183,7 +183,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
183183
; CHECK-NEXT: je .LBB0_38
184184
; CHECK-NEXT: .LBB0_27: # %b879
185185
; CHECK-NEXT: # in Loop: Header=BB0_26 Depth=2
186-
; CHECK-NEXT: testb %r9b, %r9b
186+
; CHECK-NEXT: testb %r8b, %r8b
187187
; CHECK-NEXT: jne .LBB0_28
188188
; CHECK-NEXT: .p2align 4, 0x90
189189
; CHECK-NEXT: .LBB0_29: # %a53b1019

llvm/test/CodeGen/X86/2007-08-09-IllegalX86-64Asm.ll

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,26 @@ define ptr @ubyte_divmod(ptr %a, ptr %b) {
2828
; CHECK-NEXT: .cfi_def_cfa_offset 24
2929
; CHECK-NEXT: pushq %r14
3030
; CHECK-NEXT: .cfi_def_cfa_offset 32
31-
; CHECK-NEXT: pushq %rbx
31+
; CHECK-NEXT: pushq %r12
3232
; CHECK-NEXT: .cfi_def_cfa_offset 40
33-
; CHECK-NEXT: subq $40, %rsp
33+
; CHECK-NEXT: pushq %rbx
34+
; CHECK-NEXT: .cfi_def_cfa_offset 48
35+
; CHECK-NEXT: subq $32, %rsp
3436
; CHECK-NEXT: .cfi_def_cfa_offset 80
35-
; CHECK-NEXT: .cfi_offset %rbx, -40
37+
; CHECK-NEXT: .cfi_offset %rbx, -48
38+
; CHECK-NEXT: .cfi_offset %r12, -40
3639
; CHECK-NEXT: .cfi_offset %r14, -32
3740
; CHECK-NEXT: .cfi_offset %r15, -24
3841
; CHECK-NEXT: .cfi_offset %rbp, -16
39-
; CHECK-NEXT: movq %rsi, %r14
40-
; CHECK-NEXT: movq %rdi, %rbx
42+
; CHECK-NEXT: movq %rsi, %rbx
43+
; CHECK-NEXT: movq %rdi, %r14
4144
; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rsi
4245
; CHECK-NEXT: callq __ubyte_convert_to_ctype
4346
; CHECK-NEXT: testl %eax, %eax
4447
; CHECK-NEXT: js LBB0_4
4548
; CHECK-NEXT: ## %bb.1: ## %cond_next.i
4649
; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rsi
47-
; CHECK-NEXT: movq %r14, %rdi
50+
; CHECK-NEXT: movq %rbx, %rdi
4851
; CHECK-NEXT: callq __ubyte_convert_to_ctype
4952
; CHECK-NEXT: movl %eax, %ecx
5053
; CHECK-NEXT: sarl $31, %ecx
@@ -66,18 +69,18 @@ define ptr @ubyte_divmod(ptr %a, ptr %b) {
6669
; CHECK-NEXT: cmpl $-1, %eax
6770
; CHECK-NEXT: je LBB0_3
6871
; CHECK-NEXT: LBB0_6: ## %bb35
69-
; CHECK-NEXT: movq _PyUFunc_API@GOTPCREL(%rip), %rbp
70-
; CHECK-NEXT: movq (%rbp), %rax
72+
; CHECK-NEXT: movq _PyUFunc_API@GOTPCREL(%rip), %r14
73+
; CHECK-NEXT: movq (%r14), %rax
7174
; CHECK-NEXT: callq *216(%rax)
7275
; CHECK-NEXT: movzbl {{[0-9]+}}(%rsp), %edx
7376
; CHECK-NEXT: testb %dl, %dl
7477
; CHECK-NEXT: je LBB0_11
7578
; CHECK-NEXT: ## %bb.7: ## %cond_false.i
76-
; CHECK-NEXT: movzbl {{[0-9]+}}(%rsp), %ebx
77-
; CHECK-NEXT: movzbl %bl, %ecx
79+
; CHECK-NEXT: movzbl {{[0-9]+}}(%rsp), %esi
80+
; CHECK-NEXT: movzbl %sil, %ecx
7881
; CHECK-NEXT: movl %ecx, %eax
7982
; CHECK-NEXT: divb %dl
80-
; CHECK-NEXT: movl %eax, %r14d
83+
; CHECK-NEXT: movl %eax, %r15d
8184
; CHECK-NEXT: testb %cl, %cl
8285
; CHECK-NEXT: jne LBB0_12
8386
; CHECK-NEXT: jmp LBB0_14
@@ -91,26 +94,25 @@ define ptr @ubyte_divmod(ptr %a, ptr %b) {
9194
; CHECK-NEXT: movq 80(%rax), %rax
9295
; CHECK-NEXT: LBB0_10: ## %bb4
9396
; CHECK-NEXT: movq 96(%rax), %rax
94-
; CHECK-NEXT: movq %rbx, %rdi
95-
; CHECK-NEXT: movq %r14, %rsi
97+
; CHECK-NEXT: movq %r14, %rdi
98+
; CHECK-NEXT: movq %rbx, %rsi
9699
; CHECK-NEXT: callq *40(%rax)
97100
; CHECK-NEXT: jmp LBB0_28
98101
; CHECK-NEXT: LBB0_11: ## %cond_true.i
99102
; CHECK-NEXT: movl $4, %edi
100103
; CHECK-NEXT: callq _feraiseexcept
101104
; CHECK-NEXT: movzbl {{[0-9]+}}(%rsp), %edx
102-
; CHECK-NEXT: movzbl {{[0-9]+}}(%rsp), %ebx
103-
; CHECK-NEXT: xorl %r14d, %r14d
104-
; CHECK-NEXT: testb %bl, %bl
105+
; CHECK-NEXT: movzbl {{[0-9]+}}(%rsp), %esi
106+
; CHECK-NEXT: xorl %r15d, %r15d
107+
; CHECK-NEXT: testb %sil, %sil
105108
; CHECK-NEXT: je LBB0_14
106109
; CHECK-NEXT: LBB0_12: ## %cond_false.i
107110
; CHECK-NEXT: testb %dl, %dl
108111
; CHECK-NEXT: je LBB0_14
109112
; CHECK-NEXT: ## %bb.13: ## %cond_next17.i
110-
; CHECK-NEXT: movzbl %bl, %eax
113+
; CHECK-NEXT: movzbl %sil, %eax
111114
; CHECK-NEXT: divb %dl
112-
; CHECK-NEXT: movzbl %ah, %eax
113-
; CHECK-NEXT: movl %eax, %r15d
115+
; CHECK-NEXT: movzbl %ah, %ebx
114116
; CHECK-NEXT: jmp LBB0_18
115117
; CHECK-NEXT: LBB0_14: ## %cond_true.i200
116118
; CHECK-NEXT: testb %dl, %dl
@@ -119,15 +121,15 @@ define ptr @ubyte_divmod(ptr %a, ptr %b) {
119121
; CHECK-NEXT: movl $4, %edi
120122
; CHECK-NEXT: callq _feraiseexcept
121123
; CHECK-NEXT: LBB0_17: ## %ubyte_ctype_remainder.exit
122-
; CHECK-NEXT: xorl %r15d, %r15d
124+
; CHECK-NEXT: xorl %ebx, %ebx
123125
; CHECK-NEXT: LBB0_18: ## %ubyte_ctype_remainder.exit
124-
; CHECK-NEXT: movq (%rbp), %rax
126+
; CHECK-NEXT: movq (%r14), %rax
125127
; CHECK-NEXT: callq *224(%rax)
126128
; CHECK-NEXT: testl %eax, %eax
127129
; CHECK-NEXT: je LBB0_21
128130
; CHECK-NEXT: ## %bb.19: ## %cond_true61
129-
; CHECK-NEXT: movl %eax, %ebx
130-
; CHECK-NEXT: movq (%rbp), %rax
131+
; CHECK-NEXT: movl %eax, %ebp
132+
; CHECK-NEXT: movq (%r14), %rax
131133
; CHECK-NEXT: movq _.str5@GOTPCREL(%rip), %rdi
132134
; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rsi
133135
; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rdx
@@ -137,11 +139,11 @@ define ptr @ubyte_divmod(ptr %a, ptr %b) {
137139
; CHECK-NEXT: js LBB0_27
138140
; CHECK-NEXT: ## %bb.20: ## %cond_next73
139141
; CHECK-NEXT: movl $1, {{[0-9]+}}(%rsp)
140-
; CHECK-NEXT: movq (%rbp), %rax
142+
; CHECK-NEXT: movq (%r14), %rax
141143
; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rsi
142144
; CHECK-NEXT: movl {{[0-9]+}}(%rsp), %edi
143145
; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rcx
144-
; CHECK-NEXT: movl %ebx, %edx
146+
; CHECK-NEXT: movl %ebp, %edx
145147
; CHECK-NEXT: callq *232(%rax)
146148
; CHECK-NEXT: testl %eax, %eax
147149
; CHECK-NEXT: jne LBB0_27
@@ -151,40 +153,41 @@ define ptr @ubyte_divmod(ptr %a, ptr %b) {
151153
; CHECK-NEXT: testq %rax, %rax
152154
; CHECK-NEXT: je LBB0_27
153155
; CHECK-NEXT: ## %bb.22: ## %cond_next97
154-
; CHECK-NEXT: movq %rax, %rbx
155-
; CHECK-NEXT: movq _PyArray_API@GOTPCREL(%rip), %rbp
156-
; CHECK-NEXT: movq (%rbp), %rax
156+
; CHECK-NEXT: movq %rax, %r14
157+
; CHECK-NEXT: movq _PyArray_API@GOTPCREL(%rip), %r12
158+
; CHECK-NEXT: movq (%r12), %rax
157159
; CHECK-NEXT: movq 200(%rax), %rdi
158160
; CHECK-NEXT: xorl %esi, %esi
159161
; CHECK-NEXT: callq *304(%rdi)
160162
; CHECK-NEXT: testq %rax, %rax
161163
; CHECK-NEXT: je LBB0_25
162164
; CHECK-NEXT: ## %bb.23: ## %cond_next135
163-
; CHECK-NEXT: movb %r14b, 16(%rax)
164-
; CHECK-NEXT: movq %rax, 24(%rbx)
165-
; CHECK-NEXT: movq (%rbp), %rax
165+
; CHECK-NEXT: movb %r15b, 16(%rax)
166+
; CHECK-NEXT: movq %rax, 24(%r14)
167+
; CHECK-NEXT: movq (%r12), %rax
166168
; CHECK-NEXT: movq 200(%rax), %rdi
167169
; CHECK-NEXT: xorl %esi, %esi
168170
; CHECK-NEXT: callq *304(%rdi)
169171
; CHECK-NEXT: testq %rax, %rax
170172
; CHECK-NEXT: je LBB0_25
171173
; CHECK-NEXT: ## %bb.24: ## %cond_next182
172-
; CHECK-NEXT: movb %r15b, 16(%rax)
173-
; CHECK-NEXT: movq %rax, 32(%rbx)
174-
; CHECK-NEXT: movq %rbx, %rax
174+
; CHECK-NEXT: movb %bl, 16(%rax)
175+
; CHECK-NEXT: movq %rax, 32(%r14)
176+
; CHECK-NEXT: movq %r14, %rax
175177
; CHECK-NEXT: jmp LBB0_28
176178
; CHECK-NEXT: LBB0_25: ## %cond_true113
177-
; CHECK-NEXT: decq (%rbx)
179+
; CHECK-NEXT: decq (%r14)
178180
; CHECK-NEXT: jne LBB0_27
179181
; CHECK-NEXT: ## %bb.26: ## %cond_true126
180-
; CHECK-NEXT: movq 8(%rbx), %rax
181-
; CHECK-NEXT: movq %rbx, %rdi
182+
; CHECK-NEXT: movq 8(%r14), %rax
183+
; CHECK-NEXT: movq %r14, %rdi
182184
; CHECK-NEXT: callq *48(%rax)
183185
; CHECK-NEXT: LBB0_27: ## %UnifiedReturnBlock
184186
; CHECK-NEXT: xorl %eax, %eax
185187
; CHECK-NEXT: LBB0_28: ## %UnifiedReturnBlock
186-
; CHECK-NEXT: addq $40, %rsp
188+
; CHECK-NEXT: addq $32, %rsp
187189
; CHECK-NEXT: popq %rbx
190+
; CHECK-NEXT: popq %r12
188191
; CHECK-NEXT: popq %r14
189192
; CHECK-NEXT: popq %r15
190193
; CHECK-NEXT: popq %rbp

0 commit comments

Comments
 (0)