Let AnalyzeAlloca() remove debug intrinsics.
authorDevang Patel <dpatel@apple.com>
Mon, 17 Nov 2008 18:37:53 +0000 (18:37 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 17 Nov 2008 18:37:53 +0000 (18:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59454 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/PromoteMemoryToRegister.cpp

index 6a4cdc62a9965696e021ba9d61c6d22aec3b100f..cc626ae71f5c653157abc788b129293efad249ce 100644 (file)
@@ -277,21 +277,6 @@ namespace {
       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 @@ namespace {
       // 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 @@ void PromoteMem2Reg::run() {
     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);