10a9f7b9c3ebe7d0ec033462e1a7c9101279956f9Devang Patel//===-- llvm/Metadata.h - Metadata definitions ------------------*- C++ -*-===// 2cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky// 3cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky// The LLVM Compiler Infrastructure 4cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky// 5cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky// This file is distributed under the University of Illinois Open Source 6cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky// License. See LICENSE.TXT for details. 7cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky// 8cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky//===----------------------------------------------------------------------===// 9cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky// 10cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky/// @file 110a9f7b9c3ebe7d0ec033462e1a7c9101279956f9Devang Patel/// This file contains the declarations for metadata subclasses. 120a9f7b9c3ebe7d0ec033462e1a7c9101279956f9Devang Patel/// They represent the different flavors of metadata that live in LLVM. 13cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky// 14cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky//===----------------------------------------------------------------------===// 15cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky 16174101e13a6f24f6f2737e043194f0ffae925bb3Benjamin Kramer#ifndef LLVM_METADATA_H 17174101e13a6f24f6f2737e043194f0ffae925bb3Benjamin Kramer#define LLVM_METADATA_H 18cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky 1949708ad993529611cedfbe49ae44bb10beb73abeDevang Patel#include "llvm/Value.h" 20566bd12e54247b96823112e945e67ed7b9b7dce0Devang Patel#include "llvm/ADT/ArrayRef.h" 215f4ac848d94b0a92e19ac7f2b3d0284d7d323173Devang Patel#include "llvm/ADT/FoldingSet.h" 2228bc9d88260a3e153ead4311c9129e3d3ad07736Devang Patel#include "llvm/ADT/ilist_node.h" 23cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky 24cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewyckynamespace llvm { 25c7364243e31773b78c98b631258a56c868526395Devang Patelclass Constant; 26937b1e92a9862862722732cb0f72d5ade77ac4c8Devang Patelclass Instruction; 2712ddd409535b52a7fa5157ded9a4cedd161fedb6Benjamin Kramerclass LLVMContext; 285e9cd434234a36089daeee915f1dc02b96947fbaChris Lattnerclass Module; 29fc252dae10e339d423e162616a9cb75238afaca5Chris Lattnertemplate <typename T> class SmallVectorImpl; 305d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattnertemplate<typename ValueSubClass, typename ItemParentClass> 315d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner class SymbolTableListTraits; 325d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner 335d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner 34cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky//===----------------------------------------------------------------------===// 35e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel/// MDString - a single uniqued string. 36e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel/// These are used to efficiently contain a byte sequence for metadata. 3711772e093f159a37d92fe5855faa89ad70b1639dChad Rosier/// MDString is always unnamed. 38bc5201f8371f9041e79efcca3b158335da5c2604Devang Patelclass MDString : public Value { 39e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel MDString(const MDString &); // DO NOT IMPLEMENT 40e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel 414771e16fa96f41e62fc54578b6f656a52c23b61cDevang Patel StringRef Str; 425e9cd434234a36089daeee915f1dc02b96947fbaChris Lattner explicit MDString(LLVMContext &C, StringRef S); 43e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel 446b0c2173a348ec7349bee2185f1ad16d9f07040cDevang Patelpublic: 4549b63a1f2c493f6452d22cf0df4c147e0539fb2eDevang Patel static MDString *get(LLVMContext &Context, StringRef Str); 4648ee0bbb729ae5b4757c74d029b9f5ce602f530aBenjamin Kramer static MDString *get(LLVMContext &Context, const char *Str) { 4748ee0bbb729ae5b4757c74d029b9f5ce602f530aBenjamin Kramer return get(Context, Str ? StringRef(Str) : StringRef()); 4848ee0bbb729ae5b4757c74d029b9f5ce602f530aBenjamin Kramer } 4948ee0bbb729ae5b4757c74d029b9f5ce602f530aBenjamin Kramer 5003d7651c3652e1f0cc86e79b26585d86818da9cfDaniel Dunbar StringRef getString() const { return Str; } 5103d7651c3652e1f0cc86e79b26585d86818da9cfDaniel Dunbar 529111c4fef5a963f6d091e0a2401346fc98b521daEvan Cheng unsigned getLength() const { return (unsigned)Str.size(); } 53e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel 54b2a33b46469a6d2c0e61122002079efb7d6d3f9cChris Lattner typedef StringRef::iterator iterator; 55b2a33b46469a6d2c0e61122002079efb7d6d3f9cChris Lattner 56e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel /// begin() - Pointer to the first byte of the string. 57e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel /// 58b2a33b46469a6d2c0e61122002079efb7d6d3f9cChris Lattner iterator begin() const { return Str.begin(); } 59e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel 60e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel /// end() - Pointer to one byte past the end of the string. 61e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel /// 62b2a33b46469a6d2c0e61122002079efb7d6d3f9cChris Lattner iterator end() const { return Str.end(); } 63e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel 64e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel /// Methods for support type inquiry through isa, cast, and dyn_cast: 65e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel static inline bool classof(const MDString *) { return true; } 66e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel static bool classof(const Value *V) { 67e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel return V->getValueID() == MDStringVal; 68e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel } 69e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel}; 70e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel 71c5e08a963973f43c10869cd249c0718d307dd031Chris Lattner 725d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattnerclass MDNodeOperand; 73c5e08a963973f43c10869cd249c0718d307dd031Chris Lattner 74e54abc90fe9942ef3902040a7ac475ce0c369dc9Devang Patel//===----------------------------------------------------------------------===// 75cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky/// MDNode - a tuple of other values. 76bc5201f8371f9041e79efcca3b158335da5c2604Devang Patelclass MDNode : public Value, public FoldingSetNode { 774771e16fa96f41e62fc54578b6f656a52c23b61cDevang Patel MDNode(const MDNode &); // DO NOT IMPLEMENT 78b241b370313588837f9960b3ec3de4dcfb8aee4eChris Lattner void operator=(const MDNode &); // DO NOT IMPLEMENT 795d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner friend class MDNodeOperand; 8006fdaccc89d9abdc7e03797b25173791a2f5692fDevang Patel friend class LLVMContextImpl; 81b241b370313588837f9960b3ec3de4dcfb8aee4eChris Lattner 825d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner /// NumOperands - This many 'MDNodeOperand' items are co-allocated onto the 83b76359e36e75dfe16c5153c3cac903efbb2cd8d7Chris Lattner /// end of this MDNode. 84b241b370313588837f9960b3ec3de4dcfb8aee4eChris Lattner unsigned NumOperands; 855d3016215075c52766711e741ce5401ee891d4acVictor Hernandez 86b241b370313588837f9960b3ec3de4dcfb8aee4eChris Lattner // Subclass data enums. 87b241b370313588837f9960b3ec3de4dcfb8aee4eChris Lattner enum { 8854a1f9f9c1e2cf6f4541e998b20f5c7cfbe642d9Chris Lattner /// FunctionLocalBit - This bit is set if this MDNode is function local. 8954a1f9f9c1e2cf6f4541e998b20f5c7cfbe642d9Chris Lattner /// This is true when it (potentially transitively) contains a reference to 9054a1f9f9c1e2cf6f4541e998b20f5c7cfbe642d9Chris Lattner /// something in a function, like an argument, basicblock, or instruction. 9154a1f9f9c1e2cf6f4541e998b20f5c7cfbe642d9Chris Lattner FunctionLocalBit = 1 << 0, 9254a1f9f9c1e2cf6f4541e998b20f5c7cfbe642d9Chris Lattner 9354a1f9f9c1e2cf6f4541e998b20f5c7cfbe642d9Chris Lattner /// NotUniquedBit - This is set on MDNodes that are not uniqued because they 94e57f048b916af70c59ab6836494d77a1bbb769d1Duncan Sands /// have a null operand. 95b76359e36e75dfe16c5153c3cac903efbb2cd8d7Chris Lattner NotUniquedBit = 1 << 1, 96b76359e36e75dfe16c5153c3cac903efbb2cd8d7Chris Lattner 97b76359e36e75dfe16c5153c3cac903efbb2cd8d7Chris Lattner /// DestroyFlag - This bit is set by destroy() so the destructor can assert 98b76359e36e75dfe16c5153c3cac903efbb2cd8d7Chris Lattner /// that the node isn't being destroyed with a plain 'delete'. 99b76359e36e75dfe16c5153c3cac903efbb2cd8d7Chris Lattner DestroyFlag = 1 << 2 100b241b370313588837f9960b3ec3de4dcfb8aee4eChris Lattner }; 1015d3016215075c52766711e741ce5401ee891d4acVictor Hernandez 10224e64df7ec25b55aa872c2ef33728dfbb8c353c4Victor Hernandez // FunctionLocal enums. 10324e64df7ec25b55aa872c2ef33728dfbb8c353c4Victor Hernandez enum FunctionLocalness { 10424e64df7ec25b55aa872c2ef33728dfbb8c353c4Victor Hernandez FL_Unknown = -1, 10524e64df7ec25b55aa872c2ef33728dfbb8c353c4Victor Hernandez FL_No = 0, 10624e64df7ec25b55aa872c2ef33728dfbb8c353c4Victor Hernandez FL_Yes = 1 10724e64df7ec25b55aa872c2ef33728dfbb8c353c4Victor Hernandez }; 10824e64df7ec25b55aa872c2ef33728dfbb8c353c4Victor Hernandez 1090ce7b1255c86dcfdfdd4dfad9ea625de12657944Devang Patel /// replaceOperand - Replace each instance of F from the operand list of this 1100ce7b1255c86dcfdfdd4dfad9ea625de12657944Devang Patel /// node with T. 1115d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner void replaceOperand(MDNodeOperand *Op, Value *NewVal); 112b76359e36e75dfe16c5153c3cac903efbb2cd8d7Chris Lattner ~MDNode(); 1135f4ac848d94b0a92e19ac7f2b3d0284d7d323173Devang Patel 114ec9186bcf975c9ffa3ec7ca97867f0ec6eb55115Jay Foad MDNode(LLVMContext &C, ArrayRef<Value*> Vals, bool isFunctionLocal); 11524e64df7ec25b55aa872c2ef33728dfbb8c353c4Victor Hernandez 116ec9186bcf975c9ffa3ec7ca97867f0ec6eb55115Jay Foad static MDNode *getMDNode(LLVMContext &C, ArrayRef<Value*> Vals, 117e685f230b6f4f7cd65f45e07cbbbcaa4d66a1ceaVictor Hernandez FunctionLocalness FL, bool Insert = true); 118cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewyckypublic: 1194771e16fa96f41e62fc54578b6f656a52c23b61cDevang Patel // Constructors and destructors. 120ec9186bcf975c9ffa3ec7ca97867f0ec6eb55115Jay Foad static MDNode *get(LLVMContext &Context, ArrayRef<Value*> Vals); 12124e64df7ec25b55aa872c2ef33728dfbb8c353c4Victor Hernandez // getWhenValsUnresolved - Construct MDNode determining function-localness 12224e64df7ec25b55aa872c2ef33728dfbb8c353c4Victor Hernandez // from isFunctionLocal argument, not by analyzing Vals. 123ec9186bcf975c9ffa3ec7ca97867f0ec6eb55115Jay Foad static MDNode *getWhenValsUnresolved(LLVMContext &Context, 124ec9186bcf975c9ffa3ec7ca97867f0ec6eb55115Jay Foad ArrayRef<Value*> Vals, 125ec9186bcf975c9ffa3ec7ca97867f0ec6eb55115Jay Foad bool isFunctionLocal); 126e685f230b6f4f7cd65f45e07cbbbcaa4d66a1ceaVictor Hernandez 127ec9186bcf975c9ffa3ec7ca97867f0ec6eb55115Jay Foad static MDNode *getIfExists(LLVMContext &Context, ArrayRef<Value*> Vals); 128489b29b0a4ee4526e3d50ad88d3d48745baf5042Dan Gohman 129489b29b0a4ee4526e3d50ad88d3d48745baf5042Dan Gohman /// getTemporary - Return a temporary MDNode, for use in constructing 130489b29b0a4ee4526e3d50ad88d3d48745baf5042Dan Gohman /// cyclic MDNode structures. A temporary MDNode is not uniqued, 131489b29b0a4ee4526e3d50ad88d3d48745baf5042Dan Gohman /// may be RAUW'd, and must be manually deleted with deleteTemporary. 132ec9186bcf975c9ffa3ec7ca97867f0ec6eb55115Jay Foad static MDNode *getTemporary(LLVMContext &Context, ArrayRef<Value*> Vals); 133489b29b0a4ee4526e3d50ad88d3d48745baf5042Dan Gohman 134489b29b0a4ee4526e3d50ad88d3d48745baf5042Dan Gohman /// deleteTemporary - Deallocate a node created by getTemporary. The 135489b29b0a4ee4526e3d50ad88d3d48745baf5042Dan Gohman /// node must not have any users. 136489b29b0a4ee4526e3d50ad88d3d48745baf5042Dan Gohman static void deleteTemporary(MDNode *N); 1374771e16fa96f41e62fc54578b6f656a52c23b61cDevang Patel 1385d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner /// getOperand - Return specified operand. 1395d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner Value *getOperand(unsigned i) const; 140c5e08a963973f43c10869cd249c0718d307dd031Chris Lattner 1415d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner /// getNumOperands - Return number of MDNode operands. 1425d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner unsigned getNumOperands() const { return NumOperands; } 14357c0f206011ce3dff01075c0b38a8c55c19c7fc9Victor Hernandez 14457c0f206011ce3dff01075c0b38a8c55c19c7fc9Victor Hernandez /// isFunctionLocal - Return whether MDNode is local to a function. 145cafe9bba32aeed16e8e3db28b4cd4ff13160438fChris Lattner bool isFunctionLocal() const { 146cafe9bba32aeed16e8e3db28b4cd4ff13160438fChris Lattner return (getSubclassDataFromValue() & FunctionLocalBit) != 0; 147cafe9bba32aeed16e8e3db28b4cd4ff13160438fChris Lattner } 148c7650b4d1907becbf2ed112074fd2c4a6f174aa8Victor Hernandez 149c7650b4d1907becbf2ed112074fd2c4a6f174aa8Victor Hernandez // getFunction - If this metadata is function-local and recursively has a 150c7650b4d1907becbf2ed112074fd2c4a6f174aa8Victor Hernandez // function-local operand, return the first such operand's parent function. 1516cead7879aa8902905809e3853d31093a5511c2fVictor Hernandez // Otherwise, return null. getFunction() should not be used for performance- 1526cead7879aa8902905809e3853d31093a5511c2fVictor Hernandez // critical code because it recursively visits all the MDNode's operands. 1538fffff537194e2375e65600f27d716c99f0eb38aVictor Hernandez const Function *getFunction() const; 1545d3016215075c52766711e741ce5401ee891d4acVictor Hernandez 1555f4ac848d94b0a92e19ac7f2b3d0284d7d323173Devang Patel /// Profile - calculate a unique identifier for this MDNode to collapse 1565f4ac848d94b0a92e19ac7f2b3d0284d7d323173Devang Patel /// duplicates 1575f4ac848d94b0a92e19ac7f2b3d0284d7d323173Devang Patel void Profile(FoldingSetNodeID &ID) const; 1585f4ac848d94b0a92e19ac7f2b3d0284d7d323173Devang Patel 159cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky /// Methods for support type inquiry through isa, cast, and dyn_cast: 160cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky static inline bool classof(const MDNode *) { return true; } 161cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky static bool classof(const Value *V) { 162cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky return V->getValueID() == MDNodeVal; 163cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky } 164cafe9bba32aeed16e8e3db28b4cd4ff13160438fChris Lattnerprivate: 165872814ae048df032bddf9299c850f5bda08299a9Dan Gohman // destroy - Delete this node. Only when there are no uses. 166872814ae048df032bddf9299c850f5bda08299a9Dan Gohman void destroy(); 167872814ae048df032bddf9299c850f5bda08299a9Dan Gohman 16854a1f9f9c1e2cf6f4541e998b20f5c7cfbe642d9Chris Lattner bool isNotUniqued() const { 16954a1f9f9c1e2cf6f4541e998b20f5c7cfbe642d9Chris Lattner return (getSubclassDataFromValue() & NotUniquedBit) != 0; 17054a1f9f9c1e2cf6f4541e998b20f5c7cfbe642d9Chris Lattner } 1716f555ca2cd0bba50542adcbb131f541ae70d34cdJeffrey Yasskin void setIsNotUniqued(); 17254a1f9f9c1e2cf6f4541e998b20f5c7cfbe642d9Chris Lattner 173cafe9bba32aeed16e8e3db28b4cd4ff13160438fChris Lattner // Shadow Value::setValueSubclassData with a private forwarding method so that 174cafe9bba32aeed16e8e3db28b4cd4ff13160438fChris Lattner // any future subclasses cannot accidentally use it. 175cafe9bba32aeed16e8e3db28b4cd4ff13160438fChris Lattner void setValueSubclassData(unsigned short D) { 176cafe9bba32aeed16e8e3db28b4cd4ff13160438fChris Lattner Value::setValueSubclassData(D); 177cafe9bba32aeed16e8e3db28b4cd4ff13160438fChris Lattner } 178cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky}; 179cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky 180f457d1316dec017cf204b54524878310c356bf64Devang Patel//===----------------------------------------------------------------------===// 181c85829617bae7f0520c92c5819a5ca8ad520b4f1Dan Gohman/// NamedMDNode - a tuple of MDNodes. Despite its name, a NamedMDNode isn't 182c85829617bae7f0520c92c5819a5ca8ad520b4f1Dan Gohman/// itself an MDNode. NamedMDNodes belong to modules, have names, and contain 183c85829617bae7f0520c92c5819a5ca8ad520b4f1Dan Gohman/// lists of MDNodes. 18417aa92c92a925b4a674440c7ef088c223990e854Dan Gohmanclass NamedMDNode : public ilist_node<NamedMDNode> { 18528bc9d88260a3e153ead4311c9129e3d3ad07736Devang Patel friend class SymbolTableListTraits<NamedMDNode, Module>; 186acb4722856a49217e7aa86f6909d51531d3f42ccChris Lattner friend struct ilist_traits<NamedMDNode>; 18712ddd409535b52a7fa5157ded9a4cedd161fedb6Benjamin Kramer friend class LLVMContextImpl; 18817aa92c92a925b4a674440c7ef088c223990e854Dan Gohman friend class Module; 1894771e16fa96f41e62fc54578b6f656a52c23b61cDevang Patel NamedMDNode(const NamedMDNode &); // DO NOT IMPLEMENT 1904771e16fa96f41e62fc54578b6f656a52c23b61cDevang Patel 1910386f01e061513094504bc11f8352a40173cada7Devang Patel std::string Name; 192f457d1316dec017cf204b54524878310c356bf64Devang Patel Module *Parent; 193d9c86dc6d95885f0c88f8068a06eab87da328490Dan Gohman void *Operands; // SmallVector<TrackingVH<MDNode>, 4> 194f457d1316dec017cf204b54524878310c356bf64Devang Patel 195b5df28a151421fcce53547763ae9772461d5bbdbDevang Patel void setParent(Module *M) { Parent = M; } 196f457d1316dec017cf204b54524878310c356bf64Devang Patel 19717aa92c92a925b4a674440c7ef088c223990e854Dan Gohman explicit NamedMDNode(const Twine &N); 198ab67e705f59d567afded845465f358b8a66ab62eDevang Patel 19917aa92c92a925b4a674440c7ef088c223990e854Dan Gohmanpublic: 200a82f8838c60b7a3b240e185983dacb3291396f3eDevang Patel /// eraseFromParent - Drop all references and remove the node from parent 201a82f8838c60b7a3b240e185983dacb3291396f3eDevang Patel /// module. 202a82f8838c60b7a3b240e185983dacb3291396f3eDevang Patel void eraseFromParent(); 203a82f8838c60b7a3b240e185983dacb3291396f3eDevang Patel 204a82f8838c60b7a3b240e185983dacb3291396f3eDevang Patel /// dropAllReferences - Remove all uses and clear node vector. 205a82f8838c60b7a3b240e185983dacb3291396f3eDevang Patel void dropAllReferences(); 206a82f8838c60b7a3b240e185983dacb3291396f3eDevang Patel 2074771e16fa96f41e62fc54578b6f656a52c23b61cDevang Patel /// ~NamedMDNode - Destroy NamedMDNode. 208a82f8838c60b7a3b240e185983dacb3291396f3eDevang Patel ~NamedMDNode(); 209a82f8838c60b7a3b240e185983dacb3291396f3eDevang Patel 210f457d1316dec017cf204b54524878310c356bf64Devang Patel /// getParent - Get the module that holds this named metadata collection. 211f457d1316dec017cf204b54524878310c356bf64Devang Patel inline Module *getParent() { return Parent; } 212f457d1316dec017cf204b54524878310c356bf64Devang Patel inline const Module *getParent() const { return Parent; } 213f457d1316dec017cf204b54524878310c356bf64Devang Patel 2145d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner /// getOperand - Return specified operand. 2153e30c2a3c54c50246e6cccf0c8842619e29fe66cDevang Patel MDNode *getOperand(unsigned i) const; 21657109697282c6dffd04e2e275606352914217114Chris Lattner 2175d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner /// getNumOperands - Return the number of NamedMDNode operands. 2185d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner unsigned getNumOperands() const; 219f457d1316dec017cf204b54524878310c356bf64Devang Patel 2205d0cacdbb6577f2449986f345858db17dc1bcf59Chris Lattner /// addOperand - Add metadata operand. 2213e30c2a3c54c50246e6cccf0c8842619e29fe66cDevang Patel void addOperand(MDNode *M); 2220386f01e061513094504bc11f8352a40173cada7Devang Patel 2230386f01e061513094504bc11f8352a40173cada7Devang Patel /// getName - Return a constant reference to this named metadata's name. 2240386f01e061513094504bc11f8352a40173cada7Devang Patel StringRef getName() const; 2250386f01e061513094504bc11f8352a40173cada7Devang Patel 22617aa92c92a925b4a674440c7ef088c223990e854Dan Gohman /// print - Implement operator<< on NamedMDNode. 22717aa92c92a925b4a674440c7ef088c223990e854Dan Gohman void print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW = 0) const; 228f457d1316dec017cf204b54524878310c356bf64Devang Patel}; 229f457d1316dec017cf204b54524878310c356bf64Devang Patel 230cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky} // end llvm namespace 231cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky 232cb33799b9f4e152e3460faa83e59b53ff604c87dNick Lewycky#endif 233