[PATCH] D109546: [ScalarEvolution] Add an additional bailout to avoid NOT of pointer.
Philip Reames via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 9 15:19:59 PDT 2021
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGbfa2a81e926f: [ScalarEvolution] Add an additional bailout to avoid NOT of pointer. (authored by reames).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D109546/new/
https://reviews.llvm.org/D109546
Files:
llvm/lib/Analysis/ScalarEvolution.cpp
Index: llvm/lib/Analysis/ScalarEvolution.cpp
===================================================================
--- llvm/lib/Analysis/ScalarEvolution.cpp
+++ llvm/lib/Analysis/ScalarEvolution.cpp
@@ -4127,6 +4127,8 @@
/// Return a SCEV corresponding to ~V = -1-V
const SCEV *ScalarEvolution::getNotSCEV(const SCEV *V) {
+ assert(!V->getType()->isPointerTy() && "Can't negate pointer");
+
if (const SCEVConstant *VC = dyn_cast<SCEVConstant>(V))
return getConstant(
cast<ConstantInt>(ConstantExpr::getNot(VC->getValue())));
@@ -10672,15 +10674,21 @@
if (!isa<SCEVConstant>(FoundRHS) && !isa<SCEVAddRecExpr>(FoundLHS))
return isImpliedCondOperands(Pred, LHS, RHS, FoundRHS, FoundLHS, Context);
- // Don't try to getNotSCEV pointers.
- if (LHS->getType()->isPointerTy() || FoundLHS->getType()->isPointerTy())
- return false;
+ // There's no clear preference between forms 3. and 4., try both. Avoid
+ // forming getNotSCEV of pointer values as the resulting subtract is
+ // not legal.
+ if (!LHS->getType()->isPointerTy() && !RHS->getType()->isPointerTy() &&
+ isImpliedCondOperands(FoundPred, getNotSCEV(LHS), getNotSCEV(RHS),
+ FoundLHS, FoundRHS, Context))
+ return true;
- // There's no clear preference between forms 3. and 4., try both.
- return isImpliedCondOperands(FoundPred, getNotSCEV(LHS), getNotSCEV(RHS),
- FoundLHS, FoundRHS, Context) ||
- isImpliedCondOperands(Pred, LHS, RHS, getNotSCEV(FoundLHS),
- getNotSCEV(FoundRHS), Context);
+ if (!FoundLHS->getType()->isPointerTy() &&
+ !FoundRHS->getType()->isPointerTy() &&
+ isImpliedCondOperands(Pred, LHS, RHS, getNotSCEV(FoundLHS),
+ getNotSCEV(FoundRHS), Context))
+ return true;
+
+ return false;
}
// Unsigned comparison is the same as signed comparison when both the operands
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D109546.371731.patch
Type: text/x-patch
Size: 1996 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210909/9141280d/attachment.bin>
More information about the llvm-commits
mailing list