xref: /llvm-project/llvm/test/CodeGen/ARM/GlobalISel/thumb-instruction-select-cmp.mir (revision 7efabe5c7de46fe190638741c6ee81ae13255e38)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3--- |
4  define void @test_icmp_eq_s32() { ret void }
5  define void @test_icmp_ne_s32() { ret void }
6  define void @test_icmp_ugt_s32() { ret void }
7  define void @test_icmp_uge_s32() { ret void }
8  define void @test_icmp_ult_s32() { ret void }
9  define void @test_icmp_ule_s32() { ret void }
10  define void @test_icmp_sgt_s32() { ret void }
11  define void @test_icmp_sge_s32() { ret void }
12  define void @test_icmp_slt_s32() { ret void }
13  define void @test_icmp_sle_s32() { ret void }
14...
15---
16name:            test_icmp_eq_s32
17legalized:       true
18regBankSelected: true
19selected:        false
20registers:
21  - { id: 0, class: gprb }
22  - { id: 1, class: gprb }
23  - { id: 2, class: gprb }
24  - { id: 3, class: gprb }
25body:             |
26  bb.0:
27    liveins: $r0, $r1
28
29    ; CHECK-LABEL: name: test_icmp_eq_s32
30    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
31    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
32    ; CHECK: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
33    ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, implicit-def $cpsr
34    ; CHECK: [[t2MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[t2MOVi]], 1, 0 /* CC::eq */, $cpsr
35    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2MOVCCi]], 1, 14 /* CC::al */, $noreg, $noreg
36    ; CHECK: $r0 = COPY [[t2ANDri]]
37    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
38    %0(s32) = COPY $r0
39    %1(s32) = COPY $r1
40    %2(s1) = G_ICMP intpred(eq),  %0(s32), %1
41    %3(s32) = G_ZEXT %2(s1)
42    $r0 = COPY %3(s32)
43    BX_RET 14, $noreg, implicit $r0
44...
45---
46name:            test_icmp_ne_s32
47legalized:       true
48regBankSelected: true
49selected:        false
50registers:
51  - { id: 0, class: gprb }
52  - { id: 1, class: gprb }
53  - { id: 2, class: gprb }
54  - { id: 3, class: gprb }
55body:             |
56  bb.0:
57    liveins: $r0, $r1
58
59    ; CHECK-LABEL: name: test_icmp_ne_s32
60    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
61    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
62    ; CHECK: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
63    ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, implicit-def $cpsr
64    ; CHECK: [[t2MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[t2MOVi]], 1, 1 /* CC::ne */, $cpsr
65    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2MOVCCi]], 1, 14 /* CC::al */, $noreg, $noreg
66    ; CHECK: $r0 = COPY [[t2ANDri]]
67    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
68    %0(s32) = COPY $r0
69    %1(s32) = COPY $r1
70    %2(s1) = G_ICMP intpred(ne),  %0(s32), %1
71    %3(s32) = G_ZEXT %2(s1)
72    $r0 = COPY %3(s32)
73    BX_RET 14, $noreg, implicit $r0
74...
75---
76name:            test_icmp_ugt_s32
77legalized:       true
78regBankSelected: true
79selected:        false
80registers:
81  - { id: 0, class: gprb }
82  - { id: 1, class: gprb }
83  - { id: 2, class: gprb }
84  - { id: 3, class: gprb }
85body:             |
86  bb.0:
87    liveins: $r0, $r1
88
89    ; CHECK-LABEL: name: test_icmp_ugt_s32
90    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
91    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
92    ; CHECK: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
93    ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, implicit-def $cpsr
94    ; CHECK: [[t2MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[t2MOVi]], 1, 8 /* CC::hi */, $cpsr
95    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2MOVCCi]], 1, 14 /* CC::al */, $noreg, $noreg
96    ; CHECK: $r0 = COPY [[t2ANDri]]
97    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
98    %0(s32) = COPY $r0
99    %1(s32) = COPY $r1
100    %2(s1) = G_ICMP intpred(ugt),  %0(s32), %1
101    %3(s32) = G_ZEXT %2(s1)
102    $r0 = COPY %3(s32)
103    BX_RET 14, $noreg, implicit $r0
104...
105---
106name:            test_icmp_uge_s32
107legalized:       true
108regBankSelected: true
109selected:        false
110registers:
111  - { id: 0, class: gprb }
112  - { id: 1, class: gprb }
113  - { id: 2, class: gprb }
114  - { id: 3, class: gprb }
115body:             |
116  bb.0:
117    liveins: $r0, $r1
118
119    ; CHECK-LABEL: name: test_icmp_uge_s32
120    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
121    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
122    ; CHECK: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
123    ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, implicit-def $cpsr
124    ; CHECK: [[t2MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[t2MOVi]], 1, 2 /* CC::hs */, $cpsr
125    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2MOVCCi]], 1, 14 /* CC::al */, $noreg, $noreg
126    ; CHECK: $r0 = COPY [[t2ANDri]]
127    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
128    %0(s32) = COPY $r0
129    %1(s32) = COPY $r1
130    %2(s1) = G_ICMP intpred(uge),  %0(s32), %1
131    %3(s32) = G_ZEXT %2(s1)
132    $r0 = COPY %3(s32)
133    BX_RET 14, $noreg, implicit $r0
134...
135---
136name:            test_icmp_ult_s32
137legalized:       true
138regBankSelected: true
139selected:        false
140registers:
141  - { id: 0, class: gprb }
142  - { id: 1, class: gprb }
143  - { id: 2, class: gprb }
144  - { id: 3, class: gprb }
145body:             |
146  bb.0:
147    liveins: $r0, $r1
148
149    ; CHECK-LABEL: name: test_icmp_ult_s32
150    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
151    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
152    ; CHECK: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
153    ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, implicit-def $cpsr
154    ; CHECK: [[t2MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[t2MOVi]], 1, 3 /* CC::lo */, $cpsr
155    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2MOVCCi]], 1, 14 /* CC::al */, $noreg, $noreg
156    ; CHECK: $r0 = COPY [[t2ANDri]]
157    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
158    %0(s32) = COPY $r0
159    %1(s32) = COPY $r1
160    %2(s1) = G_ICMP intpred(ult),  %0(s32), %1
161    %3(s32) = G_ZEXT %2(s1)
162    $r0 = COPY %3(s32)
163    BX_RET 14, $noreg, implicit $r0
164...
165---
166name:            test_icmp_ule_s32
167legalized:       true
168regBankSelected: true
169selected:        false
170registers:
171  - { id: 0, class: gprb }
172  - { id: 1, class: gprb }
173  - { id: 2, class: gprb }
174  - { id: 3, class: gprb }
175body:             |
176  bb.0:
177    liveins: $r0, $r1
178
179    ; CHECK-LABEL: name: test_icmp_ule_s32
180    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
181    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
182    ; CHECK: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
183    ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, implicit-def $cpsr
184    ; CHECK: [[t2MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[t2MOVi]], 1, 9 /* CC::ls */, $cpsr
185    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2MOVCCi]], 1, 14 /* CC::al */, $noreg, $noreg
186    ; CHECK: $r0 = COPY [[t2ANDri]]
187    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
188    %0(s32) = COPY $r0
189    %1(s32) = COPY $r1
190    %2(s1) = G_ICMP intpred(ule),  %0(s32), %1
191    %3(s32) = G_ZEXT %2(s1)
192    $r0 = COPY %3(s32)
193    BX_RET 14, $noreg, implicit $r0
194...
195---
196name:            test_icmp_sgt_s32
197legalized:       true
198regBankSelected: true
199selected:        false
200registers:
201  - { id: 0, class: gprb }
202  - { id: 1, class: gprb }
203  - { id: 2, class: gprb }
204  - { id: 3, class: gprb }
205body:             |
206  bb.0:
207    liveins: $r0, $r1
208
209    ; CHECK-LABEL: name: test_icmp_sgt_s32
210    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
211    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
212    ; CHECK: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
213    ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, implicit-def $cpsr
214    ; CHECK: [[t2MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[t2MOVi]], 1, 12 /* CC::gt */, $cpsr
215    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2MOVCCi]], 1, 14 /* CC::al */, $noreg, $noreg
216    ; CHECK: $r0 = COPY [[t2ANDri]]
217    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
218    %0(s32) = COPY $r0
219    %1(s32) = COPY $r1
220    %2(s1) = G_ICMP intpred(sgt),  %0(s32), %1
221    %3(s32) = G_ZEXT %2(s1)
222    $r0 = COPY %3(s32)
223    BX_RET 14, $noreg, implicit $r0
224...
225---
226name:            test_icmp_sge_s32
227legalized:       true
228regBankSelected: true
229selected:        false
230registers:
231  - { id: 0, class: gprb }
232  - { id: 1, class: gprb }
233  - { id: 2, class: gprb }
234  - { id: 3, class: gprb }
235body:             |
236  bb.0:
237    liveins: $r0, $r1
238
239    ; CHECK-LABEL: name: test_icmp_sge_s32
240    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
241    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
242    ; CHECK: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
243    ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, implicit-def $cpsr
244    ; CHECK: [[t2MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[t2MOVi]], 1, 10 /* CC::ge */, $cpsr
245    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2MOVCCi]], 1, 14 /* CC::al */, $noreg, $noreg
246    ; CHECK: $r0 = COPY [[t2ANDri]]
247    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
248    %0(s32) = COPY $r0
249    %1(s32) = COPY $r1
250    %2(s1) = G_ICMP intpred(sge),  %0(s32), %1
251    %3(s32) = G_ZEXT %2(s1)
252    $r0 = COPY %3(s32)
253    BX_RET 14, $noreg, implicit $r0
254...
255---
256name:            test_icmp_slt_s32
257legalized:       true
258regBankSelected: true
259selected:        false
260registers:
261  - { id: 0, class: gprb }
262  - { id: 1, class: gprb }
263  - { id: 2, class: gprb }
264  - { id: 3, class: gprb }
265body:             |
266  bb.0:
267    liveins: $r0, $r1
268
269    ; CHECK-LABEL: name: test_icmp_slt_s32
270    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
271    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
272    ; CHECK: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
273    ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, implicit-def $cpsr
274    ; CHECK: [[t2MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[t2MOVi]], 1, 11 /* CC::lt */, $cpsr
275    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2MOVCCi]], 1, 14 /* CC::al */, $noreg, $noreg
276    ; CHECK: $r0 = COPY [[t2ANDri]]
277    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
278    %0(s32) = COPY $r0
279    %1(s32) = COPY $r1
280    %2(s1) = G_ICMP intpred(slt),  %0(s32), %1
281    %3(s32) = G_ZEXT %2(s1)
282    $r0 = COPY %3(s32)
283    BX_RET 14, $noreg, implicit $r0
284...
285---
286name:            test_icmp_sle_s32
287legalized:       true
288regBankSelected: true
289selected:        false
290registers:
291  - { id: 0, class: gprb }
292  - { id: 1, class: gprb }
293  - { id: 2, class: gprb }
294  - { id: 3, class: gprb }
295body:             |
296  bb.0:
297    liveins: $r0, $r1
298
299    ; CHECK-LABEL: name: test_icmp_sle_s32
300    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
301    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
302    ; CHECK: [[t2MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
303    ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, implicit-def $cpsr
304    ; CHECK: [[t2MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[t2MOVi]], 1, 13 /* CC::le */, $cpsr
305    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2MOVCCi]], 1, 14 /* CC::al */, $noreg, $noreg
306    ; CHECK: $r0 = COPY [[t2ANDri]]
307    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
308    %0(s32) = COPY $r0
309    %1(s32) = COPY $r1
310    %2(s1) = G_ICMP intpred(sle),  %0(s32), %1
311    %3(s32) = G_ZEXT %2(s1)
312    $r0 = COPY %3(s32)
313    BX_RET 14, $noreg, implicit $r0
314...
315