diff options
author | Florian Hahn <flo@fhahn.com> | 2024-12-18 11:22:39 +0000 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2024-12-18 11:22:39 +0000 |
commit | 95eb49a0905568a13c840b7866ce5d9c47e022f0 (patch) | |
tree | 76e7626d998656ceacec80272eee9b9304f80888 /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | a9df1f6cb0dcdd808abc25f7fa1555e9e0ec6a9f (diff) | |
download | llvm-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.cpp | 7 |
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) |