18b54999a831bb195c08541ca995ef0505c96193fMark Lacey//==--- CodeGenABITypes.cpp - Convert Clang types to LLVM types for ABI ----==// 28b54999a831bb195c08541ca995ef0505c96193fMark Lacey// 38b54999a831bb195c08541ca995ef0505c96193fMark Lacey// The LLVM Compiler Infrastructure 48b54999a831bb195c08541ca995ef0505c96193fMark Lacey// 58b54999a831bb195c08541ca995ef0505c96193fMark Lacey// This file is distributed under the University of Illinois Open Source 68b54999a831bb195c08541ca995ef0505c96193fMark Lacey// License. See LICENSE.TXT for details. 78b54999a831bb195c08541ca995ef0505c96193fMark Lacey// 88b54999a831bb195c08541ca995ef0505c96193fMark Lacey//===----------------------------------------------------------------------===// 98b54999a831bb195c08541ca995ef0505c96193fMark Lacey// 108b54999a831bb195c08541ca995ef0505c96193fMark Lacey// CodeGenABITypes is a simple interface for getting LLVM types for 118b54999a831bb195c08541ca995ef0505c96193fMark Lacey// the parameters and the return value of a function given the Clang 128b54999a831bb195c08541ca995ef0505c96193fMark Lacey// types. 138b54999a831bb195c08541ca995ef0505c96193fMark Lacey// 148b54999a831bb195c08541ca995ef0505c96193fMark Lacey// The class is implemented as a public wrapper around the private 158b54999a831bb195c08541ca995ef0505c96193fMark Lacey// CodeGenTypes class in lib/CodeGen. 168b54999a831bb195c08541ca995ef0505c96193fMark Lacey// 178b54999a831bb195c08541ca995ef0505c96193fMark Lacey//===----------------------------------------------------------------------===// 188b54999a831bb195c08541ca995ef0505c96193fMark Lacey 198b54999a831bb195c08541ca995ef0505c96193fMark Lacey#include "clang/CodeGen/CodeGenABITypes.h" 208b54999a831bb195c08541ca995ef0505c96193fMark Lacey#include "CodeGenModule.h" 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/CodeGen/CGFunctionInfo.h" 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Frontend/CodeGenOptions.h" 238b54999a831bb195c08541ca995ef0505c96193fMark Lacey 248b54999a831bb195c08541ca995ef0505c96193fMark Laceyusing namespace clang; 258b54999a831bb195c08541ca995ef0505c96193fMark Laceyusing namespace CodeGen; 268b54999a831bb195c08541ca995ef0505c96193fMark Lacey 278b54999a831bb195c08541ca995ef0505c96193fMark LaceyCodeGenABITypes::CodeGenABITypes(ASTContext &C, 288b54999a831bb195c08541ca995ef0505c96193fMark Lacey llvm::Module &M, 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::DataLayout &TD) 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines : CGO(new CodeGenOptions), 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CGM(new CodeGen::CodeGenModule(C, *CGO, M, TD, C.getDiagnostics())) { 328b54999a831bb195c08541ca995ef0505c96193fMark Lacey} 338b54999a831bb195c08541ca995ef0505c96193fMark Lacey 348b54999a831bb195c08541ca995ef0505c96193fMark LaceyCodeGenABITypes::~CodeGenABITypes() 358b54999a831bb195c08541ca995ef0505c96193fMark Lacey{ 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines delete CGO; 378b54999a831bb195c08541ca995ef0505c96193fMark Lacey delete CGM; 388b54999a831bb195c08541ca995ef0505c96193fMark Lacey} 398b54999a831bb195c08541ca995ef0505c96193fMark Lacey 408b54999a831bb195c08541ca995ef0505c96193fMark Laceyconst CGFunctionInfo & 418b54999a831bb195c08541ca995ef0505c96193fMark LaceyCodeGenABITypes::arrangeObjCMessageSendSignature(const ObjCMethodDecl *MD, 428b54999a831bb195c08541ca995ef0505c96193fMark Lacey QualType receiverType) { 438b54999a831bb195c08541ca995ef0505c96193fMark Lacey return CGM->getTypes().arrangeObjCMessageSendSignature(MD, receiverType); 448b54999a831bb195c08541ca995ef0505c96193fMark Lacey} 458b54999a831bb195c08541ca995ef0505c96193fMark Lacey 468b54999a831bb195c08541ca995ef0505c96193fMark Laceyconst CGFunctionInfo & 478b54999a831bb195c08541ca995ef0505c96193fMark LaceyCodeGenABITypes::arrangeFreeFunctionType(CanQual<FunctionProtoType> Ty) { 488b54999a831bb195c08541ca995ef0505c96193fMark Lacey return CGM->getTypes().arrangeFreeFunctionType(Ty); 498b54999a831bb195c08541ca995ef0505c96193fMark Lacey} 508b54999a831bb195c08541ca995ef0505c96193fMark Lacey 518b54999a831bb195c08541ca995ef0505c96193fMark Laceyconst CGFunctionInfo & 528b54999a831bb195c08541ca995ef0505c96193fMark LaceyCodeGenABITypes::arrangeFreeFunctionType(CanQual<FunctionNoProtoType> Ty) { 538b54999a831bb195c08541ca995ef0505c96193fMark Lacey return CGM->getTypes().arrangeFreeFunctionType(Ty); 548b54999a831bb195c08541ca995ef0505c96193fMark Lacey} 558b54999a831bb195c08541ca995ef0505c96193fMark Lacey 568b54999a831bb195c08541ca995ef0505c96193fMark Laceyconst CGFunctionInfo & 578b54999a831bb195c08541ca995ef0505c96193fMark LaceyCodeGenABITypes::arrangeCXXMethodType(const CXXRecordDecl *RD, 588b54999a831bb195c08541ca995ef0505c96193fMark Lacey const FunctionProtoType *FTP) { 598b54999a831bb195c08541ca995ef0505c96193fMark Lacey return CGM->getTypes().arrangeCXXMethodType(RD, FTP); 608b54999a831bb195c08541ca995ef0505c96193fMark Lacey} 618b54999a831bb195c08541ca995ef0505c96193fMark Lacey 628b54999a831bb195c08541ca995ef0505c96193fMark Laceyconst CGFunctionInfo & 63651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesCodeGenABITypes::arrangeFreeFunctionCall(CanQualType returnType, 64ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ArrayRef<CanQualType> argTypes, 658b54999a831bb195c08541ca995ef0505c96193fMark Lacey FunctionType::ExtInfo info, 668b54999a831bb195c08541ca995ef0505c96193fMark Lacey RequiredArgs args) { 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return CGM->getTypes().arrangeLLVMFunctionInfo( 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines returnType, /*IsInstanceMethod=*/false, argTypes, info, args); 698b54999a831bb195c08541ca995ef0505c96193fMark Lacey} 70