@@ -870,3 +870,109 @@ define i1 @ashr_ult_15(i4 %x) {
870
870
%r = icmp ult i4 %s , 15 ; 0b1111
871
871
ret i1 %r
872
872
}
873
+
874
+ define i1 @lshr_eq_0_multiuse (i8 %x ) {
875
+ ; CHECK-LABEL: @lshr_eq_0_multiuse(
876
+ ; CHECK-NEXT: [[S:%.*]] = lshr i8 [[X:%.*]], 2
877
+ ; CHECK-NEXT: call void @use(i8 [[S]])
878
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[S]], 0
879
+ ; CHECK-NEXT: ret i1 [[C]]
880
+ ;
881
+ %s = lshr i8 %x , 2
882
+ call void @use (i8 %s )
883
+ %c = icmp eq i8 %s , 0
884
+ ret i1 %c
885
+ }
886
+
887
+ define i1 @lshr_ne_0_multiuse (i8 %x ) {
888
+ ; CHECK-LABEL: @lshr_ne_0_multiuse(
889
+ ; CHECK-NEXT: [[S:%.*]] = lshr i8 [[X:%.*]], 2
890
+ ; CHECK-NEXT: call void @use(i8 [[S]])
891
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[S]], 0
892
+ ; CHECK-NEXT: ret i1 [[C]]
893
+ ;
894
+ %s = lshr i8 %x , 2
895
+ call void @use (i8 %s )
896
+ %c = icmp ne i8 %s , 0
897
+ ret i1 %c
898
+ }
899
+
900
+ define i1 @ashr_eq_0_multiuse (i8 %x ) {
901
+ ; CHECK-LABEL: @ashr_eq_0_multiuse(
902
+ ; CHECK-NEXT: [[S:%.*]] = ashr i8 [[X:%.*]], 2
903
+ ; CHECK-NEXT: call void @use(i8 [[S]])
904
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[S]], 0
905
+ ; CHECK-NEXT: ret i1 [[C]]
906
+ ;
907
+ %s = ashr i8 %x , 2
908
+ call void @use (i8 %s )
909
+ %c = icmp eq i8 %s , 0
910
+ ret i1 %c
911
+ }
912
+
913
+ define i1 @ashr_ne_0_multiuse (i8 %x ) {
914
+ ; CHECK-LABEL: @ashr_ne_0_multiuse(
915
+ ; CHECK-NEXT: [[S:%.*]] = ashr i8 [[X:%.*]], 2
916
+ ; CHECK-NEXT: call void @use(i8 [[S]])
917
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[S]], 0
918
+ ; CHECK-NEXT: ret i1 [[C]]
919
+ ;
920
+ %s = ashr i8 %x , 2
921
+ call void @use (i8 %s )
922
+ %c = icmp ne i8 %s , 0
923
+ ret i1 %c
924
+ }
925
+
926
+ define i1 @lshr_exact_eq_0_multiuse (i8 %x ) {
927
+ ; CHECK-LABEL: @lshr_exact_eq_0_multiuse(
928
+ ; CHECK-NEXT: [[S:%.*]] = lshr exact i8 [[X:%.*]], 2
929
+ ; CHECK-NEXT: call void @use(i8 [[S]])
930
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[X]], 0
931
+ ; CHECK-NEXT: ret i1 [[C]]
932
+ ;
933
+ %s = lshr exact i8 %x , 2
934
+ call void @use (i8 %s )
935
+ %c = icmp eq i8 %s , 0
936
+ ret i1 %c
937
+ }
938
+
939
+ define i1 @lshr_exact_ne_0_multiuse (i8 %x ) {
940
+ ; CHECK-LABEL: @lshr_exact_ne_0_multiuse(
941
+ ; CHECK-NEXT: [[S:%.*]] = lshr exact i8 [[X:%.*]], 2
942
+ ; CHECK-NEXT: call void @use(i8 [[S]])
943
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[X]], 0
944
+ ; CHECK-NEXT: ret i1 [[C]]
945
+ ;
946
+ %s = lshr exact i8 %x , 2
947
+ call void @use (i8 %s )
948
+ %c = icmp ne i8 %s , 0
949
+ ret i1 %c
950
+ }
951
+
952
+ define i1 @ashr_exact_eq_0_multiuse (i8 %x ) {
953
+ ; CHECK-LABEL: @ashr_exact_eq_0_multiuse(
954
+ ; CHECK-NEXT: [[S:%.*]] = ashr exact i8 [[X:%.*]], 2
955
+ ; CHECK-NEXT: call void @use(i8 [[S]])
956
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[X]], 0
957
+ ; CHECK-NEXT: ret i1 [[C]]
958
+ ;
959
+ %s = ashr exact i8 %x , 2
960
+ call void @use (i8 %s )
961
+ %c = icmp eq i8 %s , 0
962
+ ret i1 %c
963
+ }
964
+
965
+ define i1 @ashr_exact_ne_0_multiuse (i8 %x ) {
966
+ ; CHECK-LABEL: @ashr_exact_ne_0_multiuse(
967
+ ; CHECK-NEXT: [[S:%.*]] = ashr exact i8 [[X:%.*]], 2
968
+ ; CHECK-NEXT: call void @use(i8 [[S]])
969
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[X]], 0
970
+ ; CHECK-NEXT: ret i1 [[C]]
971
+ ;
972
+ %s = ashr exact i8 %x , 2
973
+ call void @use (i8 %s )
974
+ %c = icmp ne i8 %s , 0
975
+ ret i1 %c
976
+ }
977
+
978
+ declare void @use (i8 )
0 commit comments