brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · bab855c Raw
99 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// This class handles loading Metadatas.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_BITCODE_READER_METADATALOADER_H14#define LLVM_LIB_BITCODE_READER_METADATALOADER_H15 16#include "llvm/Support/Error.h"17 18#include <functional>19#include <memory>20 21namespace llvm {22class BasicBlock;23class BitcodeReaderValueList;24class BitstreamCursor;25class DISubprogram;26class Function;27class Instruction;28class Metadata;29class Module;30class Type;31template <typename T> class ArrayRef;32 33typedef std::function<Type *(unsigned)> GetTypeByIDTy;34 35typedef std::function<unsigned(unsigned, unsigned)> GetContainedTypeIDTy;36 37typedef std::function<void(Metadata **, unsigned, GetTypeByIDTy,38                           GetContainedTypeIDTy)>39    MDTypeCallbackTy;40 41struct MetadataLoaderCallbacks {42  GetTypeByIDTy GetTypeByID;43  GetContainedTypeIDTy GetContainedTypeID;44  std::optional<MDTypeCallbackTy> MDType;45};46 47/// Helper class that handles loading Metadatas and keeping them available.48class MetadataLoader {49  class MetadataLoaderImpl;50  std::unique_ptr<MetadataLoaderImpl> Pimpl;51  Error parseMetadata(bool ModuleLevel);52 53public:54  ~MetadataLoader();55  MetadataLoader(BitstreamCursor &Stream, Module &TheModule,56                 BitcodeReaderValueList &ValueList, bool IsImporting,57                 MetadataLoaderCallbacks Callbacks);58  MetadataLoader &operator=(MetadataLoader &&);59  MetadataLoader(MetadataLoader &&);60 61  // Parse a module metadata block62  Error parseModuleMetadata() { return parseMetadata(true); }63 64  // Parse a function metadata block65  Error parseFunctionMetadata() { return parseMetadata(false); }66 67  /// Set the mode to strip TBAA metadata on load.68  void setStripTBAA(bool StripTBAA = true);69 70  /// Return true if the Loader is stripping TBAA metadata.71  bool isStrippingTBAA();72 73  // Return true there are remaining unresolved forward references.74  bool hasFwdRefs() const;75 76  /// Return the given metadata, creating a replaceable forward reference if77  /// necessary.78  Metadata *getMetadataFwdRefOrLoad(unsigned Idx);79 80  /// Return the DISubprogram metadata for a Function if any, null otherwise.81  DISubprogram *lookupSubprogramForFunction(Function *F);82 83  /// Parse a `METADATA_ATTACHMENT` block for a function.84  Error parseMetadataAttachment(Function &F,85                                ArrayRef<Instruction *> InstructionList);86 87  /// Parse a `METADATA_KIND` block for the current module.88  Error parseMetadataKinds();89 90  unsigned size() const;91  void shrinkTo(unsigned N);92 93  /// Perform bitcode upgrades on llvm.dbg.* calls.94  void upgradeDebugIntrinsics(Function &F);95};96}97 98#endif // LLVM_LIB_BITCODE_READER_METADATALOADER_H99