blob: 1f6cbd87010db173627e99f33424e7587f212670 [file] [log] [blame]
Reid Spencer5f016e22007-07-11 17:01:13 +00001//===--- CodeGenTypes.h - Type translation for LLVM CodeGen -----*- C++ -*-===//
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 code that handles AST -> LLVM type lowering.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef CODEGEN_CODEGENTYPES_H
15#define CODEGEN_CODEGENTYPES_H
16
Anders Carlssonc9e20912007-08-21 00:21:21 +000017#include "llvm/ADT/DenseMap.h"
Reid Spencer5f016e22007-07-11 17:01:13 +000018#include <vector>
19
20namespace llvm {
Anders Carlsson4e533282007-08-17 22:00:32 +000021 class Module;
Reid Spencer5f016e22007-07-11 17:01:13 +000022 class Type;
23}
24
25namespace clang {
Chris Lattnerd2d2a112007-07-14 01:29:45 +000026 class ASTContext;
Anders Carlssonc9e20912007-08-21 00:21:21 +000027 class TagDecl;
Reid Spencer5f016e22007-07-11 17:01:13 +000028 class TargetInfo;
29 class QualType;
30 class FunctionTypeProto;
31
32namespace CodeGen {
33
34/// CodeGenTypes - This class organizes the cross-module state that is used
35/// while lowering AST types to LLVM types.
36class CodeGenTypes {
Chris Lattnerd2d2a112007-07-14 01:29:45 +000037 ASTContext &Context;
Reid Spencer5f016e22007-07-11 17:01:13 +000038 TargetInfo &Target;
Anders Carlsson4e533282007-08-17 22:00:32 +000039 llvm::Module& TheModule;
Anders Carlssonc9e20912007-08-21 00:21:21 +000040
41 llvm::DenseMap<const TagDecl*, llvm::Type*> TagDeclTypes;
Reid Spencer5f016e22007-07-11 17:01:13 +000042public:
Anders Carlsson4e533282007-08-17 22:00:32 +000043 CodeGenTypes(ASTContext &Ctx, llvm::Module &M);
Reid Spencer5f016e22007-07-11 17:01:13 +000044
45 TargetInfo &getTarget() const { return Target; }
46
47 const llvm::Type *ConvertType(QualType T);
48 void DecodeArgumentTypes(const FunctionTypeProto &FTP,
49 std::vector<const llvm::Type*> &ArgTys);
50};
Chris Lattnera7674d82007-07-13 22:13:22 +000051
Reid Spencer5f016e22007-07-11 17:01:13 +000052} // end namespace CodeGen
53} // end namespace clang
54
55#endif