Skip to content

Commit 05bde30

Browse files
authored
Move assertion for AdjustsStack from PEI to MachineVerifier. (llvm#85698)
Have the verifier report a missing AdjustsStack flag rather than waiting until PEI asserts.
1 parent 9f16859 commit 05bde30

30 files changed

+74
-9
lines changed

llvm/lib/CodeGen/MachineVerifier.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3697,6 +3697,9 @@ void MachineVerifier::verifyStackFrame() {
36973697
if (I.getOpcode() == FrameSetupOpcode) {
36983698
if (BBState.ExitIsSetup)
36993699
report("FrameSetup is after another FrameSetup", &I);
3700+
if (!MRI->isSSA() && !MF->getFrameInfo().adjustsStack())
3701+
report("AdjustsStack not set in presence of a frame pseudo "
3702+
"instruction.", &I);
37003703
BBState.ExitValue -= TII->getFrameTotalSize(I);
37013704
BBState.ExitIsSetup = true;
37023705
}
@@ -3712,6 +3715,9 @@ void MachineVerifier::verifyStackFrame() {
37123715
errs() << "FrameDestroy <" << Size << "> is after FrameSetup <"
37133716
<< AbsSPAdj << ">.\n";
37143717
}
3718+
if (!MRI->isSSA() && !MF->getFrameInfo().adjustsStack())
3719+
report("AdjustsStack not set in presence of a frame pseudo "
3720+
"instruction.", &I);
37153721
BBState.ExitValue += Size;
37163722
BBState.ExitIsSetup = false;
37173723
}

llvm/lib/CodeGen/PrologEpilogInserter.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,8 +372,6 @@ void PEI::calculateCallFrameInfo(MachineFunction &MF) {
372372
MFI.computeMaxCallFrameSize(MF, &FrameSDOps);
373373
assert(MFI.getMaxCallFrameSize() <= MaxCFSIn &&
374374
"Recomputing MaxCFS gave a larger value.");
375-
assert((FrameSDOps.empty() || MF.getFrameInfo().adjustsStack()) &&
376-
"AdjustsStack not set in presence of a frame pseudo instruction.");
377375

378376
if (TFI->canSimplifyCallFramePseudos(MF)) {
379377
// If call frames are not being included as part of the stack frame, and

llvm/test/CodeGen/AArch64/clear-dead-implicit-def-impdef.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
# RUN: llc -mtriple=arm64-apple-macosx -mcpu=apple-m1 -verify-regalloc -run-pass=greedy -o - %s | FileCheck %s
33
---
44
name: func
5+
frameInfo:
6+
adjustsStack: true
57
tracksRegLiveness: true
68
body: |
79
bb.0:

llvm/test/CodeGen/AArch64/implicit-def-remat-requires-impdef-check.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
name: inst_stores_to_dead_spill_implicit_def_impdef
2323
tracksRegLiveness: true
2424
frameInfo:
25+
adjustsStack: true
2526
hasCalls: true
2627
body: |
2728
bb.0:
@@ -59,6 +60,7 @@ body: |
5960
name: inst_stores_to_dead_spill_movimm_impdef
6061
tracksRegLiveness: true
6162
frameInfo:
63+
adjustsStack: true
6264
hasCalls: true
6365
body: |
6466
bb.0:

llvm/test/CodeGen/AArch64/implicit-def-with-impdef-greedy-assert.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
---
55
name: widget
6+
frameInfo:
7+
adjustsStack: true
68
tracksRegLiveness: true
79
jumpTable:
810
kind: label-difference32

llvm/test/CodeGen/AMDGPU/fold-restore-undef-use.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
---
99
name: restore_undef_copy_use
10+
frameInfo:
11+
adjustsStack: true
1012
tracksRegLiveness: true
1113
machineFunctionInfo:
1214
maxKernArgAlign: 1

llvm/test/CodeGen/AMDGPU/greedy-alloc-fail-sgpr1024-spill.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
name: greedy_fail_alloc_sgpr1024_spill
1414
tracksRegLiveness: true
1515
frameInfo:
16+
adjustsStack: true
1617
hasCalls: true
1718
machineFunctionInfo:
1819
explicitKernArgSize: 16

llvm/test/CodeGen/AMDGPU/ran-out-of-sgprs-allocation-failure.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ registers:
2424
- { id: 10, class: sreg_64_xexec, preferred-register: '$vcc' }
2525
frameInfo:
2626
maxAlignment: 1
27+
adjustsStack: true
2728
hasCalls: true
2829
machineFunctionInfo:
2930
maxKernArgAlign: 1

llvm/test/CodeGen/AMDGPU/sched-crash-dbg-value.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ exposesReturnsTwice: false
180180
legalized: false
181181
regBankSelected: false
182182
selected: false
183+
frameInfo:
184+
adjustsStack: true
183185
tracksRegLiveness: true
184186
liveins:
185187
- { reg: '$vgpr0', virtual-reg: '%0' }

llvm/test/CodeGen/AMDGPU/sgpr-spill-wrong-stack-id.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
name: sgpr_spill_wrong_stack_id
7979
tracksRegLiveness: true
8080
frameInfo:
81+
adjustsStack: true
8182
hasCalls: true
8283
machineFunctionInfo:
8384
scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3

llvm/test/CodeGen/AMDGPU/snippet-copy-bundle-regression.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
name: kernel
2222
tracksRegLiveness: true
2323
frameInfo:
24+
adjustsStack: true
2425
hasCalls: true
2526
machineFunctionInfo:
2627
isEntryFunction: true

llvm/test/CodeGen/AMDGPU/virtregrewrite-undef-identity-copy.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ name: undef_identity_copy
2020
tracksRegLiveness: true
2121
frameInfo:
2222
maxAlignment: 4
23+
adjustsStack: true
2324
hasCalls: true
2425
machineFunctionInfo:
2526
isEntryFunction: true

llvm/test/CodeGen/ARM/no-register-coalescing-in-returnsTwice.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@
8686
---
8787
name: main
8888
exposesReturnsTwice: true
89+
frameInfo:
90+
adjustsStack: true
8991
stack:
9092
- { id: 0, name: P0, size: 80, alignment: 8, local-offset: -80 }
9193
- { id: 1, name: jb1, size: 160, alignment: 8, local-offset: -240 }

llvm/test/CodeGen/Hexagon/regalloc-bad-undef.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ frameInfo:
135135
stackSize: 0
136136
offsetAdjustment: 0
137137
maxAlignment: 0
138-
adjustsStack: false
138+
adjustsStack: true
139139
hasCalls: true
140140
maxCallFrameSize: 0
141141
hasOpaqueSPAdjustment: false

llvm/test/CodeGen/SystemZ/RAbasic-invalid-LR-update.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
---
2525
name: autogen_SD21418
2626
alignment: 4
27+
frameInfo:
28+
adjustsStack: true
2729
tracksRegLiveness: true
2830
registers:
2931
- { id: 0, class: vr128bit }

llvm/test/CodeGen/SystemZ/clear-liverange-spillreg.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ registers:
157157
- { id: 129, class: grx32bit }
158158
- { id: 130, class: fp64bit }
159159
frameInfo:
160+
adjustsStack: true
160161
hasCalls: true
161162
body: |
162163
bb.0:

llvm/test/CodeGen/SystemZ/int-cmp-56.mir

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ liveins:
4848
- { reg: '$r2d', virtual-reg: '%0' }
4949
frameInfo:
5050
maxAlignment: 1
51+
adjustsStack: true
5152
hasCalls: true
5253
machineFunctionInfo: {}
5354
body: |
@@ -125,6 +126,7 @@ liveins:
125126
- { reg: '$r2d', virtual-reg: '%0' }
126127
frameInfo:
127128
maxAlignment: 1
129+
adjustsStack: true
128130
hasCalls: true
129131
machineFunctionInfo: {}
130132
body: |
@@ -202,6 +204,7 @@ liveins:
202204
- { reg: '$r2d', virtual-reg: '%0' }
203205
frameInfo:
204206
maxAlignment: 1
207+
adjustsStack: true
205208
hasCalls: true
206209
machineFunctionInfo: {}
207210
body: |
@@ -279,6 +282,7 @@ liveins:
279282
- { reg: '$r2d', virtual-reg: '%0' }
280283
frameInfo:
281284
maxAlignment: 1
285+
adjustsStack: true
282286
hasCalls: true
283287
machineFunctionInfo: {}
284288
body: |

llvm/test/CodeGen/SystemZ/regcoal-subranges-update.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ body: |
4848
# represented for the value carried by %7.
4949
---
5050
name: segfault
51+
frameInfo:
52+
adjustsStack: true
5153
tracksRegLiveness: true
5254
liveins: []
5355
body: |

llvm/test/CodeGen/X86/callbr-asm-kill.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ liveins:
4545
- { reg: '$rsi', virtual-reg: '%3' }
4646
frameInfo:
4747
maxAlignment: 1
48+
adjustsStack: true
4849
hasCalls: true
4950
machineFunctionInfo: {}
5051
body: |

llvm/test/CodeGen/X86/regalloc-copy-hints.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ registers:
103103
- { id: 82, class: gr32 }
104104
frameInfo:
105105
maxAlignment: 4
106+
adjustsStack: true
106107
hasCalls: true
107108
fixedStack:
108109
- { id: 0, size: 4, alignment: 4, stack-id: default, isImmutable: true }

llvm/test/CodeGen/X86/statepoint-fastregalloc.mir

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
# Tied def/use must be assigned to the same register.
66
---
77
name: test_relocate
8+
frameInfo:
9+
adjustsStack: true
810
tracksRegLiveness: true
911
body: |
1012
bb.0.entry:
@@ -24,6 +26,8 @@ body: |
2426
# These regmasks have no real meaning and chosen to allow only single register to be assignable ($rbp)
2527
---
2628
name: test_relocate_multi_regmasks
29+
frameInfo:
30+
adjustsStack: true
2731
tracksRegLiveness: true
2832
body: |
2933
bb.0.entry:

llvm/test/CodeGen/X86/statepoint-invoke-ra-enter-at-end.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ frameInfo:
231231
stackSize: 0
232232
offsetAdjustment: 0
233233
maxAlignment: 1
234-
adjustsStack: false
234+
adjustsStack: true
235235
hasCalls: true
236236
stackProtector: ''
237237
maxCallFrameSize: 4294967295

llvm/test/CodeGen/X86/statepoint-invoke-ra-hoist-copies.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ frameInfo:
398398
stackSize: 0
399399
offsetAdjustment: 0
400400
maxAlignment: 1
401-
adjustsStack: false
401+
adjustsStack: true
402402
hasCalls: true
403403
stackProtector: ''
404404
maxCallFrameSize: 4294967295

llvm/test/CodeGen/X86/statepoint-invoke-ra-inline-spiller.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ frameInfo:
175175
stackSize: 0
176176
offsetAdjustment: 0
177177
maxAlignment: 4
178-
adjustsStack: false
178+
adjustsStack: true
179179
hasCalls: true
180180
stackProtector: ''
181181
maxCallFrameSize: 4294967295

llvm/test/CodeGen/X86/statepoint-invoke-ra-remove-back-copies.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ frameInfo:
226226
stackSize: 0
227227
offsetAdjustment: 0
228228
maxAlignment: 4
229-
adjustsStack: false
229+
adjustsStack: true
230230
hasCalls: true
231231
stackProtector: ''
232232
maxCallFrameSize: 4294967295

llvm/test/CodeGen/X86/statepoint-invoke-ra.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ frameInfo:
172172
stackSize: 0
173173
offsetAdjustment: 0
174174
maxAlignment: 4
175-
adjustsStack: false
175+
adjustsStack: true
176176
hasCalls: true
177177
stackProtector: ''
178178
maxCallFrameSize: 4294967295

llvm/test/CodeGen/X86/statepoint-vreg-folding.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ frameInfo:
114114
stackSize: 0
115115
offsetAdjustment: 0
116116
maxAlignment: 8
117-
adjustsStack: false
117+
adjustsStack: true
118118
hasCalls: true
119119
stackProtector: ''
120120
maxCallFrameSize: 4294967295

llvm/test/DebugInfo/MIR/InstrRef/phi-coalescing.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ liveins:
106106
- { reg: '$rsi', virtual-reg: '%5' }
107107
frameInfo:
108108
maxAlignment: 1
109+
adjustsStack: true
109110
hasCalls: true
110111
machineFunctionInfo: {}
111112
body: |

llvm/test/DebugInfo/MIR/Mips/livedebugvars-stop-trimming-loc.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@
7171
---
7272
name: fn2
7373
alignment: 4
74+
frameInfo:
75+
adjustsStack: true
7476
tracksRegLiveness: true
7577
registers:
7678
- { id: 0, class: gpr32, preferred-register: '' }
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# RUN: not --crash llc -o - -start-before=twoaddressinstruction -verify-machineinstrs %s 2>&1 \
2+
# RUN: | FileCheck %s
3+
# REQUIRES: aarch64-registered-target
4+
--- |
5+
target triple = "aarch64-unknown-linux"
6+
declare i32 @bar(i32) nounwind
7+
define i32 @foo() nounwind {
8+
call i32 @bar(i32 0)
9+
ret i32 0
10+
}
11+
...
12+
---
13+
name: foo
14+
registers:
15+
- { id: 0, class: gpr32 }
16+
body: |
17+
bb.0 (%ir-block.0):
18+
ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
19+
%0 = COPY $wzr
20+
$w0 = COPY %0
21+
BL @bar, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
22+
ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
23+
$w0 = COPY killed %0
24+
RET_ReallyLR implicit $w0
25+
...
26+
# CHECK-LABEL: Bad machine code: AdjustsStack not set in presence of a frame pseudo instruction.

0 commit comments

Comments
 (0)