From: Duncan P. N. Exon Smith Date: Thu, 12 Feb 2015 21:52:11 +0000 (+0000) Subject: IR: Stop abusing DW_TAG_base_type for compile unit arrays X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e53f1302f96c1c38b5f272b25417d42550ed6412;p=oota-llvm.git IR: Stop abusing DW_TAG_base_type for compile unit arrays The sub-arrays for compile units have for a long time been initialized to distinct temporary nodes with the `DW_TAG_base_type` tag, with no other operands. These invalid `DIBasicType`s are later replaced with appropriate arrays. This seems like a poor man's assertion that the arrays do eventually get replaced. These days, temporaries in the graph will cause assertions when writing bitcode or assembly, so this isn't necessary. Use temporary empty tuples instead. Note that the whole idea of using temporaries and then replacing them later is wasteful here. We never actually want to merge compile units by uniquing based on content. Compile units should use `getDistinct()` instead of `get()`, and then their operands can be freely replaced later on. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228967 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/DIBuilder.cpp b/lib/IR/DIBuilder.cpp index 5217a4ea6dc..3394cff3520 100644 --- a/lib/IR/DIBuilder.cpp +++ b/lib/IR/DIBuilder.cpp @@ -150,16 +150,14 @@ DICompileUnit DIBuilder::createCompileUnit(unsigned Lang, StringRef Filename, "Invalid Language tag"); assert(!Filename.empty() && "Unable to create compile unit without filename"); - Metadata *TElts[] = {HeaderBuilder::get(DW_TAG_base_type).get(VMContext)}; - TempEnumTypes = MDNode::getTemporary(VMContext, TElts).release(); - TempRetainTypes = MDNode::getTemporary(VMContext, TElts).release(); - - TempSubprograms = MDNode::getTemporary(VMContext, TElts).release(); - - TempGVs = MDNode::getTemporary(VMContext, TElts).release(); - - TempImportedModules = MDNode::getTemporary(VMContext, TElts).release(); + // TODO: Once we make MDCompileUnit distinct, stop using temporaries here + // (just start with operands assigned to nullptr). + TempEnumTypes = MDTuple::getTemporary(VMContext, None).release(); + TempRetainTypes = MDTuple::getTemporary(VMContext, None).release(); + TempSubprograms = MDTuple::getTemporary(VMContext, None).release(); + TempGVs = MDTuple::getTemporary(VMContext, None).release(); + TempImportedModules = MDTuple::getTemporary(VMContext, None).release(); Metadata *Elts[] = {HeaderBuilder::get(dwarf::DW_TAG_compile_unit) .concat(Lang) @@ -174,6 +172,8 @@ DICompileUnit DIBuilder::createCompileUnit(unsigned Lang, StringRef Filename, TempEnumTypes, TempRetainTypes, TempSubprograms, TempGVs, TempImportedModules}; + // TODO: Switch to getDistinct(). We never want to merge compile units based + // on contents. MDNode *CUNode = MDNode::get(VMContext, Elts); // Create a named metadata so that it is easier to find cu in a module.