1 //===-- Bitcode/Reader/MetadataLoader.h - Load Metadatas -------*- C++ -*-====// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This class handles loading Metadatas. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_LIB_BITCODE_READER_METADATALOADER_H 14 #define LLVM_LIB_BITCODE_READER_METADATALOADER_H 15 16 #include "llvm/ADT/SmallVector.h" 17 #include "llvm/Support/Error.h" 18 19 #include <functional> 20 #include <memory> 21 22 namespace llvm { 23 class BitcodeReaderValueList; 24 class BitstreamCursor; 25 class DISubprogram; 26 class Error; 27 class Function; 28 class Instruction; 29 class Metadata; 30 class MDNode; 31 class Module; 32 class Type; 33 34 /// Helper class that handles loading Metadatas and keeping them available. 35 class MetadataLoader { 36 class MetadataLoaderImpl; 37 std::unique_ptr<MetadataLoaderImpl> Pimpl; 38 Error parseMetadata(bool ModuleLevel); 39 40 public: 41 ~MetadataLoader(); 42 MetadataLoader(BitstreamCursor &Stream, Module &TheModule, 43 BitcodeReaderValueList &ValueList, bool IsImporting, 44 std::function<Type *(unsigned)> getTypeByID); 45 MetadataLoader &operator=(MetadataLoader &&); 46 MetadataLoader(MetadataLoader &&); 47 48 // Parse a module metadata block 49 Error parseModuleMetadata() { return parseMetadata(true); } 50 51 // Parse a function metadata block 52 Error parseFunctionMetadata() { return parseMetadata(false); } 53 54 /// Set the mode to strip TBAA metadata on load. 55 void setStripTBAA(bool StripTBAA = true); 56 57 /// Return true if the Loader is stripping TBAA metadata. 58 bool isStrippingTBAA(); 59 60 // Return true there are remaining unresolved forward references. 61 bool hasFwdRefs() const; 62 63 /// Return the given metadata, creating a replaceable forward reference if 64 /// necessary. 65 Metadata *getMetadataFwdRefOrLoad(unsigned Idx); 66 67 /// Return the DISubprogram metadata for a Function if any, null otherwise. 68 DISubprogram *lookupSubprogramForFunction(Function *F); 69 70 /// Parse a `METADATA_ATTACHMENT` block for a function. 71 Error parseMetadataAttachment( 72 Function &F, const SmallVectorImpl<Instruction *> &InstructionList); 73 74 /// Parse a `METADATA_KIND` block for the current module. 75 Error parseMetadataKinds(); 76 77 unsigned size() const; 78 void shrinkTo(unsigned N); 79 80 /// Perform bitcode upgrades on llvm.dbg.* calls. 81 void upgradeDebugIntrinsics(Function &F); 82 }; 83 } 84 85 #endif // LLVM_LIB_BITCODE_READER_METADATALOADER_H 86