16 changes: 0 additions & 16 deletions llvm/test/Transforms/ConstraintElimination/mul-nsw.ll
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,12 @@ define void @slt_mul_nsw_3_known_positive_1(i8 %start, i8 %high) {
; CHECK-NEXT: [[AND:%.*]] = and i1 [[C_1]], [[C_2]]
; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: [[T_0:%.*]] = icmp slt i8 [[START]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_1:%.*]] = mul nsw i8 [[START]], 1
; CHECK-NEXT: [[T_1:%.*]] = icmp slt i8 [[START_1]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_2:%.*]] = mul nsw i8 [[START]], 2
; CHECK-NEXT: [[T_2:%.*]] = icmp slt i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_3:%.*]] = mul nsw i8 [[START]], 3
; CHECK-NEXT: [[T_3:%.*]] = icmp slt i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_4:%.*]] = mul nsw i8 [[START]], 4
; CHECK-NEXT: [[C_3:%.*]] = icmp slt i8 [[START_4]], [[HIGH]]
Expand Down Expand Up @@ -335,16 +331,12 @@ define void @slt_mul_nsw_neg_3_known_negative_1(i8 %start, i8 %high) {
; CHECK-NEXT: [[AND:%.*]] = and i1 [[C_1]], [[C_2]]
; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: [[T_0:%.*]] = icmp slt i8 [[START]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_1:%.*]] = mul nsw i8 [[START]], -1
; CHECK-NEXT: [[T_1:%.*]] = icmp slt i8 [[START_1]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_2:%.*]] = mul nsw i8 [[START]], -2
; CHECK-NEXT: [[T_2:%.*]] = icmp slt i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_3:%.*]] = mul nsw i8 [[START]], -3
; CHECK-NEXT: [[T_3:%.*]] = icmp slt i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_4:%.*]] = mul nsw i8 [[START]], -4
; CHECK-NEXT: [[C_3:%.*]] = icmp slt i8 [[START_4]], [[HIGH]]
Expand Down Expand Up @@ -454,10 +446,8 @@ define void @slt_mul_nsw_3_known_negative_1(i8 %start, i8 %high) {
; CHECK-NEXT: [[C_5:%.*]] = icmp slt i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 [[C_5]])
; CHECK-NEXT: [[START_3:%.*]] = mul nsw i8 [[START]], 3
; CHECK-NEXT: [[T_0:%.*]] = icmp slt i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_4:%.*]] = mul nsw i8 [[START]], 4
; CHECK-NEXT: [[T_1:%.*]] = icmp slt i8 [[START_4]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: ret void
; CHECK: else:
Expand Down Expand Up @@ -564,10 +554,8 @@ define void @slt_mul_nsw_neg_3_known_positive_1(i8 %start, i8 %high) {
; CHECK-NEXT: [[C_5:%.*]] = icmp slt i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 [[C_5]])
; CHECK-NEXT: [[START_3:%.*]] = mul nsw i8 [[START]], -3
; CHECK-NEXT: [[T_0:%.*]] = icmp slt i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_4:%.*]] = mul nsw i8 [[START]], -4
; CHECK-NEXT: [[T_1:%.*]] = icmp slt i8 [[START_4]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: ret void
; CHECK: else:
Expand Down Expand Up @@ -665,16 +653,12 @@ define void @slt_mul_nsw_3_known_nonnegative_1(i8 %start, i8 %high) {
; CHECK-NEXT: [[AND:%.*]] = and i1 [[C_1]], [[C_2]]
; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: [[T_0:%.*]] = icmp slt i8 [[START]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_1:%.*]] = mul nsw i8 [[START]], 1
; CHECK-NEXT: [[T_1:%.*]] = icmp slt i8 [[START_1]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_2:%.*]] = mul nsw i8 [[START]], 2
; CHECK-NEXT: [[T_2:%.*]] = icmp slt i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_3:%.*]] = mul nsw i8 [[START]], 3
; CHECK-NEXT: [[T_3:%.*]] = icmp slt i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_4:%.*]] = mul nsw i8 [[START]], 4
; CHECK-NEXT: [[C_3:%.*]] = icmp slt i8 [[START_4]], [[HIGH]]
Expand Down
13 changes: 0 additions & 13 deletions llvm/test/Transforms/ConstraintElimination/mul.ll
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ define i1 @test_mul_const_nuw_unsigned_3(i8 %start, i8 %high) {
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
; CHECK-NEXT: [[START_MUL_2:%.*]] = mul nuw i8 [[START]], 2
; CHECK-NEXT: [[START_ADD_1:%.*]] = add nuw i8 [[START]], [[START]]
; CHECK-NEXT: [[T:%.*]] = icmp ule i8 [[START_ADD_1]], [[START_MUL_2]]
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -72,7 +71,6 @@ define i1 @test_mul_const_nuw_unsigned_4(i8 %start, i8 %high) {
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
; CHECK-NEXT: [[START_MUL_2:%.*]] = mul nuw i8 [[START]], 2
; CHECK-NEXT: [[START_ADD_1:%.*]] = add nuw i8 [[START]], [[START]]
; CHECK-NEXT: [[F:%.*]] = icmp ult i8 [[START_ADD_1]], [[START_MUL_2]]
; CHECK-NEXT: ret i1 false
;
entry:
Expand All @@ -95,7 +93,6 @@ define i1 @test_mul_const_nuw_unsigned_5(i8 %start, i8 %high) {
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
; CHECK-NEXT: [[START_ADD_1:%.*]] = add nuw i8 [[START]], [[START]]
; CHECK-NEXT: [[START_ADD_2:%.*]] = add nuw i8 [[START_ADD_1]], [[START_ADD_1]]
; CHECK-NEXT: [[T_4:%.*]] = icmp ule i8 [[START_ADD_2]], [[START_MUL_4]]
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -117,7 +114,6 @@ define i1 @test_mul_const_nuw_unsigned_6(i8 %start, i8 %high) {
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
; CHECK-NEXT: [[START_ADD_1:%.*]] = add nuw i8 [[START]], [[START]]
; CHECK-NEXT: [[START_ADD_2:%.*]] = add nuw i8 [[START_ADD_1]], [[START_ADD_1]]
; CHECK-NEXT: [[F_2:%.*]] = icmp ult i8 [[START_ADD_2]], [[START_MUL_4]]
; CHECK-NEXT: ret i1 false
;
entry:
Expand All @@ -141,7 +137,6 @@ define i1 @test_mul_const_nuw_unsigned_7(i8 %start, i8 %high) {
; CHECK-NEXT: [[START_ADD_1:%.*]] = add nuw i8 [[START]], [[START]]
; CHECK-NEXT: [[START_ADD_2:%.*]] = add nuw i8 [[START_ADD_1]], [[START_ADD_1]]
; CHECK-NEXT: [[START_ADD_2_1:%.*]] = add nuw i8 [[START_ADD_2]], 1
; CHECK-NEXT: [[F_3:%.*]] = icmp ule i8 [[START_ADD_2_1]], [[START_MUL_4]]
; CHECK-NEXT: ret i1 false
;
entry:
Expand Down Expand Up @@ -220,7 +215,6 @@ define i1 @test_mul_const_nuw_unsigned_10(i8 %start, i8 %high) {
; CHECK-NEXT: [[C_0:%.*]] = icmp ult i8 [[START]], [[START_MUL_5]]
; CHECK-NEXT: call void @llvm.assume(i1 [[C_0]])
; CHECK-NEXT: [[START_MUL_3:%.*]] = mul nuw i8 [[START]], 3
; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[START_MUL_3]], [[START_MUL_5]]
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -240,7 +234,6 @@ define i1 @test_mul_const_nuw_unsigned_11(i8 %start, i8 %high) {
; CHECK-NEXT: [[C_0:%.*]] = icmp ult i8 [[START]], [[START_MUL_5]]
; CHECK-NEXT: call void @llvm.assume(i1 [[C_0]])
; CHECK-NEXT: [[START_MUL_3:%.*]] = mul nuw i8 [[START]], 3
; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[START_MUL_5]], [[START_MUL_3]]
; CHECK-NEXT: ret i1 false
;
entry:
Expand All @@ -260,7 +253,6 @@ define i1 @test_mul_const_nuw_unsigned_12(i8 %start) {
; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[START]], [[START_MUL_3]]
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
; CHECK-NEXT: [[START_MUL_5:%.*]] = mul nuw i8 [[START]], 5
; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[START_MUL_3]], [[START_MUL_5]]
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -280,7 +272,6 @@ define i1 @test_mul_const_nuw_unsigned_13(i8 %start) {
; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[START]], [[START_MUL_3]]
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
; CHECK-NEXT: [[START_MUL_5:%.*]] = mul nuw i8 [[START]], 5
; CHECK-NEXT: [[F_1:%.*]] = icmp ule i8 [[START_MUL_5]], [[START_MUL_3]]
; CHECK-NEXT: ret i1 false
;
entry:
Expand Down Expand Up @@ -424,7 +415,6 @@ define i1 @test_mul_add_const_nuw_unsigned_3(i8 %start, i8 %high) {
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
; CHECK-NEXT: [[START_ADD_1:%.*]] = add nuw i8 [[START]], [[START]]
; CHECK-NEXT: [[START_ADD_2:%.*]] = add nuw i8 [[START_ADD_1]], [[START_ADD_1]]
; CHECK-NEXT: [[T_3:%.*]] = icmp ule i8 [[START_ADD_2]], [[START_MUL_4]]
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -449,7 +439,6 @@ define i1 @test_mul_add_const_nuw_unsigned_4(i8 %start, i8 %high) {
; CHECK-NEXT: [[START_MUL_2:%.*]] = mul nuw i8 [[START]], 2
; CHECK-NEXT: [[START_ADD_1:%.*]] = add nuw i8 [[START]], [[START]]
; CHECK-NEXT: [[START_ADD_2:%.*]] = add nuw i8 [[START_ADD_1]], [[START_ADD_1]]
; CHECK-NEXT: [[T_4:%.*]] = icmp ult i8 [[START_ADD_2]], [[START_MUL_4]]
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -475,7 +464,6 @@ define i1 @test_mul_add_const_nuw_unsigned_5(i8 %start, i8 %high) {
; CHECK-NEXT: [[START_ADD_1:%.*]] = add nuw i8 [[START]], [[START]]
; CHECK-NEXT: [[START_ADD_2:%.*]] = add nuw i8 [[START_ADD_1]], [[START_ADD_1]]
; CHECK-NEXT: [[START_ADD_2_12:%.*]] = add nuw i8 [[START_ADD_2]], 12
; CHECK-NEXT: [[T_5:%.*]] = icmp ule i8 [[START_ADD_2_12]], [[START_MUL_4]]
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -501,7 +489,6 @@ define i1 @test_mul_add_const_nuw_unsigned_6(i8 %start, i8 %high) {
; CHECK-NEXT: [[START_ADD_1:%.*]] = add nuw i8 [[START]], [[START]]
; CHECK-NEXT: [[START_ADD_2:%.*]] = add nuw i8 [[START_ADD_1]], [[START_ADD_1]]
; CHECK-NEXT: [[START_ADD_2_13:%.*]] = add nuw i8 [[START_ADD_2]], 13
; CHECK-NEXT: [[F_1:%.*]] = icmp ule i8 [[START_ADD_2_13]], [[START_MUL_4]]
; CHECK-NEXT: ret i1 false
;
entry:
Expand Down
23 changes: 0 additions & 23 deletions llvm/test/Transforms/ConstraintElimination/ne.ll
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,11 @@ define i1 @test_eq_ne_0(i8 %a, i8 %b) {
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[A:%.*]], 0
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: [[F_1:%.*]] = icmp ne i8 [[A]], 0
; CHECK-NEXT: [[C_1:%.*]] = icmp ne i8 [[A]], 1
; CHECK-NEXT: [[C_2:%.*]] = icmp ne i8 [[A]], [[B:%.*]]
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 false, true
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_2]]
; CHECK-NEXT: ret i1 [[RES_2]]
; CHECK: else:
; CHECK-NEXT: [[T_1:%.*]] = icmp ne i8 [[A]], 0
; CHECK-NEXT: [[C_3:%.*]] = icmp ne i8 [[A]], 1
; CHECK-NEXT: [[C_4:%.*]] = icmp ne i8 [[A]], [[B]]
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 true, [[C_3]]
Expand Down Expand Up @@ -50,39 +47,29 @@ define i1 @test_ne_eq_0(i8 %a, i8 %b) {
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[A:%.*]], 0
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: [[T_1:%.*]] = icmp ne i8 [[A]], 0
; CHECK-NEXT: [[C_1:%.*]] = icmp ne i8 [[A]], 1
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, [[C_1]]
; CHECK-NEXT: [[C_2:%.*]] = icmp ne i8 [[A]], [[B:%.*]]
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_2]]
; CHECK-NEXT: [[C_3:%.*]] = icmp eq i8 [[A]], [[B]]
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[RES_2]], [[C_3]]
; CHECK-NEXT: [[C_4:%.*]] = icmp eq i8 [[A]], 0
; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], false
; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i8 [[A]], 0
; CHECK-NEXT: [[RES_5:%.*]] = xor i1 [[RES_4]], true
; CHECK-NEXT: [[T_3:%.*]] = icmp uge i8 [[A]], 1
; CHECK-NEXT: [[RES_6:%.*]] = xor i1 [[RES_5]], true
; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[A]], 1
; CHECK-NEXT: [[RES_7:%.*]] = xor i1 [[RES_6]], [[C_5]]
; CHECK-NEXT: [[C_6:%.*]] = icmp sgt i8 [[A]], 0
; CHECK-NEXT: [[RES_8:%.*]] = xor i1 [[RES_7]], [[C_6]]
; CHECK-NEXT: ret i1 [[RES_8]]
; CHECK: else:
; CHECK-NEXT: [[F_1:%.*]] = icmp ne i8 [[A]], 0
; CHECK-NEXT: [[C_7:%.*]] = icmp ne i8 [[A]], 1
; CHECK-NEXT: [[RES_9:%.*]] = xor i1 false, true
; CHECK-NEXT: [[C_8:%.*]] = icmp ne i8 [[A]], [[B]]
; CHECK-NEXT: [[RES_10:%.*]] = xor i1 [[RES_9]], [[C_8]]
; CHECK-NEXT: [[C_9:%.*]] = icmp eq i8 [[A]], [[B]]
; CHECK-NEXT: [[RES_11:%.*]] = xor i1 [[RES_10]], [[C_9]]
; CHECK-NEXT: [[C_10:%.*]] = icmp eq i8 [[A]], 0
; CHECK-NEXT: [[RES_12:%.*]] = xor i1 [[RES_11]], true
; CHECK-NEXT: [[F_2:%.*]] = icmp ugt i8 [[A]], 0
; CHECK-NEXT: [[RES_13:%.*]] = xor i1 [[RES_12]], false
; CHECK-NEXT: [[F_3:%.*]] = icmp uge i8 [[A]], 1
; CHECK-NEXT: [[RES_14:%.*]] = xor i1 [[RES_13]], false
; CHECK-NEXT: [[C_11:%.*]] = icmp ugt i8 [[A]], 1
; CHECK-NEXT: [[RES_15:%.*]] = xor i1 [[RES_14]], false
; CHECK-NEXT: [[C_12:%.*]] = icmp sgt i8 [[A]], 0
; CHECK-NEXT: [[RES_16:%.*]] = xor i1 [[RES_15]], [[C_12]]
Expand Down Expand Up @@ -155,8 +142,6 @@ define i1 @test_eq_ne_1(i8 %a, i8 %b) {
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[A:%.*]], 1
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: [[F_1:%.*]] = icmp ne i8 [[A]], 0
; CHECK-NEXT: [[C_1:%.*]] = icmp ne i8 [[A]], 1
; CHECK-NEXT: [[C_2:%.*]] = icmp ne i8 [[A]], [[B:%.*]]
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, false
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_2]]
Expand Down Expand Up @@ -215,20 +200,14 @@ define i1 @test_ne_eq_1(i8 %a, i8 %b) {
; CHECK-NEXT: [[RES_8:%.*]] = xor i1 [[RES_7]], [[C_6]]
; CHECK-NEXT: ret i1 [[RES_8]]
; CHECK: else:
; CHECK-NEXT: [[T_2:%.*]] = icmp ne i8 [[A]], 0
; CHECK-NEXT: [[C_9:%.*]] = icmp ne i8 [[A]], 1
; CHECK-NEXT: [[RES_9:%.*]] = xor i1 true, false
; CHECK-NEXT: [[C_10:%.*]] = icmp ne i8 [[A]], [[B]]
; CHECK-NEXT: [[RES_10:%.*]] = xor i1 [[RES_9]], [[C_10]]
; CHECK-NEXT: [[C_11:%.*]] = icmp eq i8 [[A]], [[B]]
; CHECK-NEXT: [[RES_11:%.*]] = xor i1 [[RES_10]], [[C_11]]
; CHECK-NEXT: [[F_1:%.*]] = icmp eq i8 [[A]], 0
; CHECK-NEXT: [[RES_12:%.*]] = xor i1 [[RES_11]], false
; CHECK-NEXT: [[T_3:%.*]] = icmp ugt i8 [[A]], 0
; CHECK-NEXT: [[RES_13:%.*]] = xor i1 [[RES_12]], true
; CHECK-NEXT: [[T_4:%.*]] = icmp uge i8 [[A]], 1
; CHECK-NEXT: [[RES_14:%.*]] = xor i1 [[RES_13]], true
; CHECK-NEXT: [[F_2:%.*]] = icmp ugt i8 [[A]], 1
; CHECK-NEXT: [[RES_15:%.*]] = xor i1 [[RES_14]], false
; CHECK-NEXT: [[C_12:%.*]] = icmp sgt i8 [[A]], 0
; CHECK-NEXT: [[RES_16:%.*]] = xor i1 [[RES_15]], [[C_12]]
Expand Down Expand Up @@ -300,7 +279,6 @@ define i1 @assume_b_plus_1_ult_a(i64 %a, i64 %b) {
; CHECK-NEXT: [[TMP1:%.*]] = add nuw i64 [[B:%.*]], 1
; CHECK-NEXT: [[TMP2:%.*]] = icmp ult i64 [[TMP1]], [[A:%.*]]
; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP2]])
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i64 [[A]], [[B]]
; CHECK-NEXT: ret i1 true
;
%1 = add nuw i64 %b, 1
Expand All @@ -316,7 +294,6 @@ define i1 @assume_a_gt_b_and_b_ge_c(i64 %a, i64 %b, i64 %c) {
; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP1]])
; CHECK-NEXT: [[TMP2:%.*]] = icmp uge i64 [[B]], [[C:%.*]]
; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP2]])
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne i64 [[A]], [[C]]
; CHECK-NEXT: ret i1 true
;
%1 = icmp ugt i64 %a, %b
Expand Down
44 changes: 0 additions & 44 deletions llvm/test/Transforms/ConstraintElimination/or.ll
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,11 @@ define void @test_or_ule(i4 %x, i4 %y, i4 %z, i4 %a) {
; CHECK-NEXT: call void @use(i1 [[C_4]])
; CHECK-NEXT: ret void
; CHECK: exit:
; CHECK-NEXT: [[F_1:%.*]] = icmp ule i4 [[X]], [[Z]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[C_5:%.*]] = icmp ule i4 [[X]], [[A]]
; CHECK-NEXT: call void @use(i1 [[C_5]])
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i4 [[Y]], [[Z]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i4 [[X]], [[Y]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[T_3:%.*]] = icmp ugt i4 [[X]], [[Z]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: ret void
;
Expand Down Expand Up @@ -78,15 +74,11 @@ define void @test_or_select_ule(i4 %x, i4 %y, i4 %z, i4 %a) {
; CHECK-NEXT: call void @use(i1 [[C_4]])
; CHECK-NEXT: ret void
; CHECK: exit:
; CHECK-NEXT: [[F_1:%.*]] = icmp ule i4 [[X]], [[Z]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[C_5:%.*]] = icmp ule i4 [[X]], [[A]]
; CHECK-NEXT: call void @use(i1 [[C_5]])
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i4 [[Y]], [[Z]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i4 [[X]], [[Y]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[T_3:%.*]] = icmp ugt i4 [[X]], [[Z]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: ret void
;
Expand Down Expand Up @@ -143,16 +135,10 @@ define i1 @test_or_chain_ule_1(i4 %x, i4 %y, i4 %z, i4 %a, i4 %b) {
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_7]]
; CHECK-NEXT: ret i1 [[RES_2]]
; CHECK: exit:
; CHECK-NEXT: [[F_1:%.*]] = icmp ule i4 [[X]], [[Z]]
; CHECK-NEXT: [[F_2:%.*]] = icmp ule i4 2, [[X]]
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 false, false
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i4 [[Y]], [[Z]]
; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], true
; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i4 [[X]], [[Y]]
; CHECK-NEXT: [[RES_5:%.*]] = xor i1 [[RES_4]], true
; CHECK-NEXT: [[T_3:%.*]] = icmp ugt i4 [[X]], [[Z]]
; CHECK-NEXT: [[RES_6:%.*]] = xor i1 [[RES_5]], true
; CHECK-NEXT: [[T_4:%.*]] = icmp ugt i4 2, [[A]]
; CHECK-NEXT: [[RES_7:%.*]] = xor i1 [[RES_6]], true
; CHECK-NEXT: [[C_8:%.*]] = icmp ule i4 [[X]], [[A]]
; CHECK-NEXT: [[RES_8:%.*]] = xor i1 [[RES_7]], [[C_8]]
Expand Down Expand Up @@ -224,16 +210,10 @@ define i1 @test_or_chain_ule_2(i4 %x, i4 %y, i4 %z, i4 %a, i4 %b) {
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_7]]
; CHECK-NEXT: ret i1 [[RES_2]]
; CHECK: exit:
; CHECK-NEXT: [[F_1:%.*]] = icmp ule i4 [[X]], [[Z]]
; CHECK-NEXT: [[F_2:%.*]] = icmp ule i4 2, [[X]]
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 false, false
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i4 [[Y]], [[Z]]
; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], true
; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i4 [[X]], [[Y]]
; CHECK-NEXT: [[RES_5:%.*]] = xor i1 [[RES_4]], true
; CHECK-NEXT: [[T_3:%.*]] = icmp ugt i4 [[X]], [[Z]]
; CHECK-NEXT: [[RES_6:%.*]] = xor i1 [[RES_5]], true
; CHECK-NEXT: [[T_4:%.*]] = icmp ugt i4 2, [[A]]
; CHECK-NEXT: [[RES_7:%.*]] = xor i1 [[RES_6]], true
; CHECK-NEXT: [[C_8:%.*]] = icmp ule i4 [[X]], [[A]]
; CHECK-NEXT: [[RES_8:%.*]] = xor i1 [[RES_7]], [[C_8]]
Expand Down Expand Up @@ -306,12 +286,8 @@ define i1 @test_or_chain_with_other_conds_ule(i4 %x, i4 %y, i4 %z, i4 %a, i1 %ar
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_7]]
; CHECK-NEXT: ret i1 [[RES_2]]
; CHECK: exit:
; CHECK-NEXT: [[F_1:%.*]] = icmp ule i4 [[X]], [[Z]]
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i4 [[Y]], [[Z]]
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 false, true
; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i4 [[X]], [[Y]]
; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], true
; CHECK-NEXT: [[T_3:%.*]] = icmp ugt i4 [[X]], [[Z]]
; CHECK-NEXT: [[RES_5:%.*]] = xor i1 [[RES_4]], true
; CHECK-NEXT: [[C_8:%.*]] = icmp ule i4 [[X]], [[A]]
; CHECK-NEXT: [[RES_6:%.*]] = xor i1 [[RES_5]], [[C_8]]
Expand Down Expand Up @@ -371,12 +347,8 @@ define i1 @test_or_chain_with_and_ule(i4 %x, i4 %y, i4 %z, i4 %a, i4 %b) {
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_7]]
; CHECK-NEXT: ret i1 [[RES_2]]
; CHECK: exit:
; CHECK-NEXT: [[F_1:%.*]] = icmp ule i4 [[X]], [[Z]]
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i4 [[Y]], [[Z]]
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 false, true
; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i4 [[X]], [[Y]]
; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], true
; CHECK-NEXT: [[T_3:%.*]] = icmp ugt i4 [[X]], [[Z]]
; CHECK-NEXT: [[RES_5:%.*]] = xor i1 [[RES_4]], true
; CHECK-NEXT: [[C_8:%.*]] = icmp ule i4 [[X]], [[A]]
; CHECK-NEXT: [[RES_6:%.*]] = xor i1 [[RES_5]], [[C_8]]
Expand Down Expand Up @@ -450,16 +422,12 @@ define void @test_or_as_add_ult(i8 %init_val, i8 %high) {
; CHECK-NEXT: call void @use(i1 [[F_2]])
; CHECK-NEXT: ret void
; CHECK: end:
; CHECK-NEXT: [[T_0:%.*]] = icmp ult i8 [[START]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_1:%.*]] = or i8 [[START]], 1
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[START_1]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_2:%.*]] = or i8 [[START]], 2
; CHECK-NEXT: [[T_2:%.*]] = icmp ult i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_3:%.*]] = or i8 [[START]], 3
; CHECK-NEXT: [[T_3:%.*]] = icmp ult i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_4:%.*]] = or i8 [[START]], 4
; CHECK-NEXT: [[C_4:%.*]] = icmp ult i8 [[START_4]], [[HIGH]]
Expand Down Expand Up @@ -519,16 +487,12 @@ define void @test_or_as_add_ule(i8 %init_val, i8 %high) {
; CHECK-NEXT: call void @use(i1 [[F_2]])
; CHECK-NEXT: ret void
; CHECK: end:
; CHECK-NEXT: [[T_0:%.*]] = icmp ule i8 [[START]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_1:%.*]] = or i8 [[START]], 1
; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[START_1]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_2:%.*]] = or i8 [[START]], 2
; CHECK-NEXT: [[T_2:%.*]] = icmp ule i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_3:%.*]] = or i8 [[START]], 3
; CHECK-NEXT: [[T_3:%.*]] = icmp ule i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_4:%.*]] = or i8 [[START]], 4
; CHECK-NEXT: [[T_4:%.*]] = icmp ule i8 [[START_4]], [[HIGH]]
Expand Down Expand Up @@ -595,16 +559,12 @@ define void @test_or_as_add_ugt(i8 %init_val, i8 %high) {
; CHECK-NEXT: call void @use(i1 [[T_2]])
; CHECK-NEXT: ret void
; CHECK: end:
; CHECK-NEXT: [[F_0:%.*]] = icmp ugt i8 [[START]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_1:%.*]] = or i8 [[START]], 1
; CHECK-NEXT: [[F_1:%.*]] = icmp ugt i8 [[START_1]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_2:%.*]] = or i8 [[START]], 2
; CHECK-NEXT: [[F_2:%.*]] = icmp ugt i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_3:%.*]] = or i8 [[START]], 3
; CHECK-NEXT: [[F_3:%.*]] = icmp ugt i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_4:%.*]] = or i8 [[START]], 4
; CHECK-NEXT: [[F_4:%.*]] = icmp ugt i8 [[START_4]], [[HIGH]]
Expand Down Expand Up @@ -670,16 +630,12 @@ define void @test_or_as_add_uge(i8 %init_val, i8 %high) {
; CHECK-NEXT: call void @use(i1 [[T_2]])
; CHECK-NEXT: ret void
; CHECK: end:
; CHECK-NEXT: [[F_0:%.*]] = icmp ugt i8 [[START]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_1:%.*]] = or i8 [[START]], 1
; CHECK-NEXT: [[F_1:%.*]] = icmp uge i8 [[START_1]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_2:%.*]] = or i8 [[START]], 2
; CHECK-NEXT: [[F_2:%.*]] = icmp uge i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_3:%.*]] = or i8 [[START]], 3
; CHECK-NEXT: [[F_3:%.*]] = icmp uge i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_4:%.*]] = or i8 [[START]], 4
; CHECK-NEXT: [[C_4:%.*]] = icmp uge i8 [[START_4]], [[HIGH]]
Expand Down
6 changes: 0 additions & 6 deletions llvm/test/Transforms/ConstraintElimination/pointercast.ll
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,13 @@ define i1 @gep0_and_cmp(ptr readonly %src, ptr readnone %min, ptr readnone %max)
; CHECK: trap:
; CHECK-NEXT: ret i1 false
; CHECK: checks:
; CHECK-NEXT: [[C_3_MIN:%.*]] = icmp ult ptr [[GEP_3]], [[MIN]]
; CHECK-NEXT: [[C_3_MAX:%.*]] = icmp ult ptr [[GEP_3]], [[MAX]]
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 false, [[C_3_MAX]]
; CHECK-NEXT: [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i64 1
; CHECK-NEXT: [[C_1_MIN:%.*]] = icmp ult ptr [[GEP_1]], [[MIN]]
; CHECK-NEXT: [[C_1_MAX:%.*]] = icmp ult ptr [[GEP_1]], [[MAX]]
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 false, true
; CHECK-NEXT: [[GEP_2:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i64 2
; CHECK-NEXT: [[C_2_MIN:%.*]] = icmp ult ptr [[GEP_2]], [[MIN]]
; CHECK-NEXT: [[C_2_MAX:%.*]] = icmp ult ptr [[GEP_2]], [[MAX]]
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 false, true
; CHECK-NEXT: [[GEP_4:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i64 4
; CHECK-NEXT: [[C_4_MIN:%.*]] = icmp ult ptr [[GEP_4]], [[MIN]]
; CHECK-NEXT: [[C_4_MAX:%.*]] = icmp ult ptr [[GEP_4]], [[MAX]]
; CHECK-NEXT: [[RES_4:%.*]] = xor i1 false, [[C_4_MAX]]
; CHECK-NEXT: [[RES_5:%.*]] = xor i1 [[RES_1]], [[RES_2]]
Expand Down
2 changes: 0 additions & 2 deletions llvm/test/Transforms/ConstraintElimination/range_checks.ll
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ define i32 @test_01(ptr %p, ptr %array, i32 %min_length) {
; CHECK-NEXT: [[IN_BOUNDS:%.*]] = icmp ult i32 [[IDX]], [[MIN_LENGTH:%.*]]
; CHECK-NEXT: br i1 [[IN_BOUNDS]], label [[RANGE_CHECK_BLOCK:%.*]], label [[OUT_OF_BOUNDS:%.*]]
; CHECK: range_check_block:
; CHECK-NEXT: [[RANGE_CHECK:%.*]] = icmp ult i32 [[IDX]], [[MIN_LENGTH]]
; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[RANGE_CHECK_FAILED:%.*]]
; CHECK: backedge:
; CHECK-NEXT: [[ARR_PTR:%.*]] = getelementptr i32, ptr [[ARRAY:%.*]], i32 [[IDX]]
Expand Down Expand Up @@ -81,7 +80,6 @@ define i32 @test_02(ptr %p, ptr %array, i32 %length, i32 %min_length) {
; CHECK-NEXT: [[IN_BOUNDS:%.*]] = icmp ult i32 [[IDX]], [[MIN_LENGTH]]
; CHECK-NEXT: br i1 [[IN_BOUNDS]], label [[RANGE_CHECK_BLOCK:%.*]], label [[OUT_OF_BOUNDS:%.*]]
; CHECK: range_check_block:
; CHECK-NEXT: [[RANGE_CHECK:%.*]] = icmp ult i32 [[IDX]], [[LENGTH]]
; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[RANGE_CHECK_FAILED:%.*]]
; CHECK: backedge:
; CHECK-NEXT: [[ARR_PTR:%.*]] = getelementptr i32, ptr [[ARRAY:%.*]], i32 [[IDX]]
Expand Down
12 changes: 0 additions & 12 deletions llvm/test/Transforms/ConstraintElimination/sge.ll
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ define void @test_1_variable_constraint(i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: [[C_1:%.*]] = icmp sge i32 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[T_1:%.*]] = icmp sge i32 [[X]], [[Y]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i32 [[X]], 10
; CHECK-NEXT: call void @use(i1 [[C_2]])
Expand All @@ -19,9 +18,7 @@ define void @test_1_variable_constraint(i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: call void @use(i1 [[C_4]])
; CHECK-NEXT: ret void
; CHECK: bb2:
; CHECK-NEXT: [[T_2:%.*]] = icmp sge i32 [[Y]], [[X]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[F_1:%.*]] = icmp sge i32 [[X]], [[Y]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[C_5:%.*]] = icmp sge i32 [[X]], 10
; CHECK-NEXT: call void @use(i1 [[C_5]])
Expand Down Expand Up @@ -62,21 +59,16 @@ define void @test_1_constant_constraint(i32 %x) {
; CHECK-NEXT: [[C_1:%.*]] = icmp sge i32 [[X:%.*]], 10
; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[T_1:%.*]] = icmp sge i32 [[X]], 10
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[T_2:%.*]] = icmp sge i32 [[X]], 9
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i32 [[X]], 11
; CHECK-NEXT: call void @use(i1 [[C_2]])
; CHECK-NEXT: [[C_4:%.*]] = icmp sge i32 10, [[X]]
; CHECK-NEXT: call void @use(i1 [[C_4]])
; CHECK-NEXT: ret void
; CHECK: bb2:
; CHECK-NEXT: [[T_3:%.*]] = icmp sge i32 11, [[X]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[F_1:%.*]] = icmp sge i32 [[X]], 10
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[F_1_1:%.*]] = icmp sge i32 [[X]], 10
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[C_5:%.*]] = icmp sge i32 [[X]], 9
; CHECK-NEXT: call void @use(i1 [[C_5]])
Expand Down Expand Up @@ -124,7 +116,6 @@ define i32 @test1(i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i32 [[Y]], [[Z:%.*]]
; CHECK-NEXT: br i1 [[C_2]], label [[BB2:%.*]], label [[EXIT]]
; CHECK: bb2:
; CHECK-NEXT: [[C_3:%.*]] = icmp sge i32 [[X]], [[Z]]
; CHECK-NEXT: br i1 true, label [[BB3:%.*]], label [[EXIT]]
; CHECK: bb3:
; CHECK-NEXT: ret i32 10
Expand Down Expand Up @@ -223,7 +214,6 @@ define i32 @test4(i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i32 [[Y]], [[Z:%.*]]
; CHECK-NEXT: br i1 [[C_2]], label [[BB2:%.*]], label [[EXIT]]
; CHECK: bb2:
; CHECK-NEXT: [[T_1:%.*]] = icmp sge i32 [[X]], [[Z]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[U_1:%.*]] = icmp eq i32 [[X]], [[Z]]
; CHECK-NEXT: call void @use(i1 [[U_1]])
Expand Down Expand Up @@ -257,10 +247,8 @@ define i1 @sge_sgt(i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: [[C_1:%.*]] = icmp sgt i32 [[X:%.*]], -1
; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: [[T_1:%.*]] = icmp sge i32 [[X]], 0
; CHECK-NEXT: ret i1 true
; CHECK: else:
; CHECK-NEXT: [[F_1:%.*]] = icmp sge i32 [[X]], 0
; CHECK-NEXT: ret i1 false
;
entry:
Expand Down
4 changes: 0 additions & 4 deletions llvm/test/Transforms/ConstraintElimination/shl.ll
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,6 @@ define i1 @test_shl_const_nuw_unsigned_10(i8 %start, i8 %high) {
; CHECK-NEXT: [[C_0:%.*]] = icmp ult i8 [[START]], [[START_SHL_5]]
; CHECK-NEXT: call void @llvm.assume(i1 [[C_0]])
; CHECK-NEXT: [[START_SHL_3:%.*]] = shl nuw i8 [[START]], 3
; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[START_SHL_3]], [[START_SHL_5]]
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -239,7 +238,6 @@ define i1 @test_shl_const_nuw_unsigned_11(i8 %start, i8 %high) {
; CHECK-NEXT: [[C_0:%.*]] = icmp ult i8 [[START]], [[START_SHL_5]]
; CHECK-NEXT: call void @llvm.assume(i1 [[C_0]])
; CHECK-NEXT: [[START_SHL_3:%.*]] = shl nuw i8 [[START]], 3
; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[START_SHL_5]], [[START_SHL_3]]
; CHECK-NEXT: ret i1 false
;
entry:
Expand All @@ -259,7 +257,6 @@ define i1 @test_shl_const_nuw_unsigned_12(i8 %start) {
; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[START]], [[START_SHL_3]]
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
; CHECK-NEXT: [[START_SHL_5:%.*]] = shl nuw i8 [[START]], 5
; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[START_SHL_3]], [[START_SHL_5]]
; CHECK-NEXT: ret i1 true
;
entry:
Expand Down Expand Up @@ -1280,7 +1277,6 @@ define i1 @shl_55() {
; CHECK-LABEL: @shl_55(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[SHL_UB:%.*]] = shl nuw nsw i256 1, 55
; CHECK-NEXT: [[SHL_CMP:%.*]] = icmp uge i256 [[SHL_UB]], 1
; CHECK-NEXT: ret i1 true
;
entry:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ define i1 @sge_0_unsigned_a_ne_0(i8 %a) {
; CHECK-NEXT: [[A_NE_0:%.*]] = icmp ne i8 [[A:%.*]], 0
; CHECK-NEXT: call void @llvm.assume(i1 [[A_NE_0]])
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[A]] to i16
; CHECK-NEXT: [[T:%.*]] = icmp sge i16 [[EXT]], 0
; CHECK-NEXT: ret i1 true
;
%a.ne.0 = icmp ne i8 %a, 0
Expand All @@ -23,7 +22,6 @@ define i1 @sgt_0_unsigned_a_ne_0(i8 %a) {
; CHECK-NEXT: [[A_NE_0:%.*]] = icmp ne i8 [[A:%.*]], 0
; CHECK-NEXT: call void @llvm.assume(i1 [[A_NE_0]])
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[A]] to i16
; CHECK-NEXT: [[T:%.*]] = icmp sgt i16 [[EXT]], 0
; CHECK-NEXT: ret i1 true
;
%a.ne.0 = icmp ne i8 %a, 0
Expand All @@ -38,7 +36,6 @@ define i1 @sgt_0_unsigned_a_sgt_0(i8 %a) {
; CHECK-NEXT: [[A_SGT_0:%.*]] = icmp sgt i8 [[A:%.*]], 0
; CHECK-NEXT: call void @llvm.assume(i1 [[A_SGT_0]])
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[A]] to i16
; CHECK-NEXT: [[T:%.*]] = icmp sgt i16 [[EXT]], 0
; CHECK-NEXT: ret i1 true
;
%a.sgt.0 = icmp sgt i8 %a, 0
Expand All @@ -53,7 +50,6 @@ define i1 @sge_0_unsigned_a_sge_0(i8 %a) {
; CHECK-NEXT: [[A_SGE_0:%.*]] = icmp sge i8 [[A:%.*]], 0
; CHECK-NEXT: call void @llvm.assume(i1 [[A_SGE_0]])
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[A]] to i16
; CHECK-NEXT: [[T:%.*]] = icmp sge i16 [[EXT]], 0
; CHECK-NEXT: ret i1 true
;
%a.sge.0 = icmp sge i8 %a, 0
Expand All @@ -68,7 +64,6 @@ define i1 @sgt_0_unsigned_a_ugt_0(i8 %a) {
; CHECK-NEXT: [[A_UGT_0:%.*]] = icmp ugt i8 [[A:%.*]], 0
; CHECK-NEXT: call void @llvm.assume(i1 [[A_UGT_0]])
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[A]] to i16
; CHECK-NEXT: [[T:%.*]] = icmp sgt i16 [[EXT]], 0
; CHECK-NEXT: ret i1 true
;
%a.ugt.0 = icmp ugt i8 %a, 0
Expand Down Expand Up @@ -98,7 +93,6 @@ define i1 @sgt_1_unsigned_a_ugt_1(i8 %a) {
; CHECK-NEXT: [[A_UGT_1:%.*]] = icmp ugt i8 [[A:%.*]], 1
; CHECK-NEXT: call void @llvm.assume(i1 [[A_UGT_1]])
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[A]] to i16
; CHECK-NEXT: [[T:%.*]] = icmp sgt i16 [[EXT]], 1
; CHECK-NEXT: ret i1 true
;
%a.ugt.1 = icmp ugt i8 %a, 1
Expand Down Expand Up @@ -133,7 +127,6 @@ define i1 @sgt_0_unsigned_a_ugt_neg_10(i8 %a) {
; CHECK-NEXT: [[A_UGT_0:%.*]] = icmp ugt i8 [[A:%.*]], 10
; CHECK-NEXT: call void @llvm.assume(i1 [[A_UGT_0]])
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[A]] to i16
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i16 [[EXT]], 0
; CHECK-NEXT: ret i1 true
;
%a.ugt.0 = icmp ugt i8 %a, 10
Expand All @@ -148,7 +141,6 @@ define i1 @sge_neg_1_sge_0_known(i8 %a) {
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[A:%.*]] to i16
; CHECK-NEXT: [[A_NE_0:%.*]] = icmp sge i16 [[EXT]], 0
; CHECK-NEXT: call void @llvm.assume(i1 [[A_NE_0]])
; CHECK-NEXT: [[T:%.*]] = icmp sge i16 [[EXT]], -1
; CHECK-NEXT: ret i1 true
;
%ext = zext i8 %a to i16
Expand Down
16 changes: 0 additions & 16 deletions llvm/test/Transforms/ConstraintElimination/sub-nuw.ll
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,8 @@ define void @test.not.uge.ult(i8 %start, i8 %low, i8 %high) {
; CHECK-NEXT: [[T_2:%.*]] = icmp ult i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 [[T_2]])
; CHECK-NEXT: [[START_3:%.*]] = sub nuw i8 [[START]], 3
; CHECK-NEXT: [[T_3:%.*]] = icmp ult i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_4:%.*]] = sub nuw i8 [[START]], 4
; CHECK-NEXT: [[C_4:%.*]] = icmp ult i8 [[START_4]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: ret void
;
Expand Down Expand Up @@ -67,16 +65,12 @@ define void @test.not.uge.ule(i8 %start, i8 %low, i8 %high) {
; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[START_1]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 [[T_1]])
; CHECK-NEXT: [[START_2:%.*]] = sub nuw i8 [[START]], 2
; CHECK-NEXT: [[T_2:%.*]] = icmp ule i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_3:%.*]] = sub nuw i8 [[START]], 3
; CHECK-NEXT: [[T_3:%.*]] = icmp ule i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_4:%.*]] = sub nuw i8 [[START]], 4
; CHECK-NEXT: [[T_4:%.*]] = icmp ule i8 [[START_4]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[START_5:%.*]] = sub nuw i8 [[START]], 5
; CHECK-NEXT: [[C_5:%.*]] = icmp ule i8 [[START_5]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: ret void
;
Expand Down Expand Up @@ -126,16 +120,12 @@ define void @test.not.uge.ugt(i8 %start, i8 %low, i8 %high) {
; CHECK-NEXT: [[F_1:%.*]] = icmp ugt i8 [[START_1]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 [[F_1]])
; CHECK-NEXT: [[START_2:%.*]] = sub nuw i8 [[START]], 2
; CHECK-NEXT: [[F_2:%.*]] = icmp ugt i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_3:%.*]] = sub nuw i8 [[START]], 3
; CHECK-NEXT: [[F_3:%.*]] = icmp ugt i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_4:%.*]] = sub nuw i8 [[START]], 4
; CHECK-NEXT: [[F_4:%.*]] = icmp ugt i8 [[START_4]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_5:%.*]] = sub nuw i8 [[START]], 5
; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[START_5]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: ret void
;
Expand Down Expand Up @@ -192,13 +182,10 @@ define void @test.not.uge.uge(i8 %start, i8 %low, i8 %high) {
; CHECK-NEXT: [[F_2:%.*]] = icmp uge i8 [[START_2]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 [[F_2]])
; CHECK-NEXT: [[START_3:%.*]] = sub nuw i8 [[START]], 3
; CHECK-NEXT: [[F_3:%.*]] = icmp uge i8 [[START_3]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_4:%.*]] = sub nuw i8 [[START]], 4
; CHECK-NEXT: [[C_4:%.*]] = icmp uge i8 [[START_4]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[START_5:%.*]] = sub nuw i8 [[START]], 5
; CHECK-NEXT: [[C_5:%.*]] = icmp uge i8 [[START_5]], [[HIGH]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: ret void
;
Expand Down Expand Up @@ -283,7 +270,6 @@ define i1 @sub_nuw_i16_simp(i16 %a) {
; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i16 [[A]], 0
; CHECK-NEXT: ret i1 [[C_2]]
; CHECK: exit.2:
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i16 [[A]], 0
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -310,7 +296,6 @@ define i1 @sub_nuw_i64_simp(i64 %a) {
; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i64 [[A]], 0
; CHECK-NEXT: ret i1 [[C_2]]
; CHECK: exit.2:
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i64 [[A]], 0
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -334,7 +319,6 @@ define i1 @sub_nuw_neg_i16(i16 %a) {
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i16 0, [[NEG2]]
; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
; CHECK: exit.1:
; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i16 [[A]], 0
; CHECK-NEXT: ret i1 false
; CHECK: exit.2:
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i16 [[A]], 0
Expand Down
2 changes: 0 additions & 2 deletions llvm/test/Transforms/ConstraintElimination/switch.ll
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,10 @@ define i1 @test_switch_in_block_with_assume(i32 %x) {
; CHECK-NEXT: i32 1, label [[EXIT_2:%.*]]
; CHECK-NEXT: ]
; CHECK: exit.1:
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i32 [[X]], 10
; CHECK-NEXT: [[C_2:%.*]] = icmp ult i32 [[X]], 9
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, [[C_2]]
; CHECK-NEXT: ret i1 [[RES_1]]
; CHECK: exit.2:
; CHECK-NEXT: [[T_2:%.*]] = icmp ult i32 [[X]], 10
; CHECK-NEXT: [[C_3:%.*]] = icmp ult i32 [[X]], 9
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 true, [[C_3]]
; CHECK-NEXT: ret i1 [[RES_2]]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ define i1 @len_known_positive_via_idx_1(i8 %len, i8 %idx) {
; CHECK-NEXT: [[AND_1:%.*]] = and i1 [[IDX_POS]], [[IDX_SLT_LEN]]
; CHECK-NEXT: br i1 [[AND_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]]
; CHECK: then.1:
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[IDX]], [[LEN]]
; CHECK-NEXT: [[T_2:%.*]] = icmp sge i8 [[LEN]], 0
; CHECK-NEXT: [[C_1:%.*]] = icmp sge i8 [[LEN]], 2
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i8 [[LEN]], 2
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, true
Expand Down Expand Up @@ -48,8 +46,6 @@ define i1 @len_known_positive_via_idx_2(i8 %len, i8 %idx) {
; CHECK-NEXT: [[AND_1:%.*]] = and i1 [[IDX_SLT_LEN]], [[IDX_POS]]
; CHECK-NEXT: br i1 [[AND_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]]
; CHECK: then.1:
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[IDX]], [[LEN]]
; CHECK-NEXT: [[T_2:%.*]] = icmp sge i8 [[LEN]], 0
; CHECK-NEXT: [[C_1:%.*]] = icmp sge i8 [[LEN]], 2
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i8 [[LEN]], 2
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, true
Expand Down Expand Up @@ -162,7 +158,6 @@ define i1 @cnt_positive_sgt_against_base(ptr %p, i32 %cnt) {
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[CNT:%.*]], -1
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i32 [[CNT]]
; CHECK-NEXT: [[CMP_1:%.*]] = icmp uge ptr [[ADD_PTR]], [[P]]
; CHECK-NEXT: br i1 true, label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: ret i1 false
Expand Down Expand Up @@ -244,7 +239,6 @@ define i1 @cnt_positive_sgt_against_base_with_zext(ptr %p, i32 %cnt) {
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[EXT:%.*]] = zext i32 [[CNT]] to i64
; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[EXT]]
; CHECK-NEXT: [[CMP_1:%.*]] = icmp uge ptr [[ADD_PTR]], [[P]]
; CHECK-NEXT: br i1 true, label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: ret i1 false
Expand Down Expand Up @@ -273,7 +267,6 @@ define i1 @cnt_positive_sge_against_base_with_zext(ptr %p, i32 %cnt) {
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[EXT:%.*]] = zext i32 [[CNT]] to i64
; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[EXT]]
; CHECK-NEXT: [[CMP_1:%.*]] = icmp uge ptr [[ADD_PTR]], [[P]]
; CHECK-NEXT: br i1 true, label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: ret i1 false
Expand Down Expand Up @@ -302,7 +295,6 @@ define i1 @cnt_not_known_positive_sgt_against_base_with_zext(ptr %p, i32 %cnt) {
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[EXT:%.*]] = zext i32 [[CNT]] to i64
; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[EXT]]
; CHECK-NEXT: [[CMP_1:%.*]] = icmp uge ptr [[ADD_PTR]], [[P]]
; CHECK-NEXT: br i1 true, label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: ret i1 false
Expand Down Expand Up @@ -331,7 +323,6 @@ define i1 @cnt_not_known_positive_sge_against_base_with_zext(ptr %p, i32 %cnt) {
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[EXT:%.*]] = zext i32 [[CNT]] to i64
; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[EXT]]
; CHECK-NEXT: [[CMP_1:%.*]] = icmp uge ptr [[ADD_PTR]], [[P]]
; CHECK-NEXT: br i1 true, label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: ret i1 false
Expand Down Expand Up @@ -391,7 +382,6 @@ define i1 @cnt_positive_from_assume_check_against_base_struct_ugt_with_zext(ptr
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[EXT:%.*]] = zext i32 [[CNT]] to i64
; CHECK-NEXT: [[GEP_EXT:%.*]] = getelementptr inbounds [[T:%.*]], ptr [[P:%.*]], i64 0, i32 1, i64 [[EXT]]
; CHECK-NEXT: [[CMP_1:%.*]] = icmp ugt ptr [[GEP_EXT]], [[P]]
; CHECK-NEXT: br i1 true, label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: ret i1 false
Expand Down Expand Up @@ -423,7 +413,6 @@ define i1 @cnt_positive_from_branch_check_against_base_struct_ugt_with_zext(ptr
; CHECK: check:
; CHECK-NEXT: [[EXT:%.*]] = zext i32 [[CNT]] to i64
; CHECK-NEXT: [[GEP_EXT:%.*]] = getelementptr inbounds [[T:%.*]], ptr [[P:%.*]], i64 0, i32 1, i64 [[EXT]]
; CHECK-NEXT: [[CMP_1:%.*]] = icmp ugt ptr [[GEP_EXT]], [[P]]
; CHECK-NEXT: br i1 true, label [[THEN:%.*]], label [[ELSE]]
; CHECK: then:
; CHECK-NEXT: ret i1 false
Expand Down Expand Up @@ -458,7 +447,6 @@ define i1 @cnt_not_known_positive_from_branch_check_against_base_struct_ugt_with
; CHECK: check:
; CHECK-NEXT: [[EXT:%.*]] = zext i32 [[CNT]] to i64
; CHECK-NEXT: [[GEP_EXT:%.*]] = getelementptr inbounds [[T:%.*]], ptr [[P:%.*]], i64 0, i32 1, i64 [[EXT]]
; CHECK-NEXT: [[CMP_1:%.*]] = icmp ugt ptr [[GEP_EXT]], [[P]]
; CHECK-NEXT: br i1 true, label [[THEN:%.*]], label [[ELSE]]
; CHECK: then:
; CHECK-NEXT: ret i1 false
Expand Down Expand Up @@ -489,12 +477,9 @@ define i1 @sge_2(i8 %idx) {
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[IDX:%.*]], 2
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i8 [[IDX]], 2
; CHECK-NEXT: [[T_2:%.*]] = icmp uge i8 [[IDX]], 1
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, true
; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[IDX]], 3
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_1]]
; CHECK-NEXT: [[F_1:%.*]] = icmp ult i8 [[IDX]], 2
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[RES_2]], false
; CHECK-NEXT: ret i1 [[RES_3]]
;
Expand Down Expand Up @@ -555,7 +540,6 @@ define i1 @sgt_known_neg(i8 %idx) {
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[IDX:%.*]], -1
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i8 [[IDX]], 0
; CHECK-NEXT: [[T_2:%.*]] = icmp uge i8 [[IDX]], 1
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, [[T_2]]
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[IDX]], -1
Expand All @@ -578,8 +562,6 @@ define i1 @sgt_known_pos(i8 %idx) {
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[IDX:%.*]], 2
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[IDX]], 2
; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i8 [[IDX]], 1
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, true
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[IDX]], 3
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_1]]
Expand All @@ -601,7 +583,6 @@ define i1 @sgt_to_ugt(i8 %a) {
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], 2
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[A]], 2
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -616,7 +597,6 @@ define i1 @sgt_to_ugt_less(i8 %a) {
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], 2
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[A]], 1
; CHECK-NEXT: ret i1 true
;
entry:
Expand All @@ -633,7 +613,6 @@ define i1 @sgt_to_ugt_var(i8 %a, i8 %b) {
; CHECK-NEXT: [[CMP_2:%.*]] = icmp sgt i8 [[B]], 0
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP_2]])
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[A]], [[B]]
; CHECK-NEXT: ret i1 true
;
entry:
Expand Down Expand Up @@ -714,8 +693,6 @@ define i1 @slt_first_op_known_pos(i8 %idx) {
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 2, [[IDX:%.*]]
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 2, [[IDX]]
; CHECK-NEXT: [[T_2:%.*]] = icmp ult i8 1, [[IDX]]
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, true
; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 3, [[IDX]]
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_1]]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,9 @@ define i1 @idx_known_positive_via_len_1(i8 %len, i8 %idx) {
; CHECK-NEXT: [[AND_1:%.*]] = and i1 [[LEN_POS]], [[IDX_ULT_LEN]]
; CHECK-NEXT: br i1 [[AND_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]]
; CHECK: then.1:
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[IDX]], [[LEN]]
; CHECK-NEXT: [[T_2:%.*]] = icmp sge i8 [[IDX]], 0
; CHECK-NEXT: [[R_1:%.*]] = xor i1 true, true
; CHECK-NEXT: [[C_1:%.*]] = icmp sge i8 [[IDX]], 1
; CHECK-NEXT: [[R_2:%.*]] = xor i1 [[R_1]], [[C_1]]
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i8 [[LEN]], 1
; CHECK-NEXT: [[R_3:%.*]] = xor i1 [[R_2]], true
; CHECK-NEXT: ret i1 [[R_3]]
; CHECK: else:
Expand Down Expand Up @@ -53,12 +50,9 @@ define i1 @idx_known_positive_via_len_2(i8 %len, i8 %idx) {
; CHECK-NEXT: [[AND_1:%.*]] = and i1 [[IDX_ULT_LEN]], [[LEN_POS]]
; CHECK-NEXT: br i1 [[AND_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]]
; CHECK: then.1:
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[IDX]], [[LEN]]
; CHECK-NEXT: [[T_2:%.*]] = icmp sge i8 [[IDX]], 0
; CHECK-NEXT: [[R_1:%.*]] = xor i1 true, true
; CHECK-NEXT: [[C_1:%.*]] = icmp sge i8 [[IDX]], 1
; CHECK-NEXT: [[R_2:%.*]] = xor i1 [[R_1]], [[C_1]]
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i8 [[LEN]], 1
; CHECK-NEXT: [[R_3:%.*]] = xor i1 [[R_2]], true
; CHECK-NEXT: ret i1 [[R_3]]
; CHECK: else:
Expand Down Expand Up @@ -98,7 +92,6 @@ define i1 @idx_not_known_positive_via_len_uge(i8 %len, i8 %idx) {
; CHECK-NEXT: [[AND_1:%.*]] = and i1 [[LEN_POS]], [[IDX_ULT_LEN]]
; CHECK-NEXT: br i1 [[AND_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]]
; CHECK: then.1:
; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[IDX]], [[LEN]]
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i8 [[IDX]], 0
; CHECK-NEXT: [[R_1:%.*]] = xor i1 true, [[C_2]]
; CHECK-NEXT: [[C_3:%.*]] = icmp sge i8 [[IDX]], 1
Expand Down Expand Up @@ -140,7 +133,6 @@ define i1 @idx_not_known_positive_via_len(i8 %len, i8 %idx) {
; CHECK-NEXT: [[IDX_ULT_LEN:%.*]] = icmp ult i8 [[IDX:%.*]], [[LEN:%.*]]
; CHECK-NEXT: br i1 [[IDX_ULT_LEN]], label [[THEN_1:%.*]], label [[ELSE:%.*]]
; CHECK: then.1:
; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[IDX]], [[LEN]]
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i8 [[IDX]], 0
; CHECK-NEXT: [[R_1:%.*]] = xor i1 true, [[C_2]]
; CHECK-NEXT: [[C_3:%.*]] = icmp sge i8 [[IDX]], 1
Expand Down Expand Up @@ -178,10 +170,7 @@ define i1 @ult_signed_pos_constant(i8 %a) {
; CHECK-NEXT: [[A_ULT_4:%.*]] = icmp ult i8 [[A:%.*]], 4
; CHECK-NEXT: br i1 [[A_ULT_4]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: [[T_0:%.*]] = icmp sge i8 [[A]], 0
; CHECK-NEXT: [[T_1:%.*]] = icmp slt i8 [[A]], 4
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, true
; CHECK-NEXT: [[C_0:%.*]] = icmp slt i8 [[A]], 5
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], true
; CHECK-NEXT: ret i1 [[RES_2]]
; CHECK: else:
Expand Down
10 changes: 0 additions & 10 deletions llvm/test/Transforms/ConstraintElimination/uge.ll
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ define void @test_1_variable_constraint(i8 %x, i8 %y, i8 %z) {
; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i8 [[X]], [[Y]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[C_2:%.*]] = icmp uge i8 [[X]], 10
; CHECK-NEXT: call void @use(i1 [[C_2]])
Expand All @@ -19,9 +18,7 @@ define void @test_1_variable_constraint(i8 %x, i8 %y, i8 %z) {
; CHECK-NEXT: call void @use(i1 [[C_4]])
; CHECK-NEXT: ret void
; CHECK: bb2:
; CHECK-NEXT: [[T_2:%.*]] = icmp uge i8 [[Y]], [[X]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[F_1:%.*]] = icmp uge i8 [[X]], [[Y]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[C_5:%.*]] = icmp uge i8 [[X]], 10
; CHECK-NEXT: call void @use(i1 [[C_5]])
Expand Down Expand Up @@ -62,21 +59,16 @@ define void @test_1_constant_constraint(i8 %x) {
; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[X:%.*]], 10
; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i8 [[X]], 10
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[T_2:%.*]] = icmp uge i8 [[X]], 9
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[C_2:%.*]] = icmp uge i8 [[X]], 11
; CHECK-NEXT: call void @use(i1 [[C_2]])
; CHECK-NEXT: [[C_4:%.*]] = icmp uge i8 10, [[X]]
; CHECK-NEXT: call void @use(i1 [[C_4]])
; CHECK-NEXT: ret void
; CHECK: bb2:
; CHECK-NEXT: [[T_3:%.*]] = icmp uge i8 11, [[X]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[F_1:%.*]] = icmp uge i8 [[X]], 10
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[F_1_1:%.*]] = icmp uge i8 [[X]], 10
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[C_5:%.*]] = icmp uge i8 [[X]], 9
; CHECK-NEXT: call void @use(i1 [[C_5]])
Expand Down Expand Up @@ -124,7 +116,6 @@ define i8 @test1(i8 %x, i8 %y, i8 %z) {
; CHECK-NEXT: [[C_2:%.*]] = icmp uge i8 [[Y]], [[Z:%.*]]
; CHECK-NEXT: br i1 [[C_2]], label [[BB2:%.*]], label [[EXIT]]
; CHECK: bb2:
; CHECK-NEXT: [[C_3:%.*]] = icmp uge i8 [[X]], [[Z]]
; CHECK-NEXT: br i1 true, label [[BB3:%.*]], label [[EXIT]]
; CHECK: bb3:
; CHECK-NEXT: ret i8 10
Expand Down Expand Up @@ -224,7 +215,6 @@ define i8 @test4(i8 %x, i8 %y, i8 %z) {
; CHECK-NEXT: [[C_2:%.*]] = icmp uge i8 [[Y]], [[Z:%.*]]
; CHECK-NEXT: br i1 [[C_2]], label [[BB2:%.*]], label [[EXIT]]
; CHECK: bb2:
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i8 [[X]], [[Z]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[U_1:%.*]] = icmp eq i8 [[X]], [[Z]]
; CHECK-NEXT: call void @use(i1 [[U_1]])
Expand Down
2 changes: 0 additions & 2 deletions llvm/test/Transforms/ConstraintElimination/ugt-ule.ll
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,11 @@ define void @test(ptr %m, ptr %ptr) {
; CHECK-NEXT: [[CMP_1:%.*]] = icmp ult ptr [[M:%.*]], [[PTR:%.*]]
; CHECK-NEXT: br i1 [[CMP_1]], label [[BB_1:%.*]], label [[BB_2:%.*]]
; CHECK: bb.1:
; CHECK-NEXT: [[CMP_2:%.*]] = icmp uge ptr [[M]], [[PTR]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: ret void
; CHECK: bb.2:
; CHECK-NEXT: br label [[BB_2_NEXT:%.*]]
; CHECK: bb.2.next:
; CHECK-NEXT: [[CMP_3:%.*]] = icmp uge ptr [[M]], [[PTR]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: ret void
;
Expand Down
10 changes: 0 additions & 10 deletions llvm/test/Transforms/ConstraintElimination/ule.ll
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ define void @test_1_variable_constraint(i8 %x, i8 %y, i8 %z) {
; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]
; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[X]], [[Y]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[X]], 10
; CHECK-NEXT: call void @use(i1 [[C_2]])
Expand All @@ -19,9 +18,7 @@ define void @test_1_variable_constraint(i8 %x, i8 %y, i8 %z) {
; CHECK-NEXT: call void @use(i1 [[C_4]])
; CHECK-NEXT: ret void
; CHECK: bb2:
; CHECK-NEXT: [[T_2:%.*]] = icmp ule i8 [[Y]], [[X]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[F_1:%.*]] = icmp ule i8 [[X]], [[Y]]
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[C_5:%.*]] = icmp ule i8 [[X]], 10
; CHECK-NEXT: call void @use(i1 [[C_5]])
Expand Down Expand Up @@ -62,21 +59,16 @@ define void @test_1_constant_constraint(i8 %x) {
; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[X]], 10
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[T_2:%.*]] = icmp ule i8 [[X]], 11
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[X]], 9
; CHECK-NEXT: call void @use(i1 [[C_2]])
; CHECK-NEXT: [[C_4:%.*]] = icmp ule i8 10, [[X]]
; CHECK-NEXT: call void @use(i1 [[C_4]])
; CHECK-NEXT: ret void
; CHECK: bb2:
; CHECK-NEXT: [[T_3:%.*]] = icmp ule i8 10, [[X]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[F_1:%.*]] = icmp ule i8 [[X]], 9
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[F_1_1:%.*]] = icmp ule i8 [[X]], 10
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[C_5:%.*]] = icmp ule i8 [[X]], 11
; CHECK-NEXT: call void @use(i1 [[C_5]])
Expand Down Expand Up @@ -125,7 +117,6 @@ define i8 @test1(i8 %x, i8 %y, i8 %z) {
; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[Y]], [[Z:%.*]]
; CHECK-NEXT: br i1 [[C_2]], label [[BB2:%.*]], label [[EXIT]]
; CHECK: bb2:
; CHECK-NEXT: [[C_3:%.*]] = icmp ule i8 [[X]], [[Z]]
; CHECK-NEXT: br i1 true, label [[BB3:%.*]], label [[EXIT]]
; CHECK: bb3:
; CHECK-NEXT: ret i8 10
Expand Down Expand Up @@ -225,7 +216,6 @@ define i8 @test4(i8 %x, i8 %y, i8 %z) {
; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[Y]], [[Z:%.*]]
; CHECK-NEXT: br i1 [[C_2]], label [[BB2:%.*]], label [[EXIT]]
; CHECK: bb2:
; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[X]], [[Z]]
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[U_1:%.*]] = icmp eq i8 [[X]], [[Z]]
; CHECK-NEXT: call void @use(i1 [[U_1]])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ define i1 @test_conds_single_use_in_different_blocks(i8 %x) {
; CHECK-LABEL: @test_conds_single_use_in_different_blocks(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[X]], 5
; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[X]], 5
; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
Expand All @@ -31,8 +30,7 @@ define i1 @test_conds_single_use_in_different_blocks_2(i8 %x, i8 %y) {
; CHECK-LABEL: @test_conds_single_use_in_different_blocks_2(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[Y:%.*]], 5
; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[Y]], [[X]]
; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[Y:%.*]], [[X]]
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[Y]], 5
; CHECK-NEXT: br i1 [[C_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]]
; CHECK: then.1:
Expand Down Expand Up @@ -70,7 +68,6 @@ define i1 @test_conds_multiple_uses_in_different_blocks_2(i8 %x, i8 %y) {
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[Y:%.*]], 5
; CHECK-NEXT: call void @llvm.assume(i1 [[T_1]])
; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[Y]], [[X]]
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[Y]], 5
; CHECK-NEXT: br i1 [[C_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]]
; CHECK: then.1:
; CHECK-NEXT: br i1 [[C_2]], label [[THEN_2:%.*]], label [[ELSE]]
Expand Down
3 changes: 0 additions & 3 deletions llvm/test/Transforms/ConstraintElimination/vector-compares.ll
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ define void @test_vector_iv(i32 %x, i1 %c) {
; CHECK-NEXT: br i1 [[C_1]], label [[LOOP:%.*]], label [[BB2]]
; CHECK: loop:
; CHECK-NEXT: [[IV:%.*]] = phi <4 x i8> [ zeroinitializer, [[PRE]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
; CHECK-NEXT: [[T_1:%.*]] = icmp ule i32 [[X]], 10
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: [[F_1:%.*]] = icmp ugt i32 [[X]], 10
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: [[C_2:%.*]] = icmp ule i32 [[X]], 9
; CHECK-NEXT: call void @use(i1 [[C_2]])
Expand All @@ -26,7 +24,6 @@ define void @test_vector_iv(i32 %x, i1 %c) {
; CHECK-NEXT: [[EC:%.*]] = icmp eq i8 [[E]], 100
; CHECK-NEXT: br i1 [[EC]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
; CHECK-NEXT: [[C_4:%.*]] = icmp ule i32 [[X]], 10
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: ret void
; CHECK: bb2:
Expand Down
11 changes: 0 additions & 11 deletions llvm/test/Transforms/ConstraintElimination/wrapping-math.ll
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ define i1 @wrapping_add_known_1(i8 %a) {
; CHECK-NEXT: br i1 [[PRE]], label [[THEN:%.*]], label [[ELSE:%.*]]
; CHECK: then:
; CHECK-NEXT: [[SUB_1:%.*]] = add i8 [[A]], -1
; CHECK-NEXT: [[C_1:%.*]] = icmp eq i8 [[SUB_1]], 0
; CHECK-NEXT: ret i1 true
; CHECK: else:
; CHECK-NEXT: [[SUB_2:%.*]] = add i8 [[A]], -1
Expand Down Expand Up @@ -82,7 +81,6 @@ define i1 @test_48253_eq_ne(i8 %a, i8 %b) {
; CHECK-NEXT: br i1 [[OR]], label [[EXIT_1:%.*]], label [[IF_END:%.*]]
; CHECK: if.end:
; CHECK-NEXT: [[SUB_1:%.*]] = add i8 [[B]], -1
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[SUB_1]], [[A]]
; CHECK-NEXT: [[SUB_2:%.*]] = add i8 [[B]], -2
; CHECK-NEXT: [[C_2:%.*]] = icmp ult i8 [[SUB_2]], [[A]]
; CHECK-NEXT: [[XOR_1:%.*]] = xor i1 true, [[C_2]]
Expand Down Expand Up @@ -131,10 +129,7 @@ define i1 @test_ult(i8 %a, i8 %b) {
; CHECK-NEXT: [[ADD_1:%.*]] = add i8 [[A]], 1
; CHECK-NEXT: br i1 [[AND]], label [[IF_END:%.*]], label [[EXIT_1:%.*]]
; CHECK: if.end:
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[SUB_1]], [[B]]
; CHECK-NEXT: [[T_2:%.*]] = icmp ult i8 [[SUB_2]], [[B]]
; CHECK-NEXT: [[XOR_1:%.*]] = xor i1 true, true
; CHECK-NEXT: [[T_3:%.*]] = icmp ult i8 [[SUB_3]], [[B]]
; CHECK-NEXT: [[XOR_2:%.*]] = xor i1 [[XOR_1]], true
; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[SUB_4]], [[B]]
; CHECK-NEXT: [[XOR_3:%.*]] = xor i1 [[XOR_2]], [[C_1]]
Expand Down Expand Up @@ -279,10 +274,7 @@ define i1 @wrapping_add_known_1_add_nuw(i8 %a) {
; CHECK-NEXT: call void @llvm.assume(i1 [[PRE]])
; CHECK-NEXT: [[SUB_1:%.*]] = add i8 [[A]], -1
; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[SUB_1]], 10
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i8 [[ADD]], 10
; CHECK-NEXT: [[T_2:%.*]] = icmp ule i8 [[ADD]], 10
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, true
; CHECK-NEXT: [[F_1:%.*]] = icmp ult i8 [[ADD]], 10
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], false
; CHECK-NEXT: ret i1 [[RES_2]]
;
Expand All @@ -306,10 +298,7 @@ define i1 @add_nuw_wrapping_add_known_1(i8 %a) {
; CHECK-NEXT: call void @llvm.assume(i1 [[PRE]])
; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[A]], 10
; CHECK-NEXT: [[SUB_1:%.*]] = add i8 [[ADD]], -1
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i8 [[SUB_1]], 10
; CHECK-NEXT: [[T_2:%.*]] = icmp ule i8 [[SUB_1]], 10
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, true
; CHECK-NEXT: [[F_1:%.*]] = icmp ult i8 [[SUB_1]], 10
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], false
; CHECK-NEXT: ret i1 [[RES_2]]
;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ define i1 @test(i8 %x, i8 %y) {
; CHECK-NEXT: [[CMP_0:%.*]] = icmp uge i8 [[ADD]], 10
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP_0]])
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[X]] to i16
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i16 [[EXT]], 0
; CHECK-NEXT: [[C_1:%.*]] = icmp uge i16 [[EXT]], 1
; CHECK-NEXT: [[RES:%.*]] = xor i1 true, [[C_1]]
; CHECK-NEXT: ret i1 [[RES]]
Expand All @@ -31,9 +30,7 @@ define i1 @test2(i8 %x, i8 %y) {
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP_0]])
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[X]] to i16
; CHECK-NEXT: [[ADD_1:%.*]] = add nuw nsw i16 [[EXT]], 1
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i16 [[ADD_1]], 1
; CHECK-NEXT: [[C_1:%.*]] = icmp uge i16 [[ADD_1]], 2
; CHECK-NEXT: [[F_1:%.*]] = icmp ult i16 [[ADD_1]], 1
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, [[C_1]]
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], false
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i16 [[ADD_1]], 1
Expand Down Expand Up @@ -63,8 +60,6 @@ define i1 @gep_zext_idx(ptr %p, i8 %cnt, i8 %off) {
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[CNT]] to i16
; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i16 [[EXT]]
; CHECK-NEXT: [[T_1:%.*]] = icmp uge ptr [[ADD_PTR]], [[P]]
; CHECK-NEXT: [[F_1:%.*]] = icmp ult ptr [[ADD_PTR]], [[P]]
; CHECK-NEXT: [[GEP_11:%.*]] = getelementptr inbounds i32, ptr [[P]], i16 11
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt ptr [[ADD_PTR]], [[GEP_11]]
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, false
Expand Down
26 changes: 15 additions & 11 deletions llvm/test/Transforms/ConstraintElimination/zext.ll
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ define i1 @uge_zext(i8 %x, i16 %y) {
; CHECK-NEXT: [[C_1:%.*]] = icmp uge i16 [[X_EXT]], [[Y:%.*]]
; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i16 [[X_EXT]], [[Y]]
; CHECK-NEXT: [[C_2:%.*]] = icmp uge i16 [[X_EXT]], 10
; CHECK-NEXT: [[R_1:%.*]] = xor i1 true, [[C_2]]
; CHECK-NEXT: [[C_3:%.*]] = icmp uge i16 [[Y]], [[X_EXT]]
Expand All @@ -17,8 +16,6 @@ define i1 @uge_zext(i8 %x, i16 %y) {
; CHECK-NEXT: [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
; CHECK-NEXT: ret i1 [[R_3]]
; CHECK: bb2:
; CHECK-NEXT: [[T_2:%.*]] = icmp uge i16 [[Y]], [[X_EXT]]
; CHECK-NEXT: [[F_1:%.*]] = icmp uge i16 [[X_EXT]], [[Y]]
; CHECK-NEXT: [[R_4:%.*]] = xor i1 true, false
; CHECK-NEXT: [[C_5:%.*]] = icmp uge i16 [[X_EXT]], 10
; CHECK-NEXT: [[R_5:%.*]] = xor i1 [[R_4]], [[C_5]]
Expand Down Expand Up @@ -60,7 +57,6 @@ define i1 @uge_compare_short_and_extended(i8 %x, i8 %y) {
; CHECK-NEXT: [[Y_EXT:%.*]] = zext i8 [[Y]] to i16
; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i16 [[X_EXT]], [[Y_EXT]]
; CHECK-NEXT: [[C_2:%.*]] = icmp uge i16 [[X_EXT]], 10
; CHECK-NEXT: [[R_1:%.*]] = xor i1 true, [[C_2]]
; CHECK-NEXT: [[C_3:%.*]] = icmp sge i16 [[Y_EXT]], [[X_EXT]]
Expand All @@ -69,8 +65,6 @@ define i1 @uge_compare_short_and_extended(i8 %x, i8 %y) {
; CHECK-NEXT: [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
; CHECK-NEXT: ret i1 [[R_3]]
; CHECK: bb2:
; CHECK-NEXT: [[T_2:%.*]] = icmp uge i16 [[Y_EXT]], [[X_EXT]]
; CHECK-NEXT: [[F_1:%.*]] = icmp uge i16 [[X_EXT]], [[Y_EXT]]
; CHECK-NEXT: [[R_4:%.*]] = xor i1 true, false
; CHECK-NEXT: [[C_5:%.*]] = icmp uge i16 [[X_EXT]], 10
; CHECK-NEXT: [[R_5:%.*]] = xor i1 [[R_4]], [[C_5]]
Expand Down Expand Up @@ -123,8 +117,6 @@ define i1 @uge_zext_add(i8 %x, i16 %y) {
; CHECK-NEXT: [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
; CHECK-NEXT: ret i1 [[R_3]]
; CHECK: bb2:
; CHECK-NEXT: [[T_2:%.*]] = icmp uge i16 [[Y]], [[X_EXT]]
; CHECK-NEXT: [[F_1:%.*]] = icmp uge i16 [[X_EXT]], [[Y]]
; CHECK-NEXT: [[R_4:%.*]] = xor i1 true, false
; CHECK-NEXT: [[C_5:%.*]] = icmp uge i16 [[X_EXT]], 10
; CHECK-NEXT: [[R_5:%.*]] = xor i1 [[R_4]], [[C_5]]
Expand Down Expand Up @@ -167,7 +159,6 @@ define i1 @sge_zext(i8 %x, i16 %y) {
; CHECK-NEXT: [[C_1:%.*]] = icmp sge i16 [[X_EXT]], [[Y:%.*]]
; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: [[T_1:%.*]] = icmp sge i16 [[X_EXT]], [[Y]]
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i16 [[X_EXT]], 10
; CHECK-NEXT: [[R_1:%.*]] = xor i1 true, [[C_2]]
; CHECK-NEXT: [[C_3:%.*]] = icmp sge i16 [[Y]], [[X_EXT]]
Expand All @@ -176,8 +167,6 @@ define i1 @sge_zext(i8 %x, i16 %y) {
; CHECK-NEXT: [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
; CHECK-NEXT: ret i1 [[R_3]]
; CHECK: bb2:
; CHECK-NEXT: [[T_2:%.*]] = icmp sge i16 [[Y]], [[X_EXT]]
; CHECK-NEXT: [[F_1:%.*]] = icmp sge i16 [[X_EXT]], [[Y]]
; CHECK-NEXT: [[R_4:%.*]] = xor i1 true, false
; CHECK-NEXT: [[C_5:%.*]] = icmp sge i16 [[X_EXT]], 10
; CHECK-NEXT: [[R_5:%.*]] = xor i1 [[R_4]], [[C_5]]
Expand Down Expand Up @@ -266,6 +255,21 @@ bb2:
}

define i1 @test_pr58009_const_zext() {
; CHECK-LABEL: @test_pr58009_const_zext(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[EXT_T_1:%.*]] = zext i1 true to i16
; CHECK-NEXT: [[EXT_T_2:%.*]] = zext i1 true to i16
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, false
; CHECK-NEXT: [[EXT_F_1:%.*]] = zext i1 false to i16
; CHECK-NEXT: [[EXT_F_2:%.*]] = zext i1 false to i16
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], true
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[RES_2]], false
; CHECK-NEXT: [[T_3:%.*]] = icmp ult i16 [[EXT_F_1]], [[EXT_T_2]]
; CHECK-NEXT: [[F_3:%.*]] = icmp ugt i16 [[EXT_F_1]], [[EXT_T_2]]
; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], [[T_3]]
; CHECK-NEXT: [[RES_5:%.*]] = xor i1 [[RES_4]], [[F_3]]
; CHECK-NEXT: ret i1 [[RES_5]]
;
entry:
%ext.t.1 = zext i1 true to i16
%ext.t.2 = zext i1 true to i16
Expand Down