Skip to content

Commit

Permalink
[InstCombine] Precommit tests for D139253; NFC
Browse files Browse the repository at this point in the history
  • Loading branch information
bcl5980 committed Dec 5, 2022
1 parent 92f8a6e commit b966fb0
Showing 1 changed file with 174 additions and 3 deletions.
177 changes: 174 additions & 3 deletions llvm/test/Transforms/InstCombine/select-cmp.ll
Expand Up @@ -122,10 +122,112 @@ define i1 @icmp_common_one_use_1(i1 %c, i8 %x, i8 %y, i8 %z) {
ret i1 %r
}

; negative test: pred is not eq/ne
define i1 @icmp_slt_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_slt_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i6 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i6 [[X]], [[Z:%.*]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp slt i6 %x, %y
%cmp2 = icmp slt i6 %x, %z
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

define i1 @icmp_sgt_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_sgt_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i6 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i6 [[X]], [[Z:%.*]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp sgt i6 %x, %y
%cmp2 = icmp sgt i6 %x, %z
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

define i1 @icmp_sle_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_sle_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i6 [[Y:%.*]], [[X:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i6 [[Z:%.*]], [[X]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp sle i6 %y, %x
%cmp2 = icmp sle i6 %z, %x
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

define i1 @icmp_sge_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_sge_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i6 [[Y:%.*]], [[X:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i6 [[Z:%.*]], [[X]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp sge i6 %y, %x
%cmp2 = icmp sge i6 %z, %x
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

define i1 @icmp_slt_sgt_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_slt_sgt_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i6 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i6 [[Z:%.*]], [[X]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp slt i6 %x, %y
%cmp2 = icmp sgt i6 %z, %x
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

define i1 @icmp_sle_sge_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_sle_sge_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i6 [[Y:%.*]], [[X:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i6 [[X]], [[Z:%.*]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp sle i6 %y, %x
%cmp2 = icmp sge i6 %x, %z
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

define i1 @icmp_ult_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_ult_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i6 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i6 [[X]], [[Z:%.*]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp ult i6 %x, %y
%cmp2 = icmp ult i6 %x, %z
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

define i1 @icmp_ule_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_ule_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i6 [[Y:%.*]], [[X:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i6 [[Z:%.*]], [[X]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp ule i6 %y, %x
%cmp2 = icmp ule i6 %z, %x
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

define i1 @icmp_common_pred_not_eqne(i1 %c, i8 %x, i8 %y, i8 %z) {
; CHECK-LABEL: @icmp_common_pred_not_eqne(
define i1 @icmp_ugt_common(i1 %c, i8 %x, i8 %y, i8 %z) {
; CHECK-LABEL: @icmp_ugt_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 [[Z:%.*]], [[X]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
Expand All @@ -137,6 +239,45 @@ define i1 @icmp_common_pred_not_eqne(i1 %c, i8 %x, i8 %y, i8 %z) {
ret i1 %r
}

define i1 @icmp_uge_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_uge_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i6 [[Y:%.*]], [[X:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i6 [[Z:%.*]], [[X]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp uge i6 %y, %x
%cmp2 = icmp uge i6 %z, %x
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

define i1 @icmp_ult_ugt_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_ult_ugt_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i6 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i6 [[Z:%.*]], [[X]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp ult i6 %x, %y
%cmp2 = icmp ugt i6 %z, %x
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

define i1 @icmp_ule_uge_common(i1 %c, i6 %x, i6 %y, i6 %z) {
; CHECK-LABEL: @icmp_ule_uge_common(
; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i6 [[Y:%.*]], [[X:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i6 [[X]], [[Z:%.*]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp ule i6 %y, %x
%cmp2 = icmp uge i6 %x, %z
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

; negative test: pred is not the same

define i1 @icmp_common_pred_different(i1 %c, i8 %x, i8 %y, i8 %z) {
Expand All @@ -152,6 +293,36 @@ define i1 @icmp_common_pred_different(i1 %c, i8 %x, i8 %y, i8 %z) {
ret i1 %r
}

; negative test: two pred is not swap

define i1 @icmp_common_pred_not_swap(i1 %c, i8 %x, i8 %y, i8 %z) {
; CHECK-LABEL: @icmp_common_pred_not_swap(
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 [[Z:%.*]], [[X]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp slt i8 %y, %x
%cmp2 = icmp sle i8 %z, %x
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

; negative test: not commute pred

define i1 @icmp_common_pred_not_commute_pred(i1 %c, i8 %x, i8 %y, i8 %z) {
; CHECK-LABEL: @icmp_common_pred_not_commute_pred(
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 [[Z:%.*]], [[X]]
; CHECK-NEXT: [[R:%.*]] = select i1 [[C:%.*]], i1 [[CMP1]], i1 [[CMP2]]
; CHECK-NEXT: ret i1 [[R]]
;
%cmp1 = icmp slt i8 %y, %x
%cmp2 = icmp sgt i8 %z, %x
%r = select i1 %c, i1 %cmp1, i1 %cmp2
ret i1 %r
}

; negative test: both icmp is not one-use

define i1 @icmp_common_one_use_0(i1 %c, i8 %x, i8 %y, i8 %z) {
Expand Down

0 comments on commit b966fb0

Please sign in to comment.