[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-fshr.mir
blob81bf4332b456d589d57dbc26a8734eceab24f00f
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2 # RUN: llc -O0 -mtriple=arm64-unknown-unknown -global-isel -run-pass=legalizer -global-isel-abort=1 %s -o - | FileCheck %s
4 ---
5 name:            fshr_i8
6 alignment:       4
7 tracksRegLiveness: true
8 body:             |
9   bb.0:
10     liveins: $w0, $w1, $w2
12     ; CHECK-LABEL: name: fshr_i8
13     ; CHECK: liveins: $w0, $w1, $w2
14     ; CHECK-NEXT: {{  $}}
15     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
16     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
17     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
18     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
19     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C]]
20     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
21     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY2]], [[C1]]
22     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C]](s32)
23     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[COPY3]]
24     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
25     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C2]](s64)
26     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
27     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[AND1]], [[C3]]
28     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[SHL]], [[AND2]](s32)
29     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[AND]], [[C3]]
30     ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C3]]
31     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND4]], [[AND3]](s32)
32     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[LSHR]]
33     ; CHECK-NEXT: $w0 = COPY [[OR]](s32)
34     ; CHECK-NEXT: RET_ReallyLR implicit $w0
35     %3:_(s32) = COPY $w0
36     %0:_(s8) = G_TRUNC %3(s32)
37     %4:_(s32) = COPY $w1
38     %1:_(s8) = G_TRUNC %4(s32)
39     %5:_(s32) = COPY $w2
40     %2:_(s8) = G_TRUNC %5(s32)
41     %6:_(s8) = G_FSHR %0, %1, %2(s8)
42     %7:_(s32) = G_ANYEXT %6(s8)
43     $w0 = COPY %7(s32)
44     RET_ReallyLR implicit $w0
46 ...
48 ---
49 name:            fshr_i16
50 alignment:       4
51 tracksRegLiveness: true
52 body:             |
53   bb.0:
54     liveins: $w0, $w1, $w2
56     ; CHECK-LABEL: name: fshr_i16
57     ; CHECK: liveins: $w0, $w1, $w2
58     ; CHECK-NEXT: {{  $}}
59     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
60     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
61     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
62     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
63     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C]]
64     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
65     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY2]], [[C1]]
66     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C]](s32)
67     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[COPY3]]
68     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
69     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C2]](s64)
70     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
71     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[AND1]], [[C3]]
72     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[SHL]], [[AND2]](s32)
73     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[AND]], [[C3]]
74     ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C3]]
75     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND4]], [[AND3]](s32)
76     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[LSHR]]
77     ; CHECK-NEXT: $w0 = COPY [[OR]](s32)
78     ; CHECK-NEXT: RET_ReallyLR implicit $w0
79     %3:_(s32) = COPY $w0
80     %0:_(s16) = G_TRUNC %3(s32)
81     %4:_(s32) = COPY $w1
82     %1:_(s16) = G_TRUNC %4(s32)
83     %5:_(s32) = COPY $w2
84     %2:_(s16) = G_TRUNC %5(s32)
85     %6:_(s16) = G_FSHR %0, %1, %2(s16)
86     %7:_(s32) = G_ANYEXT %6(s16)
87     $w0 = COPY %7(s32)
88     RET_ReallyLR implicit $w0
90 ...
92 ---
93 name:            fshr_i32
94 alignment:       4
95 tracksRegLiveness: true
96 body:             |
97   bb.0:
98     liveins: $w0, $w1, $w2
100     ; CHECK-LABEL: name: fshr_i32
101     ; CHECK: liveins: $w0, $w1, $w2
102     ; CHECK-NEXT: {{  $}}
103     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
104     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
105     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
106     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
107     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C]]
108     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
109     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY2]], [[C1]]
110     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[C]]
111     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
112     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C2]](s64)
113     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[SHL]], [[AND1]](s32)
114     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[AND]](s32)
115     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[LSHR]]
116     ; CHECK-NEXT: $w0 = COPY [[OR]](s32)
117     ; CHECK-NEXT: RET_ReallyLR implicit $w0
118     %0:_(s32) = COPY $w0
119     %1:_(s32) = COPY $w1
120     %2:_(s32) = COPY $w2
121     %3:_(s32) = G_FSHR %0, %1, %2(s32)
122     $w0 = COPY %3(s32)
123     RET_ReallyLR implicit $w0
128 name:            fshr_i64
129 alignment:       4
130 tracksRegLiveness: true
131 body:             |
132   bb.0:
133     liveins: $x0, $x1, $x2
135     ; CHECK-LABEL: name: fshr_i64
136     ; CHECK: liveins: $x0, $x1, $x2
137     ; CHECK-NEXT: {{  $}}
138     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
139     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
140     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
141     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
142     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C]]
143     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
144     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[COPY2]], [[C1]]
145     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[XOR]], [[C]]
146     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
147     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C2]](s64)
148     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[SHL]], [[AND1]](s64)
149     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY1]], [[AND]](s64)
150     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL1]], [[LSHR]]
151     ; CHECK-NEXT: $x0 = COPY [[OR]](s64)
152     ; CHECK-NEXT: RET_ReallyLR implicit $x0
153     %0:_(s64) = COPY $x0
154     %1:_(s64) = COPY $x1
155     %2:_(s64) = COPY $x2
156     %3:_(s64) = G_FSHR %0, %1, %2(s64)
157     $x0 = COPY %3(s64)
158     RET_ReallyLR implicit $x0
164 name:            fshr_i8_const_shift
165 alignment:       4
166 tracksRegLiveness: true
167 body:             |
168   bb.0:
169     liveins: $w0, $w1
171     ; CHECK-LABEL: name: fshr_i8_const_shift
172     ; CHECK: liveins: $w0, $w1
173     ; CHECK-NEXT: {{  $}}
174     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
175     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
176     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
177     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64)
178     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
179     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
180     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 7
181     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C2]](s64)
182     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[LSHR]]
183     ; CHECK-NEXT: $w0 = COPY [[OR]](s32)
184     ; CHECK-NEXT: RET_ReallyLR implicit $w0
185     %2:_(s32) = COPY $w0
186     %0:_(s8) = G_TRUNC %2(s32)
187     %3:_(s32) = COPY $w1
188     %1:_(s8) = G_TRUNC %3(s32)
189     %7:_(s8) = G_CONSTANT i8 7
190     %5:_(s8) = G_FSHR %0, %1, %7(s8)
191     %6:_(s32) = G_ANYEXT %5(s8)
192     $w0 = COPY %6(s32)
193     RET_ReallyLR implicit $w0
198 name:            fshr_i8_const_overshift
199 alignment:       4
200 tracksRegLiveness: true
201 body:             |
202   bb.0:
203     liveins: $w0, $w1
205     ; CHECK-LABEL: name: fshr_i8_const_overshift
206     ; CHECK: liveins: $w0, $w1
207     ; CHECK-NEXT: {{  $}}
208     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
209     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
210     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 6
211     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64)
212     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
213     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
214     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
215     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C2]](s64)
216     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[LSHR]]
217     ; CHECK-NEXT: $w0 = COPY [[OR]](s32)
218     ; CHECK-NEXT: RET_ReallyLR implicit $w0
219     %2:_(s32) = COPY $w0
220     %0:_(s8) = G_TRUNC %2(s32)
221     %3:_(s32) = COPY $w1
222     %1:_(s8) = G_TRUNC %3(s32)
223     %7:_(s8) = G_CONSTANT i8 10
224     %5:_(s8) = G_FSHR %0, %1, %7(s8)
225     %6:_(s32) = G_ANYEXT %5(s8)
226     $w0 = COPY %6(s32)
227     RET_ReallyLR implicit $w0
232 name:            fshr_i8_shift_by_bandwidth
233 alignment:       4
234 tracksRegLiveness: true
235 body:             |
236   bb.0:
237     liveins: $w0, $w1
239     ; CHECK-LABEL: name: fshr_i8_shift_by_bandwidth
240     ; CHECK: liveins: $w0, $w1
241     ; CHECK-NEXT: {{  $}}
242     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
243     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
244     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
245     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64)
246     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 7
247     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[SHL]], [[C1]](s64)
248     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
249     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]]
250     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
251     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C3]](s64)
252     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[LSHR]]
253     ; CHECK-NEXT: $w0 = COPY [[OR]](s32)
254     ; CHECK-NEXT: RET_ReallyLR implicit $w0
255     %2:_(s32) = COPY $w0
256     %0:_(s8) = G_TRUNC %2(s32)
257     %3:_(s32) = COPY $w1
258     %1:_(s8) = G_TRUNC %3(s32)
259     %7:_(s8) = G_CONSTANT i8 8
260     %5:_(s8) = G_FSHR %0, %1, %7(s8)
261     %6:_(s32) = G_ANYEXT %5(s8)
262     $w0 = COPY %6(s32)
263     RET_ReallyLR implicit $w0
268 name:            fshr_i16_const_shift
269 alignment:       4
270 tracksRegLiveness: true
271 body:             |
272   bb.0:
273     liveins: $w0, $w1
275     ; CHECK-LABEL: name: fshr_i16_const_shift
276     ; CHECK: liveins: $w0, $w1
277     ; CHECK-NEXT: {{  $}}
278     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
279     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
280     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 11
281     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64)
282     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
283     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
284     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 5
285     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C2]](s64)
286     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[LSHR]]
287     ; CHECK-NEXT: $w0 = COPY [[OR]](s32)
288     ; CHECK-NEXT: RET_ReallyLR implicit $w0
289     %2:_(s32) = COPY $w0
290     %0:_(s16) = G_TRUNC %2(s32)
291     %3:_(s32) = COPY $w1
292     %1:_(s16) = G_TRUNC %3(s32)
293     %4:_(s16) = G_CONSTANT i16 5
294     %5:_(s16) = G_FSHR %0, %1, %4(s16)
295     %6:_(s32) = G_ANYEXT %5(s16)
296     $w0 = COPY %6(s32)
297     RET_ReallyLR implicit $w0
302 name:            fshr_i16_const_overshift
303 alignment:       4
304 tracksRegLiveness: true
305 body:             |
306   bb.0:
307     liveins: $w0, $w1
309     ; CHECK-LABEL: name: fshr_i16_const_overshift
310     ; CHECK: liveins: $w0, $w1
311     ; CHECK-NEXT: {{  $}}
312     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
313     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
314     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
315     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64)
316     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
317     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
318     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
319     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C2]](s64)
320     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[LSHR]]
321     ; CHECK-NEXT: $w0 = COPY [[OR]](s32)
322     ; CHECK-NEXT: RET_ReallyLR implicit $w0
323     %2:_(s32) = COPY $w0
324     %0:_(s16) = G_TRUNC %2(s32)
325     %3:_(s32) = COPY $w1
326     %1:_(s16) = G_TRUNC %3(s32)
327     %4:_(s16) = G_CONSTANT i16 20
328     %5:_(s16) = G_FSHR %0, %1, %4(s16)
329     %6:_(s32) = G_ANYEXT %5(s16)
330     $w0 = COPY %6(s32)
331     RET_ReallyLR implicit $w0
336 name:            fshr_i16_shift_by_bandwidth
337 alignment:       4
338 tracksRegLiveness: true
339 body:             |
340   bb.0:
341     liveins: $w0, $w1
343     ; CHECK-LABEL: name: fshr_i16_shift_by_bandwidth
344     ; CHECK: liveins: $w0, $w1
345     ; CHECK-NEXT: {{  $}}
346     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
347     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
348     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
349     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64)
350     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 15
351     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[SHL]], [[C1]](s64)
352     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
353     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]]
354     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
355     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C3]](s64)
356     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[LSHR]]
357     ; CHECK-NEXT: $w0 = COPY [[OR]](s32)
358     ; CHECK-NEXT: RET_ReallyLR implicit $w0
359     %2:_(s32) = COPY $w0
360     %0:_(s16) = G_TRUNC %2(s32)
361     %3:_(s32) = COPY $w1
362     %1:_(s16) = G_TRUNC %3(s32)
363     %4:_(s16) = G_CONSTANT i16 16
364     %5:_(s16) = G_FSHR %0, %1, %4(s16)
365     %6:_(s32) = G_ANYEXT %5(s16)
366     $w0 = COPY %6(s32)
367     RET_ReallyLR implicit $w0
372 name:            fshr_i32_const_shift
373 alignment:       4
374 tracksRegLiveness: true
375 body:             |
376   bb.0:
377     liveins: $w0, $w1
379     ; CHECK-LABEL: name: fshr_i32_const_shift
380     ; CHECK: liveins: $w0, $w1
381     ; CHECK-NEXT: {{  $}}
382     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
383     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
384     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 9
385     ; CHECK-NEXT: [[FSHR:%[0-9]+]]:_(s32) = G_FSHR [[COPY]], [[COPY1]], [[C]](s64)
386     ; CHECK-NEXT: $w0 = COPY [[FSHR]](s32)
387     ; CHECK-NEXT: RET_ReallyLR implicit $w0
388     %0:_(s32) = COPY $w0
389     %1:_(s32) = COPY $w1
390     %2:_(s32) = G_CONSTANT i32 9
391     %3:_(s32) = G_FSHR %0, %1, %2(s32)
392     $w0 = COPY %3(s32)
393     RET_ReallyLR implicit $w0
398 name:            fshr_i32_const_overshift
399 alignment:       4
400 tracksRegLiveness: true
401 body:             |
402   bb.0:
403     liveins: $w0, $w1
405     ; CHECK-LABEL: name: fshr_i32_const_overshift
406     ; CHECK: liveins: $w0, $w1
407     ; CHECK-NEXT: {{  $}}
408     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
409     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
410     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 10
411     ; CHECK-NEXT: [[FSHR:%[0-9]+]]:_(s32) = G_FSHR [[COPY]], [[COPY1]], [[C]](s64)
412     ; CHECK-NEXT: $w0 = COPY [[FSHR]](s32)
413     ; CHECK-NEXT: RET_ReallyLR implicit $w0
414     %0:_(s32) = COPY $w0
415     %1:_(s32) = COPY $w1
416     %4:_(s32) = G_CONSTANT i32  42
417     %3:_(s32) = G_FSHR %0, %1, %4(s32)
418     $w0 = COPY %3(s32)
419     RET_ReallyLR implicit $w0
424 name:            fshr_i32_shift_by_bitwidth
425 alignment:       4
426 tracksRegLiveness: true
427 body:             |
428   bb.0:
429     liveins: $w0, $w1
431     ; CHECK-LABEL: name: fshr_i32_shift_by_bitwidth
432     ; CHECK: liveins: $w0, $w1
433     ; CHECK-NEXT: {{  $}}
434     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w1
435     ; CHECK-NEXT: $w0 = COPY [[COPY]](s32)
436     ; CHECK-NEXT: RET_ReallyLR implicit $w0
437     %1:_(s32) = COPY $w1
438     $w0 = COPY %1(s32)
439     RET_ReallyLR implicit $w0
444 name:            fshr_i64_const_shift
445 alignment:       4
446 tracksRegLiveness: true
447 body:             |
448   bb.0:
449     liveins: $x0, $x1
451     ; CHECK-LABEL: name: fshr_i64_const_shift
452     ; CHECK: liveins: $x0, $x1
453     ; CHECK-NEXT: {{  $}}
454     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
455     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
456     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 41
457     ; CHECK-NEXT: [[FSHR:%[0-9]+]]:_(s64) = G_FSHR [[COPY]], [[COPY1]], [[C]](s64)
458     ; CHECK-NEXT: $x0 = COPY [[FSHR]](s64)
459     ; CHECK-NEXT: RET_ReallyLR implicit $x0
460     %0:_(s64) = COPY $x0
461     %1:_(s64) = COPY $x1
462     %4:_(s64) = G_CONSTANT i64 41
463     %3:_(s64) = G_FSHR %0, %1, %4(s64)
464     $x0 = COPY %3(s64)
465     RET_ReallyLR implicit $x0
470 name:            fshr_i64_const_overshift
471 alignment:       4
472 tracksRegLiveness: true
473 body:             |
474   bb.0:
475     liveins: $x0, $x1
477     ; CHECK-LABEL: name: fshr_i64_const_overshift
478     ; CHECK: liveins: $x0, $x1
479     ; CHECK-NEXT: {{  $}}
480     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
481     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
482     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
483     ; CHECK-NEXT: [[FSHR:%[0-9]+]]:_(s64) = G_FSHR [[COPY]], [[COPY1]], [[C]](s64)
484     ; CHECK-NEXT: $x0 = COPY [[FSHR]](s64)
485     ; CHECK-NEXT: RET_ReallyLR implicit $x0
486     %0:_(s64) = COPY $x0
487     %1:_(s64) = COPY $x1
488     %4:_(s64) = G_CONSTANT i64 72
489     %3:_(s64) = G_FSHR %0, %1, %4(s64)
490     $x0 = COPY %3(s64)
491     RET_ReallyLR implicit $x0
496 name:            fshr_i64_shift_by_bandwidth
497 alignment:       4
498 tracksRegLiveness: true
499 body:             |
500   bb.0:
501     liveins: $x0, $x1
503     ; CHECK-LABEL: name: fshr_i64_shift_by_bandwidth
504     ; CHECK: liveins: $x0, $x1
505     ; CHECK-NEXT: {{  $}}
506     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
507     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
508     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
509     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
510     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
511     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C2]](s64)
512     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[SHL]], [[C]](s64)
513     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY1]], [[C1]](s64)
514     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[SHL1]], [[LSHR]]
515     ; CHECK-NEXT: $x0 = COPY [[OR]](s64)
516     ; CHECK-NEXT: RET_ReallyLR implicit $x0
517     %0:_(s64) = COPY $x0
518     %1:_(s64) = COPY $x1
519     %4:_(s64) = G_CONSTANT i64 64
520     %3:_(s64) = G_FSHR %0, %1, %4(s64)
521     $x0 = COPY %3(s64)
522     RET_ReallyLR implicit $x0
527 name:            fshr_v4i32_shift_by_bitwidth
528 alignment:       4
529 tracksRegLiveness: true
530 body:             |
531   bb.0:
532     liveins: $q0, $q1
534     ; CHECK-LABEL: name: fshr_v4i32_shift_by_bitwidth
535     ; CHECK: liveins: $q0, $q1
536     ; CHECK-NEXT: {{  $}}
537     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
538     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
539     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
540     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
541     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32), [[C1]](s32), [[C1]](s32)
542     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
543     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
544     ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C2]](s32), [[C2]](s32), [[C2]](s32), [[C2]](s32)
545     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<4 x s32>) = G_SHL [[COPY]], [[BUILD_VECTOR2]](<4 x s32>)
546     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(<4 x s32>) = G_SHL [[SHL]], [[BUILD_VECTOR1]](<4 x s32>)
547     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<4 x s32>) = G_LSHR [[COPY1]], [[BUILD_VECTOR]](<4 x s32>)
548     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<4 x s32>) = G_OR [[SHL1]], [[LSHR]]
549     ; CHECK-NEXT: $q0 = COPY [[OR]](<4 x s32>)
550     ; CHECK-NEXT: RET_ReallyLR implicit $q0
551     %0:_(<4 x s32>) = COPY $q0
552     %1:_(<4 x s32>) = COPY $q1
553     %3:_(s32) = G_CONSTANT i32 32
554     %2:_(<4 x s32>) = G_BUILD_VECTOR %3(s32), %3(s32), %3(s32), %3(s32)
555     %4:_(<4 x s32>) = G_FSHR %0, %1, %2(<4 x s32>)
556     $q0 = COPY %4(<4 x s32>)
557     RET_ReallyLR implicit $q0