diff options
| author | Dan Gohman <gohman@apple.com> | 2010-08-20 22:02:26 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2010-08-20 22:02:26 +0000 |
| commit | 16a5d98c3ad695cc5a181b2f495324ced027e7be (patch) | |
| tree | 1673dcfeecd28b5f499fe4325d181336a2ad66fc /llvm/lib/AsmParser | |
| parent | 662f05a035a0443a9f0c6b9f75309373c7da7792 (diff) | |
| download | bcm5719-llvm-16a5d98c3ad695cc5a181b2f495324ced027e7be.tar.gz bcm5719-llvm-16a5d98c3ad695cc5a181b2f495324ced027e7be.zip | |
Introduce a new temporary MDNode concept. Temporary MDNodes are
not part of the IR, are not uniqued, and may be safely RAUW'd.
This replaces a variety of alternate mechanisms for achieving
the same effect.
llvm-svn: 111681
Diffstat (limited to 'llvm/lib/AsmParser')
| -rw-r--r-- | llvm/lib/AsmParser/LLParser.cpp | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index c55a16520f9..dc545fff2da 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -517,11 +517,7 @@ bool LLParser::ParseMDNodeID(MDNode *&Result) { if (Result) return false; // Otherwise, create MDNode forward reference. - - // FIXME: This is not unique enough! - std::string FwdRefName = "llvm.mdnode.fwdref." + utostr(MID); - Value *V = MDString::get(Context, FwdRefName); - MDNode *FwdNode = MDNode::get(Context, &V, 1); + MDNode *FwdNode = MDNode::getTemporary(Context, 0, 0); ForwardRefMDNodes[MID] = std::make_pair(FwdNode, Lex.getLoc()); if (NumberedMetadata.size() <= MID) @@ -585,7 +581,9 @@ bool LLParser::ParseStandaloneMetadata() { std::map<unsigned, std::pair<TrackingVH<MDNode>, LocTy> >::iterator FI = ForwardRefMDNodes.find(MetadataID); if (FI != ForwardRefMDNodes.end()) { - FI->second.first->replaceAllUsesWith(Init); + MDNode *Temp = FI->second.first; + Temp->replaceAllUsesWith(Init); + MDNode::deleteTemporary(Temp); ForwardRefMDNodes.erase(FI); assert(NumberedMetadata[MetadataID] == Init && "Tracking VH didn't work"); |

