Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / Mips / GlobalISel / legalizer / bitwise.mir
blobecda48cbb76aabe0653e34d0ecc91c2163bbd365
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32
3 --- |
5   define void @and_i1() {entry: ret void}
6   define void @and_i8() {entry: ret void}
7   define void @and_i16() {entry: ret void}
8   define void @and_i32() {entry: ret void}
9   define void @and_i64() {entry: ret void}
10   define void @or_i1() {entry: ret void}
11   define void @or_i8() {entry: ret void}
12   define void @or_i16() {entry: ret void}
13   define void @or_i32() {entry: ret void}
14   define void @or_i64() {entry: ret void}
15   define void @xor_i1() {entry: ret void}
16   define void @xor_i8() {entry: ret void}
17   define void @xor_i16() {entry: ret void}
18   define void @xor_i32() {entry: ret void}
19   define void @xor_i64() {entry: ret void}
20   define void @shl(i32) {entry: ret void}
21   define void @ashr(i32) {entry: ret void}
22   define void @lshr(i32) {entry: ret void}
23   define void @lshr_i64_shift_amount(i32) {entry: ret void}
24   define void @shlv(i32, i32) {entry: ret void}
25   define void @ashrv(i32, i32) {entry: ret void}
26   define void @lshrv(i32, i32) {entry: ret void}
27   define void @shl_i16() {entry: ret void}
28   define void @ashr_i8() {entry: ret void}
29   define void @lshr_i16() {entry: ret void}
30   define void @shl_i64() {entry: ret void}
31   define void @ashl_i64() {entry: ret void}
32   define void @lshr_i64() {entry: ret void}
34 ...
35 ---
36 name:            and_i1
37 alignment:       4
38 tracksRegLiveness: true
39 body:             |
40   bb.1.entry:
41     liveins: $a0, $a1
43     ; MIPS32-LABEL: name: and_i1
44     ; MIPS32: liveins: $a0, $a1
45     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
46     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
47     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[COPY]]
48     ; MIPS32: $v0 = COPY [[AND]](s32)
49     ; MIPS32: RetRA implicit $v0
50     %2:_(s32) = COPY $a0
51     %0:_(s1) = G_TRUNC %2(s32)
52     %3:_(s32) = COPY $a1
53     %1:_(s1) = G_TRUNC %3(s32)
54     %4:_(s1) = G_AND %1, %0
55     %5:_(s32) = G_ANYEXT %4(s1)
56     $v0 = COPY %5(s32)
57     RetRA implicit $v0
59 ...
60 ---
61 name:            and_i8
62 alignment:       4
63 tracksRegLiveness: true
64 body:             |
65   bb.1.entry:
66     liveins: $a0, $a1
68     ; MIPS32-LABEL: name: and_i8
69     ; MIPS32: liveins: $a0, $a1
70     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
71     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
72     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[COPY]]
73     ; MIPS32: $v0 = COPY [[AND]](s32)
74     ; MIPS32: RetRA implicit $v0
75     %2:_(s32) = COPY $a0
76     %0:_(s8) = G_TRUNC %2(s32)
77     %3:_(s32) = COPY $a1
78     %1:_(s8) = G_TRUNC %3(s32)
79     %4:_(s8) = G_AND %1, %0
80     %5:_(s32) = G_ANYEXT %4(s8)
81     $v0 = COPY %5(s32)
82     RetRA implicit $v0
84 ...
85 ---
86 name:            and_i16
87 alignment:       4
88 tracksRegLiveness: true
89 body:             |
90   bb.1.entry:
91     liveins: $a0, $a1
93     ; MIPS32-LABEL: name: and_i16
94     ; MIPS32: liveins: $a0, $a1
95     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
96     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
97     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[COPY]]
98     ; MIPS32: $v0 = COPY [[AND]](s32)
99     ; MIPS32: RetRA implicit $v0
100     %2:_(s32) = COPY $a0
101     %0:_(s16) = G_TRUNC %2(s32)
102     %3:_(s32) = COPY $a1
103     %1:_(s16) = G_TRUNC %3(s32)
104     %4:_(s16) = G_AND %1, %0
105     %5:_(s32) = G_ANYEXT %4(s16)
106     $v0 = COPY %5(s32)
107     RetRA implicit $v0
111 name:            and_i32
112 alignment:       4
113 tracksRegLiveness: true
114 body:             |
115   bb.1.entry:
116     liveins: $a0, $a1
118     ; MIPS32-LABEL: name: and_i32
119     ; MIPS32: liveins: $a0, $a1
120     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
121     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
122     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[COPY]]
123     ; MIPS32: $v0 = COPY [[AND]](s32)
124     ; MIPS32: RetRA implicit $v0
125     %0:_(s32) = COPY $a0
126     %1:_(s32) = COPY $a1
127     %2:_(s32) = G_AND %1, %0
128     $v0 = COPY %2(s32)
129     RetRA implicit $v0
133 name:            and_i64
134 alignment:       4
135 tracksRegLiveness: true
136 body:             |
137   bb.1.entry:
138     liveins: $a0, $a1, $a2, $a3
140     ; MIPS32-LABEL: name: and_i64
141     ; MIPS32: liveins: $a0, $a1, $a2, $a3
142     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
143     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
144     ; MIPS32: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
145     ; MIPS32: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3
146     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[COPY]]
147     ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[COPY1]]
148     ; MIPS32: $v0 = COPY [[AND]](s32)
149     ; MIPS32: $v1 = COPY [[AND1]](s32)
150     ; MIPS32: RetRA implicit $v0, implicit $v1
151     %2:_(s32) = COPY $a0
152     %3:_(s32) = COPY $a1
153     %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
154     %4:_(s32) = COPY $a2
155     %5:_(s32) = COPY $a3
156     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
157     %6:_(s64) = G_AND %1, %0
158     %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(s64)
159     $v0 = COPY %7(s32)
160     $v1 = COPY %8(s32)
161     RetRA implicit $v0, implicit $v1
165 name:            or_i1
166 alignment:       4
167 tracksRegLiveness: true
168 body:             |
169   bb.1.entry:
170     liveins: $a0, $a1
172     ; MIPS32-LABEL: name: or_i1
173     ; MIPS32: liveins: $a0, $a1
174     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
175     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
176     ; MIPS32: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY]]
177     ; MIPS32: $v0 = COPY [[OR]](s32)
178     ; MIPS32: RetRA implicit $v0
179     %2:_(s32) = COPY $a0
180     %0:_(s1) = G_TRUNC %2(s32)
181     %3:_(s32) = COPY $a1
182     %1:_(s1) = G_TRUNC %3(s32)
183     %4:_(s1) = G_OR %1, %0
184     %5:_(s32) = G_ANYEXT %4(s1)
185     $v0 = COPY %5(s32)
186     RetRA implicit $v0
190 name:            or_i8
191 alignment:       4
192 tracksRegLiveness: true
193 body:             |
194   bb.1.entry:
195     liveins: $a0, $a1
197     ; MIPS32-LABEL: name: or_i8
198     ; MIPS32: liveins: $a0, $a1
199     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
200     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
201     ; MIPS32: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY]]
202     ; MIPS32: $v0 = COPY [[OR]](s32)
203     ; MIPS32: RetRA implicit $v0
204     %2:_(s32) = COPY $a0
205     %0:_(s8) = G_TRUNC %2(s32)
206     %3:_(s32) = COPY $a1
207     %1:_(s8) = G_TRUNC %3(s32)
208     %4:_(s8) = G_OR %1, %0
209     %5:_(s32) = G_ANYEXT %4(s8)
210     $v0 = COPY %5(s32)
211     RetRA implicit $v0
215 name:            or_i16
216 alignment:       4
217 tracksRegLiveness: true
218 body:             |
219   bb.1.entry:
220     liveins: $a0, $a1
222     ; MIPS32-LABEL: name: or_i16
223     ; MIPS32: liveins: $a0, $a1
224     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
225     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
226     ; MIPS32: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY]]
227     ; MIPS32: $v0 = COPY [[OR]](s32)
228     ; MIPS32: RetRA implicit $v0
229     %2:_(s32) = COPY $a0
230     %0:_(s16) = G_TRUNC %2(s32)
231     %3:_(s32) = COPY $a1
232     %1:_(s16) = G_TRUNC %3(s32)
233     %4:_(s16) = G_OR %1, %0
234     %5:_(s32) = G_ANYEXT %4(s16)
235     $v0 = COPY %5(s32)
236     RetRA implicit $v0
240 name:            or_i32
241 alignment:       4
242 tracksRegLiveness: true
243 body:             |
244   bb.1.entry:
245     liveins: $a0, $a1
247     ; MIPS32-LABEL: name: or_i32
248     ; MIPS32: liveins: $a0, $a1
249     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
250     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
251     ; MIPS32: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY]]
252     ; MIPS32: $v0 = COPY [[OR]](s32)
253     ; MIPS32: RetRA implicit $v0
254     %0:_(s32) = COPY $a0
255     %1:_(s32) = COPY $a1
256     %2:_(s32) = G_OR %1, %0
257     $v0 = COPY %2(s32)
258     RetRA implicit $v0
262 name:            or_i64
263 alignment:       4
264 tracksRegLiveness: true
265 body:             |
266   bb.1.entry:
267     liveins: $a0, $a1, $a2, $a3
269     ; MIPS32-LABEL: name: or_i64
270     ; MIPS32: liveins: $a0, $a1, $a2, $a3
271     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
272     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
273     ; MIPS32: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
274     ; MIPS32: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3
275     ; MIPS32: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY2]], [[COPY]]
276     ; MIPS32: [[OR1:%[0-9]+]]:_(s32) = G_OR [[COPY3]], [[COPY1]]
277     ; MIPS32: $v0 = COPY [[OR]](s32)
278     ; MIPS32: $v1 = COPY [[OR1]](s32)
279     ; MIPS32: RetRA implicit $v0, implicit $v1
280     %2:_(s32) = COPY $a0
281     %3:_(s32) = COPY $a1
282     %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
283     %4:_(s32) = COPY $a2
284     %5:_(s32) = COPY $a3
285     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
286     %6:_(s64) = G_OR %1, %0
287     %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(s64)
288     $v0 = COPY %7(s32)
289     $v1 = COPY %8(s32)
290     RetRA implicit $v0, implicit $v1
294 name:            xor_i1
295 alignment:       4
296 tracksRegLiveness: true
297 body:             |
298   bb.1.entry:
299     liveins: $a0, $a1
301     ; MIPS32-LABEL: name: xor_i1
302     ; MIPS32: liveins: $a0, $a1
303     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
304     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
305     ; MIPS32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY1]], [[COPY]]
306     ; MIPS32: $v0 = COPY [[XOR]](s32)
307     ; MIPS32: RetRA implicit $v0
308     %2:_(s32) = COPY $a0
309     %0:_(s1) = G_TRUNC %2(s32)
310     %3:_(s32) = COPY $a1
311     %1:_(s1) = G_TRUNC %3(s32)
312     %4:_(s1) = G_XOR %1, %0
313     %5:_(s32) = G_ANYEXT %4(s1)
314     $v0 = COPY %5(s32)
315     RetRA implicit $v0
319 name:            xor_i8
320 alignment:       4
321 tracksRegLiveness: true
322 body:             |
323   bb.1.entry:
324     liveins: $a0, $a1
326     ; MIPS32-LABEL: name: xor_i8
327     ; MIPS32: liveins: $a0, $a1
328     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
329     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
330     ; MIPS32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY1]], [[COPY]]
331     ; MIPS32: $v0 = COPY [[XOR]](s32)
332     ; MIPS32: RetRA implicit $v0
333     %2:_(s32) = COPY $a0
334     %0:_(s8) = G_TRUNC %2(s32)
335     %3:_(s32) = COPY $a1
336     %1:_(s8) = G_TRUNC %3(s32)
337     %4:_(s8) = G_XOR %1, %0
338     %5:_(s32) = G_ANYEXT %4(s8)
339     $v0 = COPY %5(s32)
340     RetRA implicit $v0
344 name:            xor_i16
345 alignment:       4
346 tracksRegLiveness: true
347 body:             |
348   bb.1.entry:
349     liveins: $a0, $a1
351     ; MIPS32-LABEL: name: xor_i16
352     ; MIPS32: liveins: $a0, $a1
353     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
354     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
355     ; MIPS32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY1]], [[COPY]]
356     ; MIPS32: $v0 = COPY [[XOR]](s32)
357     ; MIPS32: RetRA implicit $v0
358     %2:_(s32) = COPY $a0
359     %0:_(s16) = G_TRUNC %2(s32)
360     %3:_(s32) = COPY $a1
361     %1:_(s16) = G_TRUNC %3(s32)
362     %4:_(s16) = G_XOR %1, %0
363     %5:_(s32) = G_ANYEXT %4(s16)
364     $v0 = COPY %5(s32)
365     RetRA implicit $v0
369 name:            xor_i32
370 alignment:       4
371 tracksRegLiveness: true
372 body:             |
373   bb.1.entry:
374     liveins: $a0, $a1
376     ; MIPS32-LABEL: name: xor_i32
377     ; MIPS32: liveins: $a0, $a1
378     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
379     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
380     ; MIPS32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY1]], [[COPY]]
381     ; MIPS32: $v0 = COPY [[XOR]](s32)
382     ; MIPS32: RetRA implicit $v0
383     %0:_(s32) = COPY $a0
384     %1:_(s32) = COPY $a1
385     %2:_(s32) = G_XOR %1, %0
386     $v0 = COPY %2(s32)
387     RetRA implicit $v0
391 name:            xor_i64
392 alignment:       4
393 tracksRegLiveness: true
394 body:             |
395   bb.1.entry:
396     liveins: $a0, $a1, $a2, $a3
398     ; MIPS32-LABEL: name: xor_i64
399     ; MIPS32: liveins: $a0, $a1, $a2, $a3
400     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
401     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
402     ; MIPS32: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
403     ; MIPS32: [[COPY3:%[0-9]+]]:_(s32) = COPY $a3
404     ; MIPS32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY2]], [[COPY]]
405     ; MIPS32: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[COPY3]], [[COPY1]]
406     ; MIPS32: $v0 = COPY [[XOR]](s32)
407     ; MIPS32: $v1 = COPY [[XOR1]](s32)
408     ; MIPS32: RetRA implicit $v0, implicit $v1
409     %2:_(s32) = COPY $a0
410     %3:_(s32) = COPY $a1
411     %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
412     %4:_(s32) = COPY $a2
413     %5:_(s32) = COPY $a3
414     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
415     %6:_(s64) = G_XOR %1, %0
416     %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(s64)
417     $v0 = COPY %7(s32)
418     $v1 = COPY %8(s32)
419     RetRA implicit $v0, implicit $v1
423 name:            shl
424 alignment:       4
425 tracksRegLiveness: true
426 body:             |
427   bb.1.entry:
428     liveins: $a0
430     ; MIPS32-LABEL: name: shl
431     ; MIPS32: liveins: $a0
432     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
433     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
434     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
435     ; MIPS32: $v0 = COPY [[SHL]](s32)
436     ; MIPS32: RetRA implicit $v0
437     %0:_(s32) = COPY $a0
438     %1:_(s32) = G_CONSTANT i32 1
439     %2:_(s32) = G_SHL %0, %1
440     $v0 = COPY %2(s32)
441     RetRA implicit $v0
445 name:            ashr
446 alignment:       4
447 tracksRegLiveness: true
448 body:             |
449   bb.1.entry:
450     liveins: $a0
452     ; MIPS32-LABEL: name: ashr
453     ; MIPS32: liveins: $a0
454     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
455     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
456     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
457     ; MIPS32: $v0 = COPY [[ASHR]](s32)
458     ; MIPS32: RetRA implicit $v0
459     %0:_(s32) = COPY $a0
460     %1:_(s32) = G_CONSTANT i32 1
461     %2:_(s32) = G_ASHR %0, %1
462     $v0 = COPY %2(s32)
463     RetRA implicit $v0
467 name:            lshr
468 alignment:       4
469 tracksRegLiveness: true
470 body:             |
471   bb.1.entry:
472     liveins: $a0
474     ; MIPS32-LABEL: name: lshr
475     ; MIPS32: liveins: $a0
476     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
477     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
478     ; MIPS32: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)
479     ; MIPS32: $v0 = COPY [[LSHR]](s32)
480     ; MIPS32: RetRA implicit $v0
481     %0:_(s32) = COPY $a0
482     %1:_(s32) = G_CONSTANT i32 1
483     %2:_(s32) = G_LSHR %0, %1
484     $v0 = COPY %2(s32)
485     RetRA implicit $v0
489 name:            lshr_i64_shift_amount
490 alignment:       4
491 tracksRegLiveness: true
492 body:             |
493   bb.1.entry:
494     liveins: $a0
496     ; MIPS32-LABEL: name: lshr_i64_shift_amount
497     ; MIPS32: liveins: $a0
498     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
499     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
500     ; MIPS32: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)
501     ; MIPS32: $v0 = COPY [[LSHR]](s32)
502     ; MIPS32: RetRA implicit $v0
503     %0:_(s32) = COPY $a0
504     %1:_(s64) = G_CONSTANT i64 1
505     %2:_(s32) = G_LSHR %0, %1
506     $v0 = COPY %2(s32)
507     RetRA implicit $v0
511 name:            shlv
512 alignment:       4
513 tracksRegLiveness: true
514 body:             |
515   bb.1.entry:
516     liveins: $a0, $a1
518     ; MIPS32-LABEL: name: shlv
519     ; MIPS32: liveins: $a0, $a1
520     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
521     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
522     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[COPY1]](s32)
523     ; MIPS32: $v0 = COPY [[SHL]](s32)
524     ; MIPS32: RetRA implicit $v0
525     %0:_(s32) = COPY $a0
526     %1:_(s32) = COPY $a1
527     %2:_(s32) = G_SHL %0, %1
528     $v0 = COPY %2(s32)
529     RetRA implicit $v0
533 name:            ashrv
534 alignment:       4
535 tracksRegLiveness: true
536 body:             |
537   bb.1.entry:
538     liveins: $a0, $a1
540     ; MIPS32-LABEL: name: ashrv
541     ; MIPS32: liveins: $a0, $a1
542     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
543     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
544     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[COPY1]](s32)
545     ; MIPS32: $v0 = COPY [[ASHR]](s32)
546     ; MIPS32: RetRA implicit $v0
547     %0:_(s32) = COPY $a0
548     %1:_(s32) = COPY $a1
549     %2:_(s32) = G_ASHR %0, %1
550     $v0 = COPY %2(s32)
551     RetRA implicit $v0
555 name:            lshrv
556 alignment:       4
557 tracksRegLiveness: true
558 body:             |
559   bb.1.entry:
560     liveins: $a0, $a1
562     ; MIPS32-LABEL: name: lshrv
563     ; MIPS32: liveins: $a0, $a1
564     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
565     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
566     ; MIPS32: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[COPY1]](s32)
567     ; MIPS32: $v0 = COPY [[LSHR]](s32)
568     ; MIPS32: RetRA implicit $v0
569     %0:_(s32) = COPY $a0
570     %1:_(s32) = COPY $a1
571     %2:_(s32) = G_LSHR %0, %1
572     $v0 = COPY %2(s32)
573     RetRA implicit $v0
577 name:            shl_i16
578 alignment:       4
579 tracksRegLiveness: true
580 body:             |
581   bb.1.entry:
582     liveins: $a0
584     ; MIPS32-LABEL: name: shl_i16
585     ; MIPS32: liveins: $a0
586     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
587     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
588     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
589     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[COPY1]](s32)
590     ; MIPS32: $v0 = COPY [[SHL]](s32)
591     ; MIPS32: RetRA implicit $v0
592     %1:_(s32) = COPY $a0
593     %0:_(s16) = G_TRUNC %1(s32)
594     %2:_(s16) = G_CONSTANT i16 2
595     %3:_(s16) = G_SHL %0, %2(s16)
596     %4:_(s32) = G_ANYEXT %3(s16)
597     $v0 = COPY %4(s32)
598     RetRA implicit $v0
602 name:            ashr_i8
603 alignment:       4
604 tracksRegLiveness: true
605 body:             |
606   bb.1.entry:
607     liveins: $a0
609     ; MIPS32-LABEL: name: ashr_i8
610     ; MIPS32: liveins: $a0
611     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
612     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
613     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
614     ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
615     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C1]](s32)
616     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)
617     ; MIPS32: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[ASHR]], [[COPY1]](s32)
618     ; MIPS32: $v0 = COPY [[ASHR1]](s32)
619     ; MIPS32: RetRA implicit $v0
620     %1:_(s32) = COPY $a0
621     %0:_(s8) = G_TRUNC %1(s32)
622     %2:_(s8) = G_CONSTANT i8 2
623     %3:_(s8) = G_ASHR %0, %2(s8)
624     %4:_(s32) = G_ANYEXT %3(s8)
625     $v0 = COPY %4(s32)
626     RetRA implicit $v0
630 name:            lshr_i16
631 alignment:       4
632 tracksRegLiveness: true
633 body:             |
634   bb.1.entry:
635     liveins: $a0
637     ; MIPS32-LABEL: name: lshr_i16
638     ; MIPS32: liveins: $a0
639     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
640     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
641     ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
642     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
643     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
644     ; MIPS32: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY1]](s32)
645     ; MIPS32: $v0 = COPY [[LSHR]](s32)
646     ; MIPS32: RetRA implicit $v0
647     %1:_(s32) = COPY $a0
648     %0:_(s16) = G_TRUNC %1(s32)
649     %2:_(s16) = G_CONSTANT i16 2
650     %3:_(s16) = G_LSHR %0, %2(s16)
651     %4:_(s32) = G_ANYEXT %3(s16)
652     $v0 = COPY %4(s32)
653     RetRA implicit $v0
657 name:            shl_i64
658 alignment:       4
659 tracksRegLiveness: true
660 body:             |
661   bb.1.entry:
662     liveins: $a0, $a1, $a2, $a3
664     ; MIPS32-LABEL: name: shl_i64
665     ; MIPS32: liveins: $a0, $a1, $a2, $a3
666     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
667     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
668     ; MIPS32: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
669     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
670     ; MIPS32: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[COPY2]], [[C]]
671     ; MIPS32: [[SUB1:%[0-9]+]]:_(s32) = G_SUB [[C]], [[COPY2]]
672     ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
673     ; MIPS32: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY2]](s32), [[C]]
674     ; MIPS32: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY2]](s32), [[C1]]
675     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[COPY2]](s32)
676     ; MIPS32: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[SUB1]](s32)
677     ; MIPS32: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[COPY2]](s32)
678     ; MIPS32: [[OR:%[0-9]+]]:_(s32) = G_OR [[LSHR]], [[SHL1]]
679     ; MIPS32: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[SUB]](s32)
680     ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
681     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
682     ; MIPS32: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[SHL]], [[C1]]
683     ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
684     ; MIPS32: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[AND1]](s32), [[OR]], [[SHL2]]
685     ; MIPS32: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ICMP1]], [[C2]]
686     ; MIPS32: [[SELECT2:%[0-9]+]]:_(s32) = G_SELECT [[AND2]](s32), [[COPY1]], [[SELECT1]]
687     ; MIPS32: $v0 = COPY [[SELECT]](s32)
688     ; MIPS32: $v1 = COPY [[SELECT2]](s32)
689     ; MIPS32: RetRA implicit $v0, implicit $v1
690     %2:_(s32) = COPY $a0
691     %3:_(s32) = COPY $a1
692     %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
693     %4:_(s32) = COPY $a2
694     %5:_(s32) = COPY $a3
695     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
696     %6:_(s64) = G_SHL %0, %1(s64)
697     %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(s64)
698     $v0 = COPY %7(s32)
699     $v1 = COPY %8(s32)
700     RetRA implicit $v0, implicit $v1
704 name:            ashl_i64
705 alignment:       4
706 tracksRegLiveness: true
707 body:             |
708   bb.1.entry:
709     liveins: $a0, $a1, $a2, $a3
711     ; MIPS32-LABEL: name: ashl_i64
712     ; MIPS32: liveins: $a0, $a1, $a2, $a3
713     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
714     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
715     ; MIPS32: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
716     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
717     ; MIPS32: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[COPY2]], [[C]]
718     ; MIPS32: [[SUB1:%[0-9]+]]:_(s32) = G_SUB [[C]], [[COPY2]]
719     ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
720     ; MIPS32: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY2]](s32), [[C]]
721     ; MIPS32: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY2]](s32), [[C1]]
722     ; MIPS32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY1]], [[COPY2]](s32)
723     ; MIPS32: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[COPY2]](s32)
724     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[SUB1]](s32)
725     ; MIPS32: [[OR:%[0-9]+]]:_(s32) = G_OR [[LSHR]], [[SHL]]
726     ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
727     ; MIPS32: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[COPY1]], [[C2]](s32)
728     ; MIPS32: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[COPY1]], [[SUB]](s32)
729     ; MIPS32: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
730     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C3]]
731     ; MIPS32: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[OR]], [[ASHR2]]
732     ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ICMP1]], [[C3]]
733     ; MIPS32: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[AND1]](s32), [[COPY]], [[SELECT]]
734     ; MIPS32: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C3]]
735     ; MIPS32: [[SELECT2:%[0-9]+]]:_(s32) = G_SELECT [[AND2]](s32), [[ASHR]], [[ASHR1]]
736     ; MIPS32: $v0 = COPY [[SELECT1]](s32)
737     ; MIPS32: $v1 = COPY [[SELECT2]](s32)
738     ; MIPS32: RetRA implicit $v0, implicit $v1
739     %2:_(s32) = COPY $a0
740     %3:_(s32) = COPY $a1
741     %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
742     %4:_(s32) = COPY $a2
743     %5:_(s32) = COPY $a3
744     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
745     %6:_(s64) = G_ASHR %0, %1(s64)
746     %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(s64)
747     $v0 = COPY %7(s32)
748     $v1 = COPY %8(s32)
749     RetRA implicit $v0, implicit $v1
753 name:            lshr_i64
754 alignment:       4
755 tracksRegLiveness: true
756 body:             |
757   bb.1.entry:
758     liveins: $a0, $a1, $a2, $a3
760     ; MIPS32-LABEL: name: lshr_i64
761     ; MIPS32: liveins: $a0, $a1, $a2, $a3
762     ; MIPS32: [[COPY:%[0-9]+]]:_(s32) = COPY $a0
763     ; MIPS32: [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
764     ; MIPS32: [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
765     ; MIPS32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
766     ; MIPS32: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[COPY2]], [[C]]
767     ; MIPS32: [[SUB1:%[0-9]+]]:_(s32) = G_SUB [[C]], [[COPY2]]
768     ; MIPS32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
769     ; MIPS32: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY2]](s32), [[C]]
770     ; MIPS32: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY2]](s32), [[C1]]
771     ; MIPS32: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[COPY2]](s32)
772     ; MIPS32: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[COPY2]](s32)
773     ; MIPS32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[SUB1]](s32)
774     ; MIPS32: [[OR:%[0-9]+]]:_(s32) = G_OR [[LSHR1]], [[SHL]]
775     ; MIPS32: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[SUB]](s32)
776     ; MIPS32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
777     ; MIPS32: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
778     ; MIPS32: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[OR]], [[LSHR2]]
779     ; MIPS32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ICMP1]], [[C2]]
780     ; MIPS32: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[AND1]](s32), [[COPY]], [[SELECT]]
781     ; MIPS32: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
782     ; MIPS32: [[SELECT2:%[0-9]+]]:_(s32) = G_SELECT [[AND2]](s32), [[LSHR]], [[C1]]
783     ; MIPS32: $v0 = COPY [[SELECT1]](s32)
784     ; MIPS32: $v1 = COPY [[SELECT2]](s32)
785     ; MIPS32: RetRA implicit $v0, implicit $v1
786     %2:_(s32) = COPY $a0
787     %3:_(s32) = COPY $a1
788     %0:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
789     %4:_(s32) = COPY $a2
790     %5:_(s32) = COPY $a3
791     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
792     %6:_(s64) = G_LSHR %0, %1(s64)
793     %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(s64)
794     $v0 = COPY %7(s32)
795     $v1 = COPY %8(s32)
796     RetRA implicit $v0, implicit $v1