[llvm-commits] CVS: llvm/lib/Transforms/Scalar/LoopUnroll.cpp
Reid Spencer
reid at x10sys.com
Fri Mar 2 15:31:51 PST 2007
Changes in directory llvm/lib/Transforms/Scalar:
LoopUnroll.cpp updated: 1.36 -> 1.37
---
Log message:
Guard against huge loop trip counts in an APInt safe way.
---
Diffs of the changes: (+7 -2)
LoopUnroll.cpp | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
Index: llvm/lib/Transforms/Scalar/LoopUnroll.cpp
diff -u llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.36 llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.37
--- llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.36 Mon Feb 5 17:32:05 2007
+++ llvm/lib/Transforms/Scalar/LoopUnroll.cpp Fri Mar 2 17:31:34 2007
@@ -190,10 +190,15 @@
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 = "
More information about the llvm-commits
mailing list