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