blob: 12189ae1aea96cf525b04c528aea0e2787cc2ab2 [file] [log] [blame]
Mark Lacey8b549992013-10-30 21:53:58 +00001//==--- CodeGenABITypes.cpp - Convert Clang types to LLVM types for ABI ----==//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// CodeGenABITypes is a simple interface for getting LLVM types for
11// the parameters and the return value of a function given the Clang
12// types.
13//
14// The class is implemented as a public wrapper around the private
15// CodeGenTypes class in lib/CodeGen.
16//
17//===----------------------------------------------------------------------===//
18
19#include "clang/CodeGen/CodeGenABITypes.h"
Mark Lacey8b549992013-10-30 21:53:58 +000020#include "CodeGenModule.h"
Stephen Hines651f13c2014-04-23 16:59:28 -070021#include "clang/CodeGen/CGFunctionInfo.h"
22#include "clang/Frontend/CodeGenOptions.h"
Mark Lacey8b549992013-10-30 21:53:58 +000023
24using namespace clang;
25using namespace CodeGen;
26
27CodeGenABITypes::CodeGenABITypes(ASTContext &C,
Mark Lacey8b549992013-10-30 21:53:58 +000028 llvm::Module &M,
Stephen Hines176edba2014-12-01 14:53:08 -080029 const llvm::DataLayout &TD,
30 CoverageSourceInfo *CoverageInfo)
Stephen Hines651f13c2014-04-23 16:59:28 -070031 : CGO(new CodeGenOptions),
Stephen Hines176edba2014-12-01 14:53:08 -080032 CGM(new CodeGen::CodeGenModule(C, *CGO, M, TD, C.getDiagnostics(),
33 CoverageInfo)) {
Mark Lacey8b549992013-10-30 21:53:58 +000034}
35
36CodeGenABITypes::~CodeGenABITypes()
37{
Stephen Hines651f13c2014-04-23 16:59:28 -070038 delete CGO;
Mark Lacey8b549992013-10-30 21:53:58 +000039 delete CGM;
40}
41
42const CGFunctionInfo &
43CodeGenABITypes::arrangeObjCMessageSendSignature(const ObjCMethodDecl *MD,
44 QualType receiverType) {
45 return CGM->getTypes().arrangeObjCMessageSendSignature(MD, receiverType);
46}
47
48const CGFunctionInfo &
49CodeGenABITypes::arrangeFreeFunctionType(CanQual<FunctionProtoType> Ty) {
50 return CGM->getTypes().arrangeFreeFunctionType(Ty);
51}
52
53const CGFunctionInfo &
54CodeGenABITypes::arrangeFreeFunctionType(CanQual<FunctionNoProtoType> Ty) {
55 return CGM->getTypes().arrangeFreeFunctionType(Ty);
56}
57
58const CGFunctionInfo &
59CodeGenABITypes::arrangeCXXMethodType(const CXXRecordDecl *RD,
60 const FunctionProtoType *FTP) {
61 return CGM->getTypes().arrangeCXXMethodType(RD, FTP);
62}
63
64const CGFunctionInfo &
Stephen Hines651f13c2014-04-23 16:59:28 -070065CodeGenABITypes::arrangeFreeFunctionCall(CanQualType returnType,
Stephen Hinesc568f1e2014-07-21 00:47:37 -070066 ArrayRef<CanQualType> argTypes,
Mark Lacey8b549992013-10-30 21:53:58 +000067 FunctionType::ExtInfo info,
68 RequiredArgs args) {
Stephen Hines651f13c2014-04-23 16:59:28 -070069 return CGM->getTypes().arrangeLLVMFunctionInfo(
Stephen Hines0e2c34f2015-03-23 12:09:02 -070070 returnType, /*IsInstanceMethod=*/false, /*IsChainCall=*/false, argTypes,
71 info, args);
Mark Lacey8b549992013-10-30 21:53:58 +000072}