[ARM] Generate 8.1-m CSINC, CSNEG and CSINV instructions.
[llvm-core.git] / test / CodeGen / Thumb2 / constant-islands-cbz.mir
blobcb78311206bf172c014d931d75224ce34bda1ce1
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=thumbv7m-none-eabi -run-pass=arm-cp-islands -o - %s | FileCheck %s
4 --- |
5   define i32* @test_simple(i32* %x, i32 %y) { ret i32* %x }
6   define i32* @test_notfirst(i32* %x, i32 %y) { ret i32* %x }
7   define i32* @test_redefined(i32* %x, i32 %y) { ret i32* %x }
8   define i32* @test_notredefined(i32* %x, i32 %y) { ret i32* %x }
9   define i32* @test_notcmp(i32* %x, i32 %y) { ret i32* %x }
10   define i32* @test_killflag_1(i32* %x, i32 %y) { ret i32* %x }
11   define i32* @test_killflag_2(i32* %x, i32 %y) { ret i32* %x }
12   define i32* @test_cpsr(i32* %x, i32 %y) { ret i32* %x }
14   declare dso_local i32 @c(i32 %x)
15 ...
16 ---
17 name:            test_simple
18 tracksRegLiveness: true
19 liveins:
20   - { reg: '$r0', virtual-reg: '' }
21   - { reg: '$r1', virtual-reg: '' }
22 body:             |
23   ; CHECK-LABEL: name: test_simple
24   ; CHECK: bb.0:
25   ; CHECK:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
26   ; CHECK:   tCBZ $r0, %bb.2
27   ; CHECK: bb.1:
28   ; CHECK:   renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
29   ; CHECK:   tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
30   ; CHECK: bb.2:
31   ; CHECK:   $r0, dead $cpsr = tMOVi8 0, 14, $noreg
32   ; CHECK:   tBX_RET 14, $noreg, implicit killed $r0
33   bb.0:
34     successors: %bb.1(0x30000000), %bb.2(0x50000000)
35     liveins: $r0, $r1
37     tCMPi8 renamable $r0, 0, 14, $noreg, implicit-def $cpsr
38     t2Bcc %bb.1, 0, killed $cpsr
40   bb.2:
41     liveins: $r0
43     renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
44     tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
46   bb.1:
47     $r0, dead $cpsr = tMOVi8 0, 14, $noreg
48     tBX_RET 14, $noreg, implicit killed $r0
50 ...
51 ---
52 name:            test_notfirst
53 tracksRegLiveness: true
54 liveins:
55   - { reg: '$r0', virtual-reg: '' }
56   - { reg: '$r1', virtual-reg: '' }
57 body:             |
58   ; CHECK-LABEL: name: test_notfirst
59   ; CHECK: bb.0:
60   ; CHECK:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
61   ; CHECK:   renamable $r0, $cpsr = tADDrr killed renamable $r0, renamable $r1, 14, $noreg
62   ; CHECK:   renamable $r1 = t2ADDrs renamable $r0, killed renamable $r1, 18, 14, $noreg, $noreg
63   ; CHECK:   tCBZ $r0, %bb.2
64   ; CHECK: bb.1:
65   ; CHECK:   renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
66   ; CHECK:   tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
67   ; CHECK: bb.2:
68   ; CHECK:   $r0, dead $cpsr = tMOVi8 0, 14, $noreg
69   ; CHECK:   tBX_RET 14, $noreg, implicit killed $r0
70   bb.0:
71     successors: %bb.1(0x30000000), %bb.2(0x50000000)
72     liveins: $r0, $r1
74     renamable $r0, $cpsr = tADDrr killed renamable $r0, renamable $r1, 14, $noreg
75     tCMPi8 renamable $r0, 0, 14, $noreg, implicit-def $cpsr
76     renamable $r1 = t2ADDrs renamable $r0, killed renamable $r1, 18, 14, $noreg, $noreg
77     t2Bcc %bb.1, 0, killed $cpsr
79   bb.2:
80     liveins: $r0
82     renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
83     tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
85   bb.1:
86     $r0, dead $cpsr = tMOVi8 0, 14, $noreg
87     tBX_RET 14, $noreg, implicit killed $r0
89 ...
90 ---
91 name:            test_redefined
92 tracksRegLiveness: true
93 liveins:
94   - { reg: '$r0', virtual-reg: '' }
95   - { reg: '$r1', virtual-reg: '' }
96 body:             |
97   ; CHECK-LABEL: name: test_redefined
98   ; CHECK: bb.0:
99   ; CHECK:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
100   ; CHECK:   tCMPi8 renamable $r0, 0, 14, $noreg, implicit-def $cpsr
101   ; CHECK:   renamable $r0 = t2ADDrs killed renamable $r0, killed renamable $r1, 18, 14, $noreg, $noreg
102   ; CHECK:   tBcc %bb.2, 0, killed $cpsr
103   ; CHECK: bb.1:
104   ; CHECK:   renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
105   ; CHECK:   tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
106   ; CHECK: bb.2:
107   ; CHECK:   $r0, dead $cpsr = tMOVi8 0, 14, $noreg
108   ; CHECK:   tBX_RET 14, $noreg, implicit killed $r0
109   bb.0:
110     successors: %bb.1(0x30000000), %bb.2(0x50000000)
111     liveins: $r0, $r1
113     tCMPi8 renamable $r0, 0, 14, $noreg, implicit-def $cpsr
114     renamable $r0 = t2ADDrs killed renamable $r0, killed renamable $r1, 18, 14, $noreg, $noreg
115     t2Bcc %bb.1, 0, killed $cpsr
117   bb.2:
118     liveins: $r0
120     renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
121     tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
123   bb.1:
124     $r0, dead $cpsr = tMOVi8 0, 14, $noreg
125     tBX_RET 14, $noreg, implicit killed $r0
129 name:            test_notredefined
130 tracksRegLiveness: true
131 liveins:
132   - { reg: '$r0', virtual-reg: '' }
133   - { reg: '$r1', virtual-reg: '' }
134 body:             |
135   ; CHECK-LABEL: name: test_notredefined
136   ; CHECK: bb.0:
137   ; CHECK:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
138   ; CHECK:   renamable $r1 = t2ADDrs renamable $r0, killed renamable $r1, 18, 14, $noreg, $noreg
139   ; CHECK:   tCBZ $r0, %bb.2
140   ; CHECK: bb.1:
141   ; CHECK:   renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
142   ; CHECK:   tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
143   ; CHECK: bb.2:
144   ; CHECK:   $r0, dead $cpsr = tMOVi8 0, 14, $noreg
145   ; CHECK:   tBX_RET 14, $noreg, implicit killed $r0
146   bb.0:
147     successors: %bb.1(0x30000000), %bb.2(0x50000000)
148     liveins: $r0, $r1
150     tCMPi8 renamable $r0, 0, 14, $noreg, implicit-def $cpsr
151     renamable $r1 = t2ADDrs renamable $r0, killed renamable $r1, 18, 14, $noreg, $noreg
152     t2Bcc %bb.1, 0, killed $cpsr
154   bb.2:
155     liveins: $r0
157     renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
158     tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
160   bb.1:
161     $r0, dead $cpsr = tMOVi8 0, 14, $noreg
162     tBX_RET 14, $noreg, implicit killed $r0
166 name:            test_notcmp
167 tracksRegLiveness: true
168 liveins:
169   - { reg: '$r0', virtual-reg: '' }
170   - { reg: '$r1', virtual-reg: '' }
171 body:             |
172   ; CHECK-LABEL: name: test_notcmp
173   ; CHECK: bb.0:
174   ; CHECK:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
175   ; CHECK:   tCMPi8 renamable $r0, 0, 14, $noreg, implicit-def $cpsr
176   ; CHECK:   renamable $r1, $cpsr = tADDrr renamable $r0, killed renamable $r1, 14, $noreg
177   ; CHECK:   tBcc %bb.2, 0, killed $cpsr
178   ; CHECK: bb.1:
179   ; CHECK:   renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
180   ; CHECK:   tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
181   ; CHECK: bb.2:
182   ; CHECK:   $r0, dead $cpsr = tMOVi8 0, 14, $noreg
183   ; CHECK:   tBX_RET 14, $noreg, implicit killed $r0
184   bb.0:
185     successors: %bb.1(0x30000000), %bb.2(0x50000000)
186     liveins: $r0, $r1
188     tCMPi8 renamable $r0, 0, 14, $noreg, implicit-def $cpsr
189     renamable $r1, $cpsr = tADDrr renamable $r0, killed renamable $r1, 14, $noreg
190     t2Bcc %bb.1, 0, killed $cpsr
192   bb.2:
193     liveins: $r0
195     renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
196     tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
198   bb.1:
199     $r0, dead $cpsr = tMOVi8 0, 14, $noreg
200     tBX_RET 14, $noreg, implicit killed $r0
204 name:            test_killflag_1
205 tracksRegLiveness: true
206 liveins:
207   - { reg: '$r0', virtual-reg: '' }
208   - { reg: '$r1', virtual-reg: '' }
209 body:             |
210   ; CHECK-LABEL: name: test_killflag_1
211   ; CHECK: bb.0:
212   ; CHECK:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
213   ; CHECK:   renamable $r0 = t2ADDrs killed renamable $r0, killed renamable $r0, 18, 14, $noreg, $noreg
214   ; CHECK:   tCBZ killed $r1, %bb.2
215   ; CHECK: bb.1:
216   ; CHECK:   renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
217   ; CHECK:   tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
218   ; CHECK: bb.2:
219   ; CHECK:   $r0, dead $cpsr = tMOVi8 0, 14, $noreg
220   ; CHECK:   tBX_RET 14, $noreg, implicit killed $r0
221   bb.0:
222     successors: %bb.1(0x30000000), %bb.2(0x50000000)
223     liveins: $r0, $r1
225     tCMPi8 killed renamable $r1, 0, 14, $noreg, implicit-def $cpsr
226     renamable $r0 = t2ADDrs killed renamable $r0, killed renamable $r0, 18, 14, $noreg, $noreg
227     t2Bcc %bb.1, 0, killed $cpsr
229   bb.2:
230     liveins: $r0
232     renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
233     tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
235   bb.1:
236     $r0, dead $cpsr = tMOVi8 0, 14, $noreg
237     tBX_RET 14, $noreg, implicit killed $r0
241 name:            test_killflag_2
242 tracksRegLiveness: true
243 liveins:
244   - { reg: '$r0', virtual-reg: '' }
245   - { reg: '$r1', virtual-reg: '' }
246 body:             |
247   ; CHECK-LABEL: name: test_killflag_2
248   ; CHECK: bb.0:
249   ; CHECK:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
250   ; CHECK:   renamable $r0 = t2ADDrs renamable $r1, killed renamable $r0, 18, 14, $noreg, $noreg
251   ; CHECK:   tCBZ killed $r1, %bb.2
252   ; CHECK: bb.1:
253   ; CHECK:   renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
254   ; CHECK:   tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
255   ; CHECK: bb.2:
256   ; CHECK:   $r0, dead $cpsr = tMOVi8 0, 14, $noreg
257   ; CHECK:   tBX_RET 14, $noreg, implicit killed $r0
258   bb.0:
259     successors: %bb.1(0x30000000), %bb.2(0x50000000)
260     liveins: $r0, $r1
262     tCMPi8 renamable $r1, 0, 14, $noreg, implicit-def $cpsr
263     renamable $r0 = t2ADDrs killed renamable $r1, killed renamable $r0, 18, 14, $noreg, $noreg
264     t2Bcc %bb.1, 0, killed $cpsr
266   bb.2:
267     liveins: $r0
269     renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
270     tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
272   bb.1:
273     $r0, dead $cpsr = tMOVi8 0, 14, $noreg
274     tBX_RET 14, $noreg, implicit killed $r0
278 name:            test_cpsr
279 tracksRegLiveness: true
280 liveins:
281   - { reg: '$r0', virtual-reg: '' }
282   - { reg: '$r1', virtual-reg: '' }
283 body:             |
284   ; CHECK-LABEL: name: test_cpsr
285   ; CHECK: bb.0:
286   ; CHECK:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
287   ; CHECK:   tCMPi8 renamable $r0, 0, 14, $noreg, implicit-def $cpsr
288   ; CHECK:   t2IT 0, 8, implicit-def $itstate
289   ; CHECK:   renamable $r1 = t2ADDri killed renamable $r1, 1, 1, $cpsr, $noreg, implicit killed $itstate
290   ; CHECK:   tBcc %bb.2, 0, killed $cpsr
291   ; CHECK: bb.1:
292   ; CHECK:   renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
293   ; CHECK:   tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
294   ; CHECK: bb.2:
295   ; CHECK:   $r0, dead $cpsr = tMOVi8 0, 14, $noreg
296   ; CHECK:   tBX_RET 14, $noreg, implicit killed $r0
297   bb.0:
298     successors: %bb.1(0x30000000), %bb.2(0x50000000)
299     liveins: $r0, $r1
301     tCMPi8 renamable $r0, 0, 14, $noreg, implicit-def $cpsr
302     t2IT 0, 8, implicit-def $itstate
303     renamable $r1 = t2ADDri killed renamable $r1, 1, 1, $cpsr, $noreg, implicit killed $itstate
304     t2Bcc %bb.1, 0, killed $cpsr
306   bb.2:
307     liveins: $r0
309     renamable $r0 = tLDRi killed renamable $r0, 0, 14, $noreg :: (load 4 from %ir.x)
310     tTAILJMPdND @c, 14, $noreg, implicit $sp, implicit $sp, implicit killed $r0
312   bb.1:
313     $r0, dead $cpsr = tMOVi8 0, 14, $noreg
314     tBX_RET 14, $noreg, implicit killed $r0