GVMaterializer.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //===- GVMaterializer.h - Interface for GV materializers --------*- C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. //
  10. // This file provides an abstract interface for loading a module from some
  11. // place. This interface allows incremental or random access loading of
  12. // functions from the file. This is useful for applications like JIT compilers
  13. // or interprocedural optimizers that do not need the entire program in memory
  14. // at the same time.
  15. //
  16. //===----------------------------------------------------------------------===//
  17. #ifndef LLVM_IR_GVMATERIALIZER_H
  18. #define LLVM_IR_GVMATERIALIZER_H
  19. #include <system_error>
  20. #include <vector>
  21. namespace llvm {
  22. class Function;
  23. class GlobalValue;
  24. class Module;
  25. class StructType;
  26. class GVMaterializer {
  27. protected:
  28. GVMaterializer() {}
  29. public:
  30. virtual ~GVMaterializer();
  31. /// True if GV has been materialized and can be dematerialized back to
  32. /// whatever backing store this GVMaterializer uses.
  33. virtual bool isDematerializable(const GlobalValue *GV) const = 0;
  34. /// Make sure the given GlobalValue is fully read.
  35. ///
  36. virtual std::error_code materialize(GlobalValue *GV) = 0;
  37. /// If the given GlobalValue is read in, and if the GVMaterializer supports
  38. /// it, release the memory for the GV, and set it up to be materialized
  39. /// lazily. If the Materializer doesn't support this capability, this method
  40. /// is a noop.
  41. ///
  42. virtual void dematerialize(GlobalValue *) {}
  43. /// Make sure the entire Module has been completely read.
  44. ///
  45. virtual std::error_code materializeModule(Module *M) = 0;
  46. virtual std::error_code materializeMetadata() = 0;
  47. virtual void setStripDebugInfo() = 0;
  48. virtual std::vector<StructType *> getIdentifiedStructTypes() const = 0;
  49. };
  50. } // End llvm namespace
  51. #endif