CodeGenABITypes.cpp revision 259701
1198090Srdivacky//==--- CodeGenABITypes.cpp - Convert Clang types to LLVM types for ABI ----==//
2198090Srdivacky//
3198090Srdivacky//                     The LLVM Compiler Infrastructure
4198090Srdivacky//
5198090Srdivacky// This file is distributed under the University of Illinois Open Source
6198090Srdivacky// License. See LICENSE.TXT for details.
7198090Srdivacky//
8198090Srdivacky//===----------------------------------------------------------------------===//
9198090Srdivacky//
10221345Sdim// CodeGenABITypes is a simple interface for getting LLVM types for
11198090Srdivacky// the parameters and the return value of a function given the Clang
12198090Srdivacky// types.
13198090Srdivacky//
14198090Srdivacky// The class is implemented as a public wrapper around the private
15198090Srdivacky// CodeGenTypes class in lib/CodeGen.
16198090Srdivacky//
17198090Srdivacky//===----------------------------------------------------------------------===//
18200581Srdivacky
19198090Srdivacky#include "clang/CodeGen/CodeGenABITypes.h"
20198090Srdivacky
21198090Srdivacky#include "clang/CodeGen/CGFunctionInfo.h"
22198090Srdivacky#include "CodeGenModule.h"
23198090Srdivacky
24198090Srdivackyusing namespace clang;
25198090Srdivackyusing namespace CodeGen;
26198090Srdivacky
27198090SrdivackyCodeGenABITypes::CodeGenABITypes(ASTContext &C,
28198090Srdivacky                                 const CodeGenOptions &CodeGenOpts,
29198090Srdivacky                                 llvm::Module &M,
30198090Srdivacky                                 const llvm::DataLayout &TD,
31198090Srdivacky                                 DiagnosticsEngine &Diags)
32198090Srdivacky  : CGM(new CodeGen::CodeGenModule(C, CodeGenOpts, M, TD, Diags)) {
33198090Srdivacky}
34198090Srdivacky
35198090SrdivackyCodeGenABITypes::~CodeGenABITypes()
36198090Srdivacky{
37200581Srdivacky  delete CGM;
38200581Srdivacky}
39200581Srdivacky
40200581Srdivackyconst CGFunctionInfo &
41200581SrdivackyCodeGenABITypes::arrangeObjCMessageSendSignature(const ObjCMethodDecl *MD,
42200581Srdivacky                                                 QualType receiverType) {
43200581Srdivacky  return CGM->getTypes().arrangeObjCMessageSendSignature(MD, receiverType);
44200581Srdivacky}
45200581Srdivacky
46200581Srdivackyconst CGFunctionInfo &
47200581SrdivackyCodeGenABITypes::arrangeFreeFunctionType(CanQual<FunctionProtoType> Ty) {
48200581Srdivacky  return CGM->getTypes().arrangeFreeFunctionType(Ty);
49198090Srdivacky}
50198090Srdivacky
51198090Srdivackyconst CGFunctionInfo &
52198090SrdivackyCodeGenABITypes::arrangeFreeFunctionType(CanQual<FunctionNoProtoType> Ty) {
53198090Srdivacky  return CGM->getTypes().arrangeFreeFunctionType(Ty);
54198090Srdivacky}
55198090Srdivacky
56198090Srdivackyconst CGFunctionInfo &
57198090SrdivackyCodeGenABITypes::arrangeCXXMethodType(const CXXRecordDecl *RD,
58198090Srdivacky                                      const FunctionProtoType *FTP) {
59198090Srdivacky  return CGM->getTypes().arrangeCXXMethodType(RD, FTP);
60198090Srdivacky}
61198090Srdivacky
62198090Srdivackyconst CGFunctionInfo &
63198090SrdivackyCodeGenABITypes::arrangeLLVMFunctionInfo(CanQualType returnType,
64198090Srdivacky                                         llvm::ArrayRef<CanQualType> argTypes,
65198090Srdivacky                                         FunctionType::ExtInfo info,
66198090Srdivacky                                         RequiredArgs args) {
67198090Srdivacky  return CGM->getTypes().arrangeLLVMFunctionInfo(returnType, argTypes,
68198090Srdivacky                                                info, args);
69198090Srdivacky}
70198090Srdivacky