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
7 tracksRegLiveness: true
10 liveins: $w0, $w1, $w2
12 ; CHECK-LABEL: name: fshr_i8
13 ; CHECK: liveins: $w0, $w1, $w2
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
36 %0:_(s8) = G_TRUNC %3(s32)
38 %1:_(s8) = G_TRUNC %4(s32)
40 %2:_(s8) = G_TRUNC %5(s32)
41 %6:_(s8) = G_FSHR %0, %1, %2(s8)
42 %7:_(s32) = G_ANYEXT %6(s8)
44 RET_ReallyLR implicit $w0
51 tracksRegLiveness: true
54 liveins: $w0, $w1, $w2
56 ; CHECK-LABEL: name: fshr_i16
57 ; CHECK: liveins: $w0, $w1, $w2
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
80 %0:_(s16) = G_TRUNC %3(s32)
82 %1:_(s16) = G_TRUNC %4(s32)
84 %2:_(s16) = G_TRUNC %5(s32)
85 %6:_(s16) = G_FSHR %0, %1, %2(s16)
86 %7:_(s32) = G_ANYEXT %6(s16)
88 RET_ReallyLR implicit $w0
95 tracksRegLiveness: true
98 liveins: $w0, $w1, $w2
100 ; CHECK-LABEL: name: fshr_i32
101 ; CHECK: liveins: $w0, $w1, $w2
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
121 %3:_(s32) = G_FSHR %0, %1, %2(s32)
123 RET_ReallyLR implicit $w0
130 tracksRegLiveness: true
133 liveins: $x0, $x1, $x2
135 ; CHECK-LABEL: name: fshr_i64
136 ; CHECK: liveins: $x0, $x1, $x2
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
156 %3:_(s64) = G_FSHR %0, %1, %2(s64)
158 RET_ReallyLR implicit $x0
164 name: fshr_i8_const_shift
166 tracksRegLiveness: true
171 ; CHECK-LABEL: name: fshr_i8_const_shift
172 ; CHECK: liveins: $w0, $w1
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
186 %0:_(s8) = G_TRUNC %2(s32)
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)
193 RET_ReallyLR implicit $w0
198 name: fshr_i8_const_overshift
200 tracksRegLiveness: true
205 ; CHECK-LABEL: name: fshr_i8_const_overshift
206 ; CHECK: liveins: $w0, $w1
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
220 %0:_(s8) = G_TRUNC %2(s32)
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)
227 RET_ReallyLR implicit $w0
232 name: fshr_i8_shift_by_bandwidth
234 tracksRegLiveness: true
239 ; CHECK-LABEL: name: fshr_i8_shift_by_bandwidth
240 ; CHECK: liveins: $w0, $w1
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
256 %0:_(s8) = G_TRUNC %2(s32)
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)
263 RET_ReallyLR implicit $w0
268 name: fshr_i16_const_shift
270 tracksRegLiveness: true
275 ; CHECK-LABEL: name: fshr_i16_const_shift
276 ; CHECK: liveins: $w0, $w1
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
290 %0:_(s16) = G_TRUNC %2(s32)
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)
297 RET_ReallyLR implicit $w0
302 name: fshr_i16_const_overshift
304 tracksRegLiveness: true
309 ; CHECK-LABEL: name: fshr_i16_const_overshift
310 ; CHECK: liveins: $w0, $w1
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
324 %0:_(s16) = G_TRUNC %2(s32)
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)
331 RET_ReallyLR implicit $w0
336 name: fshr_i16_shift_by_bandwidth
338 tracksRegLiveness: true
343 ; CHECK-LABEL: name: fshr_i16_shift_by_bandwidth
344 ; CHECK: liveins: $w0, $w1
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
360 %0:_(s16) = G_TRUNC %2(s32)
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)
367 RET_ReallyLR implicit $w0
372 name: fshr_i32_const_shift
374 tracksRegLiveness: true
379 ; CHECK-LABEL: name: fshr_i32_const_shift
380 ; CHECK: liveins: $w0, $w1
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
390 %2:_(s32) = G_CONSTANT i32 9
391 %3:_(s32) = G_FSHR %0, %1, %2(s32)
393 RET_ReallyLR implicit $w0
398 name: fshr_i32_const_overshift
400 tracksRegLiveness: true
405 ; CHECK-LABEL: name: fshr_i32_const_overshift
406 ; CHECK: liveins: $w0, $w1
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
416 %4:_(s32) = G_CONSTANT i32 42
417 %3:_(s32) = G_FSHR %0, %1, %4(s32)
419 RET_ReallyLR implicit $w0
424 name: fshr_i32_shift_by_bitwidth
426 tracksRegLiveness: true
431 ; CHECK-LABEL: name: fshr_i32_shift_by_bitwidth
432 ; CHECK: liveins: $w0, $w1
434 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w1
435 ; CHECK-NEXT: $w0 = COPY [[COPY]](s32)
436 ; CHECK-NEXT: RET_ReallyLR implicit $w0
439 RET_ReallyLR implicit $w0
444 name: fshr_i64_const_shift
446 tracksRegLiveness: true
451 ; CHECK-LABEL: name: fshr_i64_const_shift
452 ; CHECK: liveins: $x0, $x1
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
462 %4:_(s64) = G_CONSTANT i64 41
463 %3:_(s64) = G_FSHR %0, %1, %4(s64)
465 RET_ReallyLR implicit $x0
470 name: fshr_i64_const_overshift
472 tracksRegLiveness: true
477 ; CHECK-LABEL: name: fshr_i64_const_overshift
478 ; CHECK: liveins: $x0, $x1
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
488 %4:_(s64) = G_CONSTANT i64 72
489 %3:_(s64) = G_FSHR %0, %1, %4(s64)
491 RET_ReallyLR implicit $x0
496 name: fshr_i64_shift_by_bandwidth
498 tracksRegLiveness: true
503 ; CHECK-LABEL: name: fshr_i64_shift_by_bandwidth
504 ; CHECK: liveins: $x0, $x1
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
519 %4:_(s64) = G_CONSTANT i64 64
520 %3:_(s64) = G_FSHR %0, %1, %4(s64)
522 RET_ReallyLR implicit $x0
527 name: fshr_v4i32_shift_by_bitwidth
529 tracksRegLiveness: true
534 ; CHECK-LABEL: name: fshr_v4i32_shift_by_bitwidth
535 ; CHECK: liveins: $q0, $q1
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