Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / X86 / GlobalISel / select-ashr-scalar.mir
blob96d8c96dc586e67e75c67a1a2b9ffcb0226417bf
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=x86_64-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL
3 --- |
5   define i64 @test_ashr_i64(i64 %arg1, i64 %arg2) {
6     %res = ashr i64 %arg1, %arg2
7     ret i64 %res
8   }
10   define i64 @test_ashr_i64_imm(i64 %arg1) {
11     %res = ashr i64 %arg1, 5
12     ret i64 %res
13   }
15   define i32 @test_ashr_i32(i32 %arg1, i32 %arg2) {
16     %res = ashr i32 %arg1, %arg2
17     ret i32 %res
18   }
20   define i32 @test_ashr_i32_imm(i32 %arg1) {
21     %res = ashr i32 %arg1, 5
22     ret i32 %res
23   }
25   define i16 @test_ashr_i16(i32 %arg1, i32 %arg2) {
26     %a = trunc i32 %arg1 to i16
27     %a2 = trunc i32 %arg2 to i16
28     %res = ashr i16 %a, %a2
29     ret i16 %res
30   }
32   define i16 @test_ashr_i16_imm(i32 %arg1) {
33     %a = trunc i32 %arg1 to i16
34     %res = ashr i16 %a, 5
35     ret i16 %res
36   }
38   define i8 @test_ashr_i8(i32 %arg1, i32 %arg2) {
39     %a = trunc i32 %arg1 to i8
40     %a2 = trunc i32 %arg2 to i8
41     %res = ashr i8 %a, %a2
42     ret i8 %res
43   }
45   define i8 @test_ashr_i8_imm(i32 %arg1) {
46     %a = trunc i32 %arg1 to i8
47     %res = ashr i8 %a, 5
48     ret i8 %res
49   }
50 ...
51 ---
52 name:            test_ashr_i64
53 alignment:       16
54 legalized:       true
55 regBankSelected: true
56 tracksRegLiveness: true
57 registers:
58   - { id: 0, class: gpr, preferred-register: '' }
59   - { id: 1, class: gpr, preferred-register: '' }
60   - { id: 2, class: gpr, preferred-register: '' }
61   - { id: 3, class: gpr, preferred-register: '' }
62 liveins:
63 fixedStack:
64 stack:
65 constants:
66 body:             |
67   bb.1 (%ir-block.0):
68     liveins: $rdi, $rsi
70     ; ALL-LABEL: name: test_ashr_i64
71     ; ALL: liveins: $rdi, $rsi
72     ; ALL-NEXT: {{  $}}
73     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
74     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr64_with_sub_8bit = COPY $rsi
75     ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit
76     ; ALL-NEXT: $cl = COPY [[COPY2]]
77     ; ALL-NEXT: [[SAR64rCL:%[0-9]+]]:gr64 = SAR64rCL [[COPY]], implicit-def dead $eflags, implicit $cl
78     ; ALL-NEXT: $rax = COPY [[SAR64rCL]]
79     ; ALL-NEXT: RET 0, implicit $rax
80     %0(s64) = COPY $rdi
81     %1(s64) = COPY $rsi
82     %2(s8) = G_TRUNC %1
83     %3(s64) = G_ASHR %0, %2
84     $rax = COPY %3(s64)
85     RET 0, implicit $rax
87 ...
88 ---
89 name:            test_ashr_i64_imm
90 alignment:       16
91 legalized:       true
92 regBankSelected: true
93 tracksRegLiveness: true
94 registers:
95   - { id: 0, class: gpr, preferred-register: '' }
96   - { id: 1, class: gpr, preferred-register: '' }
97   - { id: 2, class: gpr, preferred-register: '' }
98 liveins:
99 fixedStack:
100 stack:
101 constants:
102 body:             |
103   bb.1 (%ir-block.0):
104     liveins: $rdi
106     ; ALL-LABEL: name: test_ashr_i64_imm
107     ; ALL: liveins: $rdi
108     ; ALL-NEXT: {{  $}}
109     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
110     ; ALL-NEXT: [[SAR64ri:%[0-9]+]]:gr64 = SAR64ri [[COPY]], 5, implicit-def dead $eflags
111     ; ALL-NEXT: $rax = COPY [[SAR64ri]]
112     ; ALL-NEXT: RET 0, implicit $rax
113     %0(s64) = COPY $rdi
114     %1(s8) = G_CONSTANT i8 5
115     %2(s64) = G_ASHR %0, %1
116     $rax = COPY %2(s64)
117     RET 0, implicit $rax
121 name:            test_ashr_i32
122 alignment:       16
123 legalized:       true
124 regBankSelected: true
125 tracksRegLiveness: true
126 registers:
127   - { id: 0, class: gpr, preferred-register: '' }
128   - { id: 1, class: gpr, preferred-register: '' }
129   - { id: 2, class: gpr, preferred-register: '' }
130   - { id: 3, class: gpr, preferred-register: '' }
131 liveins:
132 fixedStack:
133 stack:
134 constants:
135 body:             |
136   bb.1 (%ir-block.0):
137     liveins: $edi, $esi
139     ; ALL-LABEL: name: test_ashr_i32
140     ; ALL: liveins: $edi, $esi
141     ; ALL-NEXT: {{  $}}
142     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
143     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
144     ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit
145     ; ALL-NEXT: $cl = COPY [[COPY2]]
146     ; ALL-NEXT: [[SAR32rCL:%[0-9]+]]:gr32 = SAR32rCL [[COPY]], implicit-def dead $eflags, implicit $cl
147     ; ALL-NEXT: $eax = COPY [[SAR32rCL]]
148     ; ALL-NEXT: RET 0, implicit $eax
149     %0(s32) = COPY $edi
150     %1(s32) = COPY $esi
151     %2(s8) = G_TRUNC %1
152     %3(s32) = G_ASHR %0, %2
153     $eax = COPY %3(s32)
154     RET 0, implicit $eax
158 name:            test_ashr_i32_imm
159 alignment:       16
160 legalized:       true
161 regBankSelected: true
162 tracksRegLiveness: true
163 registers:
164   - { id: 0, class: gpr, preferred-register: '' }
165   - { id: 1, class: gpr, preferred-register: '' }
166   - { id: 2, class: gpr, preferred-register: '' }
167 liveins:
168 fixedStack:
169 stack:
170 constants:
171 body:             |
172   bb.1 (%ir-block.0):
173     liveins: $edi
175     ; ALL-LABEL: name: test_ashr_i32_imm
176     ; ALL: liveins: $edi
177     ; ALL-NEXT: {{  $}}
178     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
179     ; ALL-NEXT: [[SAR32ri:%[0-9]+]]:gr32 = SAR32ri [[COPY]], 5, implicit-def dead $eflags
180     ; ALL-NEXT: $eax = COPY [[SAR32ri]]
181     ; ALL-NEXT: RET 0, implicit $eax
182     %0(s32) = COPY $edi
183     %1(s8) = G_CONSTANT i8 5
184     %2(s32) = G_ASHR %0, %1
185     $eax = COPY %2(s32)
186     RET 0, implicit $eax
190 name:            test_ashr_i16
191 alignment:       16
192 legalized:       true
193 regBankSelected: true
194 tracksRegLiveness: true
195 registers:
196   - { id: 0, class: gpr, preferred-register: '' }
197   - { id: 1, class: gpr, preferred-register: '' }
198   - { id: 2, class: gpr, preferred-register: '' }
199   - { id: 3, class: gpr, preferred-register: '' }
200   - { id: 4, class: gpr, preferred-register: '' }
201 liveins:
202 fixedStack:
203 stack:
204 constants:
205 body:             |
206   bb.1 (%ir-block.0):
207     liveins: $edi, $esi
209     ; ALL-LABEL: name: test_ashr_i16
210     ; ALL: liveins: $edi, $esi
211     ; ALL-NEXT: {{  $}}
212     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
213     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
214     ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr16 = COPY [[COPY]].sub_16bit
215     ; ALL-NEXT: [[COPY3:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit
216     ; ALL-NEXT: $cl = COPY [[COPY3]]
217     ; ALL-NEXT: [[SAR16rCL:%[0-9]+]]:gr16 = SAR16rCL [[COPY2]], implicit-def dead $eflags, implicit $cl
218     ; ALL-NEXT: $ax = COPY [[SAR16rCL]]
219     ; ALL-NEXT: RET 0, implicit $ax
220     %0(s32) = COPY $edi
221     %1(s32) = COPY $esi
222     %2(s16) = G_TRUNC %0(s32)
223     %3(s8) = G_TRUNC %1(s32)
224     %4(s16) = G_ASHR %2, %3
225     $ax = COPY %4(s16)
226     RET 0, implicit $ax
230 name:            test_ashr_i16_imm
231 alignment:       16
232 legalized:       true
233 regBankSelected: true
234 tracksRegLiveness: true
235 registers:
236   - { id: 0, class: gpr, preferred-register: '' }
237   - { id: 1, class: gpr, preferred-register: '' }
238   - { id: 2, class: gpr, preferred-register: '' }
239   - { id: 3, class: gpr, preferred-register: '' }
240 liveins:
241 fixedStack:
242 stack:
243 constants:
244 body:             |
245   bb.1 (%ir-block.0):
246     liveins: $edi
248     ; ALL-LABEL: name: test_ashr_i16_imm
249     ; ALL: liveins: $edi
250     ; ALL-NEXT: {{  $}}
251     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
252     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr16 = COPY [[COPY]].sub_16bit
253     ; ALL-NEXT: [[SAR16ri:%[0-9]+]]:gr16 = SAR16ri [[COPY1]], 5, implicit-def dead $eflags
254     ; ALL-NEXT: $ax = COPY [[SAR16ri]]
255     ; ALL-NEXT: RET 0, implicit $ax
256     %0(s32) = COPY $edi
257     %2(s8) = G_CONSTANT i8 5
258     %1(s16) = G_TRUNC %0(s32)
259     %3(s16) = G_ASHR %1, %2
260     $ax = COPY %3(s16)
261     RET 0, implicit $ax
265 name:            test_ashr_i8
266 alignment:       16
267 legalized:       true
268 regBankSelected: true
269 tracksRegLiveness: true
270 registers:
271   - { id: 0, class: gpr, preferred-register: '' }
272   - { id: 1, class: gpr, preferred-register: '' }
273   - { id: 2, class: gpr, preferred-register: '' }
274   - { id: 3, class: gpr, preferred-register: '' }
275   - { id: 4, class: gpr, preferred-register: '' }
276 liveins:
277 fixedStack:
278 stack:
279 constants:
280 body:             |
281   bb.1 (%ir-block.0):
282     liveins: $edi, $esi
284     ; ALL-LABEL: name: test_ashr_i8
285     ; ALL: liveins: $edi, $esi
286     ; ALL-NEXT: {{  $}}
287     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
288     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
289     ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr8 = COPY [[COPY]].sub_8bit
290     ; ALL-NEXT: [[COPY3:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit
291     ; ALL-NEXT: $cl = COPY [[COPY3]]
292     ; ALL-NEXT: [[SAR8rCL:%[0-9]+]]:gr8 = SAR8rCL [[COPY2]], implicit-def dead $eflags, implicit $cl
293     ; ALL-NEXT: $al = COPY [[SAR8rCL]]
294     ; ALL-NEXT: RET 0, implicit $al
295     %0(s32) = COPY $edi
296     %1(s32) = COPY $esi
297     %2(s8) = G_TRUNC %0(s32)
298     %3(s8) = G_TRUNC %1(s32)
299     %4(s8) = G_ASHR %2, %3
300     $al = COPY %4(s8)
301     RET 0, implicit $al
305 name:            test_ashr_i8_imm
306 alignment:       16
307 legalized:       true
308 regBankSelected: true
309 tracksRegLiveness: true
310 registers:
311   - { id: 0, class: gpr, preferred-register: '' }
312   - { id: 1, class: gpr, preferred-register: '' }
313   - { id: 2, class: gpr, preferred-register: '' }
314   - { id: 3, class: gpr, preferred-register: '' }
315 liveins:
316 fixedStack:
317 stack:
318 constants:
319 body:             |
320   bb.1 (%ir-block.0):
321     liveins: $edi
323     ; ALL-LABEL: name: test_ashr_i8_imm
324     ; ALL: liveins: $edi
325     ; ALL-NEXT: {{  $}}
326     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
327     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr8 = COPY [[COPY]].sub_8bit
328     ; ALL-NEXT: [[SAR8ri:%[0-9]+]]:gr8 = SAR8ri [[COPY1]], 5, implicit-def dead $eflags
329     ; ALL-NEXT: $al = COPY [[SAR8ri]]
330     ; ALL-NEXT: RET 0, implicit $al
331     %0(s32) = COPY $edi
332     %2(s8) = G_CONSTANT i8 5
333     %1(s8) = G_TRUNC %0(s32)
334     %3(s8) = G_ASHR %1, %2
335     $al = COPY %3(s8)
336     RET 0, implicit $al