1259701Sdim//==--- CodeGenABITypes.cpp - Convert Clang types to LLVM types for ABI ----==//
2259701Sdim//
3259701Sdim//                     The LLVM Compiler Infrastructure
4259701Sdim//
5259701Sdim// This file is distributed under the University of Illinois Open Source
6259701Sdim// License. See LICENSE.TXT for details.
7259701Sdim//
8259701Sdim//===----------------------------------------------------------------------===//
9259701Sdim//
10259701Sdim// CodeGenABITypes is a simple interface for getting LLVM types for
11259701Sdim// the parameters and the return value of a function given the Clang
12259701Sdim// types.
13259701Sdim//
14259701Sdim// The class is implemented as a public wrapper around the private
15259701Sdim// CodeGenTypes class in lib/CodeGen.
16259701Sdim//
17259701Sdim//===----------------------------------------------------------------------===//
18259701Sdim
19259701Sdim#include "clang/CodeGen/CodeGenABITypes.h"
20259701Sdim
21259701Sdim#include "clang/CodeGen/CGFunctionInfo.h"
22259701Sdim#include "CodeGenModule.h"
23259701Sdim
24259701Sdimusing namespace clang;
25259701Sdimusing namespace CodeGen;
26259701Sdim
27259701SdimCodeGenABITypes::CodeGenABITypes(ASTContext &C,
28259701Sdim                                 const CodeGenOptions &CodeGenOpts,
29259701Sdim                                 llvm::Module &M,
30259701Sdim                                 const llvm::DataLayout &TD,
31259701Sdim                                 DiagnosticsEngine &Diags)
32259701Sdim  : CGM(new CodeGen::CodeGenModule(C, CodeGenOpts, M, TD, Diags)) {
33259701Sdim}
34259701Sdim
35259701SdimCodeGenABITypes::~CodeGenABITypes()
36259701Sdim{
37259701Sdim  delete CGM;
38259701Sdim}
39259701Sdim
40259701Sdimconst CGFunctionInfo &
41259701SdimCodeGenABITypes::arrangeObjCMessageSendSignature(const ObjCMethodDecl *MD,
42259701Sdim                                                 QualType receiverType) {
43259701Sdim  return CGM->getTypes().arrangeObjCMessageSendSignature(MD, receiverType);
44259701Sdim}
45259701Sdim
46259701Sdimconst CGFunctionInfo &
47259701SdimCodeGenABITypes::arrangeFreeFunctionType(CanQual<FunctionProtoType> Ty) {
48259701Sdim  return CGM->getTypes().arrangeFreeFunctionType(Ty);
49259701Sdim}
50259701Sdim
51259701Sdimconst CGFunctionInfo &
52259701SdimCodeGenABITypes::arrangeFreeFunctionType(CanQual<FunctionNoProtoType> Ty) {
53259701Sdim  return CGM->getTypes().arrangeFreeFunctionType(Ty);
54259701Sdim}
55259701Sdim
56259701Sdimconst CGFunctionInfo &
57259701SdimCodeGenABITypes::arrangeCXXMethodType(const CXXRecordDecl *RD,
58259701Sdim                                      const FunctionProtoType *FTP) {
59259701Sdim  return CGM->getTypes().arrangeCXXMethodType(RD, FTP);
60259701Sdim}
61259701Sdim
62259701Sdimconst CGFunctionInfo &
63259701SdimCodeGenABITypes::arrangeLLVMFunctionInfo(CanQualType returnType,
64259701Sdim                                         llvm::ArrayRef<CanQualType> argTypes,
65259701Sdim                                         FunctionType::ExtInfo info,
66259701Sdim                                         RequiredArgs args) {
67259701Sdim  return CGM->getTypes().arrangeLLVMFunctionInfo(returnType, argTypes,
68259701Sdim                                                info, args);
69259701Sdim}
70