Skip to content

Commit 0afe2bd

Browse files
committed
[InstCombine] Test trunc to i1 in foldSelectICmpAnd. (NFC)
1 parent beaca53 commit 0afe2bd

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

llvm/test/Transforms/InstCombine/select-icmp-and.ll

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -809,3 +809,97 @@ define i8 @select_bittest_to_xor(i8 %x) {
809809
%masksel = select i1 %cmp, i8 %or, i8 %and
810810
ret i8 %masksel
811811
}
812+
813+
define i8 @select_trunc_bittest_to_sub(i8 %x) {
814+
; CHECK-LABEL: @select_trunc_bittest_to_sub(
815+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X:%.*]] to i1
816+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[TRUNC]], i8 3, i8 4
817+
; CHECK-NEXT: ret i8 [[RET]]
818+
;
819+
%trunc = trunc i8 %x to i1
820+
%ret = select i1 %trunc, i8 3, i8 4
821+
ret i8 %ret
822+
}
823+
824+
define i8 @select_trunc_nuw_bittest_to_sub(i8 %x) {
825+
; CHECK-LABEL: @select_trunc_nuw_bittest_to_sub(
826+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i8 [[X:%.*]] to i1
827+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[TRUNC]], i8 3, i8 4
828+
; CHECK-NEXT: ret i8 [[RET]]
829+
;
830+
%trunc = trunc nuw i8 %x to i1
831+
%ret = select i1 %trunc, i8 3, i8 4
832+
ret i8 %ret
833+
}
834+
835+
define i8 @select_trunc_nsw_bittest_to_sub(i8 %x) {
836+
; CHECK-LABEL: @select_trunc_nsw_bittest_to_sub(
837+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nsw i8 [[X:%.*]] to i1
838+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[TRUNC]], i8 3, i8 4
839+
; CHECK-NEXT: ret i8 [[RET]]
840+
;
841+
%trunc = trunc nsw i8 %x to i1
842+
%ret = select i1 %trunc, i8 3, i8 4
843+
ret i8 %ret
844+
}
845+
846+
define i8 @select_trunc_nuw_bittest_to_sub_extra_use(i8 %x) {
847+
; CHECK-LABEL: @select_trunc_nuw_bittest_to_sub_extra_use(
848+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i8 [[X:%.*]] to i1
849+
; CHECK-NEXT: call void @use1(i1 [[TRUNC]])
850+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[TRUNC]], i8 3, i8 4
851+
; CHECK-NEXT: ret i8 [[RET]]
852+
;
853+
%trunc = trunc nuw i8 %x to i1
854+
call void @use1(i1 %trunc)
855+
%ret = select i1 %trunc, i8 3, i8 4
856+
ret i8 %ret
857+
}
858+
859+
define i8 @neg_select_trunc_bittest_to_sub_extra_use(i8 %x) {
860+
; CHECK-LABEL: @neg_select_trunc_bittest_to_sub_extra_use(
861+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X:%.*]] to i1
862+
; CHECK-NEXT: call void @use1(i1 [[TRUNC]])
863+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[TRUNC]], i8 3, i8 4
864+
; CHECK-NEXT: ret i8 [[RET]]
865+
;
866+
%trunc = trunc i8 %x to i1
867+
call void @use1(i1 %trunc)
868+
%ret = select i1 %trunc, i8 3, i8 4
869+
ret i8 %ret
870+
}
871+
872+
define i8 @select_trunc_nuw_bittest_to_shl_not(i8 %x) {
873+
; CHECK-LABEL: @select_trunc_nuw_bittest_to_shl_not(
874+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i8 [[X:%.*]] to i1
875+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[TRUNC]], i8 0, i8 4
876+
; CHECK-NEXT: ret i8 [[RET]]
877+
;
878+
%trunc = trunc nuw i8 %x to i1
879+
%ret = select i1 %trunc, i8 0, i8 4
880+
ret i8 %ret
881+
}
882+
883+
define i8 @select_trunc_bittest_to_shl(i8 %x) {
884+
; CHECK-LABEL: @select_trunc_bittest_to_shl(
885+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X:%.*]] to i1
886+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[TRUNC]], i8 4, i8 0
887+
; CHECK-NEXT: ret i8 [[RET]]
888+
;
889+
%trunc = trunc i8 %x to i1
890+
%ret = select i1 %trunc, i8 4, i8 0
891+
ret i8 %ret
892+
}
893+
894+
define i8 @neg_select_trunc_bittest_to_shl_extra_use(i8 %x) {
895+
; CHECK-LABEL: @neg_select_trunc_bittest_to_shl_extra_use(
896+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X:%.*]] to i1
897+
; CHECK-NEXT: call void @use1(i1 [[TRUNC]])
898+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[TRUNC]], i8 4, i8 0
899+
; CHECK-NEXT: ret i8 [[RET]]
900+
;
901+
%trunc = trunc i8 %x to i1
902+
call void @use1(i1 %trunc)
903+
%ret = select i1 %trunc, i8 4, i8 0
904+
ret i8 %ret
905+
}

0 commit comments

Comments
 (0)