Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / CodeGen / ARM / GlobalISel / thumb-select-exts.mir
blob365a614d6ec397b84286deefc26339aa5fff2bd0
1 # RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
2 --- |
3   define void @test_trunc_and_zext_s1() { ret void }
4   define void @test_trunc_and_sext_s1() { ret void }
5   define void @test_trunc_and_anyext_s1() { ret void }
7   define void @test_trunc_and_zext_s8() { ret void }
8   define void @test_trunc_and_sext_s8() { ret void }
9   define void @test_trunc_and_anyext_s8() { ret void }
11   define void @test_trunc_and_zext_s16() { ret void }
12   define void @test_trunc_and_sext_s16() { ret void }
13   define void @test_trunc_and_anyext_s16() { ret void }
14 ...
15 ---
16 name:            test_trunc_and_zext_s1
17 # CHECK-LABEL: name: test_trunc_and_zext_s1
18 legalized:       true
19 regBankSelected: true
20 selected:        false
21 # CHECK: selected: true
22 tracksRegLiveness: true
23 registers:
24   - { id: 0, class: gprb }
25   - { id: 1, class: gprb }
26   - { id: 2, class: gprb }
27 body:             |
28   bb.0:
29     liveins: $r0
31     %0(s32) = COPY $r0
32     ; CHECK: [[VREG:%[0-9]+]]:gpr = COPY $r0
34     %1(s1) = G_TRUNC %0(s32)
36     %2(s32) = G_ZEXT %1(s1)
37     ; CHECK: [[RVREG:%[0-9]+]]:rgpr = COPY [[VREG]]
38     ; CHECK: [[VREGEXT:%[0-9]+]]:rgpr = t2ANDri [[RVREG]], 1, 14, $noreg, $noreg
40     $r0 = COPY %2(s32)
41     ; CHECK: $r0 = COPY [[VREGEXT]]
43     BX_RET 14, $noreg, implicit $r0
44     ; CHECK: BX_RET 14, $noreg, implicit $r0
45 ...
46 ---
47 name:            test_trunc_and_sext_s1
48 # CHECK-LABEL: name: test_trunc_and_sext_s1
49 legalized:       true
50 regBankSelected: true
51 selected:        false
52 # CHECK: selected: true
53 tracksRegLiveness: true
54 registers:
55   - { id: 0, class: gprb }
56   - { id: 1, class: gprb }
57   - { id: 2, class: gprb }
58 body:             |
59   bb.0:
60     liveins: $r0
62     %0(s32) = COPY $r0
63     ; CHECK: [[VREG:%[0-9]+]]:gpr = COPY $r0
65     %1(s1) = G_TRUNC %0(s32)
67     %2(s32) = G_SEXT %1(s1)
68     ; CHECK: [[RVREG:%[0-9]+]]:rgpr = COPY [[VREG]]
69     ; CHECK: [[VREGAND:%[0-9]+]]:rgpr = t2ANDri [[RVREG]], 1, 14, $noreg, $noreg
70     ; CHECK: [[VREGEXT:%[0-9]+]]:rgpr = t2RSBri [[VREGAND]], 0, 14, $noreg, $noreg
72     $r0 = COPY %2(s32)
73     ; CHECK: $r0 = COPY [[VREGEXT]]
75     BX_RET 14, $noreg, implicit $r0
76     ; CHECK: BX_RET 14, $noreg, implicit $r0
77 ...
78 ---
79 name:            test_trunc_and_anyext_s1
80 # CHECK-LABEL: name: test_trunc_and_anyext_s1
81 legalized:       true
82 regBankSelected: true
83 selected:        false
84 # CHECK: selected: true
85 tracksRegLiveness: true
86 registers:
87   - { id: 0, class: gprb }
88   - { id: 1, class: gprb }
89   - { id: 2, class: gprb }
90 body:             |
91   bb.0:
92     liveins: $r0
94     %0(s32) = COPY $r0
95     ; CHECK: [[VREG:%[0-9]+]]:gpr = COPY $r0
97     %1(s1) = G_TRUNC %0(s32)
99     %2(s32) = G_ANYEXT %1(s1)
101     $r0 = COPY %2(s32)
102     ; CHECK: $r0 = COPY [[VREG]]
104     BX_RET 14, $noreg, implicit $r0
105     ; CHECK: BX_RET 14, $noreg, implicit $r0
108 name:            test_trunc_and_zext_s8
109 # CHECK-LABEL: name: test_trunc_and_zext_s8
110 legalized:       true
111 regBankSelected: true
112 selected:        false
113 # CHECK: selected: true
114 tracksRegLiveness: true
115 registers:
116   - { id: 0, class: gprb }
117   - { id: 1, class: gprb }
118   - { id: 2, class: gprb }
119 body:             |
120   bb.0:
121     liveins: $r0
123     %0(s32) = COPY $r0
124     ; CHECK: [[VREG:%[0-9]+]]:gpr = COPY $r0
126     %1(s8) = G_TRUNC %0(s32)
127     ; CHECK: [[VREGTRUNC:%[0-9]+]]:rgpr = COPY [[VREG]]
129     %2(s32) = G_ZEXT %1(s8)
130     ; CHECK: [[VREGEXT:%[0-9]+]]:rgpr = t2UXTB [[VREGTRUNC]], 0, 14, $noreg
132     $r0 = COPY %2(s32)
133     ; CHECK: $r0 = COPY [[VREGEXT]]
135     BX_RET 14, $noreg, implicit $r0
136     ; CHECK: BX_RET 14, $noreg, implicit $r0
139 name:            test_trunc_and_sext_s8
140 # CHECK-LABEL: name: test_trunc_and_sext_s8
141 legalized:       true
142 regBankSelected: true
143 selected:        false
144 # CHECK: selected: true
145 tracksRegLiveness: true
146 registers:
147   - { id: 0, class: gprb }
148   - { id: 1, class: gprb }
149   - { id: 2, class: gprb }
150 body:             |
151   bb.0:
152     liveins: $r0
154     %0(s32) = COPY $r0
155     ; CHECK: [[VREG:%[0-9]+]]:gpr = COPY $r0
157     %1(s8) = G_TRUNC %0(s32)
158     ; CHECK: [[VREGTRUNC:%[0-9]+]]:rgpr = COPY [[VREG]]
160     %2(s32) = G_SEXT %1(s8)
161     ; CHECK: [[VREGEXT:%[0-9]+]]:rgpr = t2SXTB [[VREGTRUNC]], 0, 14, $noreg
163     $r0 = COPY %2(s32)
164     ; CHECK: $r0 = COPY [[VREGEXT]]
166     BX_RET 14, $noreg, implicit $r0
167     ; CHECK: BX_RET 14, $noreg, implicit $r0
170 name:            test_trunc_and_anyext_s8
171 # CHECK-LABEL: name: test_trunc_and_anyext_s8
172 legalized:       true
173 regBankSelected: true
174 selected:        false
175 # CHECK: selected: true
176 tracksRegLiveness: true
177 registers:
178   - { id: 0, class: gprb }
179   - { id: 1, class: gprb }
180   - { id: 2, class: gprb }
181 body:             |
182   bb.0:
183     liveins: $r0
185     %0(s32) = COPY $r0
186     ; CHECK: [[VREG:%[0-9]+]]:gpr = COPY $r0
188     %1(s8) = G_TRUNC %0(s32)
190     %2(s32) = G_ANYEXT %1(s8)
192     $r0 = COPY %2(s32)
193     ; CHECK: $r0 = COPY [[VREG]]
195     BX_RET 14, $noreg, implicit $r0
196     ; CHECK: BX_RET 14, $noreg, implicit $r0
199 name:            test_trunc_and_zext_s16
200 # CHECK-LABEL: name: test_trunc_and_zext_s16
201 legalized:       true
202 regBankSelected: true
203 selected:        false
204 # CHECK: selected: true
205 tracksRegLiveness: true
206 registers:
207   - { id: 0, class: gprb }
208   - { id: 1, class: gprb }
209   - { id: 2, class: gprb }
210 body:             |
211   bb.0:
212     liveins: $r0
214     %0(s32) = COPY $r0
215     ; CHECK: [[VREG:%[0-9]+]]:gpr = COPY $r0
217     %1(s16) = G_TRUNC %0(s32)
218     ; CHECK: [[VREGTRUNC:%[0-9]+]]:rgpr = COPY [[VREG]]
220     %2(s32) = G_ZEXT %1(s16)
221     ; CHECK: [[VREGEXT:%[0-9]+]]:rgpr = t2UXTH [[VREGTRUNC]], 0, 14, $noreg
223     $r0 = COPY %2(s32)
224     ; CHECK: $r0 = COPY [[VREGEXT]]
226     BX_RET 14, $noreg, implicit $r0
227     ; CHECK: BX_RET 14, $noreg, implicit $r0
230 name:            test_trunc_and_sext_s16
231 # CHECK-LABEL: name: test_trunc_and_sext_s16
232 legalized:       true
233 regBankSelected: true
234 selected:        false
235 # CHECK: selected: true
236 tracksRegLiveness: true
237 registers:
238   - { id: 0, class: gprb }
239   - { id: 1, class: gprb }
240   - { id: 2, class: gprb }
241 body:             |
242   bb.0:
243     liveins: $r0
245     %0(s32) = COPY $r0
246     ; CHECK: [[VREG:%[0-9]+]]:gpr = COPY $r0
248     %1(s16) = G_TRUNC %0(s32)
249     ; CHECK: [[VREGTRUNC:%[0-9]+]]:rgpr = COPY [[VREG]]
251     %2(s32) = G_SEXT %1(s16)
252     ; CHECK: [[VREGEXT:%[0-9]+]]:rgpr = t2SXTH [[VREGTRUNC]], 0, 14, $noreg
254     $r0 = COPY %2(s32)
255     ; CHECK: $r0 = COPY [[VREGEXT]]
257     BX_RET 14, $noreg, implicit $r0
258     ; CHECK: BX_RET 14, $noreg, implicit $r0
261 name:            test_trunc_and_anyext_s16
262 # CHECK-LABEL: name: test_trunc_and_anyext_s16
263 legalized:       true
264 regBankSelected: true
265 selected:        false
266 # CHECK: selected: true
267 tracksRegLiveness: true
268 registers:
269   - { id: 0, class: gprb }
270   - { id: 1, class: gprb }
271   - { id: 2, class: gprb }
272 body:             |
273   bb.0:
274     liveins: $r0
276     %0(s32) = COPY $r0
277     ; CHECK: [[VREG:%[0-9]+]]:gpr = COPY $r0
279     %1(s16) = G_TRUNC %0(s32)
281     %2(s32) = G_ANYEXT %1(s16)
283     $r0 = COPY %2(s32)
284     ; CHECK: $r0 = COPY [[VREG]]
286     BX_RET 14, $noreg, implicit $r0
287     ; CHECK: BX_RET 14, $noreg, implicit $r0