summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/DIBuilder.cpp
diff options
context:
space:
mode:
authorRoman Tereshin <rtereshin@apple.com>2018-06-01 23:15:09 +0000
committerRoman Tereshin <rtereshin@apple.com>2018-06-01 23:15:09 +0000
commitcf88ffaaf919726e9188c029e8b2a8aab1106684 (patch)
treee87c36c25c49ee470871bb643c0560de14c7dbbd /llvm/lib/IR/DIBuilder.cpp
parent4b3701a7a7a9c28f2a7fff23392cc8c3cda4ebd0 (diff)
downloadbcm5719-llvm-cf88ffaaf919726e9188c029e8b2a8aab1106684.tar.gz
bcm5719-llvm-cf88ffaaf919726e9188c029e8b2a8aab1106684.zip
[DebugInfo] Refactoring DIType::setFlags to DIType::cloneWithFlags, NFC
and using the latter in DIBuilder::createArtificialType and DIBuilder::createObjectPointerType methods as well as introducing mirroring DISubprogram::cloneWithFlags and DIBuilder::createArtificialSubprogram methods. The primary goal here is to add createArtificialSubprogram to support a pass downstream while keeping the method consistent with the existing ones and making sure we don't encourage changing already created DI-nodes. Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D47615 llvm-svn: 333806
Diffstat (limited to 'llvm/lib/IR/DIBuilder.cpp')
-rw-r--r--llvm/lib/IR/DIBuilder.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp
index 90a089bb969..5c5477f4f40 100644
--- a/llvm/lib/IR/DIBuilder.cpp
+++ b/llvm/lib/IR/DIBuilder.cpp
@@ -535,10 +535,14 @@ DICompositeType *DIBuilder::createVectorType(uint64_t Size,
return R;
}
-static DIType *createTypeWithFlags(LLVMContext &Context, DIType *Ty,
+DISubprogram *DIBuilder::createArtificialSubprogram(DISubprogram *SP) {
+ auto NewSP = SP->cloneWithFlags(SP->getFlags() | DINode::FlagArtificial);
+ return MDNode::replaceWithDistinct(std::move(NewSP));
+}
+
+static DIType *createTypeWithFlags(const DIType *Ty,
DINode::DIFlags FlagsToSet) {
- auto NewTy = Ty->clone();
- NewTy->setFlags(NewTy->getFlags() | FlagsToSet);
+ auto NewTy = Ty->cloneWithFlags(Ty->getFlags() | FlagsToSet);
return MDNode::replaceWithUniqued(std::move(NewTy));
}
@@ -546,7 +550,7 @@ DIType *DIBuilder::createArtificialType(DIType *Ty) {
// FIXME: Restrict this to the nodes where it's valid.
if (Ty->isArtificial())
return Ty;
- return createTypeWithFlags(VMContext, Ty, DINode::FlagArtificial);
+ return createTypeWithFlags(Ty, DINode::FlagArtificial);
}
DIType *DIBuilder::createObjectPointerType(DIType *Ty) {
@@ -554,7 +558,7 @@ DIType *DIBuilder::createObjectPointerType(DIType *Ty) {
if (Ty->isObjectPointer())
return Ty;
DINode::DIFlags Flags = DINode::FlagObjectPointer | DINode::FlagArtificial;
- return createTypeWithFlags(VMContext, Ty, Flags);
+ return createTypeWithFlags(Ty, Flags);
}
void DIBuilder::retainType(DIScope *T) {
OpenPOWER on IntegriCloud