summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/DIBuilder.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-02-12 21:52:11 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-02-12 21:52:11 +0000
commitb93569d182b784b7bf3a1347d7fcd50d11a550b1 (patch)
treeb29db3d1c3b105a96dfca6167497bcae6ecf5dbe /llvm/lib/IR/DIBuilder.cpp
parent18dd78a8fd7077398e6c89cc0bee6c144e936408 (diff)
downloadbcm5719-llvm-b93569d182b784b7bf3a1347d7fcd50d11a550b1.tar.gz
bcm5719-llvm-b93569d182b784b7bf3a1347d7fcd50d11a550b1.zip
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
Diffstat (limited to 'llvm/lib/IR/DIBuilder.cpp')
-rw-r--r--llvm/lib/IR/DIBuilder.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp
index 5217a4ea6dc..3394cff3520 100644
--- a/llvm/lib/IR/DIBuilder.cpp
+++ b/llvm/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.
OpenPOWER on IntegriCloud