CodeGenModule.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //===--- CodeGenModule.h - Per-Module state for LLVM CodeGen --------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file was developed by Chris Lattner and is distributed under
  6. // the University of Illinois Open Source License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. //
  10. // This is the internal per-translation-unit state used for llvm translation.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. #ifndef CODEGEN_CODEGENMODULE_H
  14. #define CODEGEN_CODEGENMODULE_H
  15. #include "CodeGenTypes.h"
  16. #include "llvm/ADT/DenseMap.h"
  17. namespace llvm {
  18. class Module;
  19. class Constant;
  20. class Function;
  21. }
  22. namespace clang {
  23. class ASTContext;
  24. class FunctionDecl;
  25. class Decl;
  26. namespace CodeGen {
  27. /// CodeGenModule - This class organizes the cross-module state that is used
  28. /// while generating LLVM code.
  29. class CodeGenModule {
  30. ASTContext &Context;
  31. llvm::Module &TheModule;
  32. CodeGenTypes Types;
  33. llvm::Function *MemCpyFn;
  34. llvm::DenseMap<const Decl*, llvm::Constant*> GlobalDeclMap;
  35. public:
  36. CodeGenModule(ASTContext &C, llvm::Module &M);
  37. ASTContext &getContext() const { return Context; }
  38. llvm::Module &getModule() const { return TheModule; }
  39. CodeGenTypes &getTypes() { return Types; }
  40. llvm::Constant *GetAddrOfGlobalDecl(const Decl *D);
  41. llvm::Function *getMemCpyFn();
  42. void EmitFunction(FunctionDecl *FD);
  43. void PrintStats() {}
  44. };
  45. } // end namespace CodeGen
  46. } // end namespace clang
  47. #endif