1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-LE
3 ; RUN: llc -mtriple=thumbebv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-BE
5 define ptr @ldrwu32_4(ptr %x, ptr %y) {
6 ; CHECK-LABEL: ldrwu32_4:
7 ; CHECK: @ %bb.0: @ %entry
8 ; CHECK-NEXT: vldrw.u32 q0, [r0, #4]!
9 ; CHECK-NEXT: vstrw.32 q0, [r1]
12 %z = getelementptr inbounds i8, ptr %x, i32 4
13 %0 = load <4 x i32>, ptr %z, align 4
14 store <4 x i32> %0, ptr %y, align 4
18 define ptr @ldrwu32_3(ptr %x, ptr %y) {
19 ; CHECK-LE-LABEL: ldrwu32_3:
20 ; CHECK-LE: @ %bb.0: @ %entry
21 ; CHECK-LE-NEXT: vldrb.u8 q0, [r0, #3]!
22 ; CHECK-LE-NEXT: vstrw.32 q0, [r1]
23 ; CHECK-LE-NEXT: bx lr
25 ; CHECK-BE-LABEL: ldrwu32_3:
26 ; CHECK-BE: @ %bb.0: @ %entry
27 ; CHECK-BE-NEXT: adds r0, #3
28 ; CHECK-BE-NEXT: vldrw.u32 q0, [r0]
29 ; CHECK-BE-NEXT: vstrw.32 q0, [r1]
30 ; CHECK-BE-NEXT: bx lr
32 %z = getelementptr inbounds i8, ptr %x, i32 3
33 %0 = load <4 x i32>, ptr %z, align 4
34 store <4 x i32> %0, ptr %y, align 4
38 define ptr @ldrwu32_m4(ptr %x, ptr %y) {
39 ; CHECK-LABEL: ldrwu32_m4:
40 ; CHECK: @ %bb.0: @ %entry
41 ; CHECK-NEXT: vldrw.u32 q0, [r0, #-4]!
42 ; CHECK-NEXT: vstrw.32 q0, [r1]
45 %z = getelementptr inbounds i8, ptr %x, i32 -4
46 %0 = load <4 x i32>, ptr %z, align 4
47 store <4 x i32> %0, ptr %y, align 4
51 define ptr @ldrwu32_508(ptr %x, ptr %y) {
52 ; CHECK-LABEL: ldrwu32_508:
53 ; CHECK: @ %bb.0: @ %entry
54 ; CHECK-NEXT: vldrw.u32 q0, [r0, #508]!
55 ; CHECK-NEXT: vstrw.32 q0, [r1]
58 %z = getelementptr inbounds i8, ptr %x, i32 508
59 %0 = load <4 x i32>, ptr %z, align 4
60 store <4 x i32> %0, ptr %y, align 4
64 define ptr @ldrwu32_512(ptr %x, ptr %y) {
65 ; CHECK-LABEL: ldrwu32_512:
66 ; CHECK: @ %bb.0: @ %entry
67 ; CHECK-NEXT: add.w r0, r0, #512
68 ; CHECK-NEXT: vldrw.u32 q0, [r0]
69 ; CHECK-NEXT: vstrw.32 q0, [r1]
72 %z = getelementptr inbounds i8, ptr %x, i32 512
73 %0 = load <4 x i32>, ptr %z, align 4
74 store <4 x i32> %0, ptr %y, align 4
78 define ptr @ldrwu32_m508(ptr %x, ptr %y) {
79 ; CHECK-LABEL: ldrwu32_m508:
80 ; CHECK: @ %bb.0: @ %entry
81 ; CHECK-NEXT: vldrw.u32 q0, [r0, #-508]!
82 ; CHECK-NEXT: vstrw.32 q0, [r1]
85 %z = getelementptr inbounds i8, ptr %x, i32 -508
86 %0 = load <4 x i32>, ptr %z, align 4
87 store <4 x i32> %0, ptr %y, align 4
91 define ptr @ldrwu32_m512(ptr %x, ptr %y) {
92 ; CHECK-LABEL: ldrwu32_m512:
93 ; CHECK: @ %bb.0: @ %entry
94 ; CHECK-NEXT: sub.w r0, r0, #512
95 ; CHECK-NEXT: vldrw.u32 q0, [r0]
96 ; CHECK-NEXT: vstrw.32 q0, [r1]
99 %z = getelementptr inbounds i8, ptr %x, i32 -512
100 %0 = load <4 x i32>, ptr %z, align 4
101 store <4 x i32> %0, ptr %y, align 4
106 define ptr @ldrhu32_4(ptr %x, ptr %y) {
107 ; CHECK-LABEL: ldrhu32_4:
108 ; CHECK: @ %bb.0: @ %entry
109 ; CHECK-NEXT: vldrh.u32 q0, [r0, #4]!
110 ; CHECK-NEXT: vstrw.32 q0, [r1]
113 %z = getelementptr inbounds i8, ptr %x, i32 4
114 %0 = load <4 x i16>, ptr %z, align 2
115 %1 = zext <4 x i16> %0 to <4 x i32>
116 store <4 x i32> %1, ptr %y, align 4
120 define ptr @ldrhu32_3(ptr %x, ptr %y) {
121 ; CHECK-LABEL: ldrhu32_3:
122 ; CHECK: @ %bb.0: @ %entry
123 ; CHECK-NEXT: adds r0, #3
124 ; CHECK-NEXT: vldrh.u32 q0, [r0]
125 ; CHECK-NEXT: vstrw.32 q0, [r1]
128 %z = getelementptr inbounds i8, ptr %x, i32 3
129 %0 = load <4 x i16>, ptr %z, align 2
130 %1 = zext <4 x i16> %0 to <4 x i32>
131 store <4 x i32> %1, ptr %y, align 4
135 define ptr @ldrhu32_2(ptr %x, ptr %y) {
136 ; CHECK-LABEL: ldrhu32_2:
137 ; CHECK: @ %bb.0: @ %entry
138 ; CHECK-NEXT: vldrh.u32 q0, [r0, #2]!
139 ; CHECK-NEXT: vstrw.32 q0, [r1]
142 %z = getelementptr inbounds i8, ptr %x, i32 2
143 %0 = load <4 x i16>, ptr %z, align 2
144 %1 = zext <4 x i16> %0 to <4 x i32>
145 store <4 x i32> %1, ptr %y, align 4
149 define ptr @ldrhu32_254(ptr %x, ptr %y) {
150 ; CHECK-LABEL: ldrhu32_254:
151 ; CHECK: @ %bb.0: @ %entry
152 ; CHECK-NEXT: vldrh.u32 q0, [r0, #254]!
153 ; CHECK-NEXT: vstrw.32 q0, [r1]
156 %z = getelementptr inbounds i8, ptr %x, i32 254
157 %0 = load <4 x i16>, ptr %z, align 2
158 %1 = zext <4 x i16> %0 to <4 x i32>
159 store <4 x i32> %1, ptr %y, align 4
163 define ptr @ldrhu32_256(ptr %x, ptr %y) {
164 ; CHECK-LABEL: ldrhu32_256:
165 ; CHECK: @ %bb.0: @ %entry
166 ; CHECK-NEXT: add.w r0, r0, #256
167 ; CHECK-NEXT: vldrh.u32 q0, [r0]
168 ; CHECK-NEXT: vstrw.32 q0, [r1]
171 %z = getelementptr inbounds i8, ptr %x, i32 256
172 %0 = load <4 x i16>, ptr %z, align 2
173 %1 = zext <4 x i16> %0 to <4 x i32>
174 store <4 x i32> %1, ptr %y, align 4
178 define ptr @ldrhu32_m254(ptr %x, ptr %y) {
179 ; CHECK-LABEL: ldrhu32_m254:
180 ; CHECK: @ %bb.0: @ %entry
181 ; CHECK-NEXT: vldrh.u32 q0, [r0, #-254]!
182 ; CHECK-NEXT: vstrw.32 q0, [r1]
185 %z = getelementptr inbounds i8, ptr %x, i32 -254
186 %0 = load <4 x i16>, ptr %z, align 2
187 %1 = zext <4 x i16> %0 to <4 x i32>
188 store <4 x i32> %1, ptr %y, align 4
192 define ptr @ldrhu32_m256(ptr %x, ptr %y) {
193 ; CHECK-LABEL: ldrhu32_m256:
194 ; CHECK: @ %bb.0: @ %entry
195 ; CHECK-NEXT: sub.w r0, r0, #256
196 ; CHECK-NEXT: vldrh.u32 q0, [r0]
197 ; CHECK-NEXT: vstrw.32 q0, [r1]
200 %z = getelementptr inbounds i8, ptr %x, i32 -256
201 %0 = load <4 x i16>, ptr %z, align 2
202 %1 = zext <4 x i16> %0 to <4 x i32>
203 store <4 x i32> %1, ptr %y, align 4
208 define ptr @ldrhs32_4(ptr %x, ptr %y) {
209 ; CHECK-LABEL: ldrhs32_4:
210 ; CHECK: @ %bb.0: @ %entry
211 ; CHECK-NEXT: vldrh.s32 q0, [r0, #4]!
212 ; CHECK-NEXT: vstrw.32 q0, [r1]
215 %z = getelementptr inbounds i8, ptr %x, i32 4
216 %0 = load <4 x i16>, ptr %z, align 2
217 %1 = sext <4 x i16> %0 to <4 x i32>
218 store <4 x i32> %1, ptr %y, align 4
222 define ptr @ldrhs32_3(ptr %x, ptr %y) {
223 ; CHECK-LABEL: ldrhs32_3:
224 ; CHECK: @ %bb.0: @ %entry
225 ; CHECK-NEXT: adds r0, #3
226 ; CHECK-NEXT: vldrh.s32 q0, [r0]
227 ; CHECK-NEXT: vstrw.32 q0, [r1]
230 %z = getelementptr inbounds i8, ptr %x, i32 3
231 %0 = load <4 x i16>, ptr %z, align 2
232 %1 = sext <4 x i16> %0 to <4 x i32>
233 store <4 x i32> %1, ptr %y, align 4
237 define ptr @ldrhs32_2(ptr %x, ptr %y) {
238 ; CHECK-LABEL: ldrhs32_2:
239 ; CHECK: @ %bb.0: @ %entry
240 ; CHECK-NEXT: vldrh.s32 q0, [r0, #2]!
241 ; CHECK-NEXT: vstrw.32 q0, [r1]
244 %z = getelementptr inbounds i8, ptr %x, i32 2
245 %0 = load <4 x i16>, ptr %z, align 2
246 %1 = sext <4 x i16> %0 to <4 x i32>
247 store <4 x i32> %1, ptr %y, align 4
251 define ptr @ldrhs32_254(ptr %x, ptr %y) {
252 ; CHECK-LABEL: ldrhs32_254:
253 ; CHECK: @ %bb.0: @ %entry
254 ; CHECK-NEXT: vldrh.s32 q0, [r0, #254]!
255 ; CHECK-NEXT: vstrw.32 q0, [r1]
258 %z = getelementptr inbounds i8, ptr %x, i32 254
259 %0 = load <4 x i16>, ptr %z, align 2
260 %1 = sext <4 x i16> %0 to <4 x i32>
261 store <4 x i32> %1, ptr %y, align 4
265 define ptr @ldrhs32_256(ptr %x, ptr %y) {
266 ; CHECK-LABEL: ldrhs32_256:
267 ; CHECK: @ %bb.0: @ %entry
268 ; CHECK-NEXT: add.w r0, r0, #256
269 ; CHECK-NEXT: vldrh.s32 q0, [r0]
270 ; CHECK-NEXT: vstrw.32 q0, [r1]
273 %z = getelementptr inbounds i8, ptr %x, i32 256
274 %0 = load <4 x i16>, ptr %z, align 2
275 %1 = sext <4 x i16> %0 to <4 x i32>
276 store <4 x i32> %1, ptr %y, align 4
280 define ptr @ldrhs32_m254(ptr %x, ptr %y) {
281 ; CHECK-LABEL: ldrhs32_m254:
282 ; CHECK: @ %bb.0: @ %entry
283 ; CHECK-NEXT: vldrh.s32 q0, [r0, #-254]!
284 ; CHECK-NEXT: vstrw.32 q0, [r1]
287 %z = getelementptr inbounds i8, ptr %x, i32 -254
288 %0 = load <4 x i16>, ptr %z, align 2
289 %1 = sext <4 x i16> %0 to <4 x i32>
290 store <4 x i32> %1, ptr %y, align 4
294 define ptr @ldrhs32_m256(ptr %x, ptr %y) {
295 ; CHECK-LABEL: ldrhs32_m256:
296 ; CHECK: @ %bb.0: @ %entry
297 ; CHECK-NEXT: sub.w r0, r0, #256
298 ; CHECK-NEXT: vldrh.s32 q0, [r0]
299 ; CHECK-NEXT: vstrw.32 q0, [r1]
302 %z = getelementptr inbounds i8, ptr %x, i32 -256
303 %0 = load <4 x i16>, ptr %z, align 2
304 %1 = sext <4 x i16> %0 to <4 x i32>
305 store <4 x i32> %1, ptr %y, align 4
310 define ptr @ldrhu16_4(ptr %x, ptr %y) {
311 ; CHECK-LABEL: ldrhu16_4:
312 ; CHECK: @ %bb.0: @ %entry
313 ; CHECK-NEXT: vldrh.u16 q0, [r0, #4]!
314 ; CHECK-NEXT: vstrh.16 q0, [r1]
317 %z = getelementptr inbounds i8, ptr %x, i32 4
318 %0 = load <8 x i16>, ptr %z, align 2
319 store <8 x i16> %0, ptr %y, align 2
323 define ptr @ldrhu16_3(ptr %x, ptr %y) {
324 ; CHECK-LE-LABEL: ldrhu16_3:
325 ; CHECK-LE: @ %bb.0: @ %entry
326 ; CHECK-LE-NEXT: vldrb.u8 q0, [r0, #3]!
327 ; CHECK-LE-NEXT: vstrh.16 q0, [r1]
328 ; CHECK-LE-NEXT: bx lr
330 ; CHECK-BE-LABEL: ldrhu16_3:
331 ; CHECK-BE: @ %bb.0: @ %entry
332 ; CHECK-BE-NEXT: adds r0, #3
333 ; CHECK-BE-NEXT: vldrh.u16 q0, [r0]
334 ; CHECK-BE-NEXT: vstrh.16 q0, [r1]
335 ; CHECK-BE-NEXT: bx lr
337 %z = getelementptr inbounds i8, ptr %x, i32 3
338 %0 = load <8 x i16>, ptr %z, align 2
339 store <8 x i16> %0, ptr %y, align 2
343 define ptr @ldrhu16_2(ptr %x, ptr %y) {
344 ; CHECK-LABEL: ldrhu16_2:
345 ; CHECK: @ %bb.0: @ %entry
346 ; CHECK-NEXT: vldrh.u16 q0, [r0, #2]!
347 ; CHECK-NEXT: vstrh.16 q0, [r1]
350 %z = getelementptr inbounds i8, ptr %x, i32 2
351 %0 = load <8 x i16>, ptr %z, align 2
352 store <8 x i16> %0, ptr %y, align 2
356 define ptr @ldrhu16_254(ptr %x, ptr %y) {
357 ; CHECK-LABEL: ldrhu16_254:
358 ; CHECK: @ %bb.0: @ %entry
359 ; CHECK-NEXT: vldrh.u16 q0, [r0, #254]!
360 ; CHECK-NEXT: vstrh.16 q0, [r1]
363 %z = getelementptr inbounds i8, ptr %x, i32 254
364 %0 = load <8 x i16>, ptr %z, align 2
365 store <8 x i16> %0, ptr %y, align 2
369 define ptr @ldrhu16_256(ptr %x, ptr %y) {
370 ; CHECK-LABEL: ldrhu16_256:
371 ; CHECK: @ %bb.0: @ %entry
372 ; CHECK-NEXT: add.w r0, r0, #256
373 ; CHECK-NEXT: vldrh.u16 q0, [r0]
374 ; CHECK-NEXT: vstrh.16 q0, [r1]
377 %z = getelementptr inbounds i8, ptr %x, i32 256
378 %0 = load <8 x i16>, ptr %z, align 2
379 store <8 x i16> %0, ptr %y, align 2
383 define ptr @ldrhu16_m254(ptr %x, ptr %y) {
384 ; CHECK-LABEL: ldrhu16_m254:
385 ; CHECK: @ %bb.0: @ %entry
386 ; CHECK-NEXT: vldrh.u16 q0, [r0, #-254]!
387 ; CHECK-NEXT: vstrh.16 q0, [r1]
390 %z = getelementptr inbounds i8, ptr %x, i32 -254
391 %0 = load <8 x i16>, ptr %z, align 2
392 store <8 x i16> %0, ptr %y, align 2
396 define ptr @ldrhu16_m256(ptr %x, ptr %y) {
397 ; CHECK-LABEL: ldrhu16_m256:
398 ; CHECK: @ %bb.0: @ %entry
399 ; CHECK-NEXT: sub.w r0, r0, #256
400 ; CHECK-NEXT: vldrh.u16 q0, [r0]
401 ; CHECK-NEXT: vstrh.16 q0, [r1]
404 %z = getelementptr inbounds i8, ptr %x, i32 -256
405 %0 = load <8 x i16>, ptr %z, align 2
406 store <8 x i16> %0, ptr %y, align 2
411 define ptr @ldrbu32_4(ptr %x, ptr %y) {
412 ; CHECK-LABEL: ldrbu32_4:
413 ; CHECK: @ %bb.0: @ %entry
414 ; CHECK-NEXT: vldrb.u32 q0, [r0, #4]!
415 ; CHECK-NEXT: vstrw.32 q0, [r1]
418 %z = getelementptr inbounds i8, ptr %x, i32 4
419 %0 = load <4 x i8>, ptr %z, align 1
420 %1 = zext <4 x i8> %0 to <4 x i32>
421 store <4 x i32> %1, ptr %y, align 4
425 define ptr @ldrbu32_3(ptr %x, ptr %y) {
426 ; CHECK-LABEL: ldrbu32_3:
427 ; CHECK: @ %bb.0: @ %entry
428 ; CHECK-NEXT: vldrb.u32 q0, [r0, #3]!
429 ; CHECK-NEXT: vstrw.32 q0, [r1]
432 %z = getelementptr inbounds i8, ptr %x, i32 3
433 %0 = load <4 x i8>, ptr %z, align 1
434 %1 = zext <4 x i8> %0 to <4 x i32>
435 store <4 x i32> %1, ptr %y, align 4
439 define ptr @ldrbu32_127(ptr %x, ptr %y) {
440 ; CHECK-LABEL: ldrbu32_127:
441 ; CHECK: @ %bb.0: @ %entry
442 ; CHECK-NEXT: vldrb.u32 q0, [r0, #127]!
443 ; CHECK-NEXT: vstrw.32 q0, [r1]
446 %z = getelementptr inbounds i8, ptr %x, i32 127
447 %0 = load <4 x i8>, ptr %z, align 1
448 %1 = zext <4 x i8> %0 to <4 x i32>
449 store <4 x i32> %1, ptr %y, align 4
453 define ptr @ldrbu32_128(ptr %x, ptr %y) {
454 ; CHECK-LABEL: ldrbu32_128:
455 ; CHECK: @ %bb.0: @ %entry
456 ; CHECK-NEXT: adds r0, #128
457 ; CHECK-NEXT: vldrb.u32 q0, [r0]
458 ; CHECK-NEXT: vstrw.32 q0, [r1]
461 %z = getelementptr inbounds i8, ptr %x, i32 128
462 %0 = load <4 x i8>, ptr %z, align 1
463 %1 = zext <4 x i8> %0 to <4 x i32>
464 store <4 x i32> %1, ptr %y, align 4
468 define ptr @ldrbu32_m127(ptr %x, ptr %y) {
469 ; CHECK-LABEL: ldrbu32_m127:
470 ; CHECK: @ %bb.0: @ %entry
471 ; CHECK-NEXT: vldrb.u32 q0, [r0, #-127]!
472 ; CHECK-NEXT: vstrw.32 q0, [r1]
475 %z = getelementptr inbounds i8, ptr %x, i32 -127
476 %0 = load <4 x i8>, ptr %z, align 1
477 %1 = zext <4 x i8> %0 to <4 x i32>
478 store <4 x i32> %1, ptr %y, align 4
482 define ptr @ldrbu32_m128(ptr %x, ptr %y) {
483 ; CHECK-LABEL: ldrbu32_m128:
484 ; CHECK: @ %bb.0: @ %entry
485 ; CHECK-NEXT: subs r0, #128
486 ; CHECK-NEXT: vldrb.u32 q0, [r0]
487 ; CHECK-NEXT: vstrw.32 q0, [r1]
490 %z = getelementptr inbounds i8, ptr %x, i32 -128
491 %0 = load <4 x i8>, ptr %z, align 1
492 %1 = zext <4 x i8> %0 to <4 x i32>
493 store <4 x i32> %1, ptr %y, align 4
498 define ptr @ldrbs32_4(ptr %x, ptr %y) {
499 ; CHECK-LABEL: ldrbs32_4:
500 ; CHECK: @ %bb.0: @ %entry
501 ; CHECK-NEXT: vldrb.s32 q0, [r0, #4]!
502 ; CHECK-NEXT: vstrw.32 q0, [r1]
505 %z = getelementptr inbounds i8, ptr %x, i32 4
506 %0 = load <4 x i8>, ptr %z, align 1
507 %1 = sext <4 x i8> %0 to <4 x i32>
508 store <4 x i32> %1, ptr %y, align 4
512 define ptr @ldrbs32_3(ptr %x, ptr %y) {
513 ; CHECK-LABEL: ldrbs32_3:
514 ; CHECK: @ %bb.0: @ %entry
515 ; CHECK-NEXT: vldrb.s32 q0, [r0, #3]!
516 ; CHECK-NEXT: vstrw.32 q0, [r1]
519 %z = getelementptr inbounds i8, ptr %x, i32 3
520 %0 = load <4 x i8>, ptr %z, align 1
521 %1 = sext <4 x i8> %0 to <4 x i32>
522 store <4 x i32> %1, ptr %y, align 4
526 define ptr @ldrbs32_127(ptr %x, ptr %y) {
527 ; CHECK-LABEL: ldrbs32_127:
528 ; CHECK: @ %bb.0: @ %entry
529 ; CHECK-NEXT: vldrb.s32 q0, [r0, #127]!
530 ; CHECK-NEXT: vstrw.32 q0, [r1]
533 %z = getelementptr inbounds i8, ptr %x, i32 127
534 %0 = load <4 x i8>, ptr %z, align 1
535 %1 = sext <4 x i8> %0 to <4 x i32>
536 store <4 x i32> %1, ptr %y, align 4
540 define ptr @ldrbs32_128(ptr %x, ptr %y) {
541 ; CHECK-LABEL: ldrbs32_128:
542 ; CHECK: @ %bb.0: @ %entry
543 ; CHECK-NEXT: adds r0, #128
544 ; CHECK-NEXT: vldrb.s32 q0, [r0]
545 ; CHECK-NEXT: vstrw.32 q0, [r1]
548 %z = getelementptr inbounds i8, ptr %x, i32 128
549 %0 = load <4 x i8>, ptr %z, align 1
550 %1 = sext <4 x i8> %0 to <4 x i32>
551 store <4 x i32> %1, ptr %y, align 4
555 define ptr @ldrbs32_m127(ptr %x, ptr %y) {
556 ; CHECK-LABEL: ldrbs32_m127:
557 ; CHECK: @ %bb.0: @ %entry
558 ; CHECK-NEXT: vldrb.s32 q0, [r0, #-127]!
559 ; CHECK-NEXT: vstrw.32 q0, [r1]
562 %z = getelementptr inbounds i8, ptr %x, i32 -127
563 %0 = load <4 x i8>, ptr %z, align 1
564 %1 = sext <4 x i8> %0 to <4 x i32>
565 store <4 x i32> %1, ptr %y, align 4
569 define ptr @ldrbs32_m128(ptr %x, ptr %y) {
570 ; CHECK-LABEL: ldrbs32_m128:
571 ; CHECK: @ %bb.0: @ %entry
572 ; CHECK-NEXT: subs r0, #128
573 ; CHECK-NEXT: vldrb.s32 q0, [r0]
574 ; CHECK-NEXT: vstrw.32 q0, [r1]
577 %z = getelementptr inbounds i8, ptr %x, i32 -128
578 %0 = load <4 x i8>, ptr %z, align 1
579 %1 = sext <4 x i8> %0 to <4 x i32>
580 store <4 x i32> %1, ptr %y, align 4
585 define ptr @ldrbu16_4(ptr %x, ptr %y) {
586 ; CHECK-LABEL: ldrbu16_4:
587 ; CHECK: @ %bb.0: @ %entry
588 ; CHECK-NEXT: vldrb.u16 q0, [r0, #4]!
589 ; CHECK-NEXT: vstrh.16 q0, [r1]
592 %z = getelementptr inbounds i8, ptr %x, i32 4
593 %0 = load <8 x i8>, ptr %z, align 1
594 %1 = zext <8 x i8> %0 to <8 x i16>
595 store <8 x i16> %1, ptr %y, align 2
599 define ptr @ldrbu16_3(ptr %x, ptr %y) {
600 ; CHECK-LABEL: ldrbu16_3:
601 ; CHECK: @ %bb.0: @ %entry
602 ; CHECK-NEXT: vldrb.u16 q0, [r0, #3]!
603 ; CHECK-NEXT: vstrh.16 q0, [r1]
606 %z = getelementptr inbounds i8, ptr %x, i32 3
607 %0 = load <8 x i8>, ptr %z, align 1
608 %1 = zext <8 x i8> %0 to <8 x i16>
609 store <8 x i16> %1, ptr %y, align 2
613 define ptr @ldrbu16_127(ptr %x, ptr %y) {
614 ; CHECK-LABEL: ldrbu16_127:
615 ; CHECK: @ %bb.0: @ %entry
616 ; CHECK-NEXT: vldrb.u16 q0, [r0, #127]!
617 ; CHECK-NEXT: vstrh.16 q0, [r1]
620 %z = getelementptr inbounds i8, ptr %x, i32 127
621 %0 = load <8 x i8>, ptr %z, align 1
622 %1 = zext <8 x i8> %0 to <8 x i16>
623 store <8 x i16> %1, ptr %y, align 2
627 define ptr @ldrbu16_128(ptr %x, ptr %y) {
628 ; CHECK-LABEL: ldrbu16_128:
629 ; CHECK: @ %bb.0: @ %entry
630 ; CHECK-NEXT: adds r0, #128
631 ; CHECK-NEXT: vldrb.u16 q0, [r0]
632 ; CHECK-NEXT: vstrh.16 q0, [r1]
635 %z = getelementptr inbounds i8, ptr %x, i32 128
636 %0 = load <8 x i8>, ptr %z, align 1
637 %1 = zext <8 x i8> %0 to <8 x i16>
638 store <8 x i16> %1, ptr %y, align 2
642 define ptr @ldrbu16_m127(ptr %x, ptr %y) {
643 ; CHECK-LABEL: ldrbu16_m127:
644 ; CHECK: @ %bb.0: @ %entry
645 ; CHECK-NEXT: vldrb.u16 q0, [r0, #-127]!
646 ; CHECK-NEXT: vstrh.16 q0, [r1]
649 %z = getelementptr inbounds i8, ptr %x, i32 -127
650 %0 = load <8 x i8>, ptr %z, align 1
651 %1 = zext <8 x i8> %0 to <8 x i16>
652 store <8 x i16> %1, ptr %y, align 2
656 define ptr @ldrbu16_m128(ptr %x, ptr %y) {
657 ; CHECK-LABEL: ldrbu16_m128:
658 ; CHECK: @ %bb.0: @ %entry
659 ; CHECK-NEXT: subs r0, #128
660 ; CHECK-NEXT: vldrb.u16 q0, [r0]
661 ; CHECK-NEXT: vstrh.16 q0, [r1]
664 %z = getelementptr inbounds i8, ptr %x, i32 -128
665 %0 = load <8 x i8>, ptr %z, align 1
666 %1 = zext <8 x i8> %0 to <8 x i16>
667 store <8 x i16> %1, ptr %y, align 2
672 define ptr @ldrbs16_4(ptr %x, ptr %y) {
673 ; CHECK-LABEL: ldrbs16_4:
674 ; CHECK: @ %bb.0: @ %entry
675 ; CHECK-NEXT: vldrb.s16 q0, [r0, #4]!
676 ; CHECK-NEXT: vstrh.16 q0, [r1]
679 %z = getelementptr inbounds i8, ptr %x, i32 4
680 %0 = load <8 x i8>, ptr %z, align 1
681 %1 = sext <8 x i8> %0 to <8 x i16>
682 store <8 x i16> %1, ptr %y, align 2
686 define ptr @ldrbs16_3(ptr %x, ptr %y) {
687 ; CHECK-LABEL: ldrbs16_3:
688 ; CHECK: @ %bb.0: @ %entry
689 ; CHECK-NEXT: vldrb.s16 q0, [r0, #3]!
690 ; CHECK-NEXT: vstrh.16 q0, [r1]
693 %z = getelementptr inbounds i8, ptr %x, i32 3
694 %0 = load <8 x i8>, ptr %z, align 1
695 %1 = sext <8 x i8> %0 to <8 x i16>
696 store <8 x i16> %1, ptr %y, align 2
700 define ptr @ldrbs16_127(ptr %x, ptr %y) {
701 ; CHECK-LABEL: ldrbs16_127:
702 ; CHECK: @ %bb.0: @ %entry
703 ; CHECK-NEXT: vldrb.s16 q0, [r0, #127]!
704 ; CHECK-NEXT: vstrh.16 q0, [r1]
707 %z = getelementptr inbounds i8, ptr %x, i32 127
708 %0 = load <8 x i8>, ptr %z, align 1
709 %1 = sext <8 x i8> %0 to <8 x i16>
710 store <8 x i16> %1, ptr %y, align 2
714 define ptr @ldrbs16_128(ptr %x, ptr %y) {
715 ; CHECK-LABEL: ldrbs16_128:
716 ; CHECK: @ %bb.0: @ %entry
717 ; CHECK-NEXT: adds r0, #128
718 ; CHECK-NEXT: vldrb.s16 q0, [r0]
719 ; CHECK-NEXT: vstrh.16 q0, [r1]
722 %z = getelementptr inbounds i8, ptr %x, i32 128
723 %0 = load <8 x i8>, ptr %z, align 1
724 %1 = sext <8 x i8> %0 to <8 x i16>
725 store <8 x i16> %1, ptr %y, align 2
729 define ptr @ldrbs16_m127(ptr %x, ptr %y) {
730 ; CHECK-LABEL: ldrbs16_m127:
731 ; CHECK: @ %bb.0: @ %entry
732 ; CHECK-NEXT: vldrb.s16 q0, [r0, #-127]!
733 ; CHECK-NEXT: vstrh.16 q0, [r1]
736 %z = getelementptr inbounds i8, ptr %x, i32 -127
737 %0 = load <8 x i8>, ptr %z, align 1
738 %1 = sext <8 x i8> %0 to <8 x i16>
739 store <8 x i16> %1, ptr %y, align 2
743 define ptr @ldrbs16_m128(ptr %x, ptr %y) {
744 ; CHECK-LABEL: ldrbs16_m128:
745 ; CHECK: @ %bb.0: @ %entry
746 ; CHECK-NEXT: subs r0, #128
747 ; CHECK-NEXT: vldrb.s16 q0, [r0]
748 ; CHECK-NEXT: vstrh.16 q0, [r1]
751 %z = getelementptr inbounds i8, ptr %x, i32 -128
752 %0 = load <8 x i8>, ptr %z, align 1
753 %1 = sext <8 x i8> %0 to <8 x i16>
754 store <8 x i16> %1, ptr %y, align 2
759 define ptr @ldrbu8_4(ptr %x, ptr %y) {
760 ; CHECK-LABEL: ldrbu8_4:
761 ; CHECK: @ %bb.0: @ %entry
762 ; CHECK-NEXT: vldrb.u8 q0, [r0, #4]!
763 ; CHECK-NEXT: vstrb.8 q0, [r1]
766 %z = getelementptr inbounds i8, ptr %x, i32 4
767 %0 = load <16 x i8>, ptr %z, align 1
768 store <16 x i8> %0, ptr %y, align 1
772 define ptr @ldrbu8_3(ptr %x, ptr %y) {
773 ; CHECK-LABEL: ldrbu8_3:
774 ; CHECK: @ %bb.0: @ %entry
775 ; CHECK-NEXT: vldrb.u8 q0, [r0, #3]!
776 ; CHECK-NEXT: vstrb.8 q0, [r1]
779 %z = getelementptr inbounds i8, ptr %x, i32 3
780 %0 = load <16 x i8>, ptr %z, align 1
781 store <16 x i8> %0, ptr %y, align 1
785 define ptr @ldrbu8_127(ptr %x, ptr %y) {
786 ; CHECK-LABEL: ldrbu8_127:
787 ; CHECK: @ %bb.0: @ %entry
788 ; CHECK-NEXT: vldrb.u8 q0, [r0, #127]!
789 ; CHECK-NEXT: vstrb.8 q0, [r1]
792 %z = getelementptr inbounds i8, ptr %x, i32 127
793 %0 = load <16 x i8>, ptr %z, align 1
794 store <16 x i8> %0, ptr %y, align 1
798 define ptr @ldrbu8_128(ptr %x, ptr %y) {
799 ; CHECK-LABEL: ldrbu8_128:
800 ; CHECK: @ %bb.0: @ %entry
801 ; CHECK-NEXT: adds r0, #128
802 ; CHECK-NEXT: vldrb.u8 q0, [r0]
803 ; CHECK-NEXT: vstrb.8 q0, [r1]
806 %z = getelementptr inbounds i8, ptr %x, i32 128
807 %0 = load <16 x i8>, ptr %z, align 1
808 store <16 x i8> %0, ptr %y, align 1
812 define ptr @ldrbu8_m127(ptr %x, ptr %y) {
813 ; CHECK-LABEL: ldrbu8_m127:
814 ; CHECK: @ %bb.0: @ %entry
815 ; CHECK-NEXT: vldrb.u8 q0, [r0, #-127]!
816 ; CHECK-NEXT: vstrb.8 q0, [r1]
819 %z = getelementptr inbounds i8, ptr %x, i32 -127
820 %0 = load <16 x i8>, ptr %z, align 1
821 store <16 x i8> %0, ptr %y, align 1
825 define ptr @ldrbu8_m128(ptr %x, ptr %y) {
826 ; CHECK-LABEL: ldrbu8_m128:
827 ; CHECK: @ %bb.0: @ %entry
828 ; CHECK-NEXT: subs r0, #128
829 ; CHECK-NEXT: vldrb.u8 q0, [r0]
830 ; CHECK-NEXT: vstrb.8 q0, [r1]
833 %z = getelementptr inbounds i8, ptr %x, i32 -128
834 %0 = load <16 x i8>, ptr %z, align 1
835 store <16 x i8> %0, ptr %y, align 1
840 define ptr @ldrwf32_4(ptr %x, ptr %y) {
841 ; CHECK-LABEL: ldrwf32_4:
842 ; CHECK: @ %bb.0: @ %entry
843 ; CHECK-NEXT: vldrw.u32 q0, [r0, #4]!
844 ; CHECK-NEXT: vstrw.32 q0, [r1]
847 %z = getelementptr inbounds i8, ptr %x, i32 4
848 %0 = load <4 x float>, ptr %z, align 4
849 store <4 x float> %0, ptr %y, align 4
853 define ptr @ldrwf16_4(ptr %x, ptr %y) {
854 ; CHECK-LABEL: ldrwf16_4:
855 ; CHECK: @ %bb.0: @ %entry
856 ; CHECK-NEXT: vldrh.u16 q0, [r0, #4]!
857 ; CHECK-NEXT: vstrh.16 q0, [r1]
860 %z = getelementptr inbounds i8, ptr %x, i32 4
861 %0 = load <8 x half>, ptr %z, align 2
862 store <8 x half> %0, ptr %y, align 2
866 define ptr @ldrwi32_align1(ptr %x, ptr %y) {
867 ; CHECK-LE-LABEL: ldrwi32_align1:
868 ; CHECK-LE: @ %bb.0: @ %entry
869 ; CHECK-LE-NEXT: vldrb.u8 q0, [r0, #3]!
870 ; CHECK-LE-NEXT: vstrw.32 q0, [r1]
871 ; CHECK-LE-NEXT: bx lr
873 ; CHECK-BE-LABEL: ldrwi32_align1:
874 ; CHECK-BE: @ %bb.0: @ %entry
875 ; CHECK-BE-NEXT: vldrb.u8 q0, [r0, #3]
876 ; CHECK-BE-NEXT: adds r0, #3
877 ; CHECK-BE-NEXT: vrev32.8 q0, q0
878 ; CHECK-BE-NEXT: vstrw.32 q0, [r1]
879 ; CHECK-BE-NEXT: bx lr
881 %z = getelementptr inbounds i8, ptr %x, i32 3
882 %0 = load <4 x i32>, ptr %z, align 1
883 store <4 x i32> %0, ptr %y, align 4
887 define ptr @ldrhi16_align1(ptr %x, ptr %y) {
888 ; CHECK-LE-LABEL: ldrhi16_align1:
889 ; CHECK-LE: @ %bb.0: @ %entry
890 ; CHECK-LE-NEXT: vldrb.u8 q0, [r0, #3]!
891 ; CHECK-LE-NEXT: vstrh.16 q0, [r1]
892 ; CHECK-LE-NEXT: bx lr
894 ; CHECK-BE-LABEL: ldrhi16_align1:
895 ; CHECK-BE: @ %bb.0: @ %entry
896 ; CHECK-BE-NEXT: vldrb.u8 q0, [r0, #3]
897 ; CHECK-BE-NEXT: adds r0, #3
898 ; CHECK-BE-NEXT: vrev16.8 q0, q0
899 ; CHECK-BE-NEXT: vstrh.16 q0, [r1]
900 ; CHECK-BE-NEXT: bx lr
902 %z = getelementptr inbounds i8, ptr %x, i32 3
903 %0 = load <8 x i16>, ptr %z, align 1
904 store <8 x i16> %0, ptr %y, align 2
908 define ptr @ldrhi32_align1(ptr %x, ptr %y) {
909 ; CHECK-LABEL: ldrhi32_align1:
910 ; CHECK: @ %bb.0: @ %entry
911 ; CHECK-NEXT: .pad #8
912 ; CHECK-NEXT: sub sp, #8
913 ; CHECK-NEXT: ldr r2, [r0, #3]!
914 ; CHECK-NEXT: str r2, [sp]
915 ; CHECK-NEXT: ldr r2, [r0, #4]
916 ; CHECK-NEXT: str r2, [sp, #4]
917 ; CHECK-NEXT: mov r2, sp
918 ; CHECK-NEXT: vldrh.s32 q0, [r2]
919 ; CHECK-NEXT: vstrw.32 q0, [r1]
920 ; CHECK-NEXT: add sp, #8
923 %z = getelementptr inbounds i8, ptr %x, i32 3
924 %0 = load <4 x i16>, ptr %z, align 1
925 %1 = sext <4 x i16> %0 to <4 x i32>
926 store <4 x i32> %1, ptr %y, align 4
930 define ptr @ldrf32_align1(ptr %x, ptr %y) {
931 ; CHECK-LE-LABEL: ldrf32_align1:
932 ; CHECK-LE: @ %bb.0: @ %entry
933 ; CHECK-LE-NEXT: vldrb.u8 q0, [r0, #3]!
934 ; CHECK-LE-NEXT: vstrw.32 q0, [r1]
935 ; CHECK-LE-NEXT: bx lr
937 ; CHECK-BE-LABEL: ldrf32_align1:
938 ; CHECK-BE: @ %bb.0: @ %entry
939 ; CHECK-BE-NEXT: vldrb.u8 q0, [r0, #3]
940 ; CHECK-BE-NEXT: adds r0, #3
941 ; CHECK-BE-NEXT: vrev32.8 q0, q0
942 ; CHECK-BE-NEXT: vstrw.32 q0, [r1]
943 ; CHECK-BE-NEXT: bx lr
945 %z = getelementptr inbounds i8, ptr %x, i32 3
946 %0 = load <4 x float>, ptr %z, align 1
947 store <4 x float> %0, ptr %y, align 4
951 define ptr @ldrf16_align1(ptr %x, ptr %y) {
952 ; CHECK-LE-LABEL: ldrf16_align1:
953 ; CHECK-LE: @ %bb.0: @ %entry
954 ; CHECK-LE-NEXT: vldrb.u8 q0, [r0, #3]!
955 ; CHECK-LE-NEXT: vstrh.16 q0, [r1]
956 ; CHECK-LE-NEXT: bx lr
958 ; CHECK-BE-LABEL: ldrf16_align1:
959 ; CHECK-BE: @ %bb.0: @ %entry
960 ; CHECK-BE-NEXT: vldrb.u8 q0, [r0, #3]
961 ; CHECK-BE-NEXT: adds r0, #3
962 ; CHECK-BE-NEXT: vrev16.8 q0, q0
963 ; CHECK-BE-NEXT: vstrh.16 q0, [r1]
964 ; CHECK-BE-NEXT: bx lr
966 %z = getelementptr inbounds i8, ptr %x, i32 3
967 %0 = load <8 x half>, ptr %z, align 1
968 store <8 x half> %0, ptr %y, align 2
972 define ptr @ldrh16_align8(ptr %x, ptr %y) {
973 ; CHECK-LE-LABEL: ldrh16_align8:
974 ; CHECK-LE: @ %bb.0: @ %entry
975 ; CHECK-LE-NEXT: vldrw.u32 q0, [r0, #4]!
976 ; CHECK-LE-NEXT: vstrh.16 q0, [r1]
977 ; CHECK-LE-NEXT: bx lr
979 ; CHECK-BE-LABEL: ldrh16_align8:
980 ; CHECK-BE: @ %bb.0: @ %entry
981 ; CHECK-BE-NEXT: vldrh.u16 q0, [r0, #4]!
982 ; CHECK-BE-NEXT: vstrh.16 q0, [r1]
983 ; CHECK-BE-NEXT: bx lr
985 %z = getelementptr inbounds i8, ptr %x, i32 4
986 %0 = load <8 x i16>, ptr %z, align 8
987 store <8 x i16> %0, ptr %y, align 2
995 define ptr @strw32_4(ptr %y, ptr %x) {
996 ; CHECK-LE-LABEL: strw32_4:
997 ; CHECK-LE: @ %bb.0: @ %entry
998 ; CHECK-LE-NEXT: vldrw.u32 q0, [r1]
999 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #4]!
1000 ; CHECK-LE-NEXT: bx lr
1002 ; CHECK-BE-LABEL: strw32_4:
1003 ; CHECK-BE: @ %bb.0: @ %entry
1004 ; CHECK-BE-NEXT: vldrw.u32 q0, [r1]
1005 ; CHECK-BE-NEXT: vstrw.32 q0, [r0, #4]!
1006 ; CHECK-BE-NEXT: bx lr
1008 %z = getelementptr inbounds i8, ptr %y, i32 4
1009 %0 = load <4 x i32>, ptr %x, align 4
1010 store <4 x i32> %0, ptr %z, align 4
1014 define ptr @strw32_3(ptr %y, ptr %x) {
1015 ; CHECK-LE-LABEL: strw32_3:
1016 ; CHECK-LE: @ %bb.0: @ %entry
1017 ; CHECK-LE-NEXT: vldrw.u32 q0, [r1]
1018 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #3]!
1019 ; CHECK-LE-NEXT: bx lr
1021 ; CHECK-BE-LABEL: strw32_3:
1022 ; CHECK-BE: @ %bb.0: @ %entry
1023 ; CHECK-BE-NEXT: adds r0, #3
1024 ; CHECK-BE-NEXT: vldrw.u32 q0, [r1]
1025 ; CHECK-BE-NEXT: vstrw.32 q0, [r0]
1026 ; CHECK-BE-NEXT: bx lr
1028 %z = getelementptr inbounds i8, ptr %y, i32 3
1029 %0 = load <4 x i32>, ptr %x, align 4
1030 store <4 x i32> %0, ptr %z, align 4
1034 define ptr @strw32_m4(ptr %y, ptr %x) {
1035 ; CHECK-LE-LABEL: strw32_m4:
1036 ; CHECK-LE: @ %bb.0: @ %entry
1037 ; CHECK-LE-NEXT: vldrw.u32 q0, [r1]
1038 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #-4]!
1039 ; CHECK-LE-NEXT: bx lr
1041 ; CHECK-BE-LABEL: strw32_m4:
1042 ; CHECK-BE: @ %bb.0: @ %entry
1043 ; CHECK-BE-NEXT: vldrw.u32 q0, [r1]
1044 ; CHECK-BE-NEXT: vstrw.32 q0, [r0, #-4]!
1045 ; CHECK-BE-NEXT: bx lr
1047 %z = getelementptr inbounds i8, ptr %y, i32 -4
1048 %0 = load <4 x i32>, ptr %x, align 4
1049 store <4 x i32> %0, ptr %z, align 4
1053 define ptr @strw32_508(ptr %y, ptr %x) {
1054 ; CHECK-LABEL: strw32_508:
1055 ; CHECK: @ %bb.0: @ %entry
1056 ; CHECK-NEXT: vldrw.u32 q0, [r1]
1057 ; CHECK-NEXT: vstrw.32 q0, [r0, #508]!
1060 %z = getelementptr inbounds i8, ptr %y, i32 508
1061 %0 = load <4 x i32>, ptr %x, align 4
1062 store <4 x i32> %0, ptr %z, align 4
1066 define ptr @strw32_512(ptr %y, ptr %x) {
1067 ; CHECK-LABEL: strw32_512:
1068 ; CHECK: @ %bb.0: @ %entry
1069 ; CHECK-NEXT: add.w r0, r0, #512
1070 ; CHECK-NEXT: vldrw.u32 q0, [r1]
1071 ; CHECK-NEXT: vstrw.32 q0, [r0]
1074 %z = getelementptr inbounds i8, ptr %y, i32 512
1075 %0 = load <4 x i32>, ptr %x, align 4
1076 store <4 x i32> %0, ptr %z, align 4
1080 define ptr @strw32_m508(ptr %y, ptr %x) {
1081 ; CHECK-LABEL: strw32_m508:
1082 ; CHECK: @ %bb.0: @ %entry
1083 ; CHECK-NEXT: vldrw.u32 q0, [r1]
1084 ; CHECK-NEXT: vstrw.32 q0, [r0, #-508]!
1087 %z = getelementptr inbounds i8, ptr %y, i32 -508
1088 %0 = load <4 x i32>, ptr %x, align 4
1089 store <4 x i32> %0, ptr %z, align 4
1093 define ptr @strw32_m512(ptr %y, ptr %x) {
1094 ; CHECK-LABEL: strw32_m512:
1095 ; CHECK: @ %bb.0: @ %entry
1096 ; CHECK-NEXT: sub.w r0, r0, #512
1097 ; CHECK-NEXT: vldrw.u32 q0, [r1]
1098 ; CHECK-NEXT: vstrw.32 q0, [r0]
1101 %z = getelementptr inbounds i8, ptr %y, i32 -512
1102 %0 = load <4 x i32>, ptr %x, align 4
1103 store <4 x i32> %0, ptr %z, align 4
1108 define ptr @strh32_4(ptr %y, ptr %x) {
1109 ; CHECK-LABEL: strh32_4:
1110 ; CHECK: @ %bb.0: @ %entry
1111 ; CHECK-NEXT: vldrh.u32 q0, [r1]
1112 ; CHECK-NEXT: vstrh.32 q0, [r0, #4]!
1115 %z = getelementptr inbounds i8, ptr %y, i32 4
1116 %0 = load <4 x i16>, ptr %x, align 2
1117 store <4 x i16> %0, ptr %z, align 2
1121 define ptr @strh32_3(ptr %y, ptr %x) {
1122 ; CHECK-LABEL: strh32_3:
1123 ; CHECK: @ %bb.0: @ %entry
1124 ; CHECK-NEXT: adds r0, #3
1125 ; CHECK-NEXT: vldrh.u32 q0, [r1]
1126 ; CHECK-NEXT: vstrh.32 q0, [r0]
1129 %z = getelementptr inbounds i8, ptr %y, i32 3
1130 %0 = load <4 x i16>, ptr %x, align 2
1131 store <4 x i16> %0, ptr %z, align 2
1135 define ptr @strh32_2(ptr %y, ptr %x) {
1136 ; CHECK-LABEL: strh32_2:
1137 ; CHECK: @ %bb.0: @ %entry
1138 ; CHECK-NEXT: vldrh.u32 q0, [r1]
1139 ; CHECK-NEXT: vstrh.32 q0, [r0, #2]!
1142 %z = getelementptr inbounds i8, ptr %y, i32 2
1143 %0 = load <4 x i16>, ptr %x, align 2
1144 store <4 x i16> %0, ptr %z, align 2
1148 define ptr @strh32_254(ptr %y, ptr %x) {
1149 ; CHECK-LABEL: strh32_254:
1150 ; CHECK: @ %bb.0: @ %entry
1151 ; CHECK-NEXT: vldrh.u32 q0, [r1]
1152 ; CHECK-NEXT: vstrh.32 q0, [r0, #254]!
1155 %z = getelementptr inbounds i8, ptr %y, i32 254
1156 %0 = load <4 x i16>, ptr %x, align 2
1157 store <4 x i16> %0, ptr %z, align 2
1161 define ptr @strh32_256(ptr %y, ptr %x) {
1162 ; CHECK-LABEL: strh32_256:
1163 ; CHECK: @ %bb.0: @ %entry
1164 ; CHECK-NEXT: add.w r0, r0, #256
1165 ; CHECK-NEXT: vldrh.u32 q0, [r1]
1166 ; CHECK-NEXT: vstrh.32 q0, [r0]
1169 %z = getelementptr inbounds i8, ptr %y, i32 256
1170 %0 = load <4 x i16>, ptr %x, align 2
1171 store <4 x i16> %0, ptr %z, align 2
1175 define ptr @strh32_m254(ptr %y, ptr %x) {
1176 ; CHECK-LABEL: strh32_m254:
1177 ; CHECK: @ %bb.0: @ %entry
1178 ; CHECK-NEXT: vldrh.u32 q0, [r1]
1179 ; CHECK-NEXT: vstrh.32 q0, [r0, #-254]!
1182 %z = getelementptr inbounds i8, ptr %y, i32 -254
1183 %0 = load <4 x i16>, ptr %x, align 2
1184 store <4 x i16> %0, ptr %z, align 2
1188 define ptr @strh32_m256(ptr %y, ptr %x) {
1189 ; CHECK-LABEL: strh32_m256:
1190 ; CHECK: @ %bb.0: @ %entry
1191 ; CHECK-NEXT: sub.w r0, r0, #256
1192 ; CHECK-NEXT: vldrh.u32 q0, [r1]
1193 ; CHECK-NEXT: vstrh.32 q0, [r0]
1196 %z = getelementptr inbounds i8, ptr %y, i32 -256
1197 %0 = load <4 x i16>, ptr %x, align 2
1198 store <4 x i16> %0, ptr %z, align 2
1203 define ptr @strh16_4(ptr %y, ptr %x) {
1204 ; CHECK-LE-LABEL: strh16_4:
1205 ; CHECK-LE: @ %bb.0: @ %entry
1206 ; CHECK-LE-NEXT: vldrh.u16 q0, [r1]
1207 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #4]!
1208 ; CHECK-LE-NEXT: bx lr
1210 ; CHECK-BE-LABEL: strh16_4:
1211 ; CHECK-BE: @ %bb.0: @ %entry
1212 ; CHECK-BE-NEXT: vldrh.u16 q0, [r1]
1213 ; CHECK-BE-NEXT: vstrh.16 q0, [r0, #4]!
1214 ; CHECK-BE-NEXT: bx lr
1216 %z = getelementptr inbounds i8, ptr %y, i32 4
1217 %0 = load <8 x i16>, ptr %x, align 2
1218 store <8 x i16> %0, ptr %z, align 2
1222 define ptr @strh16_3(ptr %y, ptr %x) {
1223 ; CHECK-LE-LABEL: strh16_3:
1224 ; CHECK-LE: @ %bb.0: @ %entry
1225 ; CHECK-LE-NEXT: vldrh.u16 q0, [r1]
1226 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #3]!
1227 ; CHECK-LE-NEXT: bx lr
1229 ; CHECK-BE-LABEL: strh16_3:
1230 ; CHECK-BE: @ %bb.0: @ %entry
1231 ; CHECK-BE-NEXT: adds r0, #3
1232 ; CHECK-BE-NEXT: vldrh.u16 q0, [r1]
1233 ; CHECK-BE-NEXT: vstrh.16 q0, [r0]
1234 ; CHECK-BE-NEXT: bx lr
1236 %z = getelementptr inbounds i8, ptr %y, i32 3
1237 %0 = load <8 x i16>, ptr %x, align 2
1238 store <8 x i16> %0, ptr %z, align 2
1242 define ptr @strh16_2(ptr %y, ptr %x) {
1243 ; CHECK-LE-LABEL: strh16_2:
1244 ; CHECK-LE: @ %bb.0: @ %entry
1245 ; CHECK-LE-NEXT: vldrh.u16 q0, [r1]
1246 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #2]!
1247 ; CHECK-LE-NEXT: bx lr
1249 ; CHECK-BE-LABEL: strh16_2:
1250 ; CHECK-BE: @ %bb.0: @ %entry
1251 ; CHECK-BE-NEXT: vldrh.u16 q0, [r1]
1252 ; CHECK-BE-NEXT: vstrh.16 q0, [r0, #2]!
1253 ; CHECK-BE-NEXT: bx lr
1255 %z = getelementptr inbounds i8, ptr %y, i32 2
1256 %0 = load <8 x i16>, ptr %x, align 2
1257 store <8 x i16> %0, ptr %z, align 2
1261 define ptr @strh16_254(ptr %y, ptr %x) {
1262 ; CHECK-LABEL: strh16_254:
1263 ; CHECK: @ %bb.0: @ %entry
1264 ; CHECK-NEXT: vldrh.u16 q0, [r1]
1265 ; CHECK-NEXT: vstrh.16 q0, [r0, #254]!
1268 %z = getelementptr inbounds i8, ptr %y, i32 254
1269 %0 = load <8 x i16>, ptr %x, align 2
1270 store <8 x i16> %0, ptr %z, align 2
1274 define ptr @strh16_256(ptr %y, ptr %x) {
1275 ; CHECK-LABEL: strh16_256:
1276 ; CHECK: @ %bb.0: @ %entry
1277 ; CHECK-NEXT: add.w r0, r0, #256
1278 ; CHECK-NEXT: vldrh.u16 q0, [r1]
1279 ; CHECK-NEXT: vstrh.16 q0, [r0]
1282 %z = getelementptr inbounds i8, ptr %y, i32 256
1283 %0 = load <8 x i16>, ptr %x, align 2
1284 store <8 x i16> %0, ptr %z, align 2
1288 define ptr @strh16_m254(ptr %y, ptr %x) {
1289 ; CHECK-LABEL: strh16_m254:
1290 ; CHECK: @ %bb.0: @ %entry
1291 ; CHECK-NEXT: vldrh.u16 q0, [r1]
1292 ; CHECK-NEXT: vstrh.16 q0, [r0, #-254]!
1295 %z = getelementptr inbounds i8, ptr %y, i32 -254
1296 %0 = load <8 x i16>, ptr %x, align 2
1297 store <8 x i16> %0, ptr %z, align 2
1301 define ptr @strh16_m256(ptr %y, ptr %x) {
1302 ; CHECK-LABEL: strh16_m256:
1303 ; CHECK: @ %bb.0: @ %entry
1304 ; CHECK-NEXT: sub.w r0, r0, #256
1305 ; CHECK-NEXT: vldrh.u16 q0, [r1]
1306 ; CHECK-NEXT: vstrh.16 q0, [r0]
1309 %z = getelementptr inbounds i8, ptr %y, i32 -256
1310 %0 = load <8 x i16>, ptr %x, align 2
1311 store <8 x i16> %0, ptr %z, align 2
1316 define ptr @strb32_4(ptr %y, ptr %x) {
1317 ; CHECK-LABEL: strb32_4:
1318 ; CHECK: @ %bb.0: @ %entry
1319 ; CHECK-NEXT: vldrb.u32 q0, [r1]
1320 ; CHECK-NEXT: vstrb.32 q0, [r0, #4]!
1323 %z = getelementptr inbounds i8, ptr %y, i32 4
1324 %0 = load <4 x i8>, ptr %x, align 1
1325 store <4 x i8> %0, ptr %z, align 1
1329 define ptr @strb32_3(ptr %y, ptr %x) {
1330 ; CHECK-LABEL: strb32_3:
1331 ; CHECK: @ %bb.0: @ %entry
1332 ; CHECK-NEXT: vldrb.u32 q0, [r1]
1333 ; CHECK-NEXT: vstrb.32 q0, [r0, #3]!
1336 %z = getelementptr inbounds i8, ptr %y, i32 3
1337 %0 = load <4 x i8>, ptr %x, align 1
1338 store <4 x i8> %0, ptr %z, align 1
1342 define ptr @strb32_127(ptr %y, ptr %x) {
1343 ; CHECK-LABEL: strb32_127:
1344 ; CHECK: @ %bb.0: @ %entry
1345 ; CHECK-NEXT: vldrb.u32 q0, [r1]
1346 ; CHECK-NEXT: vstrb.32 q0, [r0, #127]!
1349 %z = getelementptr inbounds i8, ptr %y, i32 127
1350 %0 = load <4 x i8>, ptr %x, align 1
1351 store <4 x i8> %0, ptr %z, align 1
1355 define ptr @strb32_128(ptr %y, ptr %x) {
1356 ; CHECK-LABEL: strb32_128:
1357 ; CHECK: @ %bb.0: @ %entry
1358 ; CHECK-NEXT: adds r0, #128
1359 ; CHECK-NEXT: vldrb.u32 q0, [r1]
1360 ; CHECK-NEXT: vstrb.32 q0, [r0]
1363 %z = getelementptr inbounds i8, ptr %y, i32 128
1364 %0 = load <4 x i8>, ptr %x, align 1
1365 store <4 x i8> %0, ptr %z, align 1
1369 define ptr @strb32_m127(ptr %y, ptr %x) {
1370 ; CHECK-LABEL: strb32_m127:
1371 ; CHECK: @ %bb.0: @ %entry
1372 ; CHECK-NEXT: vldrb.u32 q0, [r1]
1373 ; CHECK-NEXT: vstrb.32 q0, [r0, #-127]!
1376 %z = getelementptr inbounds i8, ptr %y, i32 -127
1377 %0 = load <4 x i8>, ptr %x, align 1
1378 store <4 x i8> %0, ptr %z, align 1
1382 define ptr @strb32_m128(ptr %y, ptr %x) {
1383 ; CHECK-LABEL: strb32_m128:
1384 ; CHECK: @ %bb.0: @ %entry
1385 ; CHECK-NEXT: subs r0, #128
1386 ; CHECK-NEXT: vldrb.u32 q0, [r1]
1387 ; CHECK-NEXT: vstrb.32 q0, [r0]
1390 %z = getelementptr inbounds i8, ptr %y, i32 -128
1391 %0 = load <4 x i8>, ptr %x, align 1
1392 store <4 x i8> %0, ptr %z, align 1
1397 define ptr @strb16_4(ptr %y, ptr %x) {
1398 ; CHECK-LABEL: strb16_4:
1399 ; CHECK: @ %bb.0: @ %entry
1400 ; CHECK-NEXT: vldrb.u16 q0, [r1]
1401 ; CHECK-NEXT: vstrb.16 q0, [r0, #4]!
1404 %z = getelementptr inbounds i8, ptr %y, i32 4
1405 %0 = load <8 x i8>, ptr %x, align 1
1406 store <8 x i8> %0, ptr %z, align 1
1410 define ptr @strb16_3(ptr %y, ptr %x) {
1411 ; CHECK-LABEL: strb16_3:
1412 ; CHECK: @ %bb.0: @ %entry
1413 ; CHECK-NEXT: vldrb.u16 q0, [r1]
1414 ; CHECK-NEXT: vstrb.16 q0, [r0, #3]!
1417 %z = getelementptr inbounds i8, ptr %y, i32 3
1418 %0 = load <8 x i8>, ptr %x, align 1
1419 store <8 x i8> %0, ptr %z, align 1
1423 define ptr @strb16_127(ptr %y, ptr %x) {
1424 ; CHECK-LABEL: strb16_127:
1425 ; CHECK: @ %bb.0: @ %entry
1426 ; CHECK-NEXT: vldrb.u16 q0, [r1]
1427 ; CHECK-NEXT: vstrb.16 q0, [r0, #127]!
1430 %z = getelementptr inbounds i8, ptr %y, i32 127
1431 %0 = load <8 x i8>, ptr %x, align 1
1432 store <8 x i8> %0, ptr %z, align 1
1436 define ptr @strb16_128(ptr %y, ptr %x) {
1437 ; CHECK-LABEL: strb16_128:
1438 ; CHECK: @ %bb.0: @ %entry
1439 ; CHECK-NEXT: adds r0, #128
1440 ; CHECK-NEXT: vldrb.u16 q0, [r1]
1441 ; CHECK-NEXT: vstrb.16 q0, [r0]
1444 %z = getelementptr inbounds i8, ptr %y, i32 128
1445 %0 = load <8 x i8>, ptr %x, align 1
1446 store <8 x i8> %0, ptr %z, align 1
1450 define ptr @strb16_m127(ptr %y, ptr %x) {
1451 ; CHECK-LABEL: strb16_m127:
1452 ; CHECK: @ %bb.0: @ %entry
1453 ; CHECK-NEXT: vldrb.u16 q0, [r1]
1454 ; CHECK-NEXT: vstrb.16 q0, [r0, #-127]!
1457 %z = getelementptr inbounds i8, ptr %y, i32 -127
1458 %0 = load <8 x i8>, ptr %x, align 1
1459 store <8 x i8> %0, ptr %z, align 1
1463 define ptr @strb16_m128(ptr %y, ptr %x) {
1464 ; CHECK-LABEL: strb16_m128:
1465 ; CHECK: @ %bb.0: @ %entry
1466 ; CHECK-NEXT: subs r0, #128
1467 ; CHECK-NEXT: vldrb.u16 q0, [r1]
1468 ; CHECK-NEXT: vstrb.16 q0, [r0]
1471 %z = getelementptr inbounds i8, ptr %y, i32 -128
1472 %0 = load <8 x i8>, ptr %x, align 1
1473 store <8 x i8> %0, ptr %z, align 1
1478 define ptr @strb8_4(ptr %y, ptr %x) {
1479 ; CHECK-LABEL: strb8_4:
1480 ; CHECK: @ %bb.0: @ %entry
1481 ; CHECK-NEXT: vldrb.u8 q0, [r1]
1482 ; CHECK-NEXT: vstrb.8 q0, [r0, #4]!
1485 %z = getelementptr inbounds i8, ptr %y, i32 4
1486 %0 = load <16 x i8>, ptr %x, align 1
1487 store <16 x i8> %0, ptr %z, align 1
1491 define ptr @strb8_3(ptr %y, ptr %x) {
1492 ; CHECK-LABEL: strb8_3:
1493 ; CHECK: @ %bb.0: @ %entry
1494 ; CHECK-NEXT: vldrb.u8 q0, [r1]
1495 ; CHECK-NEXT: vstrb.8 q0, [r0, #3]!
1498 %z = getelementptr inbounds i8, ptr %y, i32 3
1499 %0 = load <16 x i8>, ptr %x, align 1
1500 store <16 x i8> %0, ptr %z, align 1
1504 define ptr @strb8_127(ptr %y, ptr %x) {
1505 ; CHECK-LABEL: strb8_127:
1506 ; CHECK: @ %bb.0: @ %entry
1507 ; CHECK-NEXT: vldrb.u8 q0, [r1]
1508 ; CHECK-NEXT: vstrb.8 q0, [r0, #127]!
1511 %z = getelementptr inbounds i8, ptr %y, i32 127
1512 %0 = load <16 x i8>, ptr %x, align 1
1513 store <16 x i8> %0, ptr %z, align 1
1517 define ptr @strb8_128(ptr %y, ptr %x) {
1518 ; CHECK-LABEL: strb8_128:
1519 ; CHECK: @ %bb.0: @ %entry
1520 ; CHECK-NEXT: adds r0, #128
1521 ; CHECK-NEXT: vldrb.u8 q0, [r1]
1522 ; CHECK-NEXT: vstrb.8 q0, [r0]
1525 %z = getelementptr inbounds i8, ptr %y, i32 128
1526 %0 = load <16 x i8>, ptr %x, align 1
1527 store <16 x i8> %0, ptr %z, align 1
1531 define ptr @strb8_m127(ptr %y, ptr %x) {
1532 ; CHECK-LABEL: strb8_m127:
1533 ; CHECK: @ %bb.0: @ %entry
1534 ; CHECK-NEXT: vldrb.u8 q0, [r1]
1535 ; CHECK-NEXT: vstrb.8 q0, [r0, #-127]!
1538 %z = getelementptr inbounds i8, ptr %y, i32 -127
1539 %0 = load <16 x i8>, ptr %x, align 1
1540 store <16 x i8> %0, ptr %z, align 1
1544 define ptr @strb8_m128(ptr %y, ptr %x) {
1545 ; CHECK-LABEL: strb8_m128:
1546 ; CHECK: @ %bb.0: @ %entry
1547 ; CHECK-NEXT: subs r0, #128
1548 ; CHECK-NEXT: vldrb.u8 q0, [r1]
1549 ; CHECK-NEXT: vstrb.8 q0, [r0]
1552 %z = getelementptr inbounds i8, ptr %y, i32 -128
1553 %0 = load <16 x i8>, ptr %x, align 1
1554 store <16 x i8> %0, ptr %z, align 1
1559 define ptr @strf32_4(ptr %y, ptr %x) {
1560 ; CHECK-LE-LABEL: strf32_4:
1561 ; CHECK-LE: @ %bb.0: @ %entry
1562 ; CHECK-LE-NEXT: vldrw.u32 q0, [r1]
1563 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #4]!
1564 ; CHECK-LE-NEXT: bx lr
1566 ; CHECK-BE-LABEL: strf32_4:
1567 ; CHECK-BE: @ %bb.0: @ %entry
1568 ; CHECK-BE-NEXT: vldrw.u32 q0, [r1]
1569 ; CHECK-BE-NEXT: vstrw.32 q0, [r0, #4]!
1570 ; CHECK-BE-NEXT: bx lr
1572 %z = getelementptr inbounds i8, ptr %y, i32 4
1573 %0 = load <4 x float>, ptr %x, align 4
1574 store <4 x float> %0, ptr %z, align 4
1578 define ptr @strf16_4(ptr %y, ptr %x) {
1579 ; CHECK-LE-LABEL: strf16_4:
1580 ; CHECK-LE: @ %bb.0: @ %entry
1581 ; CHECK-LE-NEXT: vldrh.u16 q0, [r1]
1582 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #4]!
1583 ; CHECK-LE-NEXT: bx lr
1585 ; CHECK-BE-LABEL: strf16_4:
1586 ; CHECK-BE: @ %bb.0: @ %entry
1587 ; CHECK-BE-NEXT: vldrh.u16 q0, [r1]
1588 ; CHECK-BE-NEXT: vstrh.16 q0, [r0, #4]!
1589 ; CHECK-BE-NEXT: bx lr
1591 %z = getelementptr inbounds i8, ptr %y, i32 4
1592 %0 = load <8 x half>, ptr %x, align 2
1593 store <8 x half> %0, ptr %z, align 2
1597 define ptr @strwi32_align1(ptr %y, ptr %x) {
1598 ; CHECK-LE-LABEL: strwi32_align1:
1599 ; CHECK-LE: @ %bb.0: @ %entry
1600 ; CHECK-LE-NEXT: vldrw.u32 q0, [r1]
1601 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #3]!
1602 ; CHECK-LE-NEXT: bx lr
1604 ; CHECK-BE-LABEL: strwi32_align1:
1605 ; CHECK-BE: @ %bb.0: @ %entry
1606 ; CHECK-BE-NEXT: vldrw.u32 q0, [r1]
1607 ; CHECK-BE-NEXT: vrev32.8 q0, q0
1608 ; CHECK-BE-NEXT: vstrb.8 q0, [r0, #3]
1609 ; CHECK-BE-NEXT: adds r0, #3
1610 ; CHECK-BE-NEXT: bx lr
1612 %z = getelementptr inbounds i8, ptr %y, i32 3
1613 %0 = load <4 x i32>, ptr %x, align 4
1614 store <4 x i32> %0, ptr %z, align 1
1618 define ptr @strhi16_align1(ptr %y, ptr %x) {
1619 ; CHECK-LE-LABEL: strhi16_align1:
1620 ; CHECK-LE: @ %bb.0: @ %entry
1621 ; CHECK-LE-NEXT: vldrh.u16 q0, [r1]
1622 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #3]!
1623 ; CHECK-LE-NEXT: bx lr
1625 ; CHECK-BE-LABEL: strhi16_align1:
1626 ; CHECK-BE: @ %bb.0: @ %entry
1627 ; CHECK-BE-NEXT: vldrh.u16 q0, [r1]
1628 ; CHECK-BE-NEXT: vrev16.8 q0, q0
1629 ; CHECK-BE-NEXT: vstrb.8 q0, [r0, #3]
1630 ; CHECK-BE-NEXT: adds r0, #3
1631 ; CHECK-BE-NEXT: bx lr
1633 %z = getelementptr inbounds i8, ptr %y, i32 3
1634 %0 = load <8 x i16>, ptr %x, align 2
1635 store <8 x i16> %0, ptr %z, align 1
1639 define ptr @strhi32_align1(ptr %y, ptr %x) {
1640 ; CHECK-LABEL: strhi32_align1:
1641 ; CHECK: @ %bb.0: @ %entry
1642 ; CHECK-NEXT: .pad #8
1643 ; CHECK-NEXT: sub sp, #8
1644 ; CHECK-NEXT: vldrw.u32 q0, [r1]
1645 ; CHECK-NEXT: mov r1, sp
1646 ; CHECK-NEXT: vstrh.32 q0, [r1]
1647 ; CHECK-NEXT: ldrd r1, r2, [sp]
1648 ; CHECK-NEXT: str r1, [r0, #3]!
1649 ; CHECK-NEXT: str r2, [r0, #4]
1650 ; CHECK-NEXT: add sp, #8
1653 %z = getelementptr inbounds i8, ptr %y, i32 3
1654 %0 = load <4 x i32>, ptr %x, align 4
1655 %1 = trunc <4 x i32> %0 to <4 x i16>
1656 store <4 x i16> %1, ptr %z, align 1
1660 define ptr @strf32_align1(ptr %y, ptr %x) {
1661 ; CHECK-LE-LABEL: strf32_align1:
1662 ; CHECK-LE: @ %bb.0: @ %entry
1663 ; CHECK-LE-NEXT: vldrw.u32 q0, [r1]
1664 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #3]!
1665 ; CHECK-LE-NEXT: bx lr
1667 ; CHECK-BE-LABEL: strf32_align1:
1668 ; CHECK-BE: @ %bb.0: @ %entry
1669 ; CHECK-BE-NEXT: vldrw.u32 q0, [r1]
1670 ; CHECK-BE-NEXT: vrev32.8 q0, q0
1671 ; CHECK-BE-NEXT: vstrb.8 q0, [r0, #3]
1672 ; CHECK-BE-NEXT: adds r0, #3
1673 ; CHECK-BE-NEXT: bx lr
1675 %z = getelementptr inbounds i8, ptr %y, i32 3
1676 %0 = load <4 x float>, ptr %x, align 4
1677 store <4 x float> %0, ptr %z, align 1
1681 define ptr @strf16_align1(ptr %y, ptr %x) {
1682 ; CHECK-LE-LABEL: strf16_align1:
1683 ; CHECK-LE: @ %bb.0: @ %entry
1684 ; CHECK-LE-NEXT: vldrh.u16 q0, [r1]
1685 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #3]!
1686 ; CHECK-LE-NEXT: bx lr
1688 ; CHECK-BE-LABEL: strf16_align1:
1689 ; CHECK-BE: @ %bb.0: @ %entry
1690 ; CHECK-BE-NEXT: vldrh.u16 q0, [r1]
1691 ; CHECK-BE-NEXT: vrev16.8 q0, q0
1692 ; CHECK-BE-NEXT: vstrb.8 q0, [r0, #3]
1693 ; CHECK-BE-NEXT: adds r0, #3
1694 ; CHECK-BE-NEXT: bx lr
1696 %z = getelementptr inbounds i8, ptr %y, i32 3
1697 %0 = load <8 x half>, ptr %x, align 2
1698 store <8 x half> %0, ptr %z, align 1
1702 define ptr @strf16_align8(ptr %y, ptr %x) {
1703 ; CHECK-LE-LABEL: strf16_align8:
1704 ; CHECK-LE: @ %bb.0: @ %entry
1705 ; CHECK-LE-NEXT: vldrh.u16 q0, [r1]
1706 ; CHECK-LE-NEXT: vstrb.8 q0, [r0, #16]!
1707 ; CHECK-LE-NEXT: bx lr
1709 ; CHECK-BE-LABEL: strf16_align8:
1710 ; CHECK-BE: @ %bb.0: @ %entry
1711 ; CHECK-BE-NEXT: vldrh.u16 q0, [r1]
1712 ; CHECK-BE-NEXT: vstrh.16 q0, [r0, #16]!
1713 ; CHECK-BE-NEXT: bx lr
1715 %z = getelementptr inbounds i8, ptr %y, i32 16
1716 %0 = load <8 x i16>, ptr %x, align 2
1717 store <8 x i16> %0, ptr %z, align 8