[PATCH] D43175: [SCEV] Favor isKnownViaSimpleReasoning over constant ranges check
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 14 23:11:02 PST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL325214: [SCEV] Favor isKnownViaSimpleReasoning over constant ranges check (authored by mkazantsev, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D43175?vs=133813&id=134382#toc
Repository:
rL LLVM
https://reviews.llvm.org/D43175
Files:
llvm/trunk/lib/Analysis/ScalarEvolution.cpp
llvm/trunk/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll
Index: llvm/trunk/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll
===================================================================
--- llvm/trunk/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll
+++ llvm/trunk/test/Transforms/IndVarSimplify/loop-invariant-conditions.ll
@@ -355,6 +355,38 @@
ret void
}
+; check that we can prove that a recurrency is greater than another recurrency
+; in the same loop, with the same step, and with smaller starting value.
+define void @test12(i64* %inc_ptr) {
+; CHECK-LABEL: @test12
+entry:
+ %inc = load i64, i64* %inc_ptr, !range !0
+ %inc.minus.1 = sub i64 %inc, 1
+ br label %loop
+
+loop:
+ %iv = phi i64 [ %inc, %entry ], [ %iv.next, %backedge ]
+ %iv.minus.1 = phi i64 [ %inc.minus.1, %entry ], [ %iv.minus.1.next, %backedge ]
+ %iv.next = add i64 %iv, 1
+ %iv.minus.1.next = add i64 %iv.minus.1, 1
+ %brcond = icmp sgt i64 %iv.next, %iv.minus.1.next
+ ; CHECK: br i1 true, label %if.true, label %if.false
+ br i1 %brcond, label %if.true, label %if.false
+
+if.true:
+ br label %backedge
+
+if.false:
+ br label %backedge
+
+backedge:
+ %loopcond = icmp slt i64 %iv, 200
+ br i1 %loopcond, label %loop, label %exit
+
+exit:
+ ret void
+}
+
!1 = !{i64 -1, i64 100}
Index: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
===================================================================
--- llvm/trunk/lib/Analysis/ScalarEvolution.cpp
+++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp
@@ -8693,8 +8693,8 @@
if (isKnownPredicateViaSplitting(Pred, LHS, RHS))
return true;
- // Otherwise see what can be done with known constant ranges.
- return isKnownPredicateViaConstantRanges(Pred, LHS, RHS);
+ // Otherwise see what can be done with some simple reasoning.
+ return isKnownViaSimpleReasoning(Pred, LHS, RHS);
}
bool ScalarEvolution::isMonotonicPredicate(const SCEVAddRecExpr *LHS,
@@ -8961,7 +8961,7 @@
// (interprocedural conditions notwithstanding).
if (!L) return true;
- if (isKnownPredicateViaConstantRanges(Pred, LHS, RHS))
+ if (isKnownViaSimpleReasoning(Pred, LHS, RHS))
return true;
BasicBlock *Latch = L->getLoopLatch();
@@ -9072,7 +9072,7 @@
assert(isAvailableAtLoopEntry(RHS, L) &&
"RHS is not available at Loop Entry");
- if (isKnownPredicateViaConstantRanges(Pred, LHS, RHS))
+ if (isKnownViaSimpleReasoning(Pred, LHS, RHS))
return true;
// If we cannot prove strict comparison (e.g. a > b), maybe we can prove
@@ -9087,9 +9087,9 @@
if (ProvingStrictComparison) {
ProvedNonStrictComparison =
- isKnownPredicateViaConstantRanges(NonStrictPredicate, LHS, RHS);
+ isKnownViaSimpleReasoning(NonStrictPredicate, LHS, RHS);
ProvedNonEquality =
- isKnownPredicateViaConstantRanges(ICmpInst::ICMP_NE, LHS, RHS);
+ isKnownViaSimpleReasoning(ICmpInst::ICMP_NE, LHS, RHS);
if (ProvedNonStrictComparison && ProvedNonEquality)
return true;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43175.134382.patch
Type: text/x-patch
Size: 2955 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180215/4da91f95/attachment.bin>
More information about the llvm-commits
mailing list