mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Guard against huge loop trip counts in an APInt safe way.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34858 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ae6421935b
commit
4e69f48a0a
@ -190,10 +190,15 @@ bool LoopUnroll::visitLoop(Loop *L) {
|
||||
ConstantInt *TripCountC = dyn_cast_or_null<ConstantInt>(L->getTripCount());
|
||||
if (!TripCountC) return Changed; // Must have constant trip count!
|
||||
|
||||
uint64_t TripCountFull = TripCountC->getZExtValue();
|
||||
if (TripCountFull != TripCountC->getZExtValue() || TripCountFull == 0)
|
||||
// Guard against huge trip counts. This also guards against assertions in
|
||||
// APInt from the use of getZExtValue, below.
|
||||
if (TripCountC->getValue().getActiveBits() > 32)
|
||||
return Changed; // More than 2^32 iterations???
|
||||
|
||||
uint64_t TripCountFull = TripCountC->getZExtValue();
|
||||
if (TripCountFull == 0)
|
||||
return Changed; // Zero iteraitons?
|
||||
|
||||
unsigned LoopSize = ApproximateLoopSize(L);
|
||||
DOUT << "Loop Unroll: F[" << Header->getParent()->getName()
|
||||
<< "] Loop %" << Header->getName() << " Loop Size = "
|
||||
|
Loading…
Reference in New Issue
Block a user