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