@@ -450,3 +450,50 @@ define <4 x i8> @bitcast(i32 %0) {
450
450
%2 = bitcast i32 %0 to <4 x i8 >
451
451
ret <4 x i8 > %2
452
452
}
453
+
454
+ define <4 x i8 > @strict_align_aligned (ptr %v4i8_ptr ) "target-features" ="+strict-align" {
455
+ ; CHECK-LE-LABEL: strict_align_aligned:
456
+ ; CHECK-LE: // %bb.0:
457
+ ; CHECK-LE-NEXT: ldr s0, [x0]
458
+ ; CHECK-LE-NEXT: ushll v0.8h, v0.8b, #0
459
+ ; CHECK-LE-NEXT: // kill: def $d0 killed $d0 killed $q0
460
+ ; CHECK-LE-NEXT: ret
461
+ ;
462
+ ; CHECK-BE-LABEL: strict_align_aligned:
463
+ ; CHECK-BE: // %bb.0:
464
+ ; CHECK-BE-NEXT: ldr s0, [x0]
465
+ ; CHECK-BE-NEXT: rev32 v0.8b, v0.8b
466
+ ; CHECK-BE-NEXT: ushll v0.8h, v0.8b, #0
467
+ ; CHECK-BE-NEXT: rev64 v0.4h, v0.4h
468
+ ; CHECK-BE-NEXT: ret
469
+ %v4i8 = load <4 x i8 >, ptr %v4i8_ptr , align 4
470
+ ret <4 x i8 > %v4i8
471
+ }
472
+
473
+ define <4 x i8 > @strict_align_unaligned (ptr %v4i8_ptr ) "target-features" ="+strict-align" {
474
+ ; CHECK-LE-LABEL: strict_align_unaligned:
475
+ ; CHECK-LE: // %bb.0:
476
+ ; CHECK-LE-NEXT: ld1 { v0.b }[0], [x0]
477
+ ; CHECK-LE-NEXT: add x8, x0, #1
478
+ ; CHECK-LE-NEXT: ld1 { v0.b }[2], [x8]
479
+ ; CHECK-LE-NEXT: add x8, x0, #2
480
+ ; CHECK-LE-NEXT: ld1 { v0.b }[4], [x8]
481
+ ; CHECK-LE-NEXT: add x8, x0, #3
482
+ ; CHECK-LE-NEXT: ld1 { v0.b }[6], [x8]
483
+ ; CHECK-LE-NEXT: // kill: def $d0 killed $d0 killed $q0
484
+ ; CHECK-LE-NEXT: ret
485
+ ;
486
+ ; CHECK-BE-LABEL: strict_align_unaligned:
487
+ ; CHECK-BE: // %bb.0:
488
+ ; CHECK-BE-NEXT: ld1 { v0.b }[0], [x0]
489
+ ; CHECK-BE-NEXT: add x8, x0, #1
490
+ ; CHECK-BE-NEXT: ld1 { v0.b }[2], [x8]
491
+ ; CHECK-BE-NEXT: add x8, x0, #2
492
+ ; CHECK-BE-NEXT: ld1 { v0.b }[4], [x8]
493
+ ; CHECK-BE-NEXT: add x8, x0, #3
494
+ ; CHECK-BE-NEXT: ld1 { v0.b }[6], [x8]
495
+ ; CHECK-BE-NEXT: rev64 v0.4h, v0.4h
496
+ ; CHECK-BE-NEXT: ret
497
+ %v4i8 = load <4 x i8 >, ptr %v4i8_ptr , align 1
498
+ ret <4 x i8 > %v4i8
499
+ }
0 commit comments