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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221375 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith
2014-11-05 18:16:03 +00:00
parent 4a6537c0a9
commit bad06b13ba
17 changed files with 47 additions and 42 deletions

View File

@ -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() {