Update DanglingDebugInfo so that it can be used to track llvm.dbg.declare also.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112213 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 15ad23d..a1ff8ad 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -875,12 +875,23 @@
 void SelectionDAGBuilder::resolveDanglingDebugInfo(const Value *V,
                                                    SDValue Val) {
   DanglingDebugInfo &DDI = DanglingDebugInfoMap[V];
-  if (DDI.getDI()) {
-    const DbgValueInst *DI = DDI.getDI();
+  MDNode *Variable = NULL;
+  uint64_t Offset = 0;
+
+  if (const DbgValueInst *DI = dyn_cast_or_null<DbgValueInst>(DDI.getDI())) {
+    Variable = DI->getVariable();
+    Offset = DI->getOffset();
+  } else if (const DbgDeclareInst *DI = 
+             dyn_cast_or_null<DbgDeclareInst>(DDI.getDI()))
+    Variable = DI->getVariable();
+  else {
+    assert (DDI.getDI() == NULL && "Invalid debug info intrinsic!");
+    return;
+  }
+
+  if (Variable) {
     DebugLoc dl = DDI.getdl();
     unsigned DbgSDNodeOrder = DDI.getSDNodeOrder();
-    MDNode *Variable = DI->getVariable();
-    uint64_t Offset = DI->getOffset();
     SDDbgValue *SDV;
     if (Val.getNode()) {
       if (!EmitFuncArgumentDbgValue(V, Variable, Offset, Val)) {