• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -O0 -march=aarch64 -run-pass=legalizer %s -o - | FileCheck %s
3# RUN: llc -O0 -debugify-and-strip-all-safe -march=aarch64 -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK
4---
5name:            test_shift
6body:             |
7  bb.0.entry:
8    ; CHECK-LABEL: name: test_shift
9    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
10    ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
11    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
12    ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
13    ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]]
14    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
15    ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC1]], 8
16    ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SEXT_INREG]], [[AND]](s32)
17    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ASHR]](s32)
18    ; CHECK: $w0 = COPY [[COPY2]](s32)
19    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
20    ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC2]], [[C]]
21    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
22    ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[TRUNC3]], [[C]]
23    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[AND1]](s32)
24    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
25    ; CHECK: $w0 = COPY [[COPY3]](s32)
26    ; CHECK: [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
27    ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[TRUNC4]], [[C]]
28    ; CHECK: [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
29    ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[TRUNC5]], [[AND3]](s32)
30    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[SHL]](s32)
31    ; CHECK: $w0 = COPY [[COPY4]](s32)
32    %0:_(s64) = COPY $x0
33    %1:_(s64) = COPY $x1
34    %2:_(s8) = G_TRUNC %0(s64)
35    %3:_(s8) = G_TRUNC %1(s64)
36    %4:_(s8) = G_ASHR %2, %3
37    %7:_(s32) = G_ANYEXT %4(s8)
38    $w0 = COPY %7(s32)
39    %5:_(s8) = G_LSHR %2, %3
40    %8:_(s32) = G_ANYEXT %5(s8)
41    $w0 = COPY %8(s32)
42    %6:_(s8) = G_SHL %2, %3
43    %9:_(s32) = G_ANYEXT %6(s8)
44    $w0 = COPY %9(s32)
45
46...
47---
48name: test_shl_i64_i32
49body:             |
50  bb.0:
51    ; CHECK-LABEL: name: test_shl_i64_i32
52    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
53    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
54    ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
55    ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[ZEXT]](s64)
56    ; CHECK: $x0 = COPY [[SHL]](s64)
57    %0:_(s64) = COPY $x0
58    %1:_(s32) = COPY $w1
59    %2:_(s64) = G_SHL %0, %1
60    $x0 = COPY %2(s64)
61
62...
63---
64name: test_ashr_i64_i32
65body:             |
66  bb.0:
67    ; CHECK-LABEL: name: test_ashr_i64_i32
68    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
69    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
70    ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
71    ; CHECK: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[ZEXT]](s64)
72    ; CHECK: $x0 = COPY [[ASHR]](s64)
73    %0:_(s64) = COPY $x0
74    %1:_(s32) = COPY $w1
75    %2:_(s64) = G_ASHR %0, %1
76    $x0 = COPY %2(s64)
77
78...
79---
80name: test_lshr_i64_i32
81body:             |
82  bb.0:
83    ; CHECK-LABEL: name: test_lshr_i64_i32
84    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
85    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
86    ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)
87    ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY]], [[ZEXT]](s64)
88    ; CHECK: $x0 = COPY [[LSHR]](s64)
89    %0:_(s64) = COPY $x0
90    %1:_(s32) = COPY $w1
91    %2:_(s64) = G_LSHR %0, %1
92    $x0 = COPY %2(s64)
93
94...
95
96---
97name: test_shl_s128_s128
98body:             |
99  bb.0:
100    ; CHECK-LABEL: name: test_shl_s128_s128
101    ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
102    ; CHECK: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1
103    ; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)
104    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
105    ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
106    ; CHECK: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]
107    ; CHECK: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]
108    ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
109    ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]
110    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
111    ; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]
112    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
113    ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[TRUNC]](s64)
114    ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[SUB1]](s64)
115    ; CHECK: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[TRUNC]](s64)
116    ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL1]]
117    ; CHECK: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[SUB]](s64)
118    ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[SHL]], [[C1]]
119    ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[SHL2]]
120    ; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV1]], [[SELECT1]]
121    ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT]](s64), [[SELECT2]](s64)
122    ; CHECK: $q0 = COPY [[MV]](s128)
123    %0:_(s128) = COPY $q0
124    %1:_(s128) = COPY $q1
125    %2:_(s128) = G_SHL %0, %1
126    $q0 = COPY %2
127
128...
129
130---
131name: test_lshr_s128_s128
132body:             |
133  bb.0:
134    ; CHECK-LABEL: name: test_lshr_s128_s128
135    ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
136    ; CHECK: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1
137    ; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)
138    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
139    ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
140    ; CHECK: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]
141    ; CHECK: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]
142    ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
143    ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]
144    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
145    ; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]
146    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
147    ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[TRUNC]](s64)
148    ; CHECK: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[TRUNC]](s64)
149    ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[SUB1]](s64)
150    ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR1]], [[SHL]]
151    ; CHECK: [[LSHR2:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[SUB]](s64)
152    ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[LSHR2]]
153    ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV]], [[SELECT]]
154    ; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[LSHR]], [[C1]]
155    ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT1]](s64), [[SELECT2]](s64)
156    ; CHECK: $q0 = COPY [[MV]](s128)
157    %0:_(s128) = COPY $q0
158    %1:_(s128) = COPY $q1
159    %2:_(s128) = G_LSHR %0, %1
160    $q0 = COPY %2
161
162...
163
164---
165name: test_ashr_s128_s128
166body:             |
167  bb.0:
168    ; CHECK-LABEL: name: test_ashr_s128_s128
169    ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
170    ; CHECK: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1
171    ; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)
172    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64
173    ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
174    ; CHECK: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]
175    ; CHECK: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]
176    ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
177    ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]
178    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
179    ; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]
180    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
181    ; CHECK: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[TRUNC]](s64)
182    ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[TRUNC]](s64)
183    ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[SUB1]](s64)
184    ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]]
185    ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
186    ; CHECK: [[ASHR1:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[C2]](s64)
187    ; CHECK: [[ASHR2:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[SUB]](s64)
188    ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[ASHR2]]
189    ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV]], [[SELECT]]
190    ; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[ASHR]], [[ASHR1]]
191    ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT1]](s64), [[SELECT2]](s64)
192    ; CHECK: $q0 = COPY [[MV]](s128)
193    %0:_(s128) = COPY $q0
194    %1:_(s128) = COPY $q1
195    %2:_(s128) = G_ASHR %0, %1
196    $q0 = COPY %2
197
198...
199
200---
201name: test_ashr_v2i32
202body:             |
203  bb.0:
204    ; CHECK-LABEL: name: test_ashr_v2i32
205    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
206    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1
207    ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s32>) = G_ASHR [[COPY]], [[COPY1]](<2 x s32>)
208    ; CHECK: $d0 = COPY [[ASHR]](<2 x s32>)
209    %0:_(<2 x s32>) = COPY $d0
210    %1:_(<2 x s32>) = COPY $d1
211    %2:_(<2 x s32>) = G_ASHR %0, %1
212    $d0 = COPY %2
213
214...
215---
216name: test_ashr_v4i32
217body:             |
218  bb.0:
219    ; CHECK-LABEL: name: test_ashr_v4i32
220    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
221    ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
222    ; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[COPY]], [[COPY1]](<4 x s32>)
223    ; CHECK: $q0 = COPY [[ASHR]](<4 x s32>)
224    %0:_(<4 x s32>) = COPY $q0
225    %1:_(<4 x s32>) = COPY $q1
226    %2:_(<4 x s32>) = G_ASHR %0, %1
227    $q0 = COPY %2
228
229...
230---
231name:            shl_cimm_32
232body:             |
233  bb.1:
234    liveins: $w0
235
236    ; CHECK-LABEL: name: shl_cimm_32
237    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
238    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
239    ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64)
240    ; CHECK: $w0 = COPY [[SHL]](s32)
241    ; CHECK: RET_ReallyLR implicit $w0
242    %0:_(s32) = COPY $w0
243    %1:_(s32) = G_CONSTANT i32 8
244    %2:_(s32) = G_SHL %0, %1(s32)
245    $w0 = COPY %2(s32)
246    RET_ReallyLR implicit $w0
247
248...
249---
250name:            lshr_cimm_32
251body:             |
252  bb.1:
253    liveins: $w0
254
255    ; CHECK-LABEL: name: lshr_cimm_32
256    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
257    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
258    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s64)
259    ; CHECK: $w0 = COPY [[LSHR]](s32)
260    ; CHECK: RET_ReallyLR implicit $w0
261    %0:_(s32) = COPY $w0
262    %1:_(s32) = G_CONSTANT i32 8
263    %2:_(s32) = G_LSHR %0, %1(s32)
264    $w0 = COPY %2(s32)
265    RET_ReallyLR implicit $w0
266
267...
268---
269name:            ashr_cimm_32
270body:             |
271  bb.1:
272    liveins: $w0
273
274    ; CHECK-LABEL: name: ashr_cimm_32
275    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
276    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
277    ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s64)
278    ; CHECK: $w0 = COPY [[ASHR]](s32)
279    ; CHECK: RET_ReallyLR implicit $w0
280    %0:_(s32) = COPY $w0
281    %1:_(s32) = G_CONSTANT i32 8
282    %2:_(s32) = G_ASHR %0, %1(s32)
283    $w0 = COPY %2(s32)
284    RET_ReallyLR implicit $w0
285
286...
287---
288name: test_ashr_v16i8
289body:             |
290  bb.0:
291    ; CHECK-LABEL: name: test_ashr_v16i8
292    ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
293    ; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
294    ; CHECK: [[ASHR:%[0-9]+]]:_(<16 x s8>) = G_ASHR [[COPY]], [[COPY1]](<16 x s8>)
295    ; CHECK: $q0 = COPY [[ASHR]](<16 x s8>)
296    %0:_(<16 x s8>) = COPY $q0
297    %1:_(<16 x s8>) = COPY $q1
298    %2:_(<16 x s8>) = G_ASHR %0, %1
299    $q0 = COPY %2
300...
301---
302name: test_ashr_v8i16
303body:             |
304  bb.0:
305    ; CHECK-LABEL: name: test_ashr_v8i16
306    ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
307    ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
308    ; CHECK: [[ASHR:%[0-9]+]]:_(<8 x s16>) = G_ASHR [[COPY]], [[COPY1]](<8 x s16>)
309    ; CHECK: $q0 = COPY [[ASHR]](<8 x s16>)
310    %0:_(<8 x s16>) = COPY $q0
311    %1:_(<8 x s16>) = COPY $q1
312    %2:_(<8 x s16>) = G_ASHR %0, %1
313    $q0 = COPY %2
314...
315---
316name: test_shl_v16i8
317body:             |
318  bb.0:
319    ; CHECK-LABEL: name: test_shl_v16i8
320    ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
321    ; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
322    ; CHECK: [[SHL:%[0-9]+]]:_(<16 x s8>) = G_SHL [[COPY]], [[COPY1]](<16 x s8>)
323    ; CHECK: $q0 = COPY [[SHL]](<16 x s8>)
324    %0:_(<16 x s8>) = COPY $q0
325    %1:_(<16 x s8>) = COPY $q1
326    %2:_(<16 x s8>) = G_SHL %0, %1
327    $q0 = COPY %2
328...
329---
330name: test_shl_v8i16
331body:             |
332  bb.0:
333    ; CHECK-LABEL: name: test_shl_v8i16
334    ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
335    ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
336    ; CHECK: [[SHL:%[0-9]+]]:_(<8 x s16>) = G_SHL [[COPY]], [[COPY1]](<8 x s16>)
337    ; CHECK: $q0 = COPY [[SHL]](<8 x s16>)
338    %0:_(<8 x s16>) = COPY $q0
339    %1:_(<8 x s16>) = COPY $q1
340    %2:_(<8 x s16>) = G_SHL %0, %1
341    $q0 = COPY %2
342...
343---
344name: test_lshr_v16i8
345body:             |
346  bb.0:
347    ; CHECK-LABEL: name: test_lshr_v16i8
348    ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
349    ; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
350    ; CHECK: [[LSHR:%[0-9]+]]:_(<16 x s8>) = G_LSHR [[COPY]], [[COPY1]](<16 x s8>)
351    ; CHECK: $q0 = COPY [[LSHR]](<16 x s8>)
352    %0:_(<16 x s8>) = COPY $q0
353    %1:_(<16 x s8>) = COPY $q1
354    %2:_(<16 x s8>) = G_LSHR %0, %1
355    $q0 = COPY %2
356...
357---
358name: test_lshr_v8i16
359body:             |
360  bb.0:
361    ; CHECK-LABEL: name: test_lshr_v8i16
362    ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
363    ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
364    ; CHECK: [[LSHR:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[COPY]], [[COPY1]](<8 x s16>)
365    ; CHECK: $q0 = COPY [[LSHR]](<8 x s16>)
366    %0:_(<8 x s16>) = COPY $q0
367    %1:_(<8 x s16>) = COPY $q1
368    %2:_(<8 x s16>) = G_LSHR %0, %1
369    $q0 = COPY %2
370...
371---
372name: test_shl_v4i16
373body:             |
374  bb.0:
375    ; CHECK-LABEL: name: test_shl_v4i16
376    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
377    ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
378    ; CHECK: [[SHL:%[0-9]+]]:_(<4 x s16>) = G_SHL [[COPY]], [[COPY1]](<4 x s16>)
379    ; CHECK: $d0 = COPY [[SHL]](<4 x s16>)
380    %0:_(<4 x s16>) = COPY $d0
381    %1:_(<4 x s16>) = COPY $d1
382    %2:_(<4 x s16>) = G_SHL %0, %1
383    $d0 = COPY %2
384...
385---
386name: test_lshr_v4i16
387body:             |
388  bb.0:
389    ; CHECK-LABEL: name: test_lshr_v4i16
390    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
391    ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
392    ; CHECK: [[LSHR:%[0-9]+]]:_(<4 x s16>) = G_LSHR [[COPY]], [[COPY1]](<4 x s16>)
393    ; CHECK: $d0 = COPY [[LSHR]](<4 x s16>)
394    %0:_(<4 x s16>) = COPY $d0
395    %1:_(<4 x s16>) = COPY $d1
396    %2:_(<4 x s16>) = G_LSHR %0, %1
397    $d0 = COPY %2
398...
399---
400name: test_ashr_v4i16
401body:             |
402  bb.0:
403    ; CHECK-LABEL: name: test_ashr_v4i16
404    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
405    ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
406    ; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s16>) = G_ASHR [[COPY]], [[COPY1]](<4 x s16>)
407    ; CHECK: $d0 = COPY [[ASHR]](<4 x s16>)
408    %0:_(<4 x s16>) = COPY $d0
409    %1:_(<4 x s16>) = COPY $d1
410    %2:_(<4 x s16>) = G_ASHR %0, %1
411    $d0 = COPY %2
412...
413---
414name: test_ashr_v8s32
415body:             |
416  bb.0:
417    ; CHECK-LABEL: name: test_ashr_v8s32
418    ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
419    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
420    ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
421    ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
422    ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
423    ; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[BUILD_VECTOR]], [[BUILD_VECTOR2]](<4 x s32>)
424    ; CHECK: [[ASHR1:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[BUILD_VECTOR1]], [[BUILD_VECTOR3]](<4 x s32>)
425    ; CHECK: $q0 = COPY [[ASHR]](<4 x s32>)
426    ; CHECK: $q1 = COPY [[ASHR1]](<4 x s32>)
427    %0:_(<8 x s32>) = G_IMPLICIT_DEF
428    %1:_(<8 x s32>) = G_IMPLICIT_DEF
429    %2:_(<8 x s32>) = G_ASHR %0, %1
430    %3:_(<4 x s32>), %4:_(<4 x s32>) = G_UNMERGE_VALUES %2
431    $q0 = COPY %3(<4 x s32>)
432    $q1 = COPY %4(<4 x s32>)
433...
434---
435name: test_shl_v8s8
436body:             |
437  bb.0:
438    ; CHECK-LABEL: name: test_shl_v8s8
439    ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
440    ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
441    ; CHECK: [[SHL:%[0-9]+]]:_(<8 x s8>) = G_SHL [[COPY]], [[COPY1]](<8 x s8>)
442    ; CHECK: $d0 = COPY [[SHL]](<8 x s8>)
443    %0:_(<8 x s8>) = COPY $d0
444    %1:_(<8 x s8>) = COPY $d1
445    %2:_(<8 x s8>) = G_SHL %0, %1
446    $d0 = COPY %2
447...
448---
449name: test_ashr_v8s8
450body:             |
451  bb.0:
452    ; CHECK-LABEL: name: test_ashr_v8s8
453    ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
454    ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
455    ; CHECK: [[ASHR:%[0-9]+]]:_(<8 x s8>) = G_ASHR [[COPY]], [[COPY1]](<8 x s8>)
456    ; CHECK: $d0 = COPY [[ASHR]](<8 x s8>)
457    %0:_(<8 x s8>) = COPY $d0
458    %1:_(<8 x s8>) = COPY $d1
459    %2:_(<8 x s8>) = G_ASHR %0, %1
460    $d0 = COPY %2
461...
462
463---
464name: test_lshr_v8s8
465body:             |
466  bb.0:
467    ; CHECK-LABEL: name: test_lshr_v8s8
468    ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
469    ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
470    ; CHECK: [[LSHR:%[0-9]+]]:_(<8 x s8>) = G_LSHR [[COPY]], [[COPY1]](<8 x s8>)
471    ; CHECK: $d0 = COPY [[LSHR]](<8 x s8>)
472    %0:_(<8 x s8>) = COPY $d0
473    %1:_(<8 x s8>) = COPY $d1
474    %2:_(<8 x s8>) = G_LSHR %0, %1
475    $d0 = COPY %2
476...
477