aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ScalarEvolution.cpp
diff options
context:
space:
mode:
authorFlorian Hahn <flo@fhahn.com>2024-12-18 11:22:39 +0000
committerFlorian Hahn <flo@fhahn.com>2024-12-18 11:22:39 +0000
commit95eb49a0905568a13c840b7866ce5d9c47e022f0 (patch)
tree76e7626d998656ceacec80272eee9b9304f80888 /llvm/lib/Analysis/ScalarEvolution.cpp
parenta9df1f6cb0dcdd808abc25f7fa1555e9e0ec6a9f (diff)
downloadllvm-95eb49a0905568a13c840b7866ce5d9c47e022f0.zip
llvm-95eb49a0905568a13c840b7866ce5d9c47e022f0.tar.gz
llvm-95eb49a0905568a13c840b7866ce5d9c47e022f0.tar.bz2
[SCEV] Bail out on mixed int/pointer in SCEVWrapPredicate::implies.
Fixes a crash when trying to extend the pointer start value to a narrow integer type after b6c29fdffd65.
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r--llvm/lib/Analysis/ScalarEvolution.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index c820e8b..d55d090 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -14978,6 +14978,11 @@ bool SCEVWrapPredicate::implies(const SCEVPredicate *N,
Flags != SCEVWrapPredicate::IncrementNUSW)
return false;
+ const SCEV *Start = AR->getStart();
+ const SCEV *OpStart = Op->AR->getStart();
+ if (Start->getType()->isPointerTy() != OpStart->getType()->isPointerTy())
+ return false;
+
const SCEV *Step = AR->getStepRecurrence(SE);
const SCEV *OpStep = Op->AR->getStepRecurrence(SE);
if (!SE.isKnownPositive(Step) || !SE.isKnownPositive(OpStep))
@@ -14990,8 +14995,6 @@ bool SCEVWrapPredicate::implies(const SCEVPredicate *N,
OpStep = SE.getNoopOrZeroExtend(OpStep, WiderTy);
bool IsNUW = Flags == SCEVWrapPredicate::IncrementNUSW;
- const SCEV *OpStart = Op->AR->getStart();
- const SCEV *Start = AR->getStart();
OpStart = IsNUW ? SE.getNoopOrZeroExtend(OpStart, WiderTy)
: SE.getNoopOrSignExtend(OpStart, WiderTy);
Start = IsNUW ? SE.getNoopOrZeroExtend(Start, WiderTy)