@@ -134,3 +134,103 @@ define arm_aapcs_vfpcc <1 x i64> @vmov_i64_b() {
134
134
; CHECK-NEXT: bx lr
135
135
ret <1 x i64 > <i64 72056498804490495 >
136
136
}
137
+
138
+ define arm_aapcs_vfpcc <2 x i64 > @vmov_v2i64_b () {
139
+ ; CHECK-LABEL: vmov_v2i64_b:
140
+ ; CHECK: @ %bb.0:
141
+ ; CHECK-NEXT: vmov.i64 q0, #0xffff00ff0000ff
142
+ ; CHECK-NEXT: bx lr
143
+ ret <2 x i64 > <i64 72056498804490495 , i64 72056498804490495 >
144
+ }
145
+
146
+ define arm_aapcs_vfpcc <4 x i32 > @vmov_v4i32_b () {
147
+ ; CHECK-LE-LABEL: vmov_v4i32_b:
148
+ ; CHECK-LE: @ %bb.0:
149
+ ; CHECK-LE-NEXT: vmov.i64 q0, #0xff0000ff00ffff00
150
+ ; CHECK-LE-NEXT: bx lr
151
+ ;
152
+ ; CHECK-BE-LABEL: vmov_v4i32_b:
153
+ ; CHECK-BE: @ %bb.0:
154
+ ; CHECK-BE-NEXT: vmov.i64 q0, #0xffff00ff0000ff
155
+ ; CHECK-BE-NEXT: bx lr
156
+ ret <4 x i32 > <i32 u0xffff00, i32 u0xff0000ff, i32 u0xffff00, i32 u0xff0000ff>
157
+ }
158
+
159
+ define arm_aapcs_vfpcc <2 x i64 > @and_v2i64_b (<2 x i64 > %a ) {
160
+ ; CHECK-LABEL: and_v2i64_b:
161
+ ; CHECK: @ %bb.0:
162
+ ; CHECK-NEXT: vmov.i64 q8, #0xffff00ff0000ff
163
+ ; CHECK-NEXT: vand q0, q0, q8
164
+ ; CHECK-NEXT: bx lr
165
+ %b = and <2 x i64 > %a , <i64 72056498804490495 , i64 72056498804490495 >
166
+ ret <2 x i64 > %b
167
+ }
168
+
169
+ define arm_aapcs_vfpcc <4 x i32 > @and_v4i32_b (<4 x i32 > %a ) {
170
+ ; CHECK-LE-LABEL: and_v4i32_b:
171
+ ; CHECK-LE: @ %bb.0:
172
+ ; CHECK-LE-NEXT: vmov.i64 q8, #0xff0000ff00ffff00
173
+ ; CHECK-LE-NEXT: vand q0, q0, q8
174
+ ; CHECK-LE-NEXT: bx lr
175
+ ;
176
+ ; CHECK-BE-LABEL: and_v4i32_b:
177
+ ; CHECK-BE: @ %bb.0:
178
+ ; CHECK-BE-NEXT: vmov.i64 q8, #0xffff00ff0000ff
179
+ ; CHECK-BE-NEXT: vrev64.32 q9, q0
180
+ ; CHECK-BE-NEXT: vrev64.32 q8, q8
181
+ ; CHECK-BE-NEXT: vand q8, q9, q8
182
+ ; CHECK-BE-NEXT: vrev64.32 q0, q8
183
+ ; CHECK-BE-NEXT: bx lr
184
+ %b = and <4 x i32 > %a , <i32 u0xffff00, i32 u0xff0000ff, i32 u0xffff00, i32 u0xff0000ff>
185
+ ret <4 x i32 > %b
186
+ }
187
+
188
+ define arm_aapcs_vfpcc <8 x i16 > @vmvn_v16i8_m1 () {
189
+ ; CHECK-LE-LABEL: vmvn_v16i8_m1:
190
+ ; CHECK-LE: @ %bb.0:
191
+ ; CHECK-LE-NEXT: vmvn.i32 q0, #0x10000
192
+ ; CHECK-LE-NEXT: bx lr
193
+ ;
194
+ ; CHECK-BE-LABEL: vmvn_v16i8_m1:
195
+ ; CHECK-BE: @ %bb.0:
196
+ ; CHECK-BE-NEXT: vmvn.i32 q0, #0x1
197
+ ; CHECK-BE-NEXT: bx lr
198
+ ret <8 x i16 > <i16 65535 , i16 65534 , i16 65535 , i16 65534 , i16 65535 , i16 65534 , i16 65535 , i16 65534 >
199
+ }
200
+
201
+ ; FIXME: This is incorrect for BE
202
+ define arm_aapcs_vfpcc <8 x i16 > @and_v8i16_m1 (<8 x i16 > %a ) {
203
+ ; CHECK-LE-LABEL: and_v8i16_m1:
204
+ ; CHECK-LE: @ %bb.0:
205
+ ; CHECK-LE-NEXT: vbic.i32 q0, #0x10000
206
+ ; CHECK-LE-NEXT: bx lr
207
+ ;
208
+ ; CHECK-BE-LABEL: and_v8i16_m1:
209
+ ; CHECK-BE: @ %bb.0:
210
+ ; CHECK-BE-NEXT: vrev64.32 q8, q0
211
+ ; CHECK-BE-NEXT: vbic.i32 q8, #0x10000
212
+ ; CHECK-BE-NEXT: vrev64.32 q0, q8
213
+ ; CHECK-BE-NEXT: bx lr
214
+ %b = and <8 x i16 > %a , <i16 65535 , i16 65534 , i16 65535 , i16 65534 , i16 65535 , i16 65534 , i16 65535 , i16 65534 >
215
+ ret <8 x i16 > %b
216
+ }
217
+
218
+ ; FIXME: This is incorrect for BE
219
+ define arm_aapcs_vfpcc <8 x i16 > @xor_v8i16_m1 (<8 x i16 > %a ) {
220
+ ; CHECK-LE-LABEL: xor_v8i16_m1:
221
+ ; CHECK-LE: @ %bb.0:
222
+ ; CHECK-LE-NEXT: vmvn.i32 q8, #0x10000
223
+ ; CHECK-LE-NEXT: veor q0, q0, q8
224
+ ; CHECK-LE-NEXT: bx lr
225
+ ;
226
+ ; CHECK-BE-LABEL: xor_v8i16_m1:
227
+ ; CHECK-BE: @ %bb.0:
228
+ ; CHECK-BE-NEXT: vmvn.i32 q8, #0x10000
229
+ ; CHECK-BE-NEXT: vrev64.16 q9, q0
230
+ ; CHECK-BE-NEXT: vrev32.16 q8, q8
231
+ ; CHECK-BE-NEXT: veor q8, q9, q8
232
+ ; CHECK-BE-NEXT: vrev64.16 q0, q8
233
+ ; CHECK-BE-NEXT: bx lr
234
+ %b = xor <8 x i16 > %a , <i16 65535 , i16 65534 , i16 65535 , i16 65534 , i16 65535 , i16 65534 , i16 65535 , i16 65534 >
235
+ ret <8 x i16 > %b
236
+ }
0 commit comments