diff --git a/include/llvm/Metadata.h b/include/llvm/Metadata.h index 9466a5791cc..29458ef3461 100644 --- a/include/llvm/Metadata.h +++ b/include/llvm/Metadata.h @@ -135,6 +135,9 @@ public: /// deleteTemporary - Deallocate a node created by getTemporary. The /// node must not have any users. static void deleteTemporary(MDNode *N); + + /// replaceOperandWith - Replace a specific operand. + void replaceOperandWith(unsigned i, Value *NewVal); /// getOperand - Return specified operand. Value *getOperand(unsigned i) const; diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index 5d6eb144c3e..0fc2a2534d2 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -87,6 +87,11 @@ static MDNodeOperand *getOperandPtr(MDNode *N, unsigned Op) { return reinterpret_cast(N+1)+Op; } +void MDNode::replaceOperandWith(unsigned i, Value *Val) { + MDNodeOperand *Op = getOperandPtr(this, i); + replaceOperand(Op, Val); +} + MDNode::MDNode(LLVMContext &C, ArrayRef Vals, bool isFunctionLocal) : Value(Type::getMetadataTy(C), Value::MDNodeVal) { NumOperands = Vals.size();