-//===----------------------------------------------------------------------===//
-/// Metadata -
-/// Metadata manages metadata used in a context.
-
-/// MDKindID - This id identifies metadata kind the metadata store. Valid
-/// ID values are 1 or higher. This ID is set by RegisterMDKind.
-typedef unsigned MDKindID;
-
-class Metadata {
-public:
- typedef std::pair<MDKindID, WeakVH> MDPairTy;
- typedef SmallVector<MDPairTy, 2> MDMapTy;
- typedef DenseMap<const Instruction *, MDMapTy> MDStoreTy;
- friend class BitcodeReader;
-private:
-
- /// MetadataStore - Collection of metadata used in this context.
- MDStoreTy MetadataStore;
-
- /// MDHandlerNames - Map to hold metadata handler names.
- StringMap<unsigned> MDHandlerNames;
-
-public:
- /// RegisterMDKind - Register a new metadata kind and return its ID.
- /// A metadata kind can be registered only once.
- MDKindID RegisterMDKind(const char *Name);
-
- /// getMDKind - Return metadata kind. If the requested metadata kind
- /// is not registered then return 0.
- MDKindID getMDKind(const char *Name);
-
- /// getMD - Get the metadata of given kind attached with an Instruction.
- /// If the metadata is not found then return 0.
- MDNode *getMD(MDKindID Kind, const Instruction *Inst);
-
- /// getMDs - Get the metadata attached with an Instruction.
- const MDMapTy *getMDs(const Instruction *Inst);
-
- /// setMD - Attach the metadata of given kind with an Instruction.
- void setMD(MDKindID Kind, MDNode *Node, Instruction *Inst);
-
- /// getHandlerNames - Get handler names. This is used by bitcode
- /// writer.
- const StringMap<unsigned> *getHandlerNames();
-
- /// ValueIsDeleted - This handler is used to update metadata store
- /// when a value is deleted.
- void ValueIsDeleted(const Value *V) {}
- void ValueIsDeleted(const Instruction *Inst);
-
- /// ValueIsCloned - This handler is used to update metadata store
- /// when In1 is cloned to create In2.
- void ValueIsCloned(const Instruction *In1, Instruction *In2);
-};
-