Revert "[lldb][test] Remove compiler version check and use regex" (#124101)
[llvm-project.git] / llvm / test / CodeGen / X86 / GlobalISel / select-lshr-scalar.mir
blob8b4f88847b217883f4ca3bfc1ffdcc3238c03cac
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_lshr_i64(i64 %arg1, i64 %arg2) {
6     %res = lshr i64 %arg1, %arg2
7     ret i64 %res
8   }
10   define i64 @test_lshr_i64_imm(i64 %arg1) {
11     %res = lshr i64 %arg1, 5
12     ret i64 %res
13   }
15   define i32 @test_lshr_i32(i32 %arg1, i32 %arg2) {
16     %res = lshr i32 %arg1, %arg2
17     ret i32 %res
18   }
20   define i32 @test_lshr_i32_imm(i32 %arg1) {
21     %res = lshr i32 %arg1, 5
22     ret i32 %res
23   }
25   define i16 @test_lshr_i16(i32 %arg1, i32 %arg2) {
26     %a = trunc i32 %arg1 to i16
27     %a2 = trunc i32 %arg2 to i16
28     %res = lshr i16 %a, %a2
29     ret i16 %res
30   }
32   define i16 @test_lshr_i16_imm(i32 %arg1) {
33     %a = trunc i32 %arg1 to i16
34     %res = lshr i16 %a, 5
35     ret i16 %res
36   }
38   define i8 @test_lshr_i8(i32 %arg1, i32 %arg2) {
39     %a = trunc i32 %arg1 to i8
40     %a2 = trunc i32 %arg2 to i8
41     %res = lshr i8 %a, %a2
42     ret i8 %res
43   }
45   define i8 @test_lshr_i8_imm(i32 %arg1) {
46     %a = trunc i32 %arg1 to i8
47     %res = lshr i8 %a, 5
48     ret i8 %res
49   }
51 ...
52 ---
53 name:            test_lshr_i64
54 alignment:       16
55 legalized:       true
56 regBankSelected: true
57 tracksRegLiveness: true
58 registers:
59   - { id: 0, class: gpr, preferred-register: '' }
60   - { id: 1, class: gpr, preferred-register: '' }
61   - { id: 2, class: gpr, preferred-register: '' }
62   - { id: 3, class: gpr, preferred-register: '' }
63 liveins:
64 fixedStack:
65 stack:
66 constants:
67 body:             |
68   bb.1 (%ir-block.0):
69     liveins: $rdi, $rsi
71     ; ALL-LABEL: name: test_lshr_i64
72     ; ALL: liveins: $rdi, $rsi
73     ; ALL-NEXT: {{  $}}
74     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
75     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr64_with_sub_8bit = COPY $rsi
76     ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit
77     ; ALL-NEXT: $cl = COPY [[COPY2]]
78     ; ALL-NEXT: [[SHR64rCL:%[0-9]+]]:gr64 = SHR64rCL [[COPY]], implicit-def dead $eflags, implicit $cl
79     ; ALL-NEXT: $rax = COPY [[SHR64rCL]]
80     ; ALL-NEXT: RET 0, implicit $rax
81     %0(s64) = COPY $rdi
82     %1(s64) = COPY $rsi
83     %2(s8) = G_TRUNC %1
84     %3(s64) = G_LSHR %0, %2
85     $rax = COPY %3(s64)
86     RET 0, implicit $rax
88 ...
89 ---
90 name:            test_lshr_i64_imm
91 alignment:       16
92 legalized:       true
93 regBankSelected: true
94 tracksRegLiveness: true
95 registers:
96   - { id: 0, class: gpr, preferred-register: '' }
97   - { id: 1, class: gpr, preferred-register: '' }
98   - { id: 2, class: gpr, preferred-register: '' }
99 liveins:
100 fixedStack:
101 stack:
102 constants:
103 body:             |
104   bb.1 (%ir-block.0):
105     liveins: $rdi
107     ; ALL-LABEL: name: test_lshr_i64_imm
108     ; ALL: liveins: $rdi
109     ; ALL-NEXT: {{  $}}
110     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
111     ; ALL-NEXT: [[SHR64ri:%[0-9]+]]:gr64 = SHR64ri [[COPY]], 5, implicit-def dead $eflags
112     ; ALL-NEXT: $rax = COPY [[SHR64ri]]
113     ; ALL-NEXT: RET 0, implicit $rax
114     %0(s64) = COPY $rdi
115     %1(s8) = G_CONSTANT i8 5
116     %2(s64) = G_LSHR %0, %1
117     $rax = COPY %2(s64)
118     RET 0, implicit $rax
122 name:            test_lshr_i32
123 alignment:       16
124 legalized:       true
125 regBankSelected: true
126 tracksRegLiveness: true
127 registers:
128   - { id: 0, class: gpr, preferred-register: '' }
129   - { id: 1, class: gpr, preferred-register: '' }
130   - { id: 2, class: gpr, preferred-register: '' }
131   - { id: 3, class: gpr, preferred-register: '' }
132 liveins:
133 fixedStack:
134 stack:
135 constants:
136 body:             |
137   bb.1 (%ir-block.0):
138     liveins: $edi, $esi
140     ; ALL-LABEL: name: test_lshr_i32
141     ; ALL: liveins: $edi, $esi
142     ; ALL-NEXT: {{  $}}
143     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
144     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
145     ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit
146     ; ALL-NEXT: $cl = COPY [[COPY2]]
147     ; ALL-NEXT: [[SHR32rCL:%[0-9]+]]:gr32 = SHR32rCL [[COPY]], implicit-def dead $eflags, implicit $cl
148     ; ALL-NEXT: $eax = COPY [[SHR32rCL]]
149     ; ALL-NEXT: RET 0, implicit $eax
150     %0(s32) = COPY $edi
151     %1(s32) = COPY $esi
152     %2(s8) = G_TRUNC %1
153     %3(s32) = G_LSHR %0, %2
154     $eax = COPY %3(s32)
155     RET 0, implicit $eax
159 name:            test_lshr_i32_imm
160 alignment:       16
161 legalized:       true
162 regBankSelected: true
163 tracksRegLiveness: true
164 registers:
165   - { id: 0, class: gpr, preferred-register: '' }
166   - { id: 1, class: gpr, preferred-register: '' }
167   - { id: 2, class: gpr, preferred-register: '' }
168 liveins:
169 fixedStack:
170 stack:
171 constants:
172 body:             |
173   bb.1 (%ir-block.0):
174     liveins: $edi
176     ; ALL-LABEL: name: test_lshr_i32_imm
177     ; ALL: liveins: $edi
178     ; ALL-NEXT: {{  $}}
179     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
180     ; ALL-NEXT: [[SHR32ri:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 5, implicit-def dead $eflags
181     ; ALL-NEXT: $eax = COPY [[SHR32ri]]
182     ; ALL-NEXT: RET 0, implicit $eax
183     %0(s32) = COPY $edi
184     %1(s8) = G_CONSTANT i8 5
185     %2(s32) = G_LSHR %0, %1
186     $eax = COPY %2(s32)
187     RET 0, implicit $eax
191 name:            test_lshr_i16
192 alignment:       16
193 legalized:       true
194 regBankSelected: true
195 tracksRegLiveness: true
196 registers:
197   - { id: 0, class: gpr, preferred-register: '' }
198   - { id: 1, class: gpr, preferred-register: '' }
199   - { id: 2, class: gpr, preferred-register: '' }
200   - { id: 3, class: gpr, preferred-register: '' }
201   - { id: 4, class: gpr, preferred-register: '' }
202 liveins:
203 fixedStack:
204 stack:
205 constants:
206 body:             |
207   bb.1 (%ir-block.0):
208     liveins: $edi, $esi
210     ; ALL-LABEL: name: test_lshr_i16
211     ; ALL: liveins: $edi, $esi
212     ; ALL-NEXT: {{  $}}
213     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
214     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
215     ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr16 = COPY [[COPY]].sub_16bit
216     ; ALL-NEXT: [[COPY3:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit
217     ; ALL-NEXT: $cl = COPY [[COPY3]]
218     ; ALL-NEXT: [[SHR16rCL:%[0-9]+]]:gr16 = SHR16rCL [[COPY2]], implicit-def dead $eflags, implicit $cl
219     ; ALL-NEXT: $ax = COPY [[SHR16rCL]]
220     ; ALL-NEXT: RET 0, implicit $ax
221     %0(s32) = COPY $edi
222     %1(s32) = COPY $esi
223     %2(s16) = G_TRUNC %0(s32)
224     %3(s8) = G_TRUNC %1(s32)
225     %4(s16) = G_LSHR %2, %3
226     $ax = COPY %4(s16)
227     RET 0, implicit $ax
231 name:            test_lshr_i16_imm
232 alignment:       16
233 legalized:       true
234 regBankSelected: true
235 tracksRegLiveness: true
236 registers:
237   - { id: 0, class: gpr, preferred-register: '' }
238   - { id: 1, class: gpr, preferred-register: '' }
239   - { id: 2, class: gpr, preferred-register: '' }
240   - { id: 3, class: gpr, preferred-register: '' }
241 liveins:
242 fixedStack:
243 stack:
244 constants:
245 body:             |
246   bb.1 (%ir-block.0):
247     liveins: $edi
249     ; ALL-LABEL: name: test_lshr_i16_imm
250     ; ALL: liveins: $edi
251     ; ALL-NEXT: {{  $}}
252     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
253     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr16 = COPY [[COPY]].sub_16bit
254     ; ALL-NEXT: [[SHR16ri:%[0-9]+]]:gr16 = SHR16ri [[COPY1]], 5, implicit-def dead $eflags
255     ; ALL-NEXT: $ax = COPY [[SHR16ri]]
256     ; ALL-NEXT: RET 0, implicit $ax
257     %0(s32) = COPY $edi
258     %2(s8) = G_CONSTANT i8 5
259     %1(s16) = G_TRUNC %0(s32)
260     %3(s16) = G_LSHR %1, %2
261     $ax = COPY %3(s16)
262     RET 0, implicit $ax
266 name:            test_lshr_i8
267 alignment:       16
268 legalized:       true
269 regBankSelected: true
270 tracksRegLiveness: true
271 registers:
272   - { id: 0, class: gpr, preferred-register: '' }
273   - { id: 1, class: gpr, preferred-register: '' }
274   - { id: 2, class: gpr, preferred-register: '' }
275   - { id: 3, class: gpr, preferred-register: '' }
276   - { id: 4, class: gpr, preferred-register: '' }
277 liveins:
278 fixedStack:
279 stack:
280 constants:
281 body:             |
282   bb.1 (%ir-block.0):
283     liveins: $edi, $esi
285     ; ALL-LABEL: name: test_lshr_i8
286     ; ALL: liveins: $edi, $esi
287     ; ALL-NEXT: {{  $}}
288     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
289     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
290     ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr8 = COPY [[COPY]].sub_8bit
291     ; ALL-NEXT: [[COPY3:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit
292     ; ALL-NEXT: $cl = COPY [[COPY3]]
293     ; ALL-NEXT: [[SHR8rCL:%[0-9]+]]:gr8 = SHR8rCL [[COPY2]], implicit-def dead $eflags, implicit $cl
294     ; ALL-NEXT: $al = COPY [[SHR8rCL]]
295     ; ALL-NEXT: RET 0, implicit $al
296     %0(s32) = COPY $edi
297     %1(s32) = COPY $esi
298     %2(s8) = G_TRUNC %0(s32)
299     %3(s8) = G_TRUNC %1(s32)
300     %4(s8) = G_LSHR %2, %3
301     $al = COPY %4(s8)
302     RET 0, implicit $al
306 name:            test_lshr_i8_imm
307 alignment:       16
308 legalized:       true
309 regBankSelected: true
310 tracksRegLiveness: true
311 registers:
312   - { id: 0, class: gpr, preferred-register: '' }
313   - { id: 1, class: gpr, preferred-register: '' }
314   - { id: 2, class: gpr, preferred-register: '' }
315   - { id: 3, class: gpr, preferred-register: '' }
316 liveins:
317 fixedStack:
318 stack:
319 constants:
320 body:             |
321   bb.1 (%ir-block.0):
322     liveins: $edi
324     ; ALL-LABEL: name: test_lshr_i8_imm
325     ; ALL: liveins: $edi
326     ; ALL-NEXT: {{  $}}
327     ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi
328     ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr8 = COPY [[COPY]].sub_8bit
329     ; ALL-NEXT: [[SHR8ri:%[0-9]+]]:gr8 = SHR8ri [[COPY1]], 5, implicit-def dead $eflags
330     ; ALL-NEXT: $al = COPY [[SHR8ri]]
331     ; ALL-NEXT: RET 0, implicit $al
332     %0(s32) = COPY $edi
333     %2(s8) = G_CONSTANT i8 5
334     %1(s8) = G_TRUNC %0(s32)
335     %3(s8) = G_LSHR %1, %2
336     $al = COPY %3(s8)
337     RET 0, implicit $al