[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / prelegalizercombiner-ashr-shl-to-sext-inreg.mir
blob9e540390dd37f43102e318af2f1a6c2d183a51c7
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
3 ---
4 name:            ashr_shl_to_sext_inreg
5 alignment:       4
6 tracksRegLiveness: true
7 liveins:
8   - { reg: '$w0' }
9 body:             |
10   bb.1:
11     liveins: $w0
13     ; CHECK-LABEL: name: ashr_shl_to_sext_inreg
14     ; CHECK: liveins: $w0
15     ; CHECK-NEXT: {{  $}}
16     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
17     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
18     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s16) = G_SEXT_INREG [[TRUNC]], 8
19     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SEXT_INREG]](s16)
20     ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
21     ; CHECK-NEXT: RET_ReallyLR implicit $w0
22     %1:_(s32) = COPY $w0
23     %0:_(s16) = G_TRUNC %1(s32)
24     %2:_(s16) = G_CONSTANT i16 8
25     %3:_(s16) = G_SHL %0, %2(s16)
26     %4:_(s16) = exact G_ASHR %3, %2(s16)
27     %5:_(s32) = G_ANYEXT %4(s16)
28     $w0 = COPY %5(s32)
29     RET_ReallyLR implicit $w0
31 ...
32 ---
33 name:            different_shift_amts
34 alignment:       4
35 tracksRegLiveness: true
36 liveins:
37   - { reg: '$w0' }
38 body:             |
39   bb.1:
40     liveins: $w0
42     ; CHECK-LABEL: name: different_shift_amts
43     ; CHECK: liveins: $w0
44     ; CHECK-NEXT: {{  $}}
45     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
46     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
47     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 12
48     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
49     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[TRUNC]], [[C]](s16)
50     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s16) = exact G_ASHR [[SHL]], [[C1]](s16)
51     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ASHR]](s16)
52     ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
53     ; CHECK-NEXT: RET_ReallyLR implicit $w0
54     %1:_(s32) = COPY $w0
55     %0:_(s16) = G_TRUNC %1(s32)
56     %2:_(s16) = G_CONSTANT i16 12
57     %4:_(s16) = G_CONSTANT i16 8
58     %3:_(s16) = G_SHL %0, %2(s16)
59     %5:_(s16) = exact G_ASHR %3, %4(s16)
60     %6:_(s32) = G_ANYEXT %5(s16)
61     $w0 = COPY %6(s32)
62     RET_ReallyLR implicit $w0
64 ...
65 ---
66 name:            ashr_shl_to_sext_inreg_vector
67 alignment:       4
68 tracksRegLiveness: true
69 liveins:
70   - { reg: '$d0' }
71 body:             |
72   bb.1:
73     liveins: $d0
74     ; CHECK-LABEL: name: ashr_shl_to_sext_inreg_vector
75     ; CHECK: liveins: $d0
76     ; CHECK-NEXT: {{  $}}
77     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
78     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<4 x s16>) = G_SEXT_INREG [[COPY]], 8
79     ; CHECK-NEXT: $d0 = COPY [[SEXT_INREG]](<4 x s16>)
80     ; CHECK-NEXT: RET_ReallyLR implicit $d0
81     %0:_(<4 x s16>) = COPY $d0
82     %2:_(s16) = G_CONSTANT i16 8
83     %1:_(<4 x s16>) = G_BUILD_VECTOR %2(s16), %2(s16), %2(s16), %2(s16)
84     %3:_(<4 x s16>) = G_SHL %0, %1(<4 x s16>)
85     %4:_(<4 x s16>) = exact G_ASHR %3, %1(<4 x s16>)
86     $d0 = COPY %4(<4 x s16>)
87     RET_ReallyLR implicit $d0
88 ...