forked from OSchip/llvm-project
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. llvm-svn: 228967
This commit is contained in:
parent
18dd78a8fd
commit
b93569d182
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue