[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp LoopUnroll.cpp
Reid Spencer
reid at x10sys.com
Thu May 13 16:46:01 PDT 2004
LOL
So we have anonymous spammers finding bugs now.
How would we give them credit in the contributors file?
:)
Reid.
On Thu, 2004-05-13 at 13:43, Chris Lattner wrote:
> Changes in directory llvm/lib/Transforms/Scalar:
>
> InstructionCombining.cpp updated: 1.201 -> 1.202
> LoopUnroll.cpp updated: 1.9 -> 1.10
>
> ---
> Log message:
>
> Fix a nasty bug that caused us to unroll EXTREMELY large loops due to overflow
> in the size calculation.
>
> This is not something you want to see:
> Loop Unroll: F[main] Loop %no_exit Loop Size = 2 Trip Count = 2147483648 - UNROLLING!
>
> The problem was that 2*2147483648 == 0.
>
> Now we get:
> Loop Unroll: F[main] Loop %no_exit Loop Size = 2 Trip Count = 2147483648 - TOO LARGE: 4294967296>100
>
> Thanks to some anonymous person playing with the demo page that repeatedly
> caused zion to go into swapping land. That's one way to ensure you'll get
> a quick bugfix. :)
>
> Testcase here: Transforms/LoopUnroll/2004-05-13-DontUnrollTooMuch.ll
>
>
>
> ---
> Diffs of the changes: (+10 -3)
>
> Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
> diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.201 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.202
> --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.201 Sat May 8 17:41:42 2004
> +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Thu May 13 15:43:31 2004
> @@ -1475,6 +1475,13 @@
> // integers at the end of their ranges...
> //
> if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) {
> + if (Instruction *LHSI = dyn_cast<Instruction>(Op0))
> + if (LHSI->getOpcode() == Instruction::Div && LHSI->hasOneUse() &&
> + isa<ConstantInt>(LHSI->getOperand(1))) {
> + std::cerr << "COULD FOLD: " << *LHSI;
> + std::cerr << "COULD FOLD: " << I << "\n";
> + }
> +
> // Simplify seteq and setne instructions...
> if (I.getOpcode() == Instruction::SetEQ ||
> I.getOpcode() == Instruction::SetNE) {
>
>
> Index: llvm/lib/Transforms/Scalar/LoopUnroll.cpp
> diff -u llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.9 llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.10
> --- llvm/lib/Transforms/Scalar/LoopUnroll.cpp:1.9 Tue Apr 20 15:26:03 2004
> +++ llvm/lib/Transforms/Scalar/LoopUnroll.cpp Thu May 13 15:43:31 2004
> @@ -139,9 +139,9 @@
> DEBUG(std::cerr << "Loop Unroll: F[" << BB->getParent()->getName()
> << "] Loop %" << BB->getName() << " Loop Size = " << LoopSize
> << " Trip Count = " << TripCount << " - ");
> - if (LoopSize*TripCount > UnrollThreshold) {
> - DEBUG(std::cerr << "TOO LARGE: " << LoopSize*TripCount << ">"
> - << UnrollThreshold << "\n");
> + uint64_t Size = (uint64_t)LoopSize*(uint64_t)TripCount;
> + if (Size > UnrollThreshold) {
> + DEBUG(std::cerr << "TOO LARGE: " << Size << ">" << UnrollThreshold << "\n");
> return Changed;
> }
> DEBUG(std::cerr << "UNROLLING!\n");
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://mail.cs.uiuc.edu/mailman/listinfo/llvm-commits
_______________________
Reid Spencer
President & CTO
eXtensible Systems, Inc.
rspencer at x10sys.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20040513/26a31041/attachment.sig>
More information about the llvm-commits
mailing list