| //===--- CodeGenModule.h - Per-Module state for LLVM CodeGen --------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file was developed by Chris Lattner and is distributed under |
| // the University of Illinois Open Source License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This is the internal per-translation-unit state used for llvm translation. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef CODEGEN_CODEGENMODULE_H |
| #define CODEGEN_CODEGENMODULE_H |
| |
| #include "CodeGenTypes.h" |
| #include "llvm/ADT/DenseMap.h" |
| #include "llvm/ADT/StringMap.h" |
| |
| namespace llvm { |
| class Module; |
| class Constant; |
| class Function; |
| } |
| |
| namespace clang { |
| class ASTContext; |
| class FunctionDecl; |
| class Decl; |
| class FileVarDecl; |
| |
| namespace CodeGen { |
| |
| /// CodeGenModule - This class organizes the cross-module state that is used |
| /// while generating LLVM code. |
| class CodeGenModule { |
| ASTContext &Context; |
| llvm::Module &TheModule; |
| CodeGenTypes Types; |
| |
| llvm::Function *MemCpyFn; |
| llvm::DenseMap<const Decl*, llvm::Constant*> GlobalDeclMap; |
| |
| llvm::StringMap<llvm::Constant*> CFConstantStringMap; |
| llvm::Constant *CFConstantStringClassRef; |
| public: |
| CodeGenModule(ASTContext &C, llvm::Module &M); |
| |
| ASTContext &getContext() const { return Context; } |
| llvm::Module &getModule() const { return TheModule; } |
| CodeGenTypes &getTypes() { return Types; } |
| |
| llvm::Constant *GetAddrOfGlobalDecl(const Decl *D); |
| llvm::Constant *GetAddrOfConstantCFString(const std::string& str); |
| llvm::Function *getMemCpyFn(); |
| |
| void EmitFunction(const FunctionDecl *FD); |
| void EmitGlobalVar(const FileVarDecl *D); |
| void EmitGlobalVarDeclarator(const FileVarDecl *D); |
| |
| void PrintStats() {} |
| }; |
| } // end namespace CodeGen |
| } // end namespace clang |
| |
| #endif |