Skip to content

Commit

Permalink
[Instcombine] Precommit tests for D143373; NFC
Browse files Browse the repository at this point in the history
  • Loading branch information
bcl5980 committed Feb 7, 2023
1 parent 5206e66 commit 1c345c1
Showing 1 changed file with 76 additions and 48 deletions.
124 changes: 76 additions & 48 deletions llvm/test/Transforms/InstCombine/icmp-range.ll
Expand Up @@ -632,29 +632,29 @@ define i1 @ashr_uge_sub(i8 %b, i8 %x, i8 %y) {
define i1 @zext_sext_add_icmp_eq_minus1(i1 %a, i1 %b) {
; CHECK-LABEL: @zext_sext_add_icmp_eq_minus1(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext i1 [[A:%.*]] to i8
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[ADD]], -1
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i1 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp eq i8 %add, -1
ret i1 %r
}

define i1 @zext_sext_add_icmp_ne_minus1(i1 %a, i1 %b) {
; CHECK-LABEL: @zext_sext_add_icmp_ne_minus1(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext i1 [[A:%.*]] to i8
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[ADD]], -1
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i1 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp ne i8 %add, -1
ret i1 %r
}
Expand All @@ -666,23 +666,38 @@ define i1 @zext_sext_add_icmp_sgt_minus1(i1 %a, i1 %b) {
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i1 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp sgt i8 %add, -1
ret i1 %r
}

define i1 @zext_sext_add_icmp_ult_minus1(i1 %a, i1 %b) {
; CHECK-LABEL: @zext_sext_add_icmp_ult_minus1(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext i1 [[A:%.*]] to i8
; CHECK-NEXT: [[SEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[ADD]], -1
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i1 %a to i8
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp ult i8 %add, -1
ret i1 %r
}

define i1 @zext_sext_add_icmp_sgt_0(i1 %a, i1 %b) {
; CHECK-LABEL: @zext_sext_add_icmp_sgt_0(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext i1 [[A:%.*]] to i8
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp sgt i8 [[ADD]], 0
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i1 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp sgt i8 %add, 0
ret i1 %r
}
Expand All @@ -694,99 +709,112 @@ define i1 @zext_sext_add_icmp_slt_0(i1 %a, i1 %b) {
; CHECK-NEXT: ret i1 [[TMP2]]
;
%zext.a = zext i1 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp slt i8 %add, 0
ret i1 %r
}

define i1 @zext_sext_add_icmp_eq_1(i1 %a, i1 %b) {
; CHECK-LABEL: @zext_sext_add_icmp_eq_1(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext i1 [[A:%.*]] to i8
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[ADD]], 1
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i1 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp eq i8 %add, 1
ret i1 %r
}

define i1 @zext_sext_add_icmp_ne_1(i1 %a, i1 %b) {
; CHECK-LABEL: @zext_sext_add_icmp_ne_1(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext i1 [[A:%.*]] to i8
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[ADD]], 1
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i1 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp ne i8 %add, 1
ret i1 %r
}

define i1 @zext_sext_add_icmp_slt_1(i1 %a, i1 %b) {
; CHECK-LABEL: @zext_sext_add_icmp_slt_1(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext i1 [[A:%.*]] to i8
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[ADD]], 1
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i1 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp slt i8 %add, 1
ret i1 %r
}

define i1 @zext_sext_add_icmp_ugt_1(i1 %a, i1 %b) {
; CHECK-LABEL: @zext_sext_add_icmp_ugt_1(
; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[A:%.*]], true
; CHECK-NEXT: [[TMP2:%.*]] = and i1 [[TMP1]], [[B:%.*]]
; CHECK-NEXT: ret i1 [[TMP2]]
;
%zext.a = zext i1 %a to i8
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp ugt i8 %add, 1
ret i1 %r
}

define <2 x i1> @vector_zext_sext_add_icmp_slt_1(<2 x i1> %a, <2 x i1> %b) {
; CHECK-LABEL: @vector_zext_sext_add_icmp_slt_1(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext <2 x i1> [[A:%.*]] to <2 x i8>
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext <2 x i1> [[B:%.*]] to <2 x i8>
; CHECK-NEXT: [[ADD:%.*]] = add nsw <2 x i8> [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext <2 x i1> [[B:%.*]] to <2 x i8>
; CHECK-NEXT: [[ADD:%.*]] = add nsw <2 x i8> [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp slt <2 x i8> [[ADD]], <i8 1, i8 1>
; CHECK-NEXT: ret <2 x i1> [[R]]
;
%zext.a = zext <2 x i1> %a to <2 x i8>
%zext.b = sext <2 x i1> %b to <2 x i8>
%add = add <2 x i8> %zext.a, %zext.b
%sext.b = sext <2 x i1> %b to <2 x i8>
%add = add <2 x i8> %zext.a, %sext.b
%r = icmp slt <2 x i8> %add, <i8 1, i8 1>
ret <2 x i1> %r
}

define <2 x i1> @vector_zext_sext_add_icmp_slt_1_poison(<2 x i1> %a, <2 x i1> %b) {
; CHECK-LABEL: @vector_zext_sext_add_icmp_slt_1_poison(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext <2 x i1> [[A:%.*]] to <2 x i8>
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext <2 x i1> [[B:%.*]] to <2 x i8>
; CHECK-NEXT: [[ADD:%.*]] = add nsw <2 x i8> [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext <2 x i1> [[B:%.*]] to <2 x i8>
; CHECK-NEXT: [[ADD:%.*]] = add nsw <2 x i8> [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp slt <2 x i8> [[ADD]], <i8 1, i8 poison>
; CHECK-NEXT: ret <2 x i1> [[R]]
;
%zext.a = zext <2 x i1> %a to <2 x i8>
%zext.b = sext <2 x i1> %b to <2 x i8>
%add = add <2 x i8> %zext.a, %zext.b
%sext.b = sext <2 x i1> %b to <2 x i8>
%add = add <2 x i8> %zext.a, %sext.b
%r = icmp slt <2 x i8> %add, <i8 1, i8 poison>
ret <2 x i1> %r
}

define i1 @zext_sext_add_icmp_slt_1_no_oneuse(i1 %a, i1 %b) {
; CHECK-LABEL: @zext_sext_add_icmp_slt_1_no_oneuse(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext i1 [[A:%.*]] to i8
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: call void @use(i8 [[ADD]])
; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[ADD]], 1
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i1 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
call void @use(i8 %add)
%r = icmp slt i8 %add, 1
ret i1 %r
Expand All @@ -795,29 +823,29 @@ define i1 @zext_sext_add_icmp_slt_1_no_oneuse(i1 %a, i1 %b) {
define i1 @zext_sext_add_icmp_slt_1_rhs_not_const(i1 %a, i1 %b, i8 %c) {
; CHECK-LABEL: @zext_sext_add_icmp_slt_1_rhs_not_const(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext i1 [[A:%.*]] to i8
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[ADD]], [[C:%.*]]
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i1 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp slt i8 %add, %c
ret i1 %r
}

define i1 @zext_sext_add_icmp_slt_1_type_not_i1(i2 %a, i1 %b) {
; CHECK-LABEL: @zext_sext_add_icmp_slt_1_type_not_i1(
; CHECK-NEXT: [[ZEXT_A:%.*]] = zext i2 [[A:%.*]] to i8
; CHECK-NEXT: [[ZEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[ZEXT_B]]
; CHECK-NEXT: [[SEXT_B:%.*]] = sext i1 [[B:%.*]] to i8
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[ZEXT_A]], [[SEXT_B]]
; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[ADD]], 1
; CHECK-NEXT: ret i1 [[R]]
;
%zext.a = zext i2 %a to i8
%zext.b = sext i1 %b to i8
%add = add i8 %zext.a, %zext.b
%sext.b = sext i1 %b to i8
%add = add i8 %zext.a, %sext.b
%r = icmp slt i8 %add, 1
ret i1 %r
}
Expand Down

0 comments on commit 1c345c1

Please sign in to comment.