]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - opencl/llvm.git/blobdiff - lib/Transforms/Utils/Local.cpp
Revert "This reapplies r207130 with an additional testcase+and a missing check for"
[opencl/llvm.git] / lib / Transforms / Utils / Local.cpp
index e2ba0473fd15a161cc89d1c7976ab9c56160a65b..abd73eb5c9739abec8ddfbb0df7bfddae598ca28 100644 (file)
@@ -1051,26 +1051,20 @@ bool llvm::LowerDbgDeclare(Function &F) {
     AllocaInst *AI = dyn_cast_or_null<AllocaInst>(DDI->getAddress());
     // If this is an alloca for a scalar variable, insert a dbg.value
     // at each load and store to the alloca and erase the dbg.declare.
-    // The dbg.values allow tracking a variable even if it is not
-    // stored on the stack, while the dbg.declare can only describe
-    // the stack slot (and at a lexical-scope granularity). Later
-    // passes will attempt to elide the stack slot.
     if (AI && !AI->isArrayAllocation()) {
+
+      // We only remove the dbg.declare intrinsic if all uses are
+      // converted to dbg.value intrinsics.
+      bool RemoveDDI = true;
       for (User *U : AI->users())
         if (StoreInst *SI = dyn_cast<StoreInst>(U))
           ConvertDebugDeclareToDebugValue(DDI, SI, DIB);
         else if (LoadInst *LI = dyn_cast<LoadInst>(U))
           ConvertDebugDeclareToDebugValue(DDI, LI, DIB);
-        else if (Instruction *I = dyn_cast<Instruction>(U)) {
-         // This is a call by-value or some other instruction that
-         // takes a pointer to the variable. Insert a *value*
-         // intrinsic that describes the alloca.
-         auto DbgVal =
-           DIB.insertDbgValueIntrinsic(AI, 0,
-                                       DIVariable(DDI->getVariable()), I);
-         DbgVal->setDebugLoc(I->getDebugLoc());
-       }
-      DDI->eraseFromParent();
+        else
+          RemoveDDI = false;
+      if (RemoveDDI)
+        DDI->eraseFromParent();
     }
   }
   return true;