Temporarily revert r192749 as it is causing problems for LTO and
requires a more in depth change to the IR structure.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192938 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 2e52052..755f278 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -827,7 +827,14 @@
 
 // Construct subprogram DIE.
 void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU, const MDNode *N) {
-  assert(!SPMap[N] && "Trying to create a subprogram DIE twice!");
+  // FIXME: We should only call this routine once, however, during LTO if a
+  // program is defined in multiple CUs we could end up calling it out of
+  // beginModule as we walk the CUs.
+
+  CompileUnit *&CURef = SPMap[N];
+  if (CURef)
+    return;
+  CURef = TheCU;
 
   DISubprogram SP(N);
   if (!SP.isDefinition())
@@ -836,7 +843,6 @@
     return;
 
   DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
-  SPMap[N] = TheCU;
 
   // Expose as a global name.
   TheCU->addGlobalName(SP.getName(), SubprogramDie, resolve(SP.getContext()));