Revert "SelectionDAG: Teach the legalizer to split SETCC if VSELECT needs splitting...
[oota-llvm.git] / lib / CodeGen / AsmPrinter / DwarfCompileUnit.cpp
index 8f4b1965e7a8ad8ba4f99653ed601ff75f93c8f6..27ba19a89647c1231cc5d3de4ed24004966d3362 100644 (file)
@@ -33,7 +33,8 @@ using namespace llvm;
 /// CompileUnit - Compile unit constructor.
 CompileUnit::CompileUnit(unsigned UID, DIE *D, const MDNode *N, AsmPrinter *A,
                          DwarfDebug *DW, DwarfUnits *DWU)
-    : UniqueID(UID), Node(N), CUDie(D), Asm(A), DD(DW), DU(DWU), IndexTyDie(0) {
+    : UniqueID(UID), Node(N), CUDie(D), Asm(A), DD(DW), DU(DWU), IndexTyDie(0),
+      DebugInfoOffset(0) {
   DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
   insertDIE(N, D);
 }
@@ -826,34 +827,26 @@ DIE *CompileUnit::getOrCreateContextDIE(DIScope Context) {
     return getDIE(Context);
 }
 
-/// addToContextOwner - Add Die into the list of its context owner's children.
-void CompileUnit::addToContextOwner(DIE *Die, DIScope Context) {
-  assert(!Die->getParent());
-  if (DIE *ContextDIE = getOrCreateContextDIE(Context)) {
-    if (Die->getParent()) {
-      // While creating the context, if this is a type member, we will have
-      // added the child to the context already.
-      assert(Die->getParent() == ContextDIE);
-      return;
-    }
-    ContextDIE->addChild(Die);
-  } else
-    addDie(Die);
-}
-
 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
 /// given DIType.
 DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
   DIType Ty(TyNode);
   if (!Ty.isType())
     return NULL;
+
+  // Construct the context before querying for the existence of the DIE in case
+  // such construction creates the DIE.
+  DIE *ContextDIE = getOrCreateContextDIE(resolve(Ty.getContext()));
+  if (!ContextDIE)
+    ContextDIE = CUDie.get();
+
   DIE *TyDIE = getDIE(Ty);
   if (TyDIE)
     return TyDIE;
 
   // Create new type.
-  TyDIE = new DIE(Ty.getTag());
-  insertDIE(Ty, TyDIE);
+  TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
+
   if (Ty.isBasicType())
     constructTypeDIE(*TyDIE, DIBasicType(Ty));
   else if (Ty.isCompositeType())
@@ -876,7 +869,6 @@ DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
     addAccelType(Ty.getName(), std::make_pair(TyDIE, Flags));
   }
 
-  addToContextOwner(TyDIE, resolve(Ty.getContext()));
   return TyDIE;
 }