- typedef SmallVectorImpl<WeakVH>::const_iterator const_elem_iterator;
-
- Value *getElement(unsigned i) const {
- return Node[i];
- }
-
- unsigned getNumElements() const {
- return Node.size();
- }
-
- bool elem_empty() const {
- return Node.empty();
- }
-
- const_elem_iterator elem_begin() const {
- return Node.begin();
- }
-
- const_elem_iterator elem_end() const {
- return Node.end();
- }
-
- /// getType() specialization - Type is always MetadataTy.
- ///
- inline const Type *getType() const {
- return Type::MetadataTy;
+ // Constructors and destructors.
+ static MDNode *get(LLVMContext &Context, Value *const *Vals,
+ unsigned NumVals);
+ // getWhenValsUnresolved - Construct MDNode determining function-localness
+ // from isFunctionLocal argument, not by analyzing Vals.
+ static MDNode *getWhenValsUnresolved(LLVMContext &Context, Value *const *Vals,
+ unsigned NumVals, bool isFunctionLocal);
+
+ static MDNode *getIfExists(LLVMContext &Context, Value *const *Vals,
+ unsigned NumVals);
+
+ /// getOperand - Return specified operand.
+ Value *getOperand(unsigned i) const;
+
+ /// getNumOperands - Return number of MDNode operands.
+ unsigned getNumOperands() const { return NumOperands; }
+
+ /// isFunctionLocal - Return whether MDNode is local to a function.
+ /// Note: MDNodes are designated as function-local when created, and keep
+ /// that designation even if their operands are modified to no longer
+ /// refer to function-local IR.
+ bool isFunctionLocal() const {
+ return (getSubclassDataFromValue() & FunctionLocalBit) != 0;