Skip to content

Commit 6fde043

Browse files
committed
[MachineSink] Disable if there are any irreducible cycles
This is an alternative to D120330, which disables MachineSink for functions with irreducible cycles entirely. This avoids both the correctness problem, and ensures we don't perform non-profitable sinks into cycles. At the same time, it may also disable profitable sinks in the same function. This can be made more precise by using MachineCycleInfo in the future. Fixes #53990. Differential Revision: https://reviews.llvm.org/D120800
1 parent eb27da7 commit 6fde043

File tree

5 files changed

+87
-85
lines changed

5 files changed

+87
-85
lines changed

llvm/lib/CodeGen/MachineSink.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818
#include "llvm/ADT/DenseSet.h"
1919
#include "llvm/ADT/MapVector.h"
2020
#include "llvm/ADT/PointerIntPair.h"
21+
#include "llvm/ADT/PostOrderIterator.h"
2122
#include "llvm/ADT/SetVector.h"
2223
#include "llvm/ADT/SmallSet.h"
2324
#include "llvm/ADT/SmallVector.h"
2425
#include "llvm/ADT/SparseBitVector.h"
2526
#include "llvm/ADT/Statistic.h"
2627
#include "llvm/Analysis/AliasAnalysis.h"
28+
#include "llvm/Analysis/CFG.h"
2729
#include "llvm/CodeGen/MachineBasicBlock.h"
2830
#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
2931
#include "llvm/CodeGen/MachineBranchProbabilityInfo.h"
@@ -429,6 +431,16 @@ bool MachineSinking::runOnMachineFunction(MachineFunction &MF) {
429431
AA = &getAnalysis<AAResultsWrapperPass>().getAAResults();
430432
RegClassInfo.runOnMachineFunction(MF);
431433

434+
// MachineSink currently uses MachineLoopInfo, which only recognizes natural
435+
// loops. As such, we could sink instructions into irreducible cycles, which
436+
// would be non-profitable.
437+
// WARNING: The current implementation of hasStoreBetween() is incorrect for
438+
// sinking into irreducible cycles (PR53990), this bailout is currently
439+
// necessary for correctness, not just profitability.
440+
ReversePostOrderTraversal<MachineBasicBlock *> RPOT(&*MF.begin());
441+
if (containsIrreducibleCFG<MachineBasicBlock *>(RPOT, *LI))
442+
return false;
443+
432444
bool EverMadeChange = false;
433445

434446
while (true) {

llvm/test/CodeGen/X86/callbr-asm-branch-folding.ll

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ define dso_local void @n(i32* %o, i32 %p, i32 %u) nounwind {
2424
; CHECK-NEXT: movq %r15, %rdi
2525
; CHECK-NEXT: callq l
2626
; CHECK-NEXT: testl %eax, %eax
27-
; CHECK-NEXT: jne .LBB0_10
27+
; CHECK-NEXT: jne .LBB0_9
2828
; CHECK-NEXT: # %bb.1: # %if.end
2929
; CHECK-NEXT: movl %ebx, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
3030
; CHECK-NEXT: cmpl $0, e(%rip)
@@ -44,21 +44,19 @@ define dso_local void @n(i32* %o, i32 %p, i32 %u) nounwind {
4444
; CHECK-NEXT: callq i
4545
; CHECK-NEXT: movl %eax, %ebp
4646
; CHECK-NEXT: orl %r14d, %ebp
47-
; CHECK-NEXT: testl %r13d, %r13d
48-
; CHECK-NEXT: je .LBB0_6
49-
; CHECK-NEXT: # %bb.5:
5047
; CHECK-NEXT: andl $4, %ebx
51-
; CHECK-NEXT: jmp .LBB0_3
52-
; CHECK-NEXT: .LBB0_6: # %if.end12
48+
; CHECK-NEXT: testl %r13d, %r13d
49+
; CHECK-NEXT: jne .LBB0_3
50+
; CHECK-NEXT: # %bb.5: # %if.end12
5351
; CHECK-NEXT: testl %ebp, %ebp
54-
; CHECK-NEXT: je .LBB0_9
55-
; CHECK-NEXT: # %bb.7: # %if.then14
52+
; CHECK-NEXT: je .LBB0_8
53+
; CHECK-NEXT: # %bb.6: # %if.then14
5654
; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload
5755
; CHECK-NEXT: #APP
5856
; CHECK-NEXT: #NO_APP
59-
; CHECK-NEXT: jmp .LBB0_10
57+
; CHECK-NEXT: jmp .LBB0_9
6058
; CHECK-NEXT: .Ltmp0: # Block address taken
61-
; CHECK-NEXT: # %bb.8: # %if.then20.critedge
59+
; CHECK-NEXT: # %bb.7: # %if.then20.critedge
6260
; CHECK-NEXT: movl j(%rip), %edi
6361
; CHECK-NEXT: movslq %eax, %rcx
6462
; CHECK-NEXT: movl $1, %esi
@@ -71,9 +69,9 @@ define dso_local void @n(i32* %o, i32 %p, i32 %u) nounwind {
7169
; CHECK-NEXT: popq %r15
7270
; CHECK-NEXT: popq %rbp
7371
; CHECK-NEXT: jmp k # TAILCALL
74-
; CHECK-NEXT: .LBB0_9: # %if.else
72+
; CHECK-NEXT: .LBB0_8: # %if.else
7573
; CHECK-NEXT: incq 0
76-
; CHECK-NEXT: .LBB0_10: # %cleanup
74+
; CHECK-NEXT: .LBB0_9: # %cleanup
7775
; CHECK-NEXT: addq $8, %rsp
7876
; CHECK-NEXT: popq %rbx
7977
; CHECK-NEXT: popq %r12

llvm/test/CodeGen/X86/pr38795.ll

Lines changed: 46 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,14 @@ define dso_local void @fn() {
3232
; CHECK-NEXT: # implicit-def: $ebp
3333
; CHECK-NEXT: jmp .LBB0_1
3434
; CHECK-NEXT: .p2align 4, 0x90
35-
; CHECK-NEXT: .LBB0_16: # %for.inc
35+
; CHECK-NEXT: .LBB0_15: # %for.inc
3636
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
37+
; CHECK-NEXT: movl %esi, %ecx
3738
; CHECK-NEXT: movb %dl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
3839
; CHECK-NEXT: movb %dh, %dl
3940
; CHECK-NEXT: .LBB0_1: # %for.cond
4041
; CHECK-NEXT: # =>This Loop Header: Depth=1
41-
; CHECK-NEXT: # Child Loop BB0_20 Depth 2
42+
; CHECK-NEXT: # Child Loop BB0_19 Depth 2
4243
; CHECK-NEXT: cmpb $8, %dl
4344
; CHECK-NEXT: movb %dl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
4445
; CHECK-NEXT: ja .LBB0_3
@@ -55,7 +56,7 @@ define dso_local void @fn() {
5556
; CHECK-NEXT: movb %cl, %dh
5657
; CHECK-NEXT: movl $0, h
5758
; CHECK-NEXT: cmpb $8, %dl
58-
; CHECK-NEXT: jg .LBB0_8
59+
; CHECK-NEXT: jg .LBB0_9
5960
; CHECK-NEXT: # %bb.5: # %if.then13
6061
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
6162
; CHECK-NEXT: movl %eax, %esi
@@ -64,12 +65,10 @@ define dso_local void @fn() {
6465
; CHECK-NEXT: calll printf
6566
; CHECK-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %dh # 1-byte Reload
6667
; CHECK-NEXT: testb %bl, %bl
67-
; CHECK-NEXT: movl %esi, %ecx
6868
; CHECK-NEXT: # implicit-def: $eax
69-
; CHECK-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %dl # 1-byte Reload
70-
; CHECK-NEXT: movb %dl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill
69+
; CHECK-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %cl # 1-byte Reload
7170
; CHECK-NEXT: movb %dh, %dl
72-
; CHECK-NEXT: jne .LBB0_16
71+
; CHECK-NEXT: jne .LBB0_15
7372
; CHECK-NEXT: jmp .LBB0_6
7473
; CHECK-NEXT: .p2align 4, 0x90
7574
; CHECK-NEXT: .LBB0_3: # %if.then
@@ -78,82 +77,82 @@ define dso_local void @fn() {
7877
; CHECK-NEXT: calll printf
7978
; CHECK-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %dl # 1-byte Reload
8079
; CHECK-NEXT: # implicit-def: $eax
80+
; CHECK-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %cl # 1-byte Reload
81+
; CHECK-NEXT: jmp .LBB0_6
82+
; CHECK-NEXT: .p2align 4, 0x90
83+
; CHECK-NEXT: .LBB0_9: # %if.end21
84+
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
85+
; CHECK-NEXT: # implicit-def: $ebp
86+
; CHECK-NEXT: jmp .LBB0_10
87+
; CHECK-NEXT: .p2align 4, 0x90
8188
; CHECK-NEXT: .LBB0_6: # %for.cond35
8289
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
90+
; CHECK-NEXT: movb %dl, %dh
8391
; CHECK-NEXT: testl %edi, %edi
84-
; CHECK-NEXT: je .LBB0_7
85-
; CHECK-NEXT: .LBB0_11: # %af
92+
; CHECK-NEXT: movl %edi, %esi
93+
; CHECK-NEXT: movl $0, %edi
94+
; CHECK-NEXT: movb %cl, %dl
95+
; CHECK-NEXT: je .LBB0_19
96+
; CHECK-NEXT: # %bb.7: # %af
8697
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
8798
; CHECK-NEXT: testb %bl, %bl
88-
; CHECK-NEXT: jne .LBB0_12
89-
; CHECK-NEXT: .LBB0_17: # %if.end39
99+
; CHECK-NEXT: jne .LBB0_8
100+
; CHECK-NEXT: .LBB0_16: # %if.end39
90101
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
91102
; CHECK-NEXT: testl %eax, %eax
92-
; CHECK-NEXT: je .LBB0_19
93-
; CHECK-NEXT: # %bb.18: # %if.then41
103+
; CHECK-NEXT: je .LBB0_18
104+
; CHECK-NEXT: # %bb.17: # %if.then41
94105
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
95106
; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp)
96107
; CHECK-NEXT: movl $fn, {{[0-9]+}}(%esp)
97108
; CHECK-NEXT: movl $.str, (%esp)
98109
; CHECK-NEXT: calll printf
99-
; CHECK-NEXT: .LBB0_19: # %for.end46
110+
; CHECK-NEXT: .LBB0_18: # %for.end46
100111
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
112+
; CHECK-NEXT: movl %esi, %edi
101113
; CHECK-NEXT: # implicit-def: $dl
102114
; CHECK-NEXT: # implicit-def: $dh
103115
; CHECK-NEXT: # implicit-def: $ebp
104-
; CHECK-NEXT: jmp .LBB0_20
105-
; CHECK-NEXT: .p2align 4, 0x90
106-
; CHECK-NEXT: .LBB0_8: # %if.end21
107-
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
108-
; CHECK-NEXT: # implicit-def: $ebp
109-
; CHECK-NEXT: jmp .LBB0_9
110116
; CHECK-NEXT: .p2align 4, 0x90
111-
; CHECK-NEXT: .LBB0_7: # in Loop: Header=BB0_1 Depth=1
112-
; CHECK-NEXT: xorl %edi, %edi
113-
; CHECK-NEXT: movb %dl, %dh
114-
; CHECK-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %dl # 1-byte Reload
115-
; CHECK-NEXT: .p2align 4, 0x90
116-
; CHECK-NEXT: .LBB0_20: # %for.cond47
117+
; CHECK-NEXT: .LBB0_19: # %for.cond47
117118
; CHECK-NEXT: # Parent Loop BB0_1 Depth=1
118119
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
119120
; CHECK-NEXT: testb %bl, %bl
120-
; CHECK-NEXT: jne .LBB0_20
121-
; CHECK-NEXT: # %bb.21: # %for.cond47
122-
; CHECK-NEXT: # in Loop: Header=BB0_20 Depth=2
121+
; CHECK-NEXT: jne .LBB0_19
122+
; CHECK-NEXT: # %bb.20: # %for.cond47
123+
; CHECK-NEXT: # in Loop: Header=BB0_19 Depth=2
123124
; CHECK-NEXT: testb %bl, %bl
124-
; CHECK-NEXT: jne .LBB0_20
125-
; CHECK-NEXT: .LBB0_9: # %ae
125+
; CHECK-NEXT: jne .LBB0_19
126+
; CHECK-NEXT: .LBB0_10: # %ae
126127
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
127128
; CHECK-NEXT: testb %bl, %bl
128-
; CHECK-NEXT: jne .LBB0_10
129-
; CHECK-NEXT: # %bb.13: # %if.end26
129+
; CHECK-NEXT: jne .LBB0_11
130+
; CHECK-NEXT: # %bb.12: # %if.end26
130131
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
131-
; CHECK-NEXT: xorl %ecx, %ecx
132+
; CHECK-NEXT: xorl %esi, %esi
132133
; CHECK-NEXT: testb %dl, %dl
133-
; CHECK-NEXT: je .LBB0_16
134-
; CHECK-NEXT: # %bb.14: # %if.end26
134+
; CHECK-NEXT: je .LBB0_15
135+
; CHECK-NEXT: # %bb.13: # %if.end26
135136
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
136137
; CHECK-NEXT: testl %ebp, %ebp
137-
; CHECK-NEXT: jne .LBB0_16
138-
; CHECK-NEXT: # %bb.15: # %if.then31
138+
; CHECK-NEXT: jne .LBB0_15
139+
; CHECK-NEXT: # %bb.14: # %if.then31
139140
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
140-
; CHECK-NEXT: xorl %ecx, %ecx
141+
; CHECK-NEXT: xorl %esi, %esi
141142
; CHECK-NEXT: xorl %ebp, %ebp
142-
; CHECK-NEXT: jmp .LBB0_16
143+
; CHECK-NEXT: jmp .LBB0_15
143144
; CHECK-NEXT: .p2align 4, 0x90
144-
; CHECK-NEXT: .LBB0_10: # in Loop: Header=BB0_1 Depth=1
145+
; CHECK-NEXT: .LBB0_11: # in Loop: Header=BB0_1 Depth=1
146+
; CHECK-NEXT: movl %edi, %esi
145147
; CHECK-NEXT: # implicit-def: $eax
146148
; CHECK-NEXT: testb %bl, %bl
147-
; CHECK-NEXT: je .LBB0_17
148-
; CHECK-NEXT: .LBB0_12: # in Loop: Header=BB0_1 Depth=1
149+
; CHECK-NEXT: je .LBB0_16
150+
; CHECK-NEXT: .LBB0_8: # in Loop: Header=BB0_1 Depth=1
149151
; CHECK-NEXT: # implicit-def: $edi
150152
; CHECK-NEXT: # implicit-def: $cl
151-
; CHECK-NEXT: # kill: killed $cl
152153
; CHECK-NEXT: # implicit-def: $dl
153154
; CHECK-NEXT: # implicit-def: $ebp
154-
; CHECK-NEXT: testl %edi, %edi
155-
; CHECK-NEXT: jne .LBB0_11
156-
; CHECK-NEXT: jmp .LBB0_7
155+
; CHECK-NEXT: jmp .LBB0_6
157156
entry:
158157
br label %for.cond
159158

llvm/test/CodeGen/X86/pr53990-incorrect-machine-sink.ll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,15 @@ define void @test(i1 %c, i64* %p, i64* noalias %p2) nounwind {
77
; CHECK-LABEL: test:
88
; CHECK: # %bb.0: # %entry
99
; CHECK-NEXT: pushq %rbp
10-
; CHECK-NEXT: pushq %r15
1110
; CHECK-NEXT: pushq %r14
1211
; CHECK-NEXT: pushq %rbx
13-
; CHECK-NEXT: pushq %rax
1412
; CHECK-NEXT: movq %rdx, %rbx
15-
; CHECK-NEXT: movq %rsi, %r14
16-
; CHECK-NEXT: movl %edi, %r15d
13+
; CHECK-NEXT: movl %edi, %r14d
14+
; CHECK-NEXT: movq (%rsi), %rbp
1715
; CHECK-NEXT: xorl %eax, %eax
1816
; CHECK-NEXT: jmpq *.LJTI0_0(,%rax,8)
1917
; CHECK-NEXT: .LBB0_1: # %split.3
20-
; CHECK-NEXT: movq (%r14), %rbp
21-
; CHECK-NEXT: testb $1, %r15b
18+
; CHECK-NEXT: testb $1, %r14b
2219
; CHECK-NEXT: je .LBB0_3
2320
; CHECK-NEXT: # %bb.2: # %clobber
2421
; CHECK-NEXT: callq clobber@PLT

llvm/test/CodeGen/X86/x86-shrink-wrapping.ll

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,6 +1377,8 @@ define i32 @irreducibleCFG() #4 {
13771377
; ENABLE-NEXT: pushq %rbx
13781378
; ENABLE-NEXT: pushq %rax
13791379
; ENABLE-NEXT: .cfi_offset %rbx, -24
1380+
; ENABLE-NEXT: movq _irreducibleCFGa@GOTPCREL(%rip), %rax
1381+
; ENABLE-NEXT: movl (%rax), %edi
13801382
; ENABLE-NEXT: movq _irreducibleCFGf@GOTPCREL(%rip), %rax
13811383
; ENABLE-NEXT: cmpb $0, (%rax)
13821384
; ENABLE-NEXT: je LBB16_2
@@ -1386,24 +1388,20 @@ define i32 @irreducibleCFG() #4 {
13861388
; ENABLE-NEXT: jmp LBB16_1
13871389
; ENABLE-NEXT: LBB16_2: ## %split
13881390
; ENABLE-NEXT: movq _irreducibleCFGb@GOTPCREL(%rip), %rax
1391+
; ENABLE-NEXT: xorl %ebx, %ebx
13891392
; ENABLE-NEXT: cmpl $0, (%rax)
1390-
; ENABLE-NEXT: je LBB16_3
1391-
; ENABLE-NEXT: ## %bb.4: ## %for.body4.i
1392-
; ENABLE-NEXT: movq _irreducibleCFGa@GOTPCREL(%rip), %rax
1393-
; ENABLE-NEXT: movl (%rax), %edi
1393+
; ENABLE-NEXT: je LBB16_4
1394+
; ENABLE-NEXT: ## %bb.3: ## %for.body4.i
13941395
; ENABLE-NEXT: xorl %ebx, %ebx
13951396
; ENABLE-NEXT: xorl %eax, %eax
13961397
; ENABLE-NEXT: callq _something
1397-
; ENABLE-NEXT: jmp LBB16_5
1398-
; ENABLE-NEXT: LBB16_3:
1399-
; ENABLE-NEXT: xorl %ebx, %ebx
14001398
; ENABLE-NEXT: .p2align 4, 0x90
1401-
; ENABLE-NEXT: LBB16_5: ## %for.inc
1399+
; ENABLE-NEXT: LBB16_4: ## %for.inc
14021400
; ENABLE-NEXT: ## =>This Inner Loop Header: Depth=1
14031401
; ENABLE-NEXT: incl %ebx
14041402
; ENABLE-NEXT: cmpl $7, %ebx
1405-
; ENABLE-NEXT: jl LBB16_5
1406-
; ENABLE-NEXT: ## %bb.6: ## %fn1.exit
1403+
; ENABLE-NEXT: jl LBB16_4
1404+
; ENABLE-NEXT: ## %bb.5: ## %fn1.exit
14071405
; ENABLE-NEXT: xorl %eax, %eax
14081406
; ENABLE-NEXT: addq $8, %rsp
14091407
; ENABLE-NEXT: popq %rbx
@@ -1420,6 +1418,8 @@ define i32 @irreducibleCFG() #4 {
14201418
; DISABLE-NEXT: pushq %rbx
14211419
; DISABLE-NEXT: pushq %rax
14221420
; DISABLE-NEXT: .cfi_offset %rbx, -24
1421+
; DISABLE-NEXT: movq _irreducibleCFGa@GOTPCREL(%rip), %rax
1422+
; DISABLE-NEXT: movl (%rax), %edi
14231423
; DISABLE-NEXT: movq _irreducibleCFGf@GOTPCREL(%rip), %rax
14241424
; DISABLE-NEXT: cmpb $0, (%rax)
14251425
; DISABLE-NEXT: je LBB16_2
@@ -1429,24 +1429,20 @@ define i32 @irreducibleCFG() #4 {
14291429
; DISABLE-NEXT: jmp LBB16_1
14301430
; DISABLE-NEXT: LBB16_2: ## %split
14311431
; DISABLE-NEXT: movq _irreducibleCFGb@GOTPCREL(%rip), %rax
1432+
; DISABLE-NEXT: xorl %ebx, %ebx
14321433
; DISABLE-NEXT: cmpl $0, (%rax)
1433-
; DISABLE-NEXT: je LBB16_3
1434-
; DISABLE-NEXT: ## %bb.4: ## %for.body4.i
1435-
; DISABLE-NEXT: movq _irreducibleCFGa@GOTPCREL(%rip), %rax
1436-
; DISABLE-NEXT: movl (%rax), %edi
1434+
; DISABLE-NEXT: je LBB16_4
1435+
; DISABLE-NEXT: ## %bb.3: ## %for.body4.i
14371436
; DISABLE-NEXT: xorl %ebx, %ebx
14381437
; DISABLE-NEXT: xorl %eax, %eax
14391438
; DISABLE-NEXT: callq _something
1440-
; DISABLE-NEXT: jmp LBB16_5
1441-
; DISABLE-NEXT: LBB16_3:
1442-
; DISABLE-NEXT: xorl %ebx, %ebx
14431439
; DISABLE-NEXT: .p2align 4, 0x90
1444-
; DISABLE-NEXT: LBB16_5: ## %for.inc
1440+
; DISABLE-NEXT: LBB16_4: ## %for.inc
14451441
; DISABLE-NEXT: ## =>This Inner Loop Header: Depth=1
14461442
; DISABLE-NEXT: incl %ebx
14471443
; DISABLE-NEXT: cmpl $7, %ebx
1448-
; DISABLE-NEXT: jl LBB16_5
1449-
; DISABLE-NEXT: ## %bb.6: ## %fn1.exit
1444+
; DISABLE-NEXT: jl LBB16_4
1445+
; DISABLE-NEXT: ## %bb.5: ## %fn1.exit
14501446
; DISABLE-NEXT: xorl %eax, %eax
14511447
; DISABLE-NEXT: addq $8, %rsp
14521448
; DISABLE-NEXT: popq %rbx

0 commit comments

Comments
 (0)