[PATCH] D87832: [IndVars] Remove monotonic checks with unknown exit count
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 28 23:32:01 PDT 2020
mkazantsev added inline comments.
================
Comment at: llvm/lib/Transforms/Scalar/IndVarSimplify.cpp:2375
+
+ // The predicate must be monotonic.
+ switch (Pred) {
----------------
reames wrote:
> lebedev.ri wrote:
> > It might be good to hoist that into some ICmp method,
> > this is at least the second such code block.
> It really looks like at least part of this logic can be replaced with SE->isMonotonicPredicate(LHSS, Pred, IncreasingOut). In particular, I think that covers all your tricky overflow logic and does so more generally.
>
> If I'm right about that, you can also generalize this. Consider:
> - If is monotonic, and proven start == proven end (without caring which direction proved), the condition is invariant for the iterations executed.
>
> This is starting to look a lot like it might belong in isLoopInvariantPredicate. It seems to be a generalization of the logic there.
It does not. It requires proved nsw/nuw flags. We are OK if the last iteration actually does overflow, but in this case we exit the loop before our check.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D87832/new/
https://reviews.llvm.org/D87832
More information about the llvm-commits
mailing list