[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