[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / ARM / GlobalISel / arm-legalize-exts.mir
blob6fa6f58e11a4edb675011e379d54993361a5e9e9
1 # RUN: llc -mtriple arm-- -run-pass=legalizer %s -o - | FileCheck %s
2 # RUN: llc -mtriple thumb-- -mattr=+v6t2 -run-pass=legalizer %s -o - | FileCheck %s
3 --- |
4   define void @test_zext_s16_to_s32() { ret void }
5   define void @test_sext_s8_to_s32() { ret void }
6   define void @test_anyext_s1_to_s32() { ret void }
8   define void @test_zext_s8_to_s16() { ret void }
9   define void @test_sext_s1_to_s16() { ret void }
11   define void @test_anyext_s1_to_s8() { ret void }
13   define void @test_ext_combine() { ret void }
14 ...
15 ---
16 name:            test_zext_s16_to_s32
17 # CHECK-LABEL: name: test_zext_s16_to_s32
18 legalized:       false
19 # CHECK: legalized: true
20 regBankSelected: false
21 selected:        false
22 tracksRegLiveness: true
23 registers:
24   - { id: 0, class: _ }
25   - { id: 1, class: _ }
26   - { id: 2, class: _ }
27 body:             |
28   bb.0:
29     liveins: $r0
31     %0(p0) = COPY $r0
32     %1(s16) = G_LOAD %0 :: (load 2)
33     %2(s32) = G_ZEXT %1
34     ; G_ZEXT with s16 is legal, so we should find it unchanged in the output
35     ; CHECK: {{%[0-9]+}}:_(s32) = G_ZEXT {{%[0-9]+}}
36     $r0 = COPY %2(s32)
37     BX_RET 14, $noreg, implicit $r0
38 ...
39 ---
40 name:            test_sext_s8_to_s32
41 # CHECK-LABEL: name: test_sext_s8_to_s32
42 legalized:       false
43 # CHECK: legalized: true
44 regBankSelected: false
45 selected:        false
46 tracksRegLiveness: true
47 registers:
48   - { id: 0, class: _ }
49   - { id: 1, class: _ }
50   - { id: 2, class: _ }
51 body:             |
52   bb.0:
53     liveins: $r0
55     %0(p0) = COPY $r0
56     %1(s8) = G_LOAD %0(p0) :: (load 1)
57     %2(s32) = G_SEXT %1
58     ; G_SEXT with s8 is legal, so we should find it unchanged in the output
59     ; CHECK: {{%[0-9]+}}:_(s32) = G_SEXT {{%[0-9]+}}
60     $r0 = COPY %2(s32)
61     BX_RET 14, $noreg, implicit $r0
62 ...
63 ---
64 name:            test_anyext_s1_to_s32
65 # CHECK-LABEL: name: test_anyext_s1_to_s32
66 legalized:       false
67 # CHECK: legalized: true
68 regBankSelected: false
69 selected:        false
70 tracksRegLiveness: true
71 registers:
72   - { id: 0, class: _ }
73   - { id: 1, class: _ }
74   - { id: 2, class: _ }
75 body:             |
76   bb.0:
77     liveins: $r0
79     %0(p0) = COPY $r0
80     %1(s1) = G_LOAD %0(p0) :: (load 1)
81     %2(s32) = G_ANYEXT %1
82     ; G_ANYEXT with s1 is legal, so we should find it unchanged in the output
83     ; CHECK: {{%[0-9]+}}:_(s32) = G_ANYEXT {{%[0-9]+}}
84     $r0 = COPY %2(s32)
85     BX_RET 14, $noreg, implicit $r0
86 ...
87 ---
88 name:            test_zext_s8_to_s16
89 # CHECK-LABEL: name: test_zext_s8_to_s16
90 legalized:       false
91 # CHECK: legalized: true
92 regBankSelected: false
93 selected:        false
94 tracksRegLiveness: true
95 registers:
96   - { id: 0, class: _ }
97   - { id: 1, class: _ }
98   - { id: 2, class: _ }
99 body:             |
100   bb.0:
101     liveins: $r0
103     %0(p0) = COPY $r0
104     %1(s8) = G_LOAD %0(p0) :: (load 1)
105     %2(s16) = G_ZEXT %1
106     ; G_ZEXT from s8 to s16 is legal, so we should find it unchanged in the output
107     ; CHECK: {{%[0-9]+}}:_(s16) = G_ZEXT {{%[0-9]+}}(s8)
108     G_STORE %2(s16), %0(p0) :: (store 2)
109     BX_RET 14, $noreg
112 name:            test_sext_s1_to_s16
113 # CHECK-LABEL: name: test_sext_s1_to_s16
114 legalized:       false
115 # CHECK: legalized: true
116 regBankSelected: false
117 selected:        false
118 tracksRegLiveness: true
119 registers:
120   - { id: 0, class: _ }
121   - { id: 1, class: _ }
122   - { id: 2, class: _ }
123 body:             |
124   bb.0:
125     liveins: $r0
127     %0(p0) = COPY $r0
128     %1(s1) = G_LOAD %0(p0) :: (load 1)
129     %2(s16) = G_SEXT %1(s1)
130     ; G_SEXT from s1 to s16 is legal, so we should find it unchanged in the output
131     ; CHECK: {{%[0-9]+}}:_(s16) = G_SEXT {{%[0-9]+}}(s1)
132     G_STORE %2(s16), %0(p0) :: (store 2)
133     BX_RET 14, $noreg
136 name:            test_anyext_s1_to_s8
137 # CHECK-LABEL: name: test_anyext_s1_to_s8
138 legalized:       false
139 # CHECK: legalized: true
140 regBankSelected: false
141 selected:        false
142 tracksRegLiveness: true
143 registers:
144   - { id: 0, class: _ }
145   - { id: 1, class: _ }
146   - { id: 2, class: _ }
147 body:             |
148   bb.0:
149     liveins: $r0
151     %0(p0) = COPY $r0
152     %1(s1) = G_LOAD %0(p0) :: (load 1)
153     %2(s8) = G_ANYEXT %1
154     ; G_ANYEXT from s1 to s8 is legal, so we should find it unchanged in the output
155     ; CHECK: {{%[0-9]+}}:_(s8) = G_ANYEXT {{%[0-9]+}}(s1)
156     G_STORE %2(s8), %0(p0) :: (store 1)
157     BX_RET 14, $noreg
160 name:            test_ext_combine
161 # CHECK-LABEL: name: test_ext_combine
162 legalized:       false
163 # CHECK: legalized: true
164 regBankSelected: false
165 selected:        false
166 tracksRegLiveness: true
167 registers:
168   - { id: 0, class: _ }
169   - { id: 1, class: _ }
170   - { id: 2, class: _ }
171   - { id: 3, class: _ }
172   - { id: 4, class: _ }
173   - { id: 5, class: _ }
174 body:             |
175   bb.0:
176     liveins: $r0
178     %0(p0) = COPY $r0
179     %1(s8) = G_LOAD %0(p0) :: (load 1)
180     ; CHECK: [[V8:%[0-9]+]]:_(s8) = G_LOAD
182     %2(s16) = G_ZEXT %1
183     %3(s16) = G_SEXT %1
185     %4(s16) = G_OR %2, %3
186     ; G_OR is going to widen to 32 bits and the extensions/truncs should combine
187     ; with the already existing ones
188     ; CHECK: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[V8]](s8)
189     ; CHECK: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[V8]](s8)
190     ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SEXT]]
191     ; CHECK: [[BITS:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
192     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY [[OR]]
193     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[BITS]](s32)
194     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[BITS]](s32)
195     ; CHECK: $r0 = COPY [[ASHR]]
197     %5(s32) = G_SEXT %4(s16)
198     $r0 = COPY %5
200     BX_RET 14, $noreg, implicit $r0