Skip to content

Commit 0bc314f

Browse files
[InstCombine][NFC] Add baseline tests for folds icmp(X) ? f(X) : C
Differential revision: https://reviews.llvm.org/D123430 Test plan: make check-all
1 parent 35be4a7 commit 0bc314f

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

llvm/test/Transforms/InstCombine/select-binop-cmp.ll

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,71 @@ define i32 @select_or_icmp_bad(i32 %x, i32 %y, i32 %z) {
646646
ret i32 %C
647647
}
648648

649+
define i32 @select_lshr_icmp_const(i32 %x) {
650+
; CHECK-LABEL: @select_lshr_icmp_const(
651+
; CHECK-NEXT: [[A:%.*]] = icmp ugt i32 %x, 31
652+
; CHECK-NEXT: [[B:%.*]] = lshr i32 %x, 5
653+
; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], i32 [[B]], i32 0
654+
; CHECK-NEXT: ret i32 [[C]]
655+
;
656+
%A = icmp ugt i32 %x, 31
657+
%B = lshr i32 %x, 5
658+
%C = select i1 %A, i32 %B, i32 0
659+
ret i32 %C
660+
}
661+
662+
define i32 @select_lshr_icmp_const_reordered(i32 %x) {
663+
; CHECK-LABEL: @select_lshr_icmp_const_reordered(
664+
; CHECK-NEXT: [[A:%.*]] = icmp ult i32 %x, 32
665+
; CHECK-NEXT: [[B:%.*]] = lshr i32 %x, 5
666+
; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], i32 0, i32 [[B]]
667+
; CHECK-NEXT: ret i32 [[C]]
668+
;
669+
%A = icmp ult i32 %x, 32
670+
%B = lshr i32 %x, 5
671+
%C = select i1 %A, i32 0, i32 %B
672+
ret i32 %C
673+
}
674+
675+
define i32 @select_exact_lshr_icmp_const(i32 %x) {
676+
; CHECK-LABEL: @select_exact_lshr_icmp_const(
677+
; CHECK-NEXT: [[A:%.*]] = icmp ugt i32 %x, 31
678+
; CHECK-NEXT: [[B:%.*]] = lshr exact i32 %x, 5
679+
; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], i32 [[B]], i32 0
680+
; CHECK-NEXT: ret i32 [[C]]
681+
;
682+
%A = icmp ugt i32 %x, 31
683+
%B = lshr exact i32 %x, 5
684+
%C = select i1 %A, i32 %B, i32 0
685+
ret i32 %C
686+
}
687+
688+
define i32 @select_lshr_icmp_const_large_exact_range(i32 %x) {
689+
; CHECK-LABEL: @select_lshr_icmp_const_large_exact_range(
690+
; CHECK-NEXT: [[A:%.*]] = icmp ugt i32 %x, 63
691+
; CHECK-NEXT: [[B:%.*]] = lshr i32 %x, 5
692+
; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], i32 [[B]], i32 0
693+
; CHECK-NEXT: ret i32 [[C]]
694+
;
695+
%A = icmp ugt i32 %x, 63
696+
%B = lshr i32 %x, 5
697+
%C = select i1 %A, i32 %B, i32 0
698+
ret i32 %C
699+
}
700+
701+
define i32 @select_lshr_icmp_const_different_values(i32 %x, i32 %y) {
702+
; CHECK-LABEL: @select_lshr_icmp_const_different_values(
703+
; CHECK-NEXT: [[A:%.*]] = icmp ugt i32 %x, 31
704+
; CHECK-NEXT: [[B:%.*]] = lshr i32 %y, 5
705+
; CHECK-NEXT: [[C:%.*]] = select i1 [[A]], i32 [[B]], i32 0
706+
; CHECK-NEXT: ret i32 [[C]]
707+
;
708+
%A = icmp ugt i32 %x, 31
709+
%B = lshr i32 %y, 5
710+
%C = select i1 %A, i32 %B, i32 0
711+
ret i32 %C
712+
}
713+
649714
; Invalid identity constant for FP op
650715
define float @select_fadd_fcmp_bad(float %x, float %y, float %z) {
651716
; CHECK-LABEL: @select_fadd_fcmp_bad(

0 commit comments

Comments
 (0)