diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 48f3b0b..fe713d4 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -1113,32 +1113,35 @@
   if (DisableDebugInfoPrinting)
     return;
 
-  bool HasDebugInfo = false;
-
   // If module has named metadata anchors then use them, otherwise scan the module
   // using debug info finder to collect debug info.
   NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
   if (CU_Nodes) {
-    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
-      HasDebugInfo = true;
-      constructCompileUnit(CU_Nodes->getOperand(i));
-    }
-    if (!HasDebugInfo)
+
+    NamedMDNode *GV_Nodes = M->getNamedMetadata("llvm.dbg.gv");
+    NamedMDNode *SP_Nodes = M->getNamedMetadata("llvm.dbg.sp");
+    if (!GV_Nodes && !SP_Nodes)
+      // If there are not any global variables or any functions then
+      // there is not any debug info in this module.
       return;
 
-    if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.gv"))
-      for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i)
-        constructGlobalVariableDIE(NMD->getOperand(i));
+    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i)
+      constructCompileUnit(CU_Nodes->getOperand(i));
 
-    if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.sp"))
-      for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i)
-        constructSubprogramDIE(NMD->getOperand(i));
+    if (GV_Nodes)
+      for (unsigned i = 0, e = GV_Nodes->getNumOperands(); i != e; ++i)
+        constructGlobalVariableDIE(GV_Nodes->getOperand(i));
+
+    if (SP_Nodes)
+      for (unsigned i = 0, e = SP_Nodes->getNumOperands(); i != e; ++i)
+        constructSubprogramDIE(SP_Nodes->getOperand(i));
     
   } else {
 
     DebugInfoFinder DbgFinder;
     DbgFinder.processModule(*M);
     
+    bool HasDebugInfo = false;
     // Scan all the compile-units to see if there are any marked as the main unit.
     // if not, we do not generate debug info.
     for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
@@ -1148,6 +1151,7 @@
         break;
       }
     }
+    if (!HasDebugInfo) return;
     
     // Create all the compile unit DIEs.
     for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
@@ -1165,8 +1169,6 @@
       constructSubprogramDIE(*I);
   }
   
-  if (!HasDebugInfo) return;
-  
   // Tell MMI that we have debug info.
   MMI->setDebugInfoAvailability(true);
   
