[mlir][scf]: Add value bound between scf for loop yield and result (#123200)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / cfi-fixup-multi-block-prologue.mir
blob31fa3832367becce47f62b37a5a80f10cdd4d65d
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
2 # RUN: llc -run-pass=cfi-fixup %s -o - | FileCheck %s
3 --- |
4   source_filename = "cfi-fixup.ll"
5   target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
6   target triple = "aarch64-linux"
8   define i32 @f(i32 %x) #0 {
9   entry:
10     %p = alloca i8, i32 30000, align 1
11     switch i32 %x, label %if.end7 [
12       i32 0, label %return
13       i32 1, label %if.then2
14       i32 2, label %if.then5
15     ]
17   if.then2:                                         ; preds = %entry
18     %call = tail call i32 @g1(i32 1)
19     %add = add nsw i32 %call, 1
20     br label %return
22   if.then5:                                         ; preds = %entry
23     %call6 = tail call i32 @g0(i32 2)
24     %sub = sub nsw i32 1, %call6
25     br label %return
27   if.end7:                                          ; preds = %entry
28     br label %return
30   return:                                           ; preds = %if.end7, %if.then5, %if.then2, %entry
31     %retval.0 = phi i32 [ %add, %if.then2 ], [ %sub, %if.then5 ], [ 0, %if.end7 ], [ 1, %entry ]
32     ret i32 %retval.0
33   }
35   declare i32 @g1(i32)
37   declare i32 @g0(i32)
39   attributes #0 = { uwtable "probe-stack"="inline-asm" }
41 ...
42 ---
43 name:            f
44 alignment:       4
45 exposesReturnsTwice: false
46 legalized:       false
47 regBankSelected: false
48 selected:        false
49 failedISel:      false
50 tracksRegLiveness: true
51 hasWinCFI:       false
52 callsEHReturn:   false
53 callsUnwindInit: false
54 hasEHCatchret:   false
55 hasEHScopes:     false
56 hasEHFunclets:   false
57 isOutlined:      false
58 debugInstrRef:   false
59 failsVerification: false
60 tracksDebugUserValues: true
61 registers:       []
62 liveins:
63   - { reg: '$w0', virtual-reg: '' }
64 frameInfo:
65   isFrameAddressTaken: false
66   isReturnAddressTaken: false
67   hasStackMap:     false
68   hasPatchPoint:   false
69   stackSize:       30016
70   offsetAdjustment: 0
71   maxAlignment:    8
72   adjustsStack:    true
73   hasCalls:        true
74   stackProtector:  ''
75   functionContext: ''
76   maxCallFrameSize: 0
77   cvBytesOfCalleeSavedRegisters: 0
78   hasOpaqueSPAdjustment: false
79   hasVAStart:      false
80   hasMustTailInVarArgFunc: false
81   hasTailCall:     false
82   localFrameSize:  30000
83   savePoint:       ''
84   restorePoint:    ''
85 fixedStack:      []
86 stack:
87   - { id: 0, name: p, type: default, offset: -30016, size: 30000, alignment: 1,
88       stack-id: default, callee-saved-register: '', callee-saved-restored: true,
89       local-offset: -30000, debug-info-variable: '', debug-info-expression: '',
90       debug-info-location: '' }
91   - { id: 1, name: '', type: spill-slot, offset: -8, size: 8, alignment: 8,
92       stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true,
93       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
94   - { id: 2, name: '', type: spill-slot, offset: -16, size: 8, alignment: 8,
95       stack-id: default, callee-saved-register: '$fp', callee-saved-restored: true,
96       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
97 entry_values:    []
98 callSites:       []
99 debugValueSubstitutions: []
100 constants:       []
101 machineFunctionInfo:
102   hasRedZone:      false
103 body:             |
104   ; CHECK-LABEL: name: f
105   ; CHECK: bb.0.entry:
106   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
107   ; CHECK-NEXT:   liveins: $w0, $lr, $fp
108   ; CHECK-NEXT: {{  $}}
109   ; CHECK-NEXT:   early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.2), (store (s64) into %stack.1)
110   ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
111   ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -8
112   ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $w29, -16
113   ; CHECK-NEXT:   $x9 = frame-setup SUBXri $sp, 7, 12
114   ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa $w9, 28688
115   ; CHECK-NEXT: {{  $}}
116   ; CHECK-NEXT: bb.1.entry:
117   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
118   ; CHECK-NEXT:   liveins: $x9
119   ; CHECK-NEXT: {{  $}}
120   ; CHECK-NEXT:   $sp = frame-setup SUBXri $sp, 1, 12
121   ; CHECK-NEXT:   $xzr = frame-setup SUBSXrx64 $sp, $x9, 24, implicit-def $nzcv
122   ; CHECK-NEXT:   frame-setup STRXui $xzr, $sp, 0
123   ; CHECK-NEXT:   frame-setup Bcc 1, %bb.1, implicit killed $nzcv
124   ; CHECK-NEXT: {{  $}}
125   ; CHECK-NEXT: bb.2.entry:
126   ; CHECK-NEXT:   successors: %bb.6(0x20000000), %bb.3(0x60000000)
127   ; CHECK-NEXT:   liveins: $w0
128   ; CHECK-NEXT: {{  $}}
129   ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_register $wsp
130   ; CHECK-NEXT:   $sp = frame-setup SUBXri $sp, 1328, 0
131   ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 30016
132   ; CHECK-NEXT:   CFI_INSTRUCTION remember_state
133   ; CHECK-NEXT:   frame-setup STRXui $xzr, $sp, 0
134   ; CHECK-NEXT:   CBZW renamable $w0, %bb.6
135   ; CHECK-NEXT: {{  $}}
136   ; CHECK-NEXT: bb.3.entry:
137   ; CHECK-NEXT:   successors: %bb.7(0x2aaaaaab), %bb.4(0x55555555)
138   ; CHECK-NEXT:   liveins: $w0
139   ; CHECK-NEXT: {{  $}}
140   ; CHECK-NEXT:   dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv
141   ; CHECK-NEXT:   Bcc 0, %bb.7, implicit killed $nzcv
142   ; CHECK-NEXT: {{  $}}
143   ; CHECK-NEXT: bb.4.entry:
144   ; CHECK-NEXT:   successors: %bb.5(0x40000000), %bb.8(0x40000000)
145   ; CHECK-NEXT:   liveins: $w0
146   ; CHECK-NEXT: {{  $}}
147   ; CHECK-NEXT:   dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv
148   ; CHECK-NEXT:   Bcc 1, %bb.8, implicit killed $nzcv
149   ; CHECK-NEXT: {{  $}}
150   ; CHECK-NEXT: bb.5.if.then2:
151   ; CHECK-NEXT:   liveins: $w0
152   ; CHECK-NEXT: {{  $}}
153   ; CHECK-NEXT:   BL @g1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
154   ; CHECK-NEXT:   renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
155   ; CHECK-NEXT:   $sp = frame-destroy ADDXri $sp, 7, 12
156   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
157   ; CHECK-NEXT:   $sp = frame-destroy ADDXri $sp, 1328, 0
158   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 16
159   ; CHECK-NEXT:   early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
160   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 0
161   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w30
162   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w29
163   ; CHECK-NEXT:   RET undef $lr, implicit killed $w0
164   ; CHECK-NEXT: {{  $}}
165   ; CHECK-NEXT: bb.6:
166   ; CHECK-NEXT:   CFI_INSTRUCTION restore_state
167   ; CHECK-NEXT:   CFI_INSTRUCTION remember_state
168   ; CHECK-NEXT:   renamable $w0 = MOVZWi 1, 0
169   ; CHECK-NEXT:   $sp = frame-destroy ADDXri $sp, 7, 12
170   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
171   ; CHECK-NEXT:   $sp = frame-destroy ADDXri $sp, 1328, 0
172   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 16
173   ; CHECK-NEXT:   early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
174   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 0
175   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w30
176   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w29
177   ; CHECK-NEXT:   RET undef $lr, implicit killed $w0
178   ; CHECK-NEXT: {{  $}}
179   ; CHECK-NEXT: bb.7.if.then5:
180   ; CHECK-NEXT:   liveins: $w0
181   ; CHECK-NEXT: {{  $}}
182   ; CHECK-NEXT:   CFI_INSTRUCTION restore_state
183   ; CHECK-NEXT:   CFI_INSTRUCTION remember_state
184   ; CHECK-NEXT:   BL @g0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
185   ; CHECK-NEXT:   renamable $w8 = MOVZWi 1, 0
186   ; CHECK-NEXT:   $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
187   ; CHECK-NEXT:   $sp = frame-destroy ADDXri $sp, 7, 12
188   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
189   ; CHECK-NEXT:   $sp = frame-destroy ADDXri $sp, 1328, 0
190   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 16
191   ; CHECK-NEXT:   early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
192   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 0
193   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w30
194   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w29
195   ; CHECK-NEXT:   RET undef $lr, implicit killed $w0
196   ; CHECK-NEXT: {{  $}}
197   ; CHECK-NEXT: bb.8.if.end7:
198   ; CHECK-NEXT:   CFI_INSTRUCTION restore_state
199   ; CHECK-NEXT:   $w0 = ORRWrs $wzr, $wzr, 0
200   ; CHECK-NEXT:   $sp = frame-destroy ADDXri $sp, 7, 12
201   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
202   ; CHECK-NEXT:   $sp = frame-destroy ADDXri $sp, 1328, 0
203   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 16
204   ; CHECK-NEXT:   early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
205   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 0
206   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w30
207   ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w29
208   ; CHECK-NEXT:   RET undef $lr, implicit killed $w0
209   bb.0.entry:
210     successors: %bb.1(0x80000000)
211     liveins: $w0, $lr, $fp
213     early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.2), (store (s64) into %stack.1)
214     frame-setup CFI_INSTRUCTION def_cfa_offset 16
215     frame-setup CFI_INSTRUCTION offset $w30, -8
216     frame-setup CFI_INSTRUCTION offset $w29, -16
217     $x9 = frame-setup SUBXri $sp, 7, 12
218     frame-setup CFI_INSTRUCTION def_cfa $w9, 28688
220   bb.1.entry:
221     successors: %bb.2(0x40000000), %bb.1(0x40000000)
222     liveins: $x9
224     $sp = frame-setup SUBXri $sp, 1, 12
225     $xzr = frame-setup SUBSXrx64 $sp, $x9, 24, implicit-def $nzcv
226     frame-setup STRXui $xzr, $sp, 0
227     frame-setup Bcc 1, %bb.1, implicit killed $nzcv
229   bb.2.entry:
230     successors: %bb.6(0x20000000), %bb.3(0x60000000)
231     liveins: $w0
233     frame-setup CFI_INSTRUCTION def_cfa_register $wsp
234     $sp = frame-setup SUBXri $sp, 1328, 0
235     frame-setup CFI_INSTRUCTION def_cfa_offset 30016
236     frame-setup STRXui $xzr, $sp, 0
237     CBZW renamable $w0, %bb.6
239   bb.3.entry:
240     successors: %bb.7(0x2aaaaaab), %bb.4(0x55555555)
241     liveins: $w0
243     dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv
244     Bcc 0, %bb.7, implicit killed $nzcv
246   bb.4.entry:
247     successors: %bb.5(0x40000000), %bb.8(0x40000000)
248     liveins: $w0
250     dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv
251     Bcc 1, %bb.8, implicit killed $nzcv
253   bb.5.if.then2:
254     liveins: $w0
256     BL @g1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
257     renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
258     $sp = frame-destroy ADDXri $sp, 7, 12
259     frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
260     $sp = frame-destroy ADDXri $sp, 1328, 0
261     frame-destroy CFI_INSTRUCTION def_cfa_offset 16
262     early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
263     frame-destroy CFI_INSTRUCTION def_cfa_offset 0
264     frame-destroy CFI_INSTRUCTION restore $w30
265     frame-destroy CFI_INSTRUCTION restore $w29
266     RET undef $lr, implicit killed $w0
268   bb.6:
269     renamable $w0 = MOVZWi 1, 0
270     $sp = frame-destroy ADDXri $sp, 7, 12
271     frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
272     $sp = frame-destroy ADDXri $sp, 1328, 0
273     frame-destroy CFI_INSTRUCTION def_cfa_offset 16
274     early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
275     frame-destroy CFI_INSTRUCTION def_cfa_offset 0
276     frame-destroy CFI_INSTRUCTION restore $w30
277     frame-destroy CFI_INSTRUCTION restore $w29
278     RET undef $lr, implicit killed $w0
280   bb.7.if.then5:
281     liveins: $w0
283     BL @g0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
284     renamable $w8 = MOVZWi 1, 0
285     $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
286     $sp = frame-destroy ADDXri $sp, 7, 12
287     frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
288     $sp = frame-destroy ADDXri $sp, 1328, 0
289     frame-destroy CFI_INSTRUCTION def_cfa_offset 16
290     early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
291     frame-destroy CFI_INSTRUCTION def_cfa_offset 0
292     frame-destroy CFI_INSTRUCTION restore $w30
293     frame-destroy CFI_INSTRUCTION restore $w29
294     RET undef $lr, implicit killed $w0
296   bb.8.if.end7:
297     $w0 = ORRWrs $wzr, $wzr, 0
298     $sp = frame-destroy ADDXri $sp, 7, 12
299     frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
300     $sp = frame-destroy ADDXri $sp, 1328, 0
301     frame-destroy CFI_INSTRUCTION def_cfa_offset 16
302     early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
303     frame-destroy CFI_INSTRUCTION def_cfa_offset 0
304     frame-destroy CFI_INSTRUCTION restore $w30
305     frame-destroy CFI_INSTRUCTION restore $w29
306     RET undef $lr, implicit killed $w0