diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-11-05 18:16:03 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-11-05 18:16:03 +0000 |
commit | c5754a65e64126743644aec2631f165a0ac3ffe4 (patch) | |
tree | b35cb05d283e1a11cf2012f2ff4b44116725a2cd /llvm/lib/IR | |
parent | 8f093f4138e1ffafb7ee5344e012ba8dd952a055 (diff) | |
download | bcm5719-llvm-c5754a65e64126743644aec2631f165a0ac3ffe4.tar.gz bcm5719-llvm-c5754a65e64126743644aec2631f165a0ac3ffe4.zip |
IR: MDNode => Value: NamedMDNode::getOperator()
Change `NamedMDNode::getOperator()` from returning `MDNode *` to
returning `Value *`. To reduce boilerplate at some call sites, add a
`getOperatorAsMDNode()` for named metadata that's expected to only
return `MDNode` -- for now, that's everything, but debug node named
metadata (such as llvm.dbg.cu and llvm.dbg.sp) will soon change. This
is part of PR21433.
Note that there's a follow-up patch to clang for the API change.
llvm-svn: 221375
Diffstat (limited to 'llvm/lib/IR')
-rw-r--r-- | llvm/lib/IR/Core.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/IR/DebugInfo.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/IR/Metadata.cpp | 13 | ||||
-rw-r--r-- | llvm/lib/IR/Module.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/IR/TypeFinder.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/IR/Verifier.cpp | 6 |
6 files changed, 19 insertions, 19 deletions
diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp index f6ab9197244..7e60e05fd00 100644 --- a/llvm/lib/IR/Core.cpp +++ b/llvm/lib/IR/Core.cpp @@ -560,8 +560,8 @@ LLVMValueRef LLVMGetMetadata(LLVMValueRef Inst, unsigned KindID) { } void LLVMSetMetadata(LLVMValueRef Inst, unsigned KindID, LLVMValueRef MD) { - unwrap<Instruction>(Inst)->setMetadata(KindID, - MD ? unwrap<MDNode>(MD) : nullptr); + unwrap<Instruction>(Inst) + ->setMetadata(KindID, MD ? unwrap<Value>(MD) : nullptr); } /*--.. Conversion functions ................................................--*/ @@ -720,7 +720,7 @@ void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name, NamedMDNode *N = unwrap(M)->getOrInsertNamedMetadata(name); if (!N) return; - MDNode *Op = Val ? unwrap<MDNode>(Val) : nullptr; + Value *Op = Val ? unwrap<Value>(Val) : nullptr; if (Op) N->addOperand(Op); } diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp index 60904c2b356..38389e8ca1e 100644 --- a/llvm/lib/IR/DebugInfo.cpp +++ b/llvm/lib/IR/DebugInfo.cpp @@ -949,7 +949,7 @@ DITypeIdentifierMap llvm::generateDITypeIdentifierMap(const NamedMDNode *CU_Nodes) { DITypeIdentifierMap Map; for (unsigned CUi = 0, CUe = CU_Nodes->getNumOperands(); CUi != CUe; ++CUi) { - DICompileUnit CU(CU_Nodes->getOperand(CUi)); + DICompileUnit CU(CU_Nodes->getOperandAsMDNode(CUi)); DIArray Retain = CU.getRetainedTypes(); for (unsigned Ti = 0, Te = Retain.getNumElements(); Ti != Te; ++Ti) { if (!Retain.getElement(Ti).isCompositeType()) @@ -997,7 +997,7 @@ void DebugInfoFinder::processModule(const Module &M) { InitializeTypeMap(M); if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) { for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) { - DICompileUnit CU(CU_Nodes->getOperand(i)); + DICompileUnit CU(CU_Nodes->getOperandAsMDNode(i)); addCompileUnit(CU); DIArray GVs = CU.getGlobalVariables(); for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) { @@ -1542,8 +1542,8 @@ llvm::makeSubprogramMap(const Module &M) { if (!CU_Nodes) return R; - for (MDNode *N : CU_Nodes->operands()) { - DICompileUnit CUNode(N); + for (Value *N : CU_Nodes->operands()) { + DICompileUnit CUNode(cast<MDNode>(N)); DIArray SPs = CUNode.getSubprograms(); for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i) { DISubprogram SP(SPs.getElement(i)); diff --git a/llvm/lib/IR/Metadata.cpp b/llvm/lib/IR/Metadata.cpp index 3806fe4fd4e..59beb734184 100644 --- a/llvm/lib/IR/Metadata.cpp +++ b/llvm/lib/IR/Metadata.cpp @@ -555,14 +555,13 @@ MDNode *MDNode::getMostGenericRange(MDNode *A, MDNode *B) { // NamedMDNode implementation. // -static SmallVector<TrackingVH<MDNode>, 4> &getNMDOps(void *Operands) { - return *(SmallVector<TrackingVH<MDNode>, 4>*)Operands; +static SmallVector<TrackingVH<Value>, 4> &getNMDOps(void *Operands) { + return *(SmallVector<TrackingVH<Value>, 4> *)Operands; } NamedMDNode::NamedMDNode(const Twine &N) - : Name(N.str()), Parent(nullptr), - Operands(new SmallVector<TrackingVH<MDNode>, 4>()) { -} + : Name(N.str()), Parent(nullptr), + Operands(new SmallVector<TrackingVH<Value>, 4>()) {} NamedMDNode::~NamedMDNode() { dropAllReferences(); @@ -573,7 +572,7 @@ unsigned NamedMDNode::getNumOperands() const { return (unsigned)getNMDOps(Operands).size(); } -MDNode *NamedMDNode::getOperand(unsigned i) const { +Value *NamedMDNode::getOperand(unsigned i) const { assert(i < getNumOperands() && "Invalid Operand number!"); return &*getNMDOps(Operands)[i]; } @@ -582,7 +581,7 @@ void NamedMDNode::addOperand(Value *V) { auto *M = cast<MDNode>(V); assert(!M->isFunctionLocal() && "NamedMDNode operands must not be function-local!"); - getNMDOps(Operands).push_back(TrackingVH<MDNode>(M)); + getNMDOps(Operands).push_back(TrackingVH<Value>(M)); } void NamedMDNode::eraseFromParent() { diff --git a/llvm/lib/IR/Module.cpp b/llvm/lib/IR/Module.cpp index e35eefbd45c..35d28481fcb 100644 --- a/llvm/lib/IR/Module.cpp +++ b/llvm/lib/IR/Module.cpp @@ -276,7 +276,8 @@ getModuleFlagsMetadata(SmallVectorImpl<ModuleFlagEntry> &Flags) const { const NamedMDNode *ModFlags = getModuleFlagsMetadata(); if (!ModFlags) return; - for (const MDNode *Flag : ModFlags->operands()) { + for (const Value *FlagMD : ModFlags->operands()) { + const MDNode *Flag = cast<MDNode>(FlagMD); ModFlagBehavior MFB; if (Flag->getNumOperands() >= 3 && isValidModFlagBehavior(Flag->getOperand(0), MFB) && diff --git a/llvm/lib/IR/TypeFinder.cpp b/llvm/lib/IR/TypeFinder.cpp index d1d8e1381be..3aae4e69ec1 100644 --- a/llvm/lib/IR/TypeFinder.cpp +++ b/llvm/lib/IR/TypeFinder.cpp @@ -81,7 +81,7 @@ void TypeFinder::run(const Module &M, bool onlyNamed) { E = M.named_metadata_end(); I != E; ++I) { const NamedMDNode *NMD = I; for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) - incorporateMDNode(NMD->getOperand(i)); + incorporateMDNode(NMD->getOperandAsMDNode(i)); } } diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 1c54e9b062e..395f2e74d61 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -555,7 +555,7 @@ void Verifier::visitGlobalAlias(const GlobalAlias &GA) { void Verifier::visitNamedMDNode(const NamedMDNode &NMD) { for (unsigned i = 0, e = NMD.getNumOperands(); i != e; ++i) { - MDNode *MD = NMD.getOperand(i); + MDNode *MD = NMD.getOperandAsMDNode(i); if (!MD) continue; @@ -624,7 +624,7 @@ void Verifier::visitModuleIdents(const Module &M) { // llvm.ident takes a list of metadata entry. Each entry has only one string. // Scan each llvm.ident entry and make sure that this requirement is met. for (unsigned i = 0, e = Idents->getNumOperands(); i != e; ++i) { - const MDNode *N = Idents->getOperand(i); + const MDNode *N = Idents->getOperandAsMDNode(i); Assert1(N->getNumOperands() == 1, "incorrect number of operands in llvm.ident metadata", N); Assert1(isa<MDString>(N->getOperand(0)), @@ -642,7 +642,7 @@ void Verifier::visitModuleFlags(const Module &M) { DenseMap<const MDString*, const MDNode*> SeenIDs; SmallVector<const MDNode*, 16> Requirements; for (unsigned I = 0, E = Flags->getNumOperands(); I != E; ++I) { - visitModuleFlag(Flags->getOperand(I), SeenIDs, Requirements); + visitModuleFlag(Flags->getOperandAsMDNode(I), SeenIDs, Requirements); } // Validate that the requirements in the module are valid. |