[llvm-commits] [llvm] r59454 - /llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp

Daniel Dunbar daniel at zuster.org
Mon Nov 17 10:44:39 PST 2008


On Mon, Nov 17, 2008 at 10:37 AM, Devang Patel <dpatel at apple.com> wrote:
> Author: dpatel
> Date: Mon Nov 17 12:37:53 2008
> New Revision: 59454
>
> URL: http://llvm.org/viewvc/llvm-project?rev=59454&view=rev
> Log:
> Let AnalyzeAlloca() remove debug intrinsics.
>
> Modified:
>    llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
>
> Modified: llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp?rev=59454&r1=59453&r2=59454&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp Mon Nov 17 12:37:53 2008
> @@ -277,21 +277,6 @@
>       AllocaPointerVal = 0;
>     }
>
> -    /// RemoveDebugUses - Remove uses of the alloca in DbgInfoInstrinsics.
> -    void RemoveDebugUses(AllocaInst *AI) {
> -      for (Value::use_iterator U = AI->use_begin(), E = AI->use_end();
> -           U != E;) {
> -        Instruction *User = cast<Instruction>(*U);
> -        ++U;
> -        if (BitCastInst *BC = dyn_cast<BitCastInst>(User)) {
> -          assert(BC->hasOneUse() && "Unexpected alloca uses!");
> -          DbgInfoIntrinsic *DI = cast<DbgInfoIntrinsic>(*BC->use_begin());
> -          DI->eraseFromParent();
> -          BC->eraseFromParent();
> -        }
> -      }
> -    }
> -
>     /// AnalyzeAlloca - Scan the uses of the specified alloca, filling in our
>     /// ivars.
>     void AnalyzeAlloca(AllocaInst *AI) {
> @@ -301,9 +286,18 @@
>       // and decide whether all of the loads and stores to the alloca are within
>       // the same basic block.
>       for (Value::use_iterator U = AI->use_begin(), E = AI->use_end();
> -           U != E; ++U) {
> +           U != E;)  {
>         Instruction *User = cast<Instruction>(*U);
> -        if (StoreInst *SI = dyn_cast<StoreInst>(User)) {
> +        ++U;
> +        if (BitCastInst *BC = dyn_cast<BitCastInst>(User)) {
> +          // Remove any uses of this alloca in DbgInfoInstrinsics.
> +          assert(BC->hasOneUse() && "Unexpected alloca uses!");
> +          DbgInfoIntrinsic *DI = cast<DbgInfoIntrinsic>(*BC->use_begin());
> +          DI->eraseFromParent();
> +          BC->eraseFromParent();
> +          continue;
> +        }
> +        else if (StoreInst *SI = dyn_cast<StoreInst>(User)) {
>           // Remember the basic blocks which define new values for the alloca
>           DefiningBlocks.push_back(SI->getParent());
>           AllocaPointerVal = SI->getOperand(0);
> @@ -344,9 +338,6 @@
>     assert(AI->getParent()->getParent() == &F &&
>            "All allocas should be in the same function, which is same as DF!");
>
> -    // Remove any uses of this alloca in DbgInfoInstrinsics.
> -    Info.RemoveDebugUses(AI);
> -
>     if (AI->use_empty()) {
>       // If there are no uses of the alloca, just delete it now.
>       if (AST) AST->deleteValue(AI);

Note that this is still doing a lot of work when removing the debug
info leaves the alloca with no uses. I believe the right thing is just
to move the AnalyzeAlloca() call above this test here.

 - Daniel



More information about the llvm-commits mailing list