blob: 885fb97a9f55ec6757f223288bac3bce460f36df [file] [log] [blame]
Reid Spencer5f016e22007-07-11 17:01:13 +00001//===--- 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
14#ifndef CODEGEN_CODEGENMODULE_H
15#define CODEGEN_CODEGENMODULE_H
16
17#include "CodeGenTypes.h"
18#include "llvm/ADT/DenseMap.h"
19
20namespace llvm {
21 class Module;
22 class Constant;
23 class Function;
24}
25
26namespace clang {
27 class ASTContext;
28 class FunctionDecl;
29 class Decl;
30
31namespace CodeGen {
32
33/// CodeGenModule - This class organizes the cross-module state that is used
34/// while generating LLVM code.
35class CodeGenModule {
36 ASTContext &Context;
37 llvm::Module &TheModule;
38 CodeGenTypes Types;
39
40 llvm::Function *MemCpyFn;
41 llvm::DenseMap<const Decl*, llvm::Constant*> GlobalDeclMap;
42public:
43 CodeGenModule(ASTContext &C, llvm::Module &M);
44
45 ASTContext &getContext() const { return Context; }
46 llvm::Module &getModule() const { return TheModule; }
47 CodeGenTypes &getTypes() { return Types; }
48
49 llvm::Constant *GetAddrOfGlobalDecl(const Decl *D);
50
51 llvm::Function *getMemCpyFn();
52
53 void EmitFunction(FunctionDecl *FD);
54
55 void PrintStats() {}
56};
57} // end namespace CodeGen
58} // end namespace clang
59
60#endif