@@ -727,23 +727,51 @@ define ptr @pretrunc64to8(ptr %ptr, i64 %spacing) {
727
727
; Pre-indexed loads
728
728
;-----
729
729
define ptr @preidxf64 (ptr %src , ptr %out ) {
730
- ; CHECK-LABEL: preidxf64:
731
- ; CHECK: ; %bb.0:
732
- ; CHECK-NEXT: ldr d0, [x0, #8]!
733
- ; CHECK-NEXT: str d0, [x1]
734
- ; CHECK-NEXT: ret
730
+ ; CHECK64-LABEL: preidxf64:
731
+ ; CHECK64: ; %bb.0:
732
+ ; CHECK64-NEXT: ldr d0, [x0, #8]!
733
+ ; CHECK64-NEXT: str d0, [x1]
734
+ ; CHECK64-NEXT: ret
735
+ ;
736
+ ; GISEL-LABEL: preidxf64:
737
+ ; GISEL: ; %bb.0:
738
+ ; GISEL-NEXT: add x8, x0, #8
739
+ ; GISEL-NEXT: ldr d0, [x0, #8]
740
+ ; GISEL-NEXT: mov x0, x8
741
+ ; GISEL-NEXT: str d0, [x1]
742
+ ; GISEL-NEXT: ret
743
+ ;
744
+ ; CHECK32-LABEL: preidxf64:
745
+ ; CHECK32: ; %bb.0:
746
+ ; CHECK32-NEXT: ldr d0, [x0, #8]!
747
+ ; CHECK32-NEXT: str d0, [x1]
748
+ ; CHECK32-NEXT: ret
735
749
%ptr = getelementptr inbounds double , ptr %src , i64 1
736
750
%tmp = load double , ptr %ptr , align 4
737
751
store double %tmp , ptr %out , align 4
738
752
ret ptr %ptr
739
753
}
740
754
741
755
define ptr @preidxf32 (ptr %src , ptr %out ) {
742
- ; CHECK-LABEL: preidxf32:
743
- ; CHECK: ; %bb.0:
744
- ; CHECK-NEXT: ldr s0, [x0, #4]!
745
- ; CHECK-NEXT: str s0, [x1]
746
- ; CHECK-NEXT: ret
756
+ ; CHECK64-LABEL: preidxf32:
757
+ ; CHECK64: ; %bb.0:
758
+ ; CHECK64-NEXT: ldr s0, [x0, #4]!
759
+ ; CHECK64-NEXT: str s0, [x1]
760
+ ; CHECK64-NEXT: ret
761
+ ;
762
+ ; GISEL-LABEL: preidxf32:
763
+ ; GISEL: ; %bb.0:
764
+ ; GISEL-NEXT: add x8, x0, #4
765
+ ; GISEL-NEXT: ldr s0, [x0, #4]
766
+ ; GISEL-NEXT: mov x0, x8
767
+ ; GISEL-NEXT: str s0, [x1]
768
+ ; GISEL-NEXT: ret
769
+ ;
770
+ ; CHECK32-LABEL: preidxf32:
771
+ ; CHECK32: ; %bb.0:
772
+ ; CHECK32-NEXT: ldr s0, [x0, #4]!
773
+ ; CHECK32-NEXT: str s0, [x1]
774
+ ; CHECK32-NEXT: ret
747
775
%ptr = getelementptr inbounds float , ptr %src , i64 1
748
776
%tmp = load float , ptr %ptr , align 4
749
777
store float %tmp , ptr %out , align 4
@@ -759,8 +787,9 @@ define ptr @preidxf16(ptr %src, ptr %out) {
759
787
;
760
788
; GISEL-LABEL: preidxf16:
761
789
; GISEL: ; %bb.0:
790
+ ; GISEL-NEXT: add x8, x0, #2
762
791
; GISEL-NEXT: ldr h0, [x0, #2]
763
- ; GISEL-NEXT: add x0, x0, #2
792
+ ; GISEL-NEXT: mov x0, x8
764
793
; GISEL-NEXT: str h0, [x1]
765
794
; GISEL-NEXT: ret
766
795
;
@@ -776,35 +805,77 @@ define ptr @preidxf16(ptr %src, ptr %out) {
776
805
}
777
806
778
807
define ptr @preidx64 (ptr %src , ptr %out ) {
779
- ; CHECK-LABEL: preidx64:
780
- ; CHECK: ; %bb.0:
781
- ; CHECK-NEXT: ldr x8, [x0, #8]!
782
- ; CHECK-NEXT: str x8, [x1]
783
- ; CHECK-NEXT: ret
808
+ ; CHECK64-LABEL: preidx64:
809
+ ; CHECK64: ; %bb.0:
810
+ ; CHECK64-NEXT: ldr x8, [x0, #8]!
811
+ ; CHECK64-NEXT: str x8, [x1]
812
+ ; CHECK64-NEXT: ret
813
+ ;
814
+ ; GISEL-LABEL: preidx64:
815
+ ; GISEL: ; %bb.0:
816
+ ; GISEL-NEXT: add x8, x0, #8
817
+ ; GISEL-NEXT: ldr x9, [x0, #8]
818
+ ; GISEL-NEXT: mov x0, x8
819
+ ; GISEL-NEXT: str x9, [x1]
820
+ ; GISEL-NEXT: ret
821
+ ;
822
+ ; CHECK32-LABEL: preidx64:
823
+ ; CHECK32: ; %bb.0:
824
+ ; CHECK32-NEXT: ldr x8, [x0, #8]!
825
+ ; CHECK32-NEXT: str x8, [x1]
826
+ ; CHECK32-NEXT: ret
784
827
%ptr = getelementptr inbounds i64 , ptr %src , i64 1
785
828
%tmp = load i64 , ptr %ptr , align 4
786
829
store i64 %tmp , ptr %out , align 4
787
830
ret ptr %ptr
788
831
}
789
832
790
833
define ptr @preidx32 (ptr %src , ptr %out ) {
791
- ; CHECK-LABEL: preidx32:
792
- ; CHECK: ; %bb.0:
793
- ; CHECK-NEXT: ldr w8, [x0, #4]!
794
- ; CHECK-NEXT: str w8, [x1]
795
- ; CHECK-NEXT: ret
834
+ ; CHECK64-LABEL: preidx32:
835
+ ; CHECK64: ; %bb.0:
836
+ ; CHECK64-NEXT: ldr w8, [x0, #4]!
837
+ ; CHECK64-NEXT: str w8, [x1]
838
+ ; CHECK64-NEXT: ret
839
+ ;
840
+ ; GISEL-LABEL: preidx32:
841
+ ; GISEL: ; %bb.0:
842
+ ; GISEL-NEXT: add x8, x0, #4
843
+ ; GISEL-NEXT: ldr w9, [x0, #4]
844
+ ; GISEL-NEXT: mov x0, x8
845
+ ; GISEL-NEXT: str w9, [x1]
846
+ ; GISEL-NEXT: ret
847
+ ;
848
+ ; CHECK32-LABEL: preidx32:
849
+ ; CHECK32: ; %bb.0:
850
+ ; CHECK32-NEXT: ldr w8, [x0, #4]!
851
+ ; CHECK32-NEXT: str w8, [x1]
852
+ ; CHECK32-NEXT: ret
796
853
%ptr = getelementptr inbounds i32 , ptr %src , i64 1
797
854
%tmp = load i32 , ptr %ptr , align 4
798
855
store i32 %tmp , ptr %out , align 4
799
856
ret ptr %ptr
800
857
}
801
858
802
859
define ptr @preidx16zext32 (ptr %src , ptr %out ) {
803
- ; CHECK-LABEL: preidx16zext32:
804
- ; CHECK: ; %bb.0:
805
- ; CHECK-NEXT: ldrh w8, [x0, #2]!
806
- ; CHECK-NEXT: str w8, [x1]
807
- ; CHECK-NEXT: ret
860
+ ; CHECK64-LABEL: preidx16zext32:
861
+ ; CHECK64: ; %bb.0:
862
+ ; CHECK64-NEXT: ldrh w8, [x0, #2]!
863
+ ; CHECK64-NEXT: str w8, [x1]
864
+ ; CHECK64-NEXT: ret
865
+ ;
866
+ ; GISEL-LABEL: preidx16zext32:
867
+ ; GISEL: ; %bb.0:
868
+ ; GISEL-NEXT: add x8, x0, #2
869
+ ; GISEL-NEXT: ldrh w9, [x0, #2]
870
+ ; GISEL-NEXT: mov x0, x8
871
+ ; GISEL-NEXT: str w9, [x1]
872
+ ; GISEL-NEXT: ret
873
+ ;
874
+ ; CHECK32-LABEL: preidx16zext32:
875
+ ; CHECK32: ; %bb.0:
876
+ ; CHECK32-NEXT: ldrh w8, [x0, #2]!
877
+ ; CHECK32-NEXT: str w8, [x1]
878
+ ; CHECK32-NEXT: ret
808
879
%ptr = getelementptr inbounds i16 , ptr %src , i64 1
809
880
%tmp = load i16 , ptr %ptr , align 4
810
881
%ext = zext i16 %tmp to i32
@@ -813,11 +884,25 @@ define ptr @preidx16zext32(ptr %src, ptr %out) {
813
884
}
814
885
815
886
define ptr @preidx16zext64 (ptr %src , ptr %out ) {
816
- ; CHECK-LABEL: preidx16zext64:
817
- ; CHECK: ; %bb.0:
818
- ; CHECK-NEXT: ldrh w8, [x0, #2]!
819
- ; CHECK-NEXT: str x8, [x1]
820
- ; CHECK-NEXT: ret
887
+ ; CHECK64-LABEL: preidx16zext64:
888
+ ; CHECK64: ; %bb.0:
889
+ ; CHECK64-NEXT: ldrh w8, [x0, #2]!
890
+ ; CHECK64-NEXT: str x8, [x1]
891
+ ; CHECK64-NEXT: ret
892
+ ;
893
+ ; GISEL-LABEL: preidx16zext64:
894
+ ; GISEL: ; %bb.0:
895
+ ; GISEL-NEXT: add x8, x0, #2
896
+ ; GISEL-NEXT: ldrh w9, [x0, #2]
897
+ ; GISEL-NEXT: mov x0, x8
898
+ ; GISEL-NEXT: str x9, [x1]
899
+ ; GISEL-NEXT: ret
900
+ ;
901
+ ; CHECK32-LABEL: preidx16zext64:
902
+ ; CHECK32: ; %bb.0:
903
+ ; CHECK32-NEXT: ldrh w8, [x0, #2]!
904
+ ; CHECK32-NEXT: str x8, [x1]
905
+ ; CHECK32-NEXT: ret
821
906
%ptr = getelementptr inbounds i16 , ptr %src , i64 1
822
907
%tmp = load i16 , ptr %ptr , align 4
823
908
%ext = zext i16 %tmp to i64
@@ -826,11 +911,25 @@ define ptr @preidx16zext64(ptr %src, ptr %out) {
826
911
}
827
912
828
913
define ptr @preidx8zext32 (ptr %src , ptr %out ) {
829
- ; CHECK-LABEL: preidx8zext32:
830
- ; CHECK: ; %bb.0:
831
- ; CHECK-NEXT: ldrb w8, [x0, #1]!
832
- ; CHECK-NEXT: str w8, [x1]
833
- ; CHECK-NEXT: ret
914
+ ; CHECK64-LABEL: preidx8zext32:
915
+ ; CHECK64: ; %bb.0:
916
+ ; CHECK64-NEXT: ldrb w8, [x0, #1]!
917
+ ; CHECK64-NEXT: str w8, [x1]
918
+ ; CHECK64-NEXT: ret
919
+ ;
920
+ ; GISEL-LABEL: preidx8zext32:
921
+ ; GISEL: ; %bb.0:
922
+ ; GISEL-NEXT: add x8, x0, #1
923
+ ; GISEL-NEXT: ldrb w9, [x0, #1]
924
+ ; GISEL-NEXT: mov x0, x8
925
+ ; GISEL-NEXT: str w9, [x1]
926
+ ; GISEL-NEXT: ret
927
+ ;
928
+ ; CHECK32-LABEL: preidx8zext32:
929
+ ; CHECK32: ; %bb.0:
930
+ ; CHECK32-NEXT: ldrb w8, [x0, #1]!
931
+ ; CHECK32-NEXT: str w8, [x1]
932
+ ; CHECK32-NEXT: ret
834
933
%ptr = getelementptr inbounds i8 , ptr %src , i64 1
835
934
%tmp = load i8 , ptr %ptr , align 4
836
935
%ext = zext i8 %tmp to i32
@@ -839,11 +938,25 @@ define ptr @preidx8zext32(ptr %src, ptr %out) {
839
938
}
840
939
841
940
define ptr @preidx8zext64 (ptr %src , ptr %out ) {
842
- ; CHECK-LABEL: preidx8zext64:
843
- ; CHECK: ; %bb.0:
844
- ; CHECK-NEXT: ldrb w8, [x0, #1]!
845
- ; CHECK-NEXT: str x8, [x1]
846
- ; CHECK-NEXT: ret
941
+ ; CHECK64-LABEL: preidx8zext64:
942
+ ; CHECK64: ; %bb.0:
943
+ ; CHECK64-NEXT: ldrb w8, [x0, #1]!
944
+ ; CHECK64-NEXT: str x8, [x1]
945
+ ; CHECK64-NEXT: ret
946
+ ;
947
+ ; GISEL-LABEL: preidx8zext64:
948
+ ; GISEL: ; %bb.0:
949
+ ; GISEL-NEXT: add x8, x0, #1
950
+ ; GISEL-NEXT: ldrb w9, [x0, #1]
951
+ ; GISEL-NEXT: mov x0, x8
952
+ ; GISEL-NEXT: str x9, [x1]
953
+ ; GISEL-NEXT: ret
954
+ ;
955
+ ; CHECK32-LABEL: preidx8zext64:
956
+ ; CHECK32: ; %bb.0:
957
+ ; CHECK32-NEXT: ldrb w8, [x0, #1]!
958
+ ; CHECK32-NEXT: str x8, [x1]
959
+ ; CHECK32-NEXT: ret
847
960
%ptr = getelementptr inbounds i8 , ptr %src , i64 1
848
961
%tmp = load i8 , ptr %ptr , align 4
849
962
%ext = zext i8 %tmp to i64
@@ -860,9 +973,10 @@ define ptr @preidx32sext64(ptr %src, ptr %out) {
860
973
;
861
974
; GISEL-LABEL: preidx32sext64:
862
975
; GISEL: ; %bb.0:
863
- ; GISEL-NEXT: ldrsw x8, [x0, #4]
864
- ; GISEL-NEXT: add x0, x0, #4
865
- ; GISEL-NEXT: str x8, [x1]
976
+ ; GISEL-NEXT: add x8, x0, #4
977
+ ; GISEL-NEXT: ldrsw x9, [x0, #4]
978
+ ; GISEL-NEXT: mov x0, x8
979
+ ; GISEL-NEXT: str x9, [x1]
866
980
; GISEL-NEXT: ret
867
981
;
868
982
; CHECK32-LABEL: preidx32sext64:
@@ -886,9 +1000,10 @@ define ptr @preidx16sext32(ptr %src, ptr %out) {
886
1000
;
887
1001
; GISEL-LABEL: preidx16sext32:
888
1002
; GISEL: ; %bb.0:
889
- ; GISEL-NEXT: ldrsh w8, [x0, #2]
890
- ; GISEL-NEXT: add x0, x0, #2
891
- ; GISEL-NEXT: str w8, [x1]
1003
+ ; GISEL-NEXT: add x8, x0, #2
1004
+ ; GISEL-NEXT: ldrsh w9, [x0, #2]
1005
+ ; GISEL-NEXT: mov x0, x8
1006
+ ; GISEL-NEXT: str w9, [x1]
892
1007
; GISEL-NEXT: ret
893
1008
;
894
1009
; CHECK32-LABEL: preidx16sext32:
@@ -912,9 +1027,10 @@ define ptr @preidx16sext64(ptr %src, ptr %out) {
912
1027
;
913
1028
; GISEL-LABEL: preidx16sext64:
914
1029
; GISEL: ; %bb.0:
915
- ; GISEL-NEXT: ldrsh x8, [x0, #2]
916
- ; GISEL-NEXT: add x0, x0, #2
917
- ; GISEL-NEXT: str x8, [x1]
1030
+ ; GISEL-NEXT: add x8, x0, #2
1031
+ ; GISEL-NEXT: ldrsh x9, [x0, #2]
1032
+ ; GISEL-NEXT: mov x0, x8
1033
+ ; GISEL-NEXT: str x9, [x1]
918
1034
; GISEL-NEXT: ret
919
1035
;
920
1036
; CHECK32-LABEL: preidx16sext64:
@@ -938,9 +1054,10 @@ define ptr @preidx8sext32(ptr %src, ptr %out) {
938
1054
;
939
1055
; GISEL-LABEL: preidx8sext32:
940
1056
; GISEL: ; %bb.0:
941
- ; GISEL-NEXT: ldrsb w8, [x0, #1]
942
- ; GISEL-NEXT: add x0, x0, #1
943
- ; GISEL-NEXT: str w8, [x1]
1057
+ ; GISEL-NEXT: add x8, x0, #1
1058
+ ; GISEL-NEXT: ldrsb w9, [x0, #1]
1059
+ ; GISEL-NEXT: mov x0, x8
1060
+ ; GISEL-NEXT: str w9, [x1]
944
1061
; GISEL-NEXT: ret
945
1062
;
946
1063
; CHECK32-LABEL: preidx8sext32:
@@ -964,9 +1081,10 @@ define ptr @preidx8sext64(ptr %src, ptr %out) {
964
1081
;
965
1082
; GISEL-LABEL: preidx8sext64:
966
1083
; GISEL: ; %bb.0:
967
- ; GISEL-NEXT: ldrsb x8, [x0, #1]
968
- ; GISEL-NEXT: add x0, x0, #1
969
- ; GISEL-NEXT: str x8, [x1]
1084
+ ; GISEL-NEXT: add x8, x0, #1
1085
+ ; GISEL-NEXT: ldrsb x9, [x0, #1]
1086
+ ; GISEL-NEXT: mov x0, x8
1087
+ ; GISEL-NEXT: str x9, [x1]
970
1088
; GISEL-NEXT: ret
971
1089
;
972
1090
; CHECK32-LABEL: preidx8sext64:
0 commit comments