Skip to content

Commit 98e016d

Browse files
committed
[ConstraintElim] Handle trivial (ICMP_ULE, 0, B) in doesHold.
D152730 may add trivial pre-conditions of the form (ICMP_ULE, 0, B), which won't be handled automatically by the constraint system, because we don't add Var >= 0 for all variables in the unsigned system. Handling the trivial condition explicitly here avoids having the increase the number of rows in the system per variable. https://alive2.llvm.org/ce/z/QC92ur Depends on D152730. Fixes llvm#63125. Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D158776
1 parent 637dfc5 commit 98e016d

14 files changed

+50
-72
lines changed

llvm/lib/Transforms/Scalar/ConstraintElimination.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,17 @@ ConstraintInfo::getConstraint(CmpInst::Predicate Pred, Value *Op0, Value *Op1,
676676
ConstraintTy ConstraintInfo::getConstraintForSolving(CmpInst::Predicate Pred,
677677
Value *Op0,
678678
Value *Op1) const {
679+
Constant *NullC = Constant::getNullValue(Op0->getType());
680+
// Handle trivially true compares directly to avoid adding V UGE 0 constraints
681+
// for all variables in the unsigned system.
682+
if ((Pred == CmpInst::ICMP_ULE && Op0 == NullC) ||
683+
(Pred == CmpInst::ICMP_UGE && Op1 == NullC)) {
684+
auto &Value2Index = getValue2Index(false);
685+
// Return constraint that's trivially true.
686+
return ConstraintTy(SmallVector<int64_t, 8>(Value2Index.size(), 0), false,
687+
false, false);
688+
}
689+
679690
// If both operands are known to be non-negative, change signed predicates to
680691
// unsigned ones. This increases the reasoning effectiveness in combination
681692
// with the signed <-> unsigned transfer logic.

llvm/test/Transforms/ConstraintElimination/add-nsw.ll

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -774,8 +774,7 @@ define i1 @add_neg_1_known_sge_uge_1(i32 %a) {
774774
; CHECK-NEXT: [[A_SGE:%.*]] = icmp sge i32 [[A:%.*]], 1
775775
; CHECK-NEXT: call void @llvm.assume(i1 [[A_SGE]])
776776
; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[A]], -1
777-
; CHECK-NEXT: [[C:%.*]] = icmp uge i32 [[SUB]], 0
778-
; CHECK-NEXT: ret i1 [[C]]
777+
; CHECK-NEXT: ret i1 true
779778
;
780779
entry:
781780
%a.sge = icmp sge i32 %a, 1
@@ -808,8 +807,7 @@ define i1 @add_neg_1_not_known_sge_uge_1(i32 %a) {
808807
; CHECK-NEXT: [[A_SGE:%.*]] = icmp sge i32 [[A:%.*]], 0
809808
; CHECK-NEXT: call void @llvm.assume(i1 [[A_SGE]])
810809
; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[A]], -1
811-
; CHECK-NEXT: [[C:%.*]] = icmp uge i32 [[SUB]], 0
812-
; CHECK-NEXT: ret i1 [[C]]
810+
; CHECK-NEXT: ret i1 true
813811
;
814812
entry:
815813
%a.sge = icmp sge i32 %a, 0
@@ -842,8 +840,7 @@ define i1 @add_neg_3_known_sge_uge_1(i32 %a) {
842840
; CHECK-NEXT: [[A_SGE:%.*]] = icmp sge i32 [[A:%.*]], 4
843841
; CHECK-NEXT: call void @llvm.assume(i1 [[A_SGE]])
844842
; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[A]], -3
845-
; CHECK-NEXT: [[C:%.*]] = icmp uge i32 [[SUB]], 0
846-
; CHECK-NEXT: ret i1 [[C]]
843+
; CHECK-NEXT: ret i1 true
847844
;
848845
entry:
849846
%a.sge = icmp sge i32 %a, 4
@@ -876,8 +873,7 @@ define i1 @add_neg_3_not_known_sge_uge_1(i32 %a) {
876873
; CHECK-NEXT: [[A_SGE:%.*]] = icmp sge i32 [[A:%.*]], 2
877874
; CHECK-NEXT: call void @llvm.assume(i1 [[A_SGE]])
878875
; CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[A]], -3
879-
; CHECK-NEXT: [[C:%.*]] = icmp uge i32 [[SUB]], 0
880-
; CHECK-NEXT: ret i1 [[C]]
876+
; CHECK-NEXT: ret i1 true
881877
;
882878
entry:
883879
%a.sge = icmp sge i32 %a, 2

llvm/test/Transforms/ConstraintElimination/add-nuw.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,9 +227,7 @@ define void @test.decompose.nonconst(i8 %a, i8 %b, i8 %c, i8 %d) {
227227
; CHECK-NEXT: [[AND_0:%.*]] = and i1 [[C_0]], [[C_1]]
228228
; CHECK-NEXT: br i1 [[AND_0]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
229229
; CHECK: if.then:
230-
; CHECK-NEXT: [[C_2:%.*]] = icmp uge i8 [[A]], 0
231-
; CHECK-NEXT: [[C_3:%.*]] = icmp uge i8 [[B]], 0
232-
; CHECK-NEXT: [[AND_1:%.*]] = and i1 [[C_2]], [[C_3]]
230+
; CHECK-NEXT: [[AND_1:%.*]] = and i1 true, true
233231
; CHECK-NEXT: br i1 [[AND_1]], label [[IF_THEN_2:%.*]], label [[IF_END]]
234232
; CHECK: if.then.2:
235233
; CHECK-NEXT: [[ADD_0:%.*]] = add nuw i8 [[A]], [[B]]

llvm/test/Transforms/ConstraintElimination/and.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,9 @@ exit:
118118
define i4 @and_compare_undef(i4 %N, i4 %step) {
119119
; CHECK-LABEL: @and_compare_undef(
120120
; CHECK-NEXT: step.check:
121-
; CHECK-NEXT: [[STEP_POS:%.*]] = icmp uge i4 [[STEP:%.*]], 0
122121
; CHECK-NEXT: [[B1:%.*]] = add i4 undef, -1
123122
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i4 [[B1]], [[N:%.*]]
124-
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 [[STEP_POS]], [[STEP_ULT_N]]
123+
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 true, [[STEP_ULT_N]]
125124
; CHECK-NEXT: br i1 [[AND_STEP]], label [[PTR_CHECK:%.*]], label [[EXIT:%.*]]
126125
; CHECK: ptr.check:
127126
; CHECK-NEXT: br label [[EXIT]]

llvm/test/Transforms/ConstraintElimination/gep-arithmetic-add.ll

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ define i1 @n_unknown(ptr %dst, i32 %n, i32 %i) {
1414
; CHECK: exit:
1515
; CHECK-NEXT: ret i1 false
1616
; CHECK: pre.bb.2:
17-
; CHECK-NEXT: [[PRE_2:%.*]] = icmp uge i32 [[I:%.*]], 0
18-
; CHECK-NEXT: br i1 [[PRE_2]], label [[TGT_BB:%.*]], label [[EXIT]]
17+
; CHECK-NEXT: br i1 true, label [[TGT_BB:%.*]], label [[EXIT]]
1918
; CHECK: tgt.bb:
20-
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[I]], [[N]]
19+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[I:%.*]], [[N]]
2120
; CHECK-NEXT: ret i1 [[CMP1]]
2221
;
2322
entry:
@@ -50,10 +49,9 @@ define i1 @n_known_zero_due_to_nuw(ptr %dst, i32 %n, i32 %i) {
5049
; CHECK: exit:
5150
; CHECK-NEXT: ret i1 false
5251
; CHECK: pre.bb.2:
53-
; CHECK-NEXT: [[PRE_2:%.*]] = icmp uge i32 [[I:%.*]], 0
54-
; CHECK-NEXT: br i1 [[PRE_2]], label [[TGT_BB:%.*]], label [[EXIT]]
52+
; CHECK-NEXT: br i1 true, label [[TGT_BB:%.*]], label [[EXIT]]
5553
; CHECK: tgt.bb:
56-
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[I]], [[N]]
54+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[I:%.*]], [[N]]
5755
; CHECK-NEXT: ret i1 [[CMP1]]
5856
;
5957
entry:
@@ -86,10 +84,9 @@ define i4 @inc_ptr_N_could_be_negative(ptr %src, ptr %lower, ptr %upper, i8 %N,
8684
; CHECK: trap.bb:
8785
; CHECK-NEXT: ret i4 2
8886
; CHECK: step.check:
89-
; CHECK-NEXT: [[STEP_POS:%.*]] = icmp uge i8 [[STEP:%.*]], 0
90-
; CHECK-NEXT: [[NEXT:%.*]] = add nuw nsw i8 [[STEP]], 2
87+
; CHECK-NEXT: [[NEXT:%.*]] = add nuw nsw i8 [[STEP:%.*]], 2
9188
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i8 [[NEXT]], [[N]]
92-
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 [[STEP_POS]], [[STEP_ULT_N]]
89+
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 true, [[STEP_ULT_N]]
9390
; CHECK-NEXT: br i1 [[AND_STEP]], label [[PTR_CHECK:%.*]], label [[EXIT:%.*]]
9491
; CHECK: ptr.check:
9592
; CHECK-NEXT: [[SRC_STEP:%.*]] = getelementptr inbounds i8, ptr [[SRC]], i8 [[STEP]]
@@ -141,10 +138,9 @@ define i4 @inc_ptr_src_uge_end(ptr %src, ptr %lower, ptr %upper, i16 %N, i16 %st
141138
; CHECK: trap.bb:
142139
; CHECK-NEXT: ret i4 2
143140
; CHECK: step.check:
144-
; CHECK-NEXT: [[STEP_POS:%.*]] = icmp uge i16 [[STEP:%.*]], 0
145-
; CHECK-NEXT: [[NEXT:%.*]] = add nuw nsw i16 [[STEP]], 2
141+
; CHECK-NEXT: [[NEXT:%.*]] = add nuw nsw i16 [[STEP:%.*]], 2
146142
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i16 [[NEXT]], [[N]]
147-
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 [[STEP_POS]], [[STEP_ULT_N]]
143+
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 true, [[STEP_ULT_N]]
148144
; CHECK-NEXT: br i1 [[AND_STEP]], label [[PTR_CHECK:%.*]], label [[EXIT:%.*]]
149145
; CHECK: ptr.check:
150146
; CHECK-NEXT: [[SRC_STEP:%.*]] = getelementptr inbounds i8, ptr [[SRC]], i16 [[STEP]]

llvm/test/Transforms/ConstraintElimination/gep-arithmetic.ll

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -325,9 +325,8 @@ define i4 @ptr_N_and_step_signed_positive_unsigned_checks_only(ptr %src, ptr %lo
325325
; CHECK: trap.bb:
326326
; CHECK-NEXT: ret i4 2
327327
; CHECK: step.check:
328-
; CHECK-NEXT: [[STEP_UGE_0:%.*]] = icmp uge i16 [[STEP:%.*]], 0
329-
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i16 [[STEP]], [[N]]
330-
; CHECK-NEXT: [[AND_2:%.*]] = and i1 [[STEP_UGE_0]], [[STEP_ULT_N]]
328+
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i16 [[STEP:%.*]], [[N]]
329+
; CHECK-NEXT: [[AND_2:%.*]] = and i1 true, [[STEP_ULT_N]]
331330
; CHECK-NEXT: br i1 [[AND_2]], label [[PTR_CHECK:%.*]], label [[EXIT:%.*]]
332331
; CHECK: ptr.check:
333332
; CHECK-NEXT: [[SRC_STEP:%.*]] = getelementptr inbounds i8, ptr [[SRC]], i16 1
@@ -381,9 +380,8 @@ define i4 @ptr_N_signed_positive(ptr %src, ptr %lower, ptr %upper, i16 %N, i16 %
381380
; CHECK: trap.bb:
382381
; CHECK-NEXT: ret i4 2
383382
; CHECK: step.check:
384-
; CHECK-NEXT: [[STEP_POS:%.*]] = icmp uge i16 [[STEP:%.*]], 0
385-
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i16 [[STEP]], [[N]]
386-
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 [[STEP_POS]], [[STEP_ULT_N]]
383+
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i16 [[STEP:%.*]], [[N]]
384+
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 true, [[STEP_ULT_N]]
387385
; CHECK-NEXT: br i1 [[AND_STEP]], label [[PTR_CHECK:%.*]], label [[EXIT:%.*]]
388386
; CHECK: ptr.check:
389387
; CHECK-NEXT: [[SRC_STEP:%.*]] = getelementptr inbounds i8, ptr [[SRC]], i16 [[STEP]]
@@ -432,9 +430,8 @@ define i4 @ptr_N_could_be_negative(ptr %src, ptr %lower, ptr %upper, i8 %N, i8 %
432430
; CHECK: trap.bb:
433431
; CHECK-NEXT: ret i4 2
434432
; CHECK: step.check:
435-
; CHECK-NEXT: [[STEP_POS:%.*]] = icmp uge i8 [[STEP:%.*]], 0
436-
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i8 [[STEP]], [[N]]
437-
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 [[STEP_POS]], [[STEP_ULT_N]]
433+
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i8 [[STEP:%.*]], [[N]]
434+
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 true, [[STEP_ULT_N]]
438435
; CHECK-NEXT: br i1 [[AND_STEP]], label [[PTR_CHECK:%.*]], label [[EXIT:%.*]]
439436
; CHECK: ptr.check:
440437
; CHECK-NEXT: [[SRC_STEP:%.*]] = getelementptr inbounds i8, ptr [[SRC]], i8 [[STEP]]
@@ -485,9 +482,8 @@ define i4 @ptr_src_uge_end(ptr %src, ptr %lower, ptr %upper, i8 %N, i8 %step) {
485482
; CHECK: trap.bb:
486483
; CHECK-NEXT: ret i4 2
487484
; CHECK: step.check:
488-
; CHECK-NEXT: [[STEP_POS:%.*]] = icmp uge i8 [[STEP:%.*]], 0
489-
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i8 [[STEP]], [[N]]
490-
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 [[STEP_POS]], [[STEP_ULT_N]]
485+
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i8 [[STEP:%.*]], [[N]]
486+
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 true, [[STEP_ULT_N]]
491487
; CHECK-NEXT: br i1 [[AND_STEP]], label [[PTR_CHECK:%.*]], label [[EXIT:%.*]]
492488
; CHECK: ptr.check:
493489
; CHECK-NEXT: [[SRC_STEP:%.*]] = getelementptr inbounds i8, ptr [[SRC]], i8 [[STEP]]
@@ -541,9 +537,8 @@ define i4 @ptr_N_unsigned_positive(ptr %src, ptr %lower, ptr %upper, i16 %N, i16
541537
; CHECK: trap.bb:
542538
; CHECK-NEXT: ret i4 2
543539
; CHECK: step.check:
544-
; CHECK-NEXT: [[STEP_POS:%.*]] = icmp uge i16 [[STEP:%.*]], 0
545-
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i16 [[STEP]], [[N]]
546-
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 [[STEP_POS]], [[STEP_ULT_N]]
540+
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i16 [[STEP:%.*]], [[N]]
541+
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 true, [[STEP_ULT_N]]
547542
; CHECK-NEXT: br i1 [[AND_STEP]], label [[PTR_CHECK:%.*]], label [[EXIT:%.*]]
548543
; CHECK: ptr.check:
549544
; CHECK-NEXT: [[SRC_STEP:%.*]] = getelementptr inbounds i8, ptr [[SRC]], i16 [[STEP]]
@@ -596,9 +591,8 @@ define i4 @ptr_N_signed_positive_assume(ptr %src, ptr %lower, ptr %upper, i16 %N
596591
; CHECK: trap.bb:
597592
; CHECK-NEXT: ret i4 2
598593
; CHECK: step.check:
599-
; CHECK-NEXT: [[STEP_POS:%.*]] = icmp uge i16 [[STEP:%.*]], 0
600-
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i16 [[STEP]], [[N]]
601-
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 [[STEP_POS]], [[STEP_ULT_N]]
594+
; CHECK-NEXT: [[STEP_ULT_N:%.*]] = icmp ult i16 [[STEP:%.*]], [[N]]
595+
; CHECK-NEXT: [[AND_STEP:%.*]] = and i1 true, [[STEP_ULT_N]]
602596
; CHECK-NEXT: br i1 [[AND_STEP]], label [[PTR_CHECK:%.*]], label [[EXIT:%.*]]
603597
; CHECK: ptr.check:
604598
; CHECK-NEXT: [[SRC_STEP:%.*]] = getelementptr inbounds i8, ptr [[SRC]], i16 [[STEP]]

llvm/test/Transforms/ConstraintElimination/loops-header-tested-pointer-cmps.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -571,14 +571,12 @@ define void @ne_check_in_loop_with_zext(ptr %ptr, ptr %lower, ptr %upper, i8 %n)
571571
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]
572572
; CHECK: for.body:
573573
; CHECK-NEXT: [[GEP_IV:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i16 [[IV]]
574-
; CHECK-NEXT: [[CMP_IV_UPPER:%.*]] = icmp ule ptr [[UPPER]], [[GEP_IV]]
575-
; CHECK-NEXT: [[OR:%.*]] = or i1 false, [[CMP_IV_UPPER]]
574+
; CHECK-NEXT: [[OR:%.*]] = or i1 false, false
576575
; CHECK-NEXT: br i1 [[OR]], label [[TRAP]], label [[FOR_BODY_1:%.*]]
577576
; CHECK: for.body.1:
578577
; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i16 [[IV]], 1
579578
; CHECK-NEXT: [[GEP_IV_1:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i16 [[ADD]]
580-
; CHECK-NEXT: [[CMP_IV_1_UPPER:%.*]] = icmp ule ptr [[UPPER]], [[GEP_IV_1]]
581-
; CHECK-NEXT: [[OR_1:%.*]] = or i1 false, [[CMP_IV_1_UPPER]]
579+
; CHECK-NEXT: [[OR_1:%.*]] = or i1 false, false
582580
; CHECK-NEXT: br i1 [[OR_1]], label [[TRAP]], label [[FOR_LATCH]]
583581
; CHECK: for.latch:
584582
; CHECK-NEXT: store i8 0, ptr [[GEP_IV]], align 4

llvm/test/Transforms/ConstraintElimination/loops-header-tested-pointer-iv.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ define void @loop_pointer_iv_null_start(ptr %end, ptr %upper) {
5555
; CHECK-NEXT: [[IV:%.*]] = phi ptr [ null, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]
5656
; CHECK-NEXT: [[C_1:%.*]] = icmp ule ptr [[IV]], [[END]]
5757
; CHECK-NEXT: call void @use(i1 [[C_1]])
58-
; CHECK-NEXT: [[C_2:%.*]] = icmp uge ptr [[IV]], null
59-
; CHECK-NEXT: call void @use(i1 [[C_2]])
58+
; CHECK-NEXT: call void @use(i1 true)
6059
; CHECK-NEXT: [[C_3:%.*]] = icmp ule ptr [[IV]], [[END]]
6160
; CHECK-NEXT: br i1 [[C_3]], label [[LOOP_LATCH]], label [[EXIT]]
6261
; CHECK: loop.latch:

llvm/test/Transforms/ConstraintElimination/monotonic-int-phis-cfg.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,8 @@ define void @multiple_successor_to_header_same_incoming(i8 %len.n, i16 %a, i1 %c
6262
; CHECK-NEXT: [[C:%.*]] = icmp eq i16 [[IV]], [[LEN]]
6363
; CHECK-NEXT: br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]
6464
; CHECK: for.body:
65-
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i16 [[IV]], 0
6665
; CHECK-NEXT: [[T_2:%.*]] = icmp ult i16 [[IV]], [[A]]
67-
; CHECK-NEXT: [[AND:%.*]] = and i1 [[T_1]], [[T_2]]
66+
; CHECK-NEXT: [[AND:%.*]] = and i1 true, [[T_2]]
6867
; CHECK-NEXT: br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]
6968
; CHECK: loop.latch:
7069
; CHECK-NEXT: call void @use(i16 [[IV]])
@@ -124,9 +123,8 @@ define void @multiple_successor_to_header_different_incoming(i8 %len.n, i16 %a,
124123
; CHECK-NEXT: [[C:%.*]] = icmp eq i16 [[IV]], [[LEN]]
125124
; CHECK-NEXT: br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]
126125
; CHECK: for.body:
127-
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i16 [[IV]], 0
128126
; CHECK-NEXT: [[T_2:%.*]] = icmp ult i16 [[IV]], [[A]]
129-
; CHECK-NEXT: [[AND:%.*]] = and i1 [[T_1]], [[T_2]]
127+
; CHECK-NEXT: [[AND:%.*]] = and i1 true, [[T_2]]
130128
; CHECK-NEXT: br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]
131129
; CHECK: loop.latch:
132130
; CHECK-NEXT: call void @use(i16 [[IV]])

llvm/test/Transforms/ConstraintElimination/monotonic-int-phis.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ define void @test_monotonic_ptr_iv_inc_1_eq_to_uge(i8 %len.n, i16 %a) {
2020
; CHECK-NEXT: [[C:%.*]] = icmp eq i16 [[IV]], [[LEN]]
2121
; CHECK-NEXT: br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]
2222
; CHECK: for.body:
23-
; CHECK-NEXT: [[T_2:%.*]] = icmp ult i16 [[IV]], [[A]]
24-
; CHECK-NEXT: [[AND:%.*]] = and i1 true, [[T_2]]
23+
; CHECK-NEXT: [[AND:%.*]] = and i1 true, true
2524
; CHECK-NEXT: br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]
2625
; CHECK: loop.latch:
2726
; CHECK-NEXT: call void @use(i16 [[IV]])
@@ -164,9 +163,8 @@ define void @test_monotonic_ptr_iv_inc_2_eq_to_uge_variable_start(i16 %start, i8
164163
; CHECK-NEXT: [[C:%.*]] = icmp eq i16 [[IV]], [[LEN]]
165164
; CHECK-NEXT: br i1 [[C]], label [[EXIT]], label [[FOR_BODY:%.*]]
166165
; CHECK: for.body:
167-
; CHECK-NEXT: [[T_1:%.*]] = icmp uge i16 [[IV]], 0
168166
; CHECK-NEXT: [[T_2:%.*]] = icmp ult i16 [[IV]], [[A]]
169-
; CHECK-NEXT: [[AND:%.*]] = and i1 [[T_1]], [[T_2]]
167+
; CHECK-NEXT: [[AND:%.*]] = and i1 true, [[T_2]]
170168
; CHECK-NEXT: br i1 [[AND]], label [[LOOP_LATCH]], label [[EXIT]]
171169
; CHECK: loop.latch:
172170
; CHECK-NEXT: call void @use(i16 [[IV]])

llvm/test/Transforms/ConstraintElimination/transfer-signed-facts-to-unsigned.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,7 @@ define i1 @len_not_known_positive2(i8 %len, i8 %idx) {
114114
; CHECK-LABEL: @len_not_known_positive2(
115115
; CHECK-NEXT: entry:
116116
; CHECK-NEXT: [[IDX_SLT_LEN:%.*]] = icmp slt i8 [[IDX:%.*]], [[LEN:%.*]]
117-
; CHECK-NEXT: [[IDX_POS:%.*]] = icmp uge i8 [[IDX]], 0
118-
; CHECK-NEXT: [[AND_1:%.*]] = and i1 [[IDX_SLT_LEN]], [[IDX_POS]]
117+
; CHECK-NEXT: [[AND_1:%.*]] = and i1 [[IDX_SLT_LEN]], true
119118
; CHECK-NEXT: br i1 [[AND_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]]
120119
; CHECK: then.1:
121120
; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[IDX]], [[LEN]]

llvm/test/Transforms/ConstraintElimination/transfer-unsigned-facts-to-signed.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,8 @@ else:
8787
define i1 @idx_not_known_positive_via_len_uge(i8 %len, i8 %idx) {
8888
; CHECK-LABEL: @idx_not_known_positive_via_len_uge(
8989
; CHECK-NEXT: entry:
90-
; CHECK-NEXT: [[LEN_POS:%.*]] = icmp uge i8 [[LEN:%.*]], 0
91-
; CHECK-NEXT: [[IDX_ULT_LEN:%.*]] = icmp ult i8 [[IDX:%.*]], [[LEN]]
92-
; CHECK-NEXT: [[AND_1:%.*]] = and i1 [[LEN_POS]], [[IDX_ULT_LEN]]
90+
; CHECK-NEXT: [[IDX_ULT_LEN:%.*]] = icmp ult i8 [[IDX:%.*]], [[LEN:%.*]]
91+
; CHECK-NEXT: [[AND_1:%.*]] = and i1 true, [[IDX_ULT_LEN]]
9392
; CHECK-NEXT: br i1 [[AND_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]]
9493
; CHECK: then.1:
9594
; CHECK-NEXT: [[C_2:%.*]] = icmp sge i8 [[IDX]], 0

llvm/test/Transforms/ConstraintElimination/usub-with-overflow.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,9 @@ exit.fail:
212212
define i8 @usub_may_overflow1(i8 %a, i8 %b) {
213213
; CHECK-LABEL: @usub_may_overflow1(
214214
; CHECK-NEXT: entry:
215-
; CHECK-NEXT: [[C_1:%.*]] = icmp uge i8 [[A:%.*]], 0
216-
; CHECK-NEXT: br i1 [[C_1]], label [[MATH:%.*]], label [[EXIT_FAIL:%.*]]
215+
; CHECK-NEXT: br i1 true, label [[MATH:%.*]], label [[EXIT_FAIL:%.*]]
217216
; CHECK: math:
218-
; CHECK-NEXT: [[OP:%.*]] = tail call { i8, i1 } @llvm.usub.with.overflow.i8(i8 [[B:%.*]], i8 [[A]])
217+
; CHECK-NEXT: [[OP:%.*]] = tail call { i8, i1 } @llvm.usub.with.overflow.i8(i8 [[B:%.*]], i8 [[A:%.*]])
219218
; CHECK-NEXT: [[STATUS:%.*]] = extractvalue { i8, i1 } [[OP]], 1
220219
; CHECK-NEXT: br i1 [[STATUS]], label [[EXIT_FAIL]], label [[EXIT_OK:%.*]]
221220
; CHECK: exit.ok:

llvm/test/Transforms/PhaseOrdering/loop-access-checks.ll

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,7 @@ define void @foo(ptr noundef nonnull align 8 dereferenceable(24) noalias %vec) #
145145
; CHECK: for.cond.cleanup:
146146
; CHECK-NEXT: ret void
147147
; CHECK: for.body:
148-
; CHECK-NEXT: [[I_010:%.*]] = phi i64 [ [[INC:%.*]], [[OPERATOR_ACC_EXIT:%.*]] ], [ 0, [[ENTRY:%.*]] ]
149-
; CHECK-NEXT: [[CMP_NOT_I:%.*]] = icmp ugt i64 [[SUB_PTR_DIV_I_I]], [[I_010]]
150-
; CHECK-NEXT: br i1 [[CMP_NOT_I]], label [[OPERATOR_ACC_EXIT]], label [[IF_THEN_I:%.*]]
151-
; CHECK: if.then.i:
152-
; CHECK-NEXT: tail call void @abort() #[[ATTR1:[0-9]+]]
153-
; CHECK-NEXT: unreachable
154-
; CHECK: operator_acc.exit:
148+
; CHECK-NEXT: [[I_010:%.*]] = phi i64 [ [[INC:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
155149
; CHECK-NEXT: [[ADD_PTR_I:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i64 [[I_010]]
156150
; CHECK-NEXT: [[TMP2:%.*]] = load double, ptr [[ADD_PTR_I]], align 8
157151
; CHECK-NEXT: [[ADD:%.*]] = fadd double [[TMP2]], 1.000000e+00

0 commit comments

Comments
 (0)