Skip to content

Commit 3d385cc

Browse files
committed
[InstCombine] Add tests for multiuse shr eq zero (NFC)
The exact case is folded, the inexact one is not.
1 parent abacaef commit 3d385cc

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

llvm/test/Transforms/InstCombine/icmp-shr.ll

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,3 +870,109 @@ define i1 @ashr_ult_15(i4 %x) {
870870
%r = icmp ult i4 %s, 15 ; 0b1111
871871
ret i1 %r
872872
}
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

Comments
 (0)