[llvm] b2837bf - [ScalarEvolution] Add bailout to avoid zext of pointer.
Eli Friedman via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 31 11:42:05 PST 2022
Author: Eli Friedman
Date: 2022-01-31T11:41:39-08:00
New Revision: b2837bf2f22a9198d636e2d5755c119d1fc4329a
URL: https://github.com/llvm/llvm-project/commit/b2837bf2f22a9198d636e2d5755c119d1fc4329a
DIFF: https://github.com/llvm/llvm-project/commit/b2837bf2f22a9198d636e2d5755c119d1fc4329a.diff
LOG: [ScalarEvolution] Add bailout to avoid zext of pointer.
The RHS of an isImpliedCond call can be a pointer even if the LHS is
not. This is similar to bfa2a81e.
Not going to include a testcase; an IR testcase would be extremely
complicated and fragile.
Fixes https://github.com/llvm/llvm-project/issues/51936 .
Differential Revision: https://reviews.llvm.org/D114555
Added:
Modified:
llvm/lib/Analysis/ScalarEvolution.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index 402d6311f2288..977fc09113550 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -10919,7 +10919,8 @@ bool ScalarEvolution::isImpliedCond(ICmpInst::Predicate Pred, const SCEV *LHS,
// For unsigned and equality predicates, try to prove that both found
// operands fit into narrow unsigned range. If so, try to prove facts in
// narrow types.
- if (!CmpInst::isSigned(FoundPred) && !FoundLHS->getType()->isPointerTy()) {
+ if (!CmpInst::isSigned(FoundPred) && !FoundLHS->getType()->isPointerTy() &&
+ !FoundRHS->getType()->isPointerTy()) {
auto *NarrowType = LHS->getType();
auto *WideType = FoundLHS->getType();
auto BitWidth = getTypeSizeInBits(NarrowType);
@@ -10937,7 +10938,7 @@ bool ScalarEvolution::isImpliedCond(ICmpInst::Predicate Pred, const SCEV *LHS,
}
}
- if (LHS->getType()->isPointerTy())
+ if (LHS->getType()->isPointerTy() || RHS->getType()->isPointerTy())
return false;
if (CmpInst::isSigned(Pred)) {
LHS = getSignExtendExpr(LHS, FoundLHS->getType());
@@ -10948,7 +10949,7 @@ bool ScalarEvolution::isImpliedCond(ICmpInst::Predicate Pred, const SCEV *LHS,
}
} else if (getTypeSizeInBits(LHS->getType()) >
getTypeSizeInBits(FoundLHS->getType())) {
- if (FoundLHS->getType()->isPointerTy())
+ if (FoundLHS->getType()->isPointerTy() || FoundRHS->getType()->isPointerTy())
return false;
if (CmpInst::isSigned(FoundPred)) {
FoundLHS = getSignExtendExpr(FoundLHS, LHS->getType());
More information about the llvm-commits
mailing list