diff options
author | Roman Tereshin <rtereshin@apple.com> | 2018-06-01 23:15:09 +0000 |
---|---|---|
committer | Roman Tereshin <rtereshin@apple.com> | 2018-06-01 23:15:09 +0000 |
commit | cf88ffaaf919726e9188c029e8b2a8aab1106684 (patch) | |
tree | e87c36c25c49ee470871bb643c0560de14c7dbbd /llvm/lib/IR/DIBuilder.cpp | |
parent | 4b3701a7a7a9c28f2a7fff23392cc8c3cda4ebd0 (diff) | |
download | bcm5719-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.cpp | 14 |
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) { |