| //===-- Bitcode/Reader/MetadataLoader.h - Load Metadatas -------*- C++ -*-====// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This class handles loading Metadatas. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_LIB_BITCODE_READER_METADATALOADER_H | |
| #define LLVM_LIB_BITCODE_READER_METADATALOADER_H | |
| #include "llvm/Support/Error.h" | |
| #include <functional> | |
| #include <memory> | |
| namespace llvm { | |
| class BitcodeReaderValueList; | |
| class BitstreamCursor; | |
| class DISubprogram; | |
| class Function; | |
| class Instruction; | |
| class Metadata; | |
| class Module; | |
| class Type; | |
| template <typename T> class ArrayRef; | |
| typedef std::function<Type *(unsigned)> GetTypeByIDTy; | |
| typedef std::function<unsigned(unsigned, unsigned)> GetContainedTypeIDTy; | |
| typedef std::function<void(Metadata **, unsigned, GetTypeByIDTy, | |
| GetContainedTypeIDTy)> | |
| MDTypeCallbackTy; | |
| struct MetadataLoaderCallbacks { | |
| GetTypeByIDTy GetTypeByID; | |
| GetContainedTypeIDTy GetContainedTypeID; | |
| std::optional<MDTypeCallbackTy> MDType; | |
| }; | |
| /// 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, | |
| MetadataLoaderCallbacks Callbacks); | |
| 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); | |
| /// Return the DISubprogram metadata for a Function if any, null otherwise. | |
| DISubprogram *lookupSubprogramForFunction(Function *F); | |
| /// Parse a `METADATA_ATTACHMENT` block for a function. | |
| Error parseMetadataAttachment(Function &F, | |
| ArrayRef<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 |