+ /// NumOperands - This many 'MDNodeOperand' items are co-allocated onto the
+ /// end of this MDNode.
+ unsigned NumOperands;
+
+ // Subclass data enums.
+ enum {
+ /// FunctionLocalBit - This bit is set if this MDNode is function local.
+ /// This is true when it (potentially transitively) contains a reference to
+ /// something in a function, like an argument, basicblock, or instruction.
+ FunctionLocalBit = 1 << 0,
+
+ /// NotUniquedBit - This is set on MDNodes that are not uniqued because they
+ /// have a null operand.
+ NotUniquedBit = 1 << 1,
+
+ /// DestroyFlag - This bit is set by destroy() so the destructor can assert
+ /// that the node isn't being destroyed with a plain 'delete'.
+ DestroyFlag = 1 << 2
+ };
+
+ // FunctionLocal enums.
+ enum FunctionLocalness {
+ FL_Unknown = -1,
+ FL_No = 0,
+ FL_Yes = 1
+ };
+
+ /// replaceOperand - Replace each instance of F from the operand list of this
+ /// node with T.
+ void replaceOperand(MDNodeOperand *Op, Value *NewVal);
+ ~MDNode();
+
+ MDNode(LLVMContext &C, ArrayRef<Value*> Vals, bool isFunctionLocal);
+
+ static MDNode *getMDNode(LLVMContext &C, ArrayRef<Value*> Vals,
+ FunctionLocalness FL, bool Insert = true);