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