1//===- GVMaterializer.h - Interface for GV materializers --------*- 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 file provides an abstract interface for loading a module from some 10// place. This interface allows incremental or random access loading of 11// functions from the file. This is useful for applications like JIT compilers 12// or interprocedural optimizers that do not need the entire program in memory 13// at the same time. 14// 15//===----------------------------------------------------------------------===// 16 17#ifndef LLVM_IR_GVMATERIALIZER_H 18#define LLVM_IR_GVMATERIALIZER_H 19 20#include <vector> 21 22namespace llvm { 23 24class Error; 25class GlobalValue; 26class StructType; 27 28class GVMaterializer { 29protected: 30 GVMaterializer() = default; 31 32public: 33 virtual ~GVMaterializer(); 34 35 /// Make sure the given GlobalValue is fully read. 36 /// 37 virtual Error materialize(GlobalValue *GV) = 0; 38 39 /// Make sure the entire Module has been completely read. 40 /// 41 virtual Error materializeModule() = 0; 42 43 virtual Error materializeMetadata() = 0; 44 virtual void setStripDebugInfo() = 0; 45 46 virtual std::vector<StructType *> getIdentifiedStructTypes() const = 0; 47}; 48 49} // end namespace llvm 50 51#endif // LLVM_IR_GVMATERIALIZER_H 52