@@ -349,17 +349,15 @@ define <3 x i32> @load_v3i32(ptr %src) {
349
349
define void @store_trunc_from_64bits (ptr %src , ptr %dst ) {
350
350
; CHECK-LABEL: store_trunc_from_64bits:
351
351
; CHECK: ; %bb.0: ; %entry
352
- ; CHECK-NEXT: sub sp, sp, #16
353
- ; CHECK-NEXT: .cfi_def_cfa_offset 16
354
- ; CHECK-NEXT: ldr s0, [x0]
355
- ; CHECK-NEXT: ldrh w8, [x0, #4]
356
- ; CHECK-NEXT: mov.h v0[2], w8
357
- ; CHECK-NEXT: xtn.8b v0, v0
358
- ; CHECK-NEXT: str s0, [sp, #12]
359
- ; CHECK-NEXT: ldrh w9, [sp, #12]
360
- ; CHECK-NEXT: strb w8, [x1, #2]
361
- ; CHECK-NEXT: strh w9, [x1]
362
- ; CHECK-NEXT: add sp, sp, #16
352
+ ; CHECK-NEXT: add x8, x0, #4
353
+ ; CHECK-NEXT: ldr w9, [x0]
354
+ ; CHECK-NEXT: add x10, x1, #1
355
+ ; CHECK-NEXT: ld1r.4h { v0 }, [x8]
356
+ ; CHECK-NEXT: fmov s1, w9
357
+ ; CHECK-NEXT: add x8, x1, #2
358
+ ; CHECK-NEXT: strb w9, [x1]
359
+ ; CHECK-NEXT: st1.b { v1 }[2], [x10]
360
+ ; CHECK-NEXT: st1.b { v0 }[4], [x8]
363
361
; CHECK-NEXT: ret
364
362
;
365
363
; BE-LABEL: store_trunc_from_64bits:
@@ -388,23 +386,19 @@ entry:
388
386
define void @store_trunc_add_from_64bits (ptr %src , ptr %dst ) {
389
387
; CHECK-LABEL: store_trunc_add_from_64bits:
390
388
; CHECK: ; %bb.0: ; %entry
391
- ; CHECK-NEXT: sub sp, sp, #16
392
- ; CHECK-NEXT: .cfi_def_cfa_offset 16
393
389
; CHECK-NEXT: add x8, x0, #4
394
390
; CHECK-NEXT: ldr s0, [x0]
395
391
; CHECK-NEXT: Lloh0:
396
392
; CHECK-NEXT: adrp x9, lCPI9_0@PAGE
397
393
; CHECK-NEXT: ld1.h { v0 }[2], [x8]
394
+ ; CHECK-NEXT: add x8, x1, #1
398
395
; CHECK-NEXT: Lloh1:
399
396
; CHECK-NEXT: ldr d1, [x9, lCPI9_0@PAGEOFF]
397
+ ; CHECK-NEXT: add x9, x1, #2
400
398
; CHECK-NEXT: add.4h v0, v0, v1
401
- ; CHECK-NEXT: xtn.8b v1, v0
402
- ; CHECK-NEXT: umov.h w8, v0[2]
403
- ; CHECK-NEXT: str s1, [sp, #12]
404
- ; CHECK-NEXT: ldrh w9, [sp, #12]
405
- ; CHECK-NEXT: strb w8, [x1, #2]
406
- ; CHECK-NEXT: strh w9, [x1]
407
- ; CHECK-NEXT: add sp, sp, #16
399
+ ; CHECK-NEXT: st1.b { v0 }[2], [x8]
400
+ ; CHECK-NEXT: st1.b { v0 }[4], [x9]
401
+ ; CHECK-NEXT: st1.b { v0 }[0], [x1]
408
402
; CHECK-NEXT: ret
409
403
; CHECK-NEXT: .loh AdrpLdr Lloh0, Lloh1
410
404
;
@@ -597,17 +591,13 @@ entry:
597
591
define void @shift_trunc_store (ptr %src , ptr %dst ) {
598
592
; CHECK-LABEL: shift_trunc_store:
599
593
; CHECK: ; %bb.0:
600
- ; CHECK-NEXT: sub sp, sp, #16
601
- ; CHECK-NEXT: .cfi_def_cfa_offset 16
602
594
; CHECK-NEXT: ldr q0, [x0]
603
- ; CHECK-NEXT: shrn.4h v0, v0, #16
604
- ; CHECK-NEXT: xtn.8b v1, v0
605
- ; CHECK-NEXT: umov.h w8, v0[2]
606
- ; CHECK-NEXT: str s1, [sp, #12]
607
- ; CHECK-NEXT: ldrh w9, [sp, #12]
608
- ; CHECK-NEXT: strb w8, [x1, #2]
609
- ; CHECK-NEXT: strh w9, [x1]
610
- ; CHECK-NEXT: add sp, sp, #16
595
+ ; CHECK-NEXT: add x8, x1, #1
596
+ ; CHECK-NEXT: add x9, x1, #2
597
+ ; CHECK-NEXT: ushr.4s v0, v0, #16
598
+ ; CHECK-NEXT: st1.b { v0 }[4], [x8]
599
+ ; CHECK-NEXT: st1.b { v0 }[8], [x9]
600
+ ; CHECK-NEXT: st1.b { v0 }[0], [x1]
611
601
; CHECK-NEXT: ret
612
602
;
613
603
; BE-LABEL: shift_trunc_store:
@@ -635,17 +625,13 @@ define void @shift_trunc_store(ptr %src, ptr %dst) {
635
625
define void @shift_trunc_store_default_align (ptr %src , ptr %dst ) {
636
626
; CHECK-LABEL: shift_trunc_store_default_align:
637
627
; CHECK: ; %bb.0:
638
- ; CHECK-NEXT: sub sp, sp, #16
639
- ; CHECK-NEXT: .cfi_def_cfa_offset 16
640
628
; CHECK-NEXT: ldr q0, [x0]
641
- ; CHECK-NEXT: shrn.4h v0, v0, #16
642
- ; CHECK-NEXT: xtn.8b v1, v0
643
- ; CHECK-NEXT: umov.h w8, v0[2]
644
- ; CHECK-NEXT: str s1, [sp, #12]
645
- ; CHECK-NEXT: ldrh w9, [sp, #12]
646
- ; CHECK-NEXT: strb w8, [x1, #2]
647
- ; CHECK-NEXT: strh w9, [x1]
648
- ; CHECK-NEXT: add sp, sp, #16
629
+ ; CHECK-NEXT: add x8, x1, #1
630
+ ; CHECK-NEXT: add x9, x1, #2
631
+ ; CHECK-NEXT: ushr.4s v0, v0, #16
632
+ ; CHECK-NEXT: st1.b { v0 }[4], [x8]
633
+ ; CHECK-NEXT: st1.b { v0 }[8], [x9]
634
+ ; CHECK-NEXT: st1.b { v0 }[0], [x1]
649
635
; CHECK-NEXT: ret
650
636
;
651
637
; BE-LABEL: shift_trunc_store_default_align:
@@ -673,17 +659,13 @@ define void @shift_trunc_store_default_align(ptr %src, ptr %dst) {
673
659
define void @shift_trunc_store_align_4 (ptr %src , ptr %dst ) {
674
660
; CHECK-LABEL: shift_trunc_store_align_4:
675
661
; CHECK: ; %bb.0:
676
- ; CHECK-NEXT: sub sp, sp, #16
677
- ; CHECK-NEXT: .cfi_def_cfa_offset 16
678
662
; CHECK-NEXT: ldr q0, [x0]
679
- ; CHECK-NEXT: shrn.4h v0, v0, #16
680
- ; CHECK-NEXT: xtn.8b v1, v0
681
- ; CHECK-NEXT: umov.h w8, v0[2]
682
- ; CHECK-NEXT: str s1, [sp, #12]
683
- ; CHECK-NEXT: ldrh w9, [sp, #12]
684
- ; CHECK-NEXT: strb w8, [x1, #2]
685
- ; CHECK-NEXT: strh w9, [x1]
686
- ; CHECK-NEXT: add sp, sp, #16
663
+ ; CHECK-NEXT: add x8, x1, #1
664
+ ; CHECK-NEXT: add x9, x1, #2
665
+ ; CHECK-NEXT: ushr.4s v0, v0, #16
666
+ ; CHECK-NEXT: st1.b { v0 }[4], [x8]
667
+ ; CHECK-NEXT: st1.b { v0 }[8], [x9]
668
+ ; CHECK-NEXT: st1.b { v0 }[0], [x1]
687
669
; CHECK-NEXT: ret
688
670
;
689
671
; BE-LABEL: shift_trunc_store_align_4:
@@ -711,17 +693,14 @@ define void @shift_trunc_store_align_4(ptr %src, ptr %dst) {
711
693
define void @shift_trunc_store_const_offset_1 (ptr %src , ptr %dst ) {
712
694
; CHECK-LABEL: shift_trunc_store_const_offset_1:
713
695
; CHECK: ; %bb.0:
714
- ; CHECK-NEXT: sub sp, sp, #16
715
- ; CHECK-NEXT: .cfi_def_cfa_offset 16
716
696
; CHECK-NEXT: ldr q0, [x0]
717
- ; CHECK-NEXT: shrn.4h v0, v0, #16
718
- ; CHECK-NEXT: xtn.8b v1, v0
719
- ; CHECK-NEXT: umov.h w8, v0[2]
720
- ; CHECK-NEXT: str s1, [sp, #12]
721
- ; CHECK-NEXT: ldrh w9, [sp, #12]
722
- ; CHECK-NEXT: strb w8, [x1, #3]
723
- ; CHECK-NEXT: sturh w9, [x1, #1]
724
- ; CHECK-NEXT: add sp, sp, #16
697
+ ; CHECK-NEXT: add x8, x1, #2
698
+ ; CHECK-NEXT: add x9, x1, #3
699
+ ; CHECK-NEXT: add x10, x1, #1
700
+ ; CHECK-NEXT: ushr.4s v0, v0, #16
701
+ ; CHECK-NEXT: st1.b { v0 }[4], [x8]
702
+ ; CHECK-NEXT: st1.b { v0 }[8], [x9]
703
+ ; CHECK-NEXT: st1.b { v0 }[0], [x10]
725
704
; CHECK-NEXT: ret
726
705
;
727
706
; BE-LABEL: shift_trunc_store_const_offset_1:
@@ -750,17 +729,14 @@ define void @shift_trunc_store_const_offset_1(ptr %src, ptr %dst) {
750
729
define void @shift_trunc_store_const_offset_3 (ptr %src , ptr %dst ) {
751
730
; CHECK-LABEL: shift_trunc_store_const_offset_3:
752
731
; CHECK: ; %bb.0:
753
- ; CHECK-NEXT: sub sp, sp, #16
754
- ; CHECK-NEXT: .cfi_def_cfa_offset 16
755
732
; CHECK-NEXT: ldr q0, [x0]
756
- ; CHECK-NEXT: shrn.4h v0, v0, #16
757
- ; CHECK-NEXT: xtn.8b v1, v0
758
- ; CHECK-NEXT: umov.h w8, v0[2]
759
- ; CHECK-NEXT: str s1, [sp, #12]
760
- ; CHECK-NEXT: ldrh w9, [sp, #12]
761
- ; CHECK-NEXT: strb w8, [x1, #5]
762
- ; CHECK-NEXT: sturh w9, [x1, #3]
763
- ; CHECK-NEXT: add sp, sp, #16
733
+ ; CHECK-NEXT: add x8, x1, #4
734
+ ; CHECK-NEXT: add x9, x1, #5
735
+ ; CHECK-NEXT: add x10, x1, #3
736
+ ; CHECK-NEXT: ushr.4s v0, v0, #16
737
+ ; CHECK-NEXT: st1.b { v0 }[4], [x8]
738
+ ; CHECK-NEXT: st1.b { v0 }[8], [x9]
739
+ ; CHECK-NEXT: st1.b { v0 }[0], [x10]
764
740
; CHECK-NEXT: ret
765
741
;
766
742
; BE-LABEL: shift_trunc_store_const_offset_3:
0 commit comments