Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / nested-iv-regalloc.mir
blob3bd8f83d27c2daded3b5a206929960f5bd2fcf38
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64 --run-pass=greedy,virtregrewriter -verify-machineinstrs %s -o - | FileCheck %s
4 # We should ideally not spill around any of the SUBSWri in the loop exit blocks (if.end and if.end27).
6 --- |
7   target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
8   target triple = "aarch64"
10   @g = dso_local local_unnamed_addr global [9 x [9 x i32]] zeroinitializer, align 4
12   define void @test(ptr nocapture noundef readonly %p, i32 noundef %m, ptr noundef %q) {
13   entry:
14     %0 = load i32, ptr %p, align 4
15     %spec.select = tail call i32 @llvm.smax.i32(i32 %0, i32 1)
16     %arrayidx2 = getelementptr inbounds i32, ptr %p, i64 1
17     %1 = load i32, ptr %arrayidx2, align 4
18     %cond8 = tail call i32 @llvm.smax.i32(i32 %1, i32 1)
19     br label %do.body
21   do.body:                                          ; preds = %if.end27, %entry
22     %indvars.iv49 = phi i64 [ %indvars.iv.next50, %if.end27 ], [ 0, %entry ]
23     %n0.0 = phi i32 [ %dec30, %if.end27 ], [ %spec.select, %entry ]
24     %n1.0 = phi i32 [ %n1.2, %if.end27 ], [ %cond8, %entry ]
25     %arrayidx9 = getelementptr inbounds [9 x [9 x i32]], ptr @g, i64 0, i64 %indvars.iv49
26     %2 = load i32, ptr %arrayidx9, align 4
27     %cmp11 = icmp sgt i32 %2, 0
28     br i1 %cmp11, label %do.body12.preheader, label %if.end27
30   do.body12.preheader:                              ; preds = %do.body
31     br label %do.body12
33   do.body12:                                        ; preds = %do.body12.preheader, %if.end
34     %indvars.iv = phi i64 [ %indvars.iv.next, %if.end ], [ 0, %do.body12.preheader ]
35     %n1.1 = phi i32 [ %dec, %if.end ], [ %n1.0, %do.body12.preheader ]
36     %arrayidx14 = getelementptr inbounds [9 x [9 x i32]], ptr @g, i64 0, i64 %indvars.iv
37     %3 = load i32, ptr %arrayidx14, align 4
38     %cmp16 = icmp sgt i32 %3, 0
39     br i1 %cmp16, label %if.then17, label %if.end
41   if.then17:                                        ; preds = %do.body12
42     %arrayidx19 = getelementptr inbounds i32, ptr %q, i64 %indvars.iv
43     %4 = load volatile i32, ptr %arrayidx19, align 4
44     br label %for.body
46   for.cond.cleanup:                                 ; preds = %for.body
47     tail call void asm sideeffect "nop;nop", "~{x0},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{fp},~{lr}"() #3
48     %sunkaddr = mul i64 %indvars.iv, 4
49     %sunkaddr1 = getelementptr inbounds i8, ptr %q, i64 %sunkaddr
50     store volatile i32 %add, ptr %sunkaddr1, align 4
51     br label %if.end
53   for.body:                                         ; preds = %for.body, %if.then17
54     %lsr.iv = phi i32 [ %lsr.iv.next, %for.body ], [ 100, %if.then17 ]
55     %s.046 = phi i32 [ %4, %if.then17 ], [ %add, %for.body ]
56     %call = tail call i32 @callee() #3
57     %add = add nsw i32 %call, %s.046
58     %lsr.iv.next = add nsw i32 %lsr.iv, -1
59     %exitcond.not = icmp eq i32 %lsr.iv.next, 0
60     br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
62   if.end:                                           ; preds = %for.cond.cleanup, %do.body12
63     %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
64     %dec = add nsw i32 %n1.1, -1
65     %cmp24.not = icmp eq i32 %dec, 0
66     br i1 %cmp24.not, label %do.end, label %do.body12
68   do.end:                                           ; preds = %if.end
69     %arrayidx26 = getelementptr inbounds i32, ptr %q, i64 %indvars.iv49
70     store volatile i32 0, ptr %arrayidx26, align 4
71     br label %if.end27
73   if.end27:                                         ; preds = %do.end, %do.body
74     %n1.2 = phi i32 [ 0, %do.end ], [ %n1.0, %do.body ]
75     %indvars.iv.next50 = add nuw nsw i64 %indvars.iv49, 1
76     %dec30 = add nsw i32 %n0.0, -1
77     %cmp31.not = icmp eq i32 %dec30, 0
78     br i1 %cmp31.not, label %do.end32, label %do.body
80   do.end32:                                         ; preds = %if.end27
81     ret void
82   }
84   declare i32 @callee(...)
86   declare i32 @llvm.smax.i32(i32, i32) #2
87 ...
88 ---
89 name:            test
90 alignment:       4
91 exposesReturnsTwice: false
92 legalized:       false
93 regBankSelected: false
94 selected:        false
95 failedISel:      false
96 tracksRegLiveness: true
97 hasWinCFI:       false
98 callsEHReturn:   false
99 callsUnwindInit: false
100 hasEHCatchret:   false
101 hasEHScopes:     false
102 hasEHFunclets:   false
103 isOutlined:      false
104 debugInstrRef:   false
105 failsVerification: false
106 tracksDebugUserValues: false
107 registers:
108   - { id: 0, class: gpr32, preferred-register: '' }
109   - { id: 1, class: gpr32, preferred-register: '' }
110   - { id: 2, class: gpr64common, preferred-register: '' }
111   - { id: 3, class: gpr32sp, preferred-register: '' }
112   - { id: 4, class: gpr32all, preferred-register: '' }
113   - { id: 5, class: gpr64common, preferred-register: '' }
114   - { id: 6, class: gpr32sp, preferred-register: '' }
115   - { id: 7, class: gpr32, preferred-register: '' }
116   - { id: 8, class: gpr32sp, preferred-register: '' }
117   - { id: 9, class: gpr32, preferred-register: '' }
118   - { id: 10, class: gpr32, preferred-register: '' }
119   - { id: 11, class: gpr32, preferred-register: '' }
120   - { id: 12, class: gpr64sp, preferred-register: '' }
121   - { id: 13, class: gpr32, preferred-register: '' }
122   - { id: 14, class: gpr32all, preferred-register: '' }
123   - { id: 15, class: gpr64sp, preferred-register: '' }
124   - { id: 16, class: gpr32, preferred-register: '' }
125   - { id: 17, class: gpr64common, preferred-register: '' }
126   - { id: 18, class: gpr32, preferred-register: '' }
127   - { id: 19, class: gpr64common, preferred-register: '' }
128   - { id: 20, class: gpr64all, preferred-register: '' }
129   - { id: 21, class: gpr32common, preferred-register: '' }
130   - { id: 22, class: gpr32, preferred-register: '' }
131   - { id: 23, class: gpr32, preferred-register: '' }
132   - { id: 24, class: gpr32common, preferred-register: '' }
133   - { id: 25, class: gpr32, preferred-register: '' }
134   - { id: 26, class: gpr32, preferred-register: '' }
135   - { id: 27, class: gpr64all, preferred-register: '' }
136   - { id: 28, class: gpr32, preferred-register: '' }
137   - { id: 29, class: gpr64, preferred-register: '' }
138   - { id: 30, class: gpr64, preferred-register: '' }
139   - { id: 31, class: gpr64common, preferred-register: '' }
140   - { id: 32, class: gpr32common, preferred-register: '' }
141   - { id: 33, class: gpr32, preferred-register: '' }
142   - { id: 34, class: gpr64all, preferred-register: '' }
143   - { id: 35, class: gpr64all, preferred-register: '' }
144   - { id: 36, class: gpr32, preferred-register: '' }
145   - { id: 37, class: gpr64, preferred-register: '' }
146   - { id: 38, class: gpr64, preferred-register: '' }
147   - { id: 39, class: gpr64common, preferred-register: '' }
148   - { id: 40, class: gpr32common, preferred-register: '' }
149   - { id: 41, class: gpr32, preferred-register: '' }
150   - { id: 42, class: gpr32, preferred-register: '' }
151   - { id: 43, class: gpr32, preferred-register: '' }
152   - { id: 44, class: gpr32, preferred-register: '' }
153   - { id: 45, class: gpr32, preferred-register: '' }
154   - { id: 46, class: gpr32, preferred-register: '' }
155   - { id: 47, class: gpr32, preferred-register: '' }
156   - { id: 48, class: gpr64sp, preferred-register: '' }
157   - { id: 49, class: gpr32, preferred-register: '' }
158   - { id: 50, class: gpr32all, preferred-register: '' }
159   - { id: 51, class: gpr32, preferred-register: '' }
160   - { id: 52, class: gpr64sp, preferred-register: '' }
161   - { id: 53, class: gpr32, preferred-register: '' }
162   - { id: 54, class: gpr64common, preferred-register: '' }
163   - { id: 55, class: gpr32common, preferred-register: '' }
164   - { id: 56, class: gpr32common, preferred-register: '' }
165   - { id: 57, class: gpr64common, preferred-register: '' }
166   - { id: 58, class: gpr32common, preferred-register: '' }
167   - { id: 59, class: gpr32common, preferred-register: '' }
168   - { id: 60, class: gpr32, preferred-register: '' }
169   - { id: 61, class: gpr32all, preferred-register: '' }
170 liveins:
171   - { reg: '$x0', virtual-reg: '%17' }
172   - { reg: '$x2', virtual-reg: '%19' }
173 frameInfo:
174   isFrameAddressTaken: false
175   isReturnAddressTaken: false
176   hasStackMap:     false
177   hasPatchPoint:   false
178   stackSize:       0
179   offsetAdjustment: 0
180   maxAlignment:    1
181   adjustsStack:    true
182   hasCalls:        true
183   stackProtector:  ''
184   functionContext: ''
185   maxCallFrameSize: 0
186   cvBytesOfCalleeSavedRegisters: 0
187   hasOpaqueSPAdjustment: false
188   hasVAStart:      false
189   hasMustTailInVarArgFunc: false
190   hasTailCall:     false
191   localFrameSize:  0
192   savePoint:       ''
193   restorePoint:    ''
194 fixedStack:      []
195 stack:           []
196 entry_values:    []
197 callSites:       []
198 debugValueSubstitutions: []
199 constants:       []
200 machineFunctionInfo: {}
201 body:             |
202   ; CHECK-LABEL: name: test
203   ; CHECK: bb.0.entry:
204   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
205   ; CHECK-NEXT:   liveins: $x0, $x2
206   ; CHECK-NEXT: {{  $}}
207   ; CHECK-NEXT:   renamable $x10 = COPY $xzr
208   ; CHECK-NEXT:   renamable $w8 = LDRWui renamable $x0, 0 :: (load (s32) from %ir.p)
209   ; CHECK-NEXT:   renamable $w9 = LDRWui killed renamable $x0, 1 :: (load (s32) from %ir.arrayidx2)
210   ; CHECK-NEXT:   dead $wzr = SUBSWri renamable $w8, 1, 0, implicit-def $nzcv
211   ; CHECK-NEXT:   renamable $w11 = CSINCWr killed renamable $w8, $wzr, 12, implicit $nzcv
212   ; CHECK-NEXT:   renamable $x8 = COPY killed renamable $x10
213   ; CHECK-NEXT:   dead $wzr = SUBSWri renamable $w9, 1, 0, implicit-def $nzcv
214   ; CHECK-NEXT:   renamable $w10 = CSINCWr killed renamable $w9, $wzr, 12, implicit $nzcv
215   ; CHECK-NEXT:   STRXui renamable $x2, %stack.0, 0 :: (store (s64) into %stack.0)
216   ; CHECK-NEXT: {{  $}}
217   ; CHECK-NEXT: bb.1.do.body:
218   ; CHECK-NEXT:   successors: %bb.3(0x50000000), %bb.2(0x30000000)
219   ; CHECK-NEXT:   liveins: $w10, $w11, $x2, $x8
220   ; CHECK-NEXT: {{  $}}
221   ; CHECK-NEXT:   STRXui renamable $x8, %stack.1, 0 :: (store (s64) into %stack.1)
222   ; CHECK-NEXT:   renamable $w9 = MOVi32imm 36, implicit-def $x9
223   ; CHECK-NEXT:   renamable $x8 = MADDXrrr killed renamable $x8, killed renamable $x9, $xzr
224   ; CHECK-NEXT:   renamable $x9 = MOVaddr target-flags(aarch64-page) @g, target-flags(aarch64-pageoff, aarch64-nc) @g
225   ; CHECK-NEXT:   renamable $w8 = LDRWroX killed renamable $x9, killed renamable $x8, 0, 0 :: (load (s32) from %ir.arrayidx9)
226   ; CHECK-NEXT:   dead $wzr = SUBSWri killed renamable $w8, 1, 0, implicit-def $nzcv
227   ; CHECK-NEXT:   Bcc 10, %bb.3, implicit $nzcv
228   ; CHECK-NEXT: {{  $}}
229   ; CHECK-NEXT: bb.2:
230   ; CHECK-NEXT:   successors: %bb.10(0x80000000)
231   ; CHECK-NEXT:   liveins: $w10, $w11, $x2
232   ; CHECK-NEXT: {{  $}}
233   ; CHECK-NEXT:   renamable $x8 = LDRXui %stack.1, 0 :: (load (s64) from %stack.1)
234   ; CHECK-NEXT:   B %bb.10
235   ; CHECK-NEXT: {{  $}}
236   ; CHECK-NEXT: bb.3.do.body12.preheader:
237   ; CHECK-NEXT:   successors: %bb.4(0x80000000)
238   ; CHECK-NEXT:   liveins: $w10, $w11, $x2
239   ; CHECK-NEXT: {{  $}}
240   ; CHECK-NEXT:   renamable $x12 = COPY $xzr
241   ; CHECK-NEXT:   STRWui renamable $w11, %stack.2, 0 :: (store (s32) into %stack.2)
242   ; CHECK-NEXT: {{  $}}
243   ; CHECK-NEXT: bb.4.do.body12:
244   ; CHECK-NEXT:   successors: %bb.5(0x50000000), %bb.8(0x30000000)
245   ; CHECK-NEXT:   liveins: $w10, $w11, $x2, $x12
246   ; CHECK-NEXT: {{  $}}
247   ; CHECK-NEXT:   renamable $w8 = MOVi32imm 36, implicit-def $x8
248   ; CHECK-NEXT:   renamable $x8 = MADDXrrr renamable $x12, killed renamable $x8, $xzr
249   ; CHECK-NEXT:   renamable $x9 = MOVaddr target-flags(aarch64-page) @g, target-flags(aarch64-pageoff, aarch64-nc) @g
250   ; CHECK-NEXT:   renamable $w8 = LDRWroX killed renamable $x9, killed renamable $x8, 0, 0 :: (load (s32) from %ir.arrayidx14)
251   ; CHECK-NEXT:   dead $wzr = SUBSWri killed renamable $w8, 1, 0, implicit-def $nzcv
252   ; CHECK-NEXT:   Bcc 11, %bb.8, implicit $nzcv
253   ; CHECK-NEXT:   B %bb.5
254   ; CHECK-NEXT: {{  $}}
255   ; CHECK-NEXT: bb.5.if.then17:
256   ; CHECK-NEXT:   successors: %bb.7(0x80000000)
257   ; CHECK-NEXT:   liveins: $w10, $x2, $x12
258   ; CHECK-NEXT: {{  $}}
259   ; CHECK-NEXT:   STRWui killed renamable $w10, %stack.3, 0 :: (store (s32) into %stack.3)
260   ; CHECK-NEXT:   STRXui renamable $x12, %stack.4, 0 :: (store (s64) into %stack.4)
261   ; CHECK-NEXT:   renamable $w20 = LDRWroX killed renamable $x2, killed renamable $x12, 0, 1 :: (volatile load (s32) from %ir.arrayidx19)
262   ; CHECK-NEXT:   renamable $w19 = MOVi32imm 100
263   ; CHECK-NEXT:   B %bb.7
264   ; CHECK-NEXT: {{  $}}
265   ; CHECK-NEXT: bb.6.for.cond.cleanup:
266   ; CHECK-NEXT:   successors: %bb.8(0x80000000)
267   ; CHECK-NEXT:   liveins: $w20
268   ; CHECK-NEXT: {{  $}}
269   ; CHECK-NEXT:   renamable $w1 = COPY killed renamable $w20
270   ; CHECK-NEXT:   INLINEASM &"nop;nop", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead early-clobber $x0, 12 /* clobber */, implicit-def dead early-clobber $x2, 12 /* clobber */, implicit-def dead early-clobber $x3, 12 /* clobber */, implicit-def dead early-clobber $x4, 12 /* clobber */, implicit-def dead early-clobber $x5, 12 /* clobber */, implicit-def dead early-clobber $x6, 12 /* clobber */, implicit-def dead early-clobber $x7, 12 /* clobber */, implicit-def dead early-clobber $x8, 12 /* clobber */, implicit-def dead early-clobber $x9, 12 /* clobber */, implicit-def dead early-clobber $x10, 12 /* clobber */, implicit-def dead early-clobber $x11, 12 /* clobber */, implicit-def dead early-clobber $x12, 12 /* clobber */, implicit-def dead early-clobber $x13, 12 /* clobber */, implicit-def dead early-clobber $x14, 12 /* clobber */, implicit-def dead early-clobber $x15, 12 /* clobber */, implicit-def dead early-clobber $x16, 12 /* clobber */, implicit-def dead early-clobber $x17, 12 /* clobber */, implicit-def dead early-clobber $x18, 12 /* clobber */, implicit-def dead early-clobber $x19, 12 /* clobber */, implicit-def dead early-clobber $x20, 12 /* clobber */, implicit-def dead early-clobber $x21, 12 /* clobber */, implicit-def dead early-clobber $x22, 12 /* clobber */, implicit-def dead early-clobber $x23, 12 /* clobber */, implicit-def dead early-clobber $x24, 12 /* clobber */, implicit-def dead early-clobber $x25, 12 /* clobber */, implicit-def dead early-clobber $x26, 12 /* clobber */, implicit-def dead early-clobber $x27, 12 /* clobber */, implicit-def dead early-clobber $x28, 12 /* clobber */, implicit-def dead early-clobber $fp, 12 /* clobber */, implicit-def dead early-clobber $lr
271   ; CHECK-NEXT:   renamable $x2 = LDRXui %stack.0, 0 :: (load (s64) from %stack.0)
272   ; CHECK-NEXT:   renamable $x12 = LDRXui %stack.4, 0 :: (load (s64) from %stack.4)
273   ; CHECK-NEXT:   STRWroX killed renamable $w1, renamable $x2, renamable $x12, 0, 1 :: (volatile store (s32) into %ir.sunkaddr1)
274   ; CHECK-NEXT:   renamable $w11 = LDRWui %stack.2, 0 :: (load (s32) from %stack.2)
275   ; CHECK-NEXT:   renamable $w10 = LDRWui %stack.3, 0 :: (load (s32) from %stack.3)
276   ; CHECK-NEXT:   B %bb.8
277   ; CHECK-NEXT: {{  $}}
278   ; CHECK-NEXT: bb.7.for.body:
279   ; CHECK-NEXT:   successors: %bb.6(0x04000000), %bb.7(0x7c000000)
280   ; CHECK-NEXT:   liveins: $w19, $w20
281   ; CHECK-NEXT: {{  $}}
282   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
283   ; CHECK-NEXT:   BL @callee, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
284   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
285   ; CHECK-NEXT:   renamable $w19 = nsw SUBSWri killed renamable $w19, 1, 0, implicit-def $nzcv
286   ; CHECK-NEXT:   renamable $w20 = nsw ADDWrr killed renamable $w0, killed renamable $w20
287   ; CHECK-NEXT:   Bcc 0, %bb.6, implicit $nzcv
288   ; CHECK-NEXT:   B %bb.7
289   ; CHECK-NEXT: {{  $}}
290   ; CHECK-NEXT: bb.8.if.end:
291   ; CHECK-NEXT:   successors: %bb.9(0x04000000), %bb.4(0x7c000000)
292   ; CHECK-NEXT:   liveins: $w10, $w11, $x2, $x12
293   ; CHECK-NEXT: {{  $}}
294   ; CHECK-NEXT:   renamable $w10 = nsw SUBSWri killed renamable $w10, 1, 0, implicit-def $nzcv
295   ; CHECK-NEXT:   renamable $x12 = nuw nsw ADDXri killed renamable $x12, 1, 0
296   ; CHECK-NEXT:   Bcc 1, %bb.4, implicit $nzcv
297   ; CHECK-NEXT:   B %bb.9
298   ; CHECK-NEXT: {{  $}}
299   ; CHECK-NEXT: bb.9.do.end:
300   ; CHECK-NEXT:   successors: %bb.10(0x80000000)
301   ; CHECK-NEXT:   liveins: $w11, $x2
302   ; CHECK-NEXT: {{  $}}
303   ; CHECK-NEXT:   renamable $w10 = COPY $wzr
304   ; CHECK-NEXT:   renamable $x8 = LDRXui %stack.1, 0 :: (load (s64) from %stack.1)
305   ; CHECK-NEXT:   STRWroX $wzr, renamable $x2, renamable $x8, 0, 1 :: (volatile store (s32) into %ir.arrayidx26)
306   ; CHECK-NEXT: {{  $}}
307   ; CHECK-NEXT: bb.10.if.end27:
308   ; CHECK-NEXT:   successors: %bb.11(0x04000000), %bb.1(0x7c000000)
309   ; CHECK-NEXT:   liveins: $w10, $w11, $x2, $x8
310   ; CHECK-NEXT: {{  $}}
311   ; CHECK-NEXT:   renamable $w11 = nsw SUBSWri killed renamable $w11, 1, 0, implicit-def $nzcv
312   ; CHECK-NEXT:   renamable $x8 = nuw nsw ADDXri killed renamable $x8, 1, 0
313   ; CHECK-NEXT:   Bcc 1, %bb.1, implicit $nzcv
314   ; CHECK-NEXT:   B %bb.11
315   ; CHECK-NEXT: {{  $}}
316   ; CHECK-NEXT: bb.11.do.end32:
317   ; CHECK-NEXT:   RET_ReallyLR
318   bb.0.entry:
319     successors: %bb.1(0x80000000)
320     liveins: $x0, $x2
322     %19:gpr64common = COPY $x2
323     %17:gpr64common = COPY $x0
324     %54:gpr64common = COPY $xzr
325     %21:gpr32common = LDRWui %17, 0 :: (load (s32) from %ir.p)
326     %24:gpr32common = LDRWui %17, 1 :: (load (s32) from %ir.arrayidx2)
327     dead $wzr = SUBSWri %21, 1, 0, implicit-def $nzcv
328     %55:gpr32common = CSINCWr %21, $wzr, 12, implicit $nzcv
329     dead $wzr = SUBSWri %24, 1, 0, implicit-def $nzcv
330     %56:gpr32common = CSINCWr %24, $wzr, 12, implicit $nzcv
331     undef %29.sub_32:gpr64 = MOVi32imm 36
332     %31:gpr64common = MOVaddr target-flags(aarch64-page) @g, target-flags(aarch64-pageoff, aarch64-nc) @g
334   bb.1.do.body:
335     successors: %bb.2(0x50000000), %bb.11(0x30000000)
337     %30:gpr64 = MADDXrrr %54, %29, $xzr
338     %32:gpr32common = LDRWroX %31, %30, 0, 0 :: (load (s32) from %ir.arrayidx9)
339     dead $wzr = SUBSWri %32, 1, 0, implicit-def $nzcv
340     Bcc 10, %bb.2, implicit $nzcv
342   bb.11:
343     successors: %bb.9(0x80000000)
345     B %bb.9
347   bb.2.do.body12.preheader:
348     successors: %bb.3(0x80000000)
350     %57:gpr64common = COPY $xzr
352   bb.3.do.body12:
353     successors: %bb.4(0x50000000), %bb.7(0x30000000)
355     %38:gpr64 = MADDXrrr %57, %29, $xzr
356     %40:gpr32common = LDRWroX %31, %38, 0, 0 :: (load (s32) from %ir.arrayidx14)
357     dead $wzr = SUBSWri %40, 1, 0, implicit-def $nzcv
358     Bcc 11, %bb.7, implicit $nzcv
359     B %bb.4
361   bb.4.if.then17:
362     successors: %bb.6(0x80000000)
364     %60:gpr32 = LDRWroX %19, %57, 0, 1 :: (volatile load (s32) from %ir.arrayidx19)
365     %59:gpr32common = MOVi32imm 100
366     B %bb.6
368   bb.5.for.cond.cleanup:
369     successors: %bb.7(0x80000000)
371     INLINEASM &"nop;nop", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead early-clobber $x0, 12 /* clobber */, implicit-def dead early-clobber $x2, 12 /* clobber */, implicit-def dead early-clobber $x3, 12 /* clobber */, implicit-def dead early-clobber $x4, 12 /* clobber */, implicit-def dead early-clobber $x5, 12 /* clobber */, implicit-def dead early-clobber $x6, 12 /* clobber */, implicit-def dead early-clobber $x7, 12 /* clobber */, implicit-def dead early-clobber $x8, 12 /* clobber */, implicit-def dead early-clobber $x9, 12 /* clobber */, implicit-def dead early-clobber $x10, 12 /* clobber */, implicit-def dead early-clobber $x11, 12 /* clobber */, implicit-def dead early-clobber $x12, 12 /* clobber */, implicit-def dead early-clobber $x13, 12 /* clobber */, implicit-def dead early-clobber $x14, 12 /* clobber */, implicit-def dead early-clobber $x15, 12 /* clobber */, implicit-def dead early-clobber $x16, 12 /* clobber */, implicit-def dead early-clobber $x17, 12 /* clobber */, implicit-def dead early-clobber $x18, 12 /* clobber */, implicit-def dead early-clobber $x19, 12 /* clobber */, implicit-def dead early-clobber $x20, 12 /* clobber */, implicit-def dead early-clobber $x21, 12 /* clobber */, implicit-def dead early-clobber $x22, 12 /* clobber */, implicit-def dead early-clobber $x23, 12 /* clobber */, implicit-def dead early-clobber $x24, 12 /* clobber */, implicit-def dead early-clobber $x25, 12 /* clobber */, implicit-def dead early-clobber $x26, 12 /* clobber */, implicit-def dead early-clobber $x27, 12 /* clobber */, implicit-def dead early-clobber $x28, 12 /* clobber */, implicit-def dead early-clobber $fp, 12 /* clobber */, implicit-def dead early-clobber $lr
372     STRWroX %60, %19, %57, 0, 1 :: (volatile store (s32) into %ir.sunkaddr1)
373     B %bb.7
375   bb.6.for.body:
376     successors: %bb.5(0x04000000), %bb.6(0x7c000000)
378     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
379     BL @callee, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
380     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
381     %45:gpr32 = COPY $w0
382     %59:gpr32common = nsw SUBSWri %59, 1, 0, implicit-def $nzcv
383     %60:gpr32 = nsw ADDWrr %45, %60
384     Bcc 0, %bb.5, implicit $nzcv
385     B %bb.6
387   bb.7.if.end:
388     successors: %bb.8(0x04000000), %bb.3(0x7c000000)
390     %56:gpr32common = nsw SUBSWri %56, 1, 0, implicit-def $nzcv
391     %57:gpr64common = nuw nsw ADDXri %57, 1, 0
392     Bcc 1, %bb.3, implicit $nzcv
393     B %bb.8
395   bb.8.do.end:
396     successors: %bb.9(0x80000000)
398     %56:gpr32common = COPY $wzr
399     STRWroX $wzr, %19, %54, 0, 1 :: (volatile store (s32) into %ir.arrayidx26)
401   bb.9.if.end27:
402     successors: %bb.10(0x04000000), %bb.1(0x7c000000)
404     %55:gpr32common = nsw SUBSWri %55, 1, 0, implicit-def $nzcv
405     %54:gpr64common = nuw nsw ADDXri %54, 1, 0
406     Bcc 1, %bb.1, implicit $nzcv
407     B %bb.10
409   bb.10.do.end32:
410     RET_ReallyLR