| //===-- Bitcode/Reader/MetadataLoader.h - Load Metadatas -------*- C++ -*-====// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This class handles loading Metadatas. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_LIB_BITCODE_READER_METADATALOADER_H | |
| #define LLVM_LIB_BITCODE_READER_METADATALOADER_H | |
| #include "llvm/ADT/SmallVector.h" | |
| #include "llvm/Support/Error.h" | |
| #include <functional> | |
| #include <memory> | |
| namespace llvm { | |
| class BitcodeReaderValueList; | |
| class BitstreamCursor; | |
| class DISubprogram; | |
| class Error; | |
| class Function; | |
| class Instruction; | |
| class Metadata; | |
| class MDNode; | |
| class Module; | |
| class Type; | |
| /// Helper class that handles loading Metadatas and keeping them available. | |
| class MetadataLoader { | |
| class MetadataLoaderImpl; | |
| std::unique_ptr<MetadataLoaderImpl> Pimpl; | |
| Error parseMetadata(bool ModuleLevel); | |
| public: | |
| ~MetadataLoader(); | |
| MetadataLoader(BitstreamCursor &Stream, Module &TheModule, | |
| BitcodeReaderValueList &ValueList, bool IsImporting, | |
| std::function<Type *(unsigned)> getTypeByID); | |
| MetadataLoader &operator=(MetadataLoader &&); | |
| MetadataLoader(MetadataLoader &&); | |
| // Parse a module metadata block | |
| Error parseModuleMetadata() { return parseMetadata(true); } | |
| // Parse a function metadata block | |
| Error parseFunctionMetadata() { return parseMetadata(false); } | |
| /// Set the mode to strip TBAA metadata on load. | |
| void setStripTBAA(bool StripTBAA = true); | |
| /// Return true if the Loader is stripping TBAA metadata. | |
| bool isStrippingTBAA(); | |
| // Return true there are remaining unresolved forward references. | |
| bool hasFwdRefs() const; | |
| /// Return the given metadata, creating a replaceable forward reference if | |
| /// necessary. | |
| Metadata *getMetadataFwdRefOrLoad(unsigned Idx); | |
| MDNode *getMDNodeFwdRefOrNull(unsigned Idx); | |
| /// Return the DISubprogra metadata for a Function if any, null otherwise. | |
| DISubprogram *lookupSubprogramForFunction(Function *F); | |
| /// Parse a `METADATA_ATTACHMENT` block for a function. | |
| Error parseMetadataAttachment( | |
| Function &F, const SmallVectorImpl<Instruction *> &InstructionList); | |
| /// Parse a `METADATA_KIND` block for the current module. | |
| Error parseMetadataKinds(); | |
| unsigned size() const; | |
| void shrinkTo(unsigned N); | |
| /// Perform bitcode upgrades on llvm.dbg.* calls. | |
| void upgradeDebugIntrinsics(Function &F); | |
| }; | |
| } | |
| #endif // LLVM_LIB_BITCODE_READER_METADATALOADER_H |