@@ -756,7 +756,7 @@ define i32 @mm_unsigned_sat_upper_lower_1(i32 %x) {
756
756
; V4T-NEXT: bic r1, r0, r0, asr #31
757
757
; V4T-NEXT: ldr r0, .LCPI20_0
758
758
; V4T-NEXT: cmp r1, r0
759
- ; V4T-NEXT: movlo r0, r1
759
+ ; V4T-NEXT: movlt r0, r1
760
760
; V4T-NEXT: bx lr
761
761
; V4T-NEXT: .p2align 2
762
762
; V4T-NEXT: @ %bb.1:
@@ -765,23 +765,12 @@ define i32 @mm_unsigned_sat_upper_lower_1(i32 %x) {
765
765
;
766
766
; V6-LABEL: mm_unsigned_sat_upper_lower_1:
767
767
; V6: @ %bb.0: @ %entry
768
- ; V6-NEXT: bic r1, r0, r0, asr #31
769
- ; V6-NEXT: ldr r0, .LCPI20_0
770
- ; V6-NEXT: cmp r1, r0
771
- ; V6-NEXT: movlo r0, r1
768
+ ; V6-NEXT: usat r0, #23, r0
772
769
; V6-NEXT: bx lr
773
- ; V6-NEXT: .p2align 2
774
- ; V6-NEXT: @ %bb.1:
775
- ; V6-NEXT: .LCPI20_0:
776
- ; V6-NEXT: .long 8388607 @ 0x7fffff
777
770
;
778
771
; V6T2-LABEL: mm_unsigned_sat_upper_lower_1:
779
772
; V6T2: @ %bb.0: @ %entry
780
- ; V6T2-NEXT: bic r1, r0, r0, asr #31
781
- ; V6T2-NEXT: movw r0, #65535
782
- ; V6T2-NEXT: movt r0, #127
783
- ; V6T2-NEXT: cmp r1, r0
784
- ; V6T2-NEXT: movlo r0, r1
773
+ ; V6T2-NEXT: usat r0, #23, r0
785
774
; V6T2-NEXT: bx lr
786
775
entry:
787
776
%0 = call i32 @llvm.smax.i32 (i32 %x , i32 0 )
@@ -795,7 +784,7 @@ define i32 @mm_unsigned_sat_upper_lower_2(i32 %x) {
795
784
; V4T-NEXT: bic r1, r0, r0, asr #31
796
785
; V4T-NEXT: ldr r0, .LCPI21_0
797
786
; V4T-NEXT: cmp r1, r0
798
- ; V4T-NEXT: movlo r0, r1
787
+ ; V4T-NEXT: movlt r0, r1
799
788
; V4T-NEXT: bx lr
800
789
; V4T-NEXT: .p2align 2
801
790
; V4T-NEXT: @ %bb.1:
@@ -804,23 +793,12 @@ define i32 @mm_unsigned_sat_upper_lower_2(i32 %x) {
804
793
;
805
794
; V6-LABEL: mm_unsigned_sat_upper_lower_2:
806
795
; V6: @ %bb.0: @ %entry
807
- ; V6-NEXT: bic r1, r0, r0, asr #31
808
- ; V6-NEXT: ldr r0, .LCPI21_0
809
- ; V6-NEXT: cmp r1, r0
810
- ; V6-NEXT: movlo r0, r1
796
+ ; V6-NEXT: usat r0, #23, r0
811
797
; V6-NEXT: bx lr
812
- ; V6-NEXT: .p2align 2
813
- ; V6-NEXT: @ %bb.1:
814
- ; V6-NEXT: .LCPI21_0:
815
- ; V6-NEXT: .long 8388607 @ 0x7fffff
816
798
;
817
799
; V6T2-LABEL: mm_unsigned_sat_upper_lower_2:
818
800
; V6T2: @ %bb.0: @ %entry
819
- ; V6T2-NEXT: bic r1, r0, r0, asr #31
820
- ; V6T2-NEXT: movw r0, #65535
821
- ; V6T2-NEXT: movt r0, #127
822
- ; V6T2-NEXT: cmp r1, r0
823
- ; V6T2-NEXT: movlo r0, r1
801
+ ; V6T2-NEXT: usat r0, #23, r0
824
802
; V6T2-NEXT: bx lr
825
803
entry:
826
804
%0 = call i32 @llvm.smax.i32 (i32 %x , i32 0 )
@@ -834,7 +812,7 @@ define i32 @mm_unsigned_sat_upper_lower_3(i32 %x) {
834
812
; V4T-NEXT: bic r1, r0, r0, asr #31
835
813
; V4T-NEXT: ldr r0, .LCPI22_0
836
814
; V4T-NEXT: cmp r1, r0
837
- ; V4T-NEXT: movlo r0, r1
815
+ ; V4T-NEXT: movlt r0, r1
838
816
; V4T-NEXT: bx lr
839
817
; V4T-NEXT: .p2align 2
840
818
; V4T-NEXT: @ %bb.1:
@@ -843,23 +821,12 @@ define i32 @mm_unsigned_sat_upper_lower_3(i32 %x) {
843
821
;
844
822
; V6-LABEL: mm_unsigned_sat_upper_lower_3:
845
823
; V6: @ %bb.0: @ %entry
846
- ; V6-NEXT: bic r1, r0, r0, asr #31
847
- ; V6-NEXT: ldr r0, .LCPI22_0
848
- ; V6-NEXT: cmp r1, r0
849
- ; V6-NEXT: movlo r0, r1
824
+ ; V6-NEXT: usat r0, #23, r0
850
825
; V6-NEXT: bx lr
851
- ; V6-NEXT: .p2align 2
852
- ; V6-NEXT: @ %bb.1:
853
- ; V6-NEXT: .LCPI22_0:
854
- ; V6-NEXT: .long 8388607 @ 0x7fffff
855
826
;
856
827
; V6T2-LABEL: mm_unsigned_sat_upper_lower_3:
857
828
; V6T2: @ %bb.0: @ %entry
858
- ; V6T2-NEXT: bic r1, r0, r0, asr #31
859
- ; V6T2-NEXT: movw r0, #65535
860
- ; V6T2-NEXT: movt r0, #127
861
- ; V6T2-NEXT: cmp r1, r0
862
- ; V6T2-NEXT: movlo r0, r1
829
+ ; V6T2-NEXT: usat r0, #23, r0
863
830
; V6T2-NEXT: bx lr
864
831
entry:
865
832
%0 = call i32 @llvm.smax.i32 (i32 %x , i32 0 )
@@ -913,7 +880,7 @@ define i32 @mm_no_unsigned_sat_incorrect_constant2(i32 %x) {
913
880
; V4T-NEXT: mov r0, #1
914
881
; V4T-NEXT: orr r0, r0, #8388608
915
882
; V4T-NEXT: cmp r1, #8388608
916
- ; V4T-NEXT: movls r0, r1
883
+ ; V4T-NEXT: movle r0, r1
917
884
; V4T-NEXT: bx lr
918
885
;
919
886
; V6-LABEL: mm_no_unsigned_sat_incorrect_constant2:
@@ -922,7 +889,7 @@ define i32 @mm_no_unsigned_sat_incorrect_constant2(i32 %x) {
922
889
; V6-NEXT: mov r0, #1
923
890
; V6-NEXT: orr r0, r0, #8388608
924
891
; V6-NEXT: cmp r1, #8388608
925
- ; V6-NEXT: movls r0, r1
892
+ ; V6-NEXT: movle r0, r1
926
893
; V6-NEXT: bx lr
927
894
;
928
895
; V6T2-LABEL: mm_no_unsigned_sat_incorrect_constant2:
@@ -931,7 +898,7 @@ define i32 @mm_no_unsigned_sat_incorrect_constant2(i32 %x) {
931
898
; V6T2-NEXT: movw r0, #1
932
899
; V6T2-NEXT: movt r0, #128
933
900
; V6T2-NEXT: cmp r1, #8388608
934
- ; V6T2-NEXT: movls r0, r1
901
+ ; V6T2-NEXT: movle r0, r1
935
902
; V6T2-NEXT: bx lr
936
903
entry:
937
904
%0 = call i32 @llvm.smax.i32 (i32 %x , i32 0 )
@@ -981,6 +948,29 @@ entry:
981
948
ret i32 %1
982
949
}
983
950
951
+ define i32 @test_umin_smax_usat (i32 %x ) {
952
+ ; V4T-LABEL: test_umin_smax_usat:
953
+ ; V4T: @ %bb.0: @ %entry
954
+ ; V4T-NEXT: bic r0, r0, r0, asr #31
955
+ ; V4T-NEXT: cmp r0, #255
956
+ ; V4T-NEXT: movge r0, #255
957
+ ; V4T-NEXT: bx lr
958
+ ;
959
+ ; V6-LABEL: test_umin_smax_usat:
960
+ ; V6: @ %bb.0: @ %entry
961
+ ; V6-NEXT: usat r0, #8, r0
962
+ ; V6-NEXT: bx lr
963
+ ;
964
+ ; V6T2-LABEL: test_umin_smax_usat:
965
+ ; V6T2: @ %bb.0: @ %entry
966
+ ; V6T2-NEXT: usat r0, #8, r0
967
+ ; V6T2-NEXT: bx lr
968
+ entry:
969
+ %v1 = tail call i32 @llvm.smax.i32 (i32 %x , i32 0 )
970
+ %v2 = tail call i32 @llvm.umin.i32 (i32 %v1 , i32 255 )
971
+ ret i32 %v2
972
+ }
973
+
984
974
declare i32 @llvm.smin.i32 (i32 , i32 )
985
975
declare i32 @llvm.smax.i32 (i32 , i32 )
986
976
declare i16 @llvm.smin.i16 (i16 , i16 )
0 commit comments