[ARM] Cortex-M4 schedule additions
[llvm-complete.git] / test / CodeGen / Thumb / peephole-mi.mir
blobd7910b194d8ee703a69ff3bc496866ac94e902ed
1 # RUN: llc -mtriple thumbv8m.base-none-eabi -run-pass=peephole-opt -verify-machineinstrs -o - %s | FileCheck %s
2 --- |
3   target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
4   target triple = "thumbv8m.base-none-none-eabi"
6   define i32 @test_adc(i32 %a, i32 %b) { ret i32 %a }
7   define i32 @test_adc_mov(i32 %a, i32 %b) { ret i32 %a }
8   define i32 @test_sbc(i32 %a, i32 %b) { ret i32 %a }
9   define i32 @test_rsb(i32 %a) { ret i32 %a }
10   define i32 @test_and(i32 %a, i32 %b) { ret i32 %a }
11   define i32 @test_orr(i32 %a, i32 %b) { ret i32 %a }
12   define i32 @test_eor(i32 %a, i32 %b) { ret i32 %a }
13   define i32 @test_bic(i32 %a, i32 %b) { ret i32 %a }
14   define i32 @test_mvn(i32 %a) { ret i32 %a }
15   define i32 @test_asrrr(i32 %a, i32 %b) { ret i32 %a }
16   define i32 @test_asrri(i32 %a) { ret i32 %a }
17   define i32 @test_ror(i32 %a, i32 %b) { ret i32 %a }
19 ...
20 ---
21 name:            test_adc
22 liveins:
23   - { reg: '$r0', virtual-reg: '%0' }
24   - { reg: '$r1', virtual-reg: '%1' }
25 body:             |
26   ; CHECK-LABEL: name: test_adc
27   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r1
28   ; CHECK:   [[COPY1:%[0-9]+]]:tgpr = COPY $r0
29   ; CHECK:   [[tADDrr:%[0-9]+]]:tgpr, $cpsr = tADDrr [[COPY1]], [[COPY]], 14, $noreg
30   ; CHECK:   [[tADC:%[0-9]+]]:tgpr, $cpsr = tADC [[COPY1]], [[COPY]], 14, $noreg, implicit $cpsr
31   ; CHECK:   tBcc %bb.2, 1, $cpsr
32   ; CHECK:   tB %bb.1, 14, $noreg
33   bb.0:
34     successors: %bb.2(0x40000000), %bb.1(0x40000000)
35     liveins: $r0, $r1
37     %1:tgpr = COPY $r1
38     %0:tgpr = COPY $r0
39     %3:tgpr, $cpsr = tADDrr %0, %1, 14, $noreg
40     %2:tgpr, dead $cpsr = tADC %0, %1, 14, $noreg, implicit $cpsr
41     tCMPi8 %2, 0, 14, $noreg, implicit-def $cpsr
42     tBcc %bb.2, 1, $cpsr
43     tB %bb.1, 14, $noreg
45   bb.1:
46     $r0 = COPY %0
47     tBX_RET 14, $noreg, implicit $r0
49   bb.2:
50     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
51     $r0 = COPY %2
52     tBX_RET 14, $noreg, implicit $r0
53 ...
54 ---
55 name:            test_adc_mov
56 liveins:
57   - { reg: '$r0', virtual-reg: '%0' }
58   - { reg: '$r1', virtual-reg: '%1' }
59 body:             |
60   ; CHECK-LABEL: name: test_adc_mov
61   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r1
62   ; CHECK:   [[COPY1:%[0-9]+]]:tgpr = COPY $r0
63   ; CHECK:   [[tADDrr:%[0-9]+]]:tgpr, $cpsr = tADDrr [[COPY1]], [[COPY]], 14, $noreg
64   ; CHECK:   [[tADC:%[0-9]+]]:tgpr, dead $cpsr = tADC [[COPY1]], [[COPY]], 14, $noreg, implicit $cpsr
65   ; CHECK:   [[tMOVi8_:%[0-9]+]]:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
66   ; CHECK:   tCMPi8 [[tADC]], 0, 14, $noreg, implicit-def $cpsr
67   ; CHECK:   tBcc %bb.2, 1, $cpsr
68   ; CHECK:   tB %bb.1, 14, $noreg
69   bb.0:
70     successors: %bb.2(0x40000000), %bb.1(0x40000000)
71     liveins: $r0, $r1
73     %1:tgpr = COPY $r1
74     %0:tgpr = COPY $r0
75     %3:tgpr, $cpsr = tADDrr %0, %1, 14, $noreg
76     %2:tgpr, dead $cpsr = tADC %0, %1, 14, $noreg, implicit $cpsr
77     %5:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
78     tCMPi8 %2, 0, 14, $noreg, implicit-def $cpsr
79     tBcc %bb.2, 1, $cpsr
80     tB %bb.1, 14, $noreg
82   bb.1:
83     $r0 = COPY %0
84     tBX_RET 14, $noreg, implicit $r0
86   bb.2:
87     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
88     $r0 = COPY %2
89     tBX_RET 14, $noreg, implicit $r0
90 ...
91 ---
92 name:            test_sbc
93 liveins:
94   - { reg: '$r0', virtual-reg: '%0' }
95   - { reg: '$r1', virtual-reg: '%1' }
96 body:             |
97   ; CHECK-LABEL: name: test_sbc
98   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r1
99   ; CHECK:   [[COPY1:%[0-9]+]]:tgpr = COPY $r0
100   ; CHECK:   [[tADDrr:%[0-9]+]]:tgpr, $cpsr = tADDrr [[COPY1]], [[COPY]], 14, $noreg
101   ; CHECK:   [[tSBC:%[0-9]+]]:tgpr, $cpsr = tSBC [[COPY1]], [[COPY]], 14, $noreg, implicit $cpsr
102   ; CHECK:   tBcc %bb.2, 1, $cpsr
103   ; CHECK:   tB %bb.1, 14, $noreg
104   bb.0:
105     successors: %bb.2(0x40000000), %bb.1(0x40000000)
106     liveins: $r0, $r1
108     %1:tgpr = COPY $r1
109     %0:tgpr = COPY $r0
110     %3:tgpr, $cpsr = tADDrr %0, %1, 14, $noreg
111     %2:tgpr, dead $cpsr = tSBC %0, %1, 14, $noreg, implicit $cpsr
112     tCMPi8 %2, 0, 14, $noreg, implicit-def $cpsr
113     tBcc %bb.2, 1, $cpsr
114     tB %bb.1, 14, $noreg
116   bb.1:
117     $r0 = COPY %0
118     tBX_RET 14, $noreg, implicit $r0
120   bb.2:
121     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
122     $r0 = COPY %2
123     tBX_RET 14, $noreg, implicit $r0
126 name:            test_rsb
127 liveins:
128   - { reg: '$r0', virtual-reg: '%0' }
129 body:             |
130   ; CHECK-LABEL: name: test_rsb
131   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r0
132   ; CHECK:   [[tRSB:%[0-9]+]]:tgpr, $cpsr = tRSB [[COPY]], 14, $noreg
133   ; CHECK:   tBcc %bb.2, 1, $cpsr
134   ; CHECK:   tB %bb.1, 14, $noreg
135   bb.0:
136     successors: %bb.2(0x40000000), %bb.1(0x40000000)
137     liveins: $r0, $r1
139     %0:tgpr = COPY $r0
140     %1:tgpr, dead $cpsr = tRSB %0, 14, $noreg
141     tCMPi8 %1, 0, 14, $noreg, implicit-def $cpsr
142     tBcc %bb.2, 1, $cpsr
143     tB %bb.1, 14, $noreg
145   bb.1:
146     $r0 = COPY %0
147     tBX_RET 14, $noreg, implicit $r0
149   bb.2:
150     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
151     $r0 = COPY %1
152     tBX_RET 14, $noreg, implicit $r0
155 name:            test_and
156 liveins:
157   - { reg: '$r0', virtual-reg: '%0' }
158   - { reg: '$r1', virtual-reg: '%1' }
159 body:             |
160   ; CHECK-LABEL: name: test_and
161   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r1
162   ; CHECK:   [[COPY1:%[0-9]+]]:tgpr = COPY $r0
163   ; CHECK:   [[tAND:%[0-9]+]]:tgpr, $cpsr = tAND [[COPY1]], [[COPY]], 14, $noreg
164   ; CHECK:   tBcc %bb.2, 1, $cpsr
165   ; CHECK:   tB %bb.1, 14, $noreg
166   bb.0:
167     successors: %bb.2(0x40000000), %bb.1(0x40000000)
168     liveins: $r0, $r1
170     %1:tgpr = COPY $r1
171     %0:tgpr = COPY $r0
172     %2:tgpr, dead $cpsr = tAND %0, %1, 14, $noreg
173     tCMPi8 %2, 0, 14, $noreg, implicit-def $cpsr
174     tBcc %bb.2, 1, $cpsr
175     tB %bb.1, 14, $noreg
177   bb.1:
178     $r0 = COPY %0
179     tBX_RET 14, $noreg, implicit $r0
181   bb.2:
182     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
183     $r0 = COPY %2
184     tBX_RET 14, $noreg, implicit $r0
187 name:            test_orr
188 liveins:
189   - { reg: '$r0', virtual-reg: '%0' }
190   - { reg: '$r1', virtual-reg: '%1' }
191 body:             |
192   ; CHECK-LABEL: name: test_orr
193   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r1
194   ; CHECK:   [[COPY1:%[0-9]+]]:tgpr = COPY $r0
195   ; CHECK:   [[tORR:%[0-9]+]]:tgpr, $cpsr = tORR [[COPY1]], [[COPY]], 14, $noreg
196   ; CHECK:   tBcc %bb.2, 1, $cpsr
197   ; CHECK:   tB %bb.1, 14, $noreg
198   bb.0:
199     successors: %bb.2(0x40000000), %bb.1(0x40000000)
200     liveins: $r0, $r1
202     %1:tgpr = COPY $r1
203     %0:tgpr = COPY $r0
204     %2:tgpr, dead $cpsr = tORR %0, %1, 14, $noreg
205     tCMPi8 %2, 0, 14, $noreg, implicit-def $cpsr
206     tBcc %bb.2, 1, $cpsr
207     tB %bb.1, 14, $noreg
209   bb.1:
210     $r0 = COPY %0
211     tBX_RET 14, $noreg, implicit $r0
213   bb.2:
214     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
215     $r0 = COPY %2
216     tBX_RET 14, $noreg, implicit $r0
219 name:            test_eor
220 liveins:
221   - { reg: '$r0', virtual-reg: '%0' }
222   - { reg: '$r1', virtual-reg: '%1' }
223 body:             |
224   ; CHECK-LABEL: name: test_eor
225   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r1
226   ; CHECK:   [[COPY1:%[0-9]+]]:tgpr = COPY $r0
227   ; CHECK:   [[tEOR:%[0-9]+]]:tgpr, $cpsr = tEOR [[COPY1]], [[COPY]], 14, $noreg
228   ; CHECK:   tBcc %bb.2, 1, $cpsr
229   ; CHECK:   tB %bb.1, 14, $noreg
230   bb.0:
231     successors: %bb.2(0x40000000), %bb.1(0x40000000)
232     liveins: $r0, $r1
234     %1:tgpr = COPY $r1
235     %0:tgpr = COPY $r0
236     %2:tgpr, dead $cpsr = tEOR %0, %1, 14, $noreg
237     tCMPi8 %2, 0, 14, $noreg, implicit-def $cpsr
238     tBcc %bb.2, 1, $cpsr
239     tB %bb.1, 14, $noreg
241   bb.1:
242     $r0 = COPY %0
243     tBX_RET 14, $noreg, implicit $r0
245   bb.2:
246     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
247     $r0 = COPY %2
248     tBX_RET 14, $noreg, implicit $r0
251 name:            test_bic
252 liveins:
253   - { reg: '$r0', virtual-reg: '%0' }
254   - { reg: '$r1', virtual-reg: '%1' }
255 body:             |
256   ; CHECK-LABEL: name: test_bic
257   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r1
258   ; CHECK:   [[COPY1:%[0-9]+]]:tgpr = COPY $r0
259   ; CHECK:   [[tBIC:%[0-9]+]]:tgpr, $cpsr = tBIC [[COPY1]], [[COPY]], 14, $noreg
260   ; CHECK:   tBcc %bb.2, 1, $cpsr
261   ; CHECK:   tB %bb.1, 14, $noreg
262   bb.0:
263     successors: %bb.2(0x40000000), %bb.1(0x40000000)
264     liveins: $r0, $r1
266     %1:tgpr = COPY $r1
267     %0:tgpr = COPY $r0
268     %2:tgpr, dead $cpsr = tBIC %0, %1, 14, $noreg
269     tCMPi8 %2, 0, 14, $noreg, implicit-def $cpsr
270     tBcc %bb.2, 1, $cpsr
271     tB %bb.1, 14, $noreg
273   bb.1:
274     $r0 = COPY %0
275     tBX_RET 14, $noreg, implicit $r0
277   bb.2:
278     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
279     $r0 = COPY %2
280     tBX_RET 14, $noreg, implicit $r0
283 name:            test_mvn
284 liveins:
285   - { reg: '$r0', virtual-reg: '%0' }
286 body:             |
287   ; CHECK-LABEL: name: test_mvn
288   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r0
289   ; CHECK:   [[tMVN:%[0-9]+]]:tgpr, $cpsr = tMVN [[COPY]], 14, $noreg
290   ; CHECK:   tBcc %bb.2, 1, $cpsr
291   ; CHECK:   tB %bb.1, 14, $noreg
292   bb.0:
293     successors: %bb.2(0x40000000), %bb.1(0x40000000)
294     liveins: $r0, $r1
296     %0:tgpr = COPY $r0
297     %1:tgpr, dead $cpsr = tMVN %0, 14, $noreg
298     tCMPi8 %1, 0, 14, $noreg, implicit-def $cpsr
299     tBcc %bb.2, 1, $cpsr
300     tB %bb.1, 14, $noreg
302   bb.1:
303     $r0 = COPY %0
304     tBX_RET 14, $noreg, implicit $r0
306   bb.2:
307     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
308     $r0 = COPY %1
309     tBX_RET 14, $noreg, implicit $r0
312 name:            test_asrrr
313 liveins:
314   - { reg: '$r0', virtual-reg: '%0' }
315   - { reg: '$r1', virtual-reg: '%1' }
316 body:             |
317   ; CHECK-LABEL: name: test_asrrr
318   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r1
319   ; CHECK:   [[COPY1:%[0-9]+]]:tgpr = COPY $r0
320   ; CHECK:   [[tASRrr:%[0-9]+]]:tgpr, $cpsr = tASRrr [[COPY1]], [[COPY]], 14, $noreg
321   ; CHECK:   tBcc %bb.2, 1, $cpsr
322   ; CHECK:   tB %bb.1, 14, $noreg
323   bb.0:
324     successors: %bb.2(0x40000000), %bb.1(0x40000000)
325     liveins: $r0, $r1
327     %1:tgpr = COPY $r1
328     %0:tgpr = COPY $r0
329     %2:tgpr, dead $cpsr = tASRrr %0, %1, 14, $noreg
330     tCMPi8 %2, 0, 14, $noreg, implicit-def $cpsr
331     tBcc %bb.2, 1, $cpsr
332     tB %bb.1, 14, $noreg
334   bb.1:
335     $r0 = COPY %0
336     tBX_RET 14, $noreg, implicit $r0
338   bb.2:
339     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
340     $r0 = COPY %2
341     tBX_RET 14, $noreg, implicit $r0
344 name:            test_asrri
345 liveins:
346   - { reg: '$r0', virtual-reg: '%0' }
347 body:             |
348   ; CHECK-LABEL: name: test_asrri
349   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r0
350   ; CHECK:   [[tASRri:%[0-9]+]]:tgpr, $cpsr = tASRri [[COPY]], 1, 14, $noreg
351   ; CHECK:   tBcc %bb.2, 1, $cpsr
352   ; CHECK:   tB %bb.1, 14, $noreg
353   bb.0:
354     successors: %bb.2(0x40000000), %bb.1(0x40000000)
355     liveins: $r0, $r1
357     %0:tgpr = COPY $r0
358     %2:tgpr, dead $cpsr = tASRri %0, 1, 14, $noreg
359     tCMPi8 %2, 0, 14, $noreg, implicit-def $cpsr
360     tBcc %bb.2, 1, $cpsr
361     tB %bb.1, 14, $noreg
363   bb.1:
364     $r0 = COPY %0
365     tBX_RET 14, $noreg, implicit $r0
367   bb.2:
368     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
369     $r0 = COPY %2
370     tBX_RET 14, $noreg, implicit $r0
373 name:            test_ror
374 liveins:
375   - { reg: '$r0', virtual-reg: '%0' }
376   - { reg: '$r1', virtual-reg: '%1' }
377 body:             |
378   ; CHECK-LABEL: name: test_ror
379   ; CHECK:   [[COPY:%[0-9]+]]:tgpr = COPY $r1
380   ; CHECK:   [[COPY1:%[0-9]+]]:tgpr = COPY $r0
381   ; CHECK:   [[tROR:%[0-9]+]]:tgpr, $cpsr = tROR [[COPY1]], [[COPY]], 14, $noreg
382   ; CHECK:   tBcc %bb.2, 1, $cpsr
383   ; CHECK:   tB %bb.1, 14, $noreg
384   bb.0:
385     successors: %bb.2(0x40000000), %bb.1(0x40000000)
386     liveins: $r0, $r1
388     %1:tgpr = COPY $r1
389     %0:tgpr = COPY $r0
390     %2:tgpr, dead $cpsr = tROR %0, %1, 14, $noreg
391     tCMPi8 %2, 0, 14, $noreg, implicit-def $cpsr
392     tBcc %bb.2, 1, $cpsr
393     tB %bb.1, 14, $noreg
395   bb.1:
396     $r0 = COPY %0
397     tBX_RET 14, $noreg, implicit $r0
399   bb.2:
400     %4:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
401     $r0 = COPY %2
402     tBX_RET 14, $noreg, implicit $r0