GVMaterializer.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. #include "llvm/ADT/ArrayRef.h" // HLSL Change
  22. #include "llvm/ADT/StringRef.h" // HLSL Change
  23. namespace llvm {
  24. class Function;
  25. class GlobalValue;
  26. class Module;
  27. class StructType;
  28. class GVMaterializer {
  29. protected:
  30. GVMaterializer() {}
  31. public:
  32. virtual ~GVMaterializer();
  33. /// True if GV has been materialized and can be dematerialized back to
  34. /// whatever backing store this GVMaterializer uses.
  35. virtual bool isDematerializable(const GlobalValue *GV) const = 0;
  36. /// Make sure the given GlobalValue is fully read.
  37. ///
  38. virtual std::error_code materialize(GlobalValue *GV) = 0;
  39. /// If the given GlobalValue is read in, and if the GVMaterializer supports
  40. /// it, release the memory for the GV, and set it up to be materialized
  41. /// lazily. If the Materializer doesn't support this capability, this method
  42. /// is a noop.
  43. ///
  44. virtual void dematerialize(GlobalValue *) {}
  45. /// Make sure the entire Module has been completely read.
  46. ///
  47. virtual std::error_code materializeModule(Module *M) = 0;
  48. virtual std::error_code materializeMetadata() = 0;
  49. virtual std::error_code materializeSelectNamedMetadata(llvm::ArrayRef<llvm::StringRef>) = 0; // HLSL Change
  50. virtual void setStripDebugInfo() = 0;
  51. virtual std::vector<StructType *> getIdentifiedStructTypes() const = 0;
  52. };
  53. } // End llvm namespace
  54. #endif