[PATCH] D30887: [ScalarEvolution] Predicate implication from operations
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 15 23:50:55 PDT 2017
mkazantsev added inline comments.
================
Comment at: lib/Analysis/ScalarEvolution.cpp:8527
+ auto *Zero = getZero(RHS->getType());
+ auto *LLExt = getNoopOrSignExtend(LL, OrigLHS->getType());
+ auto *LRExt = getNoopOrSignExtend(LR, OrigLHS->getType());
----------------
sanjoy wrote:
> Can we get what we want here without sign extension? As I've said below, sign extension can be expensive.
>
> In fact, it would be surprising if we see `LHS` is not the same as `OrigLHS` since that would mean a `sext (%a + %b)<nsw>` did not get transformed to `(sext %a + sext %b)<nsw>` as per the rule in `ScalarEvolution::getSignExtendExpr`. That situation is possible, but should be rare.
Why is it rare? We can calculate sdiv i32 %a, %b and than use it in multiple ways, one of them being comparison to an i64 constant. In this case we will see exactly this.
https://reviews.llvm.org/D30887
More information about the llvm-commits
mailing list