18b54999a831bb195c08541ca995ef0505c96193fMark Lacey//==---- CodeGenABITypes.h - 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// It allows other clients, like LLDB, to determine the LLVM types that are 188b54999a831bb195c08541ca995ef0505c96193fMark Lacey// actually used in function calls, which makes it possible to then determine 198b54999a831bb195c08541ca995ef0505c96193fMark Lacey// the acutal ABI locations (e.g. registers, stack locations, etc.) that 208b54999a831bb195c08541ca995ef0505c96193fMark Lacey// these parameters are stored in. 218b54999a831bb195c08541ca995ef0505c96193fMark Lacey// 228b54999a831bb195c08541ca995ef0505c96193fMark Lacey//===----------------------------------------------------------------------===// 238b54999a831bb195c08541ca995ef0505c96193fMark Lacey 248b54999a831bb195c08541ca995ef0505c96193fMark Lacey#ifndef LLVM_CLANG_CODEGEN_ABITYPES_H 258b54999a831bb195c08541ca995ef0505c96193fMark Lacey#define LLVM_CLANG_CODEGEN_ABITYPES_H 268b54999a831bb195c08541ca995ef0505c96193fMark Lacey 278b54999a831bb195c08541ca995ef0505c96193fMark Lacey#include "clang/AST/CanonicalType.h" 288b54999a831bb195c08541ca995ef0505c96193fMark Lacey#include "clang/AST/Type.h" 298b54999a831bb195c08541ca995ef0505c96193fMark Lacey#include "clang/CodeGen/CGFunctionInfo.h" 308b54999a831bb195c08541ca995ef0505c96193fMark Lacey 318b54999a831bb195c08541ca995ef0505c96193fMark Laceynamespace llvm { 328b54999a831bb195c08541ca995ef0505c96193fMark Lacey class DataLayout; 338b54999a831bb195c08541ca995ef0505c96193fMark Lacey class Module; 348b54999a831bb195c08541ca995ef0505c96193fMark Lacey} 358b54999a831bb195c08541ca995ef0505c96193fMark Lacey 368b54999a831bb195c08541ca995ef0505c96193fMark Laceynamespace clang { 378b54999a831bb195c08541ca995ef0505c96193fMark Laceyclass ASTContext; 388b54999a831bb195c08541ca995ef0505c96193fMark Laceyclass CXXRecordDecl; 398b54999a831bb195c08541ca995ef0505c96193fMark Laceyclass CodeGenOptions; 408b54999a831bb195c08541ca995ef0505c96193fMark Laceyclass DiagnosticsEngine; 418b54999a831bb195c08541ca995ef0505c96193fMark Laceyclass ObjCMethodDecl; 428b54999a831bb195c08541ca995ef0505c96193fMark Lacey 438b54999a831bb195c08541ca995ef0505c96193fMark Laceynamespace CodeGen { 448b54999a831bb195c08541ca995ef0505c96193fMark Laceyclass CGFunctionInfo; 458b54999a831bb195c08541ca995ef0505c96193fMark Laceyclass CodeGenModule; 468b54999a831bb195c08541ca995ef0505c96193fMark Lacey 478b54999a831bb195c08541ca995ef0505c96193fMark Laceyclass CodeGenABITypes 488b54999a831bb195c08541ca995ef0505c96193fMark Lacey{ 498b54999a831bb195c08541ca995ef0505c96193fMark Laceypublic: 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CodeGenABITypes(ASTContext &C, llvm::Module &M, const llvm::DataLayout &TD); 518b54999a831bb195c08541ca995ef0505c96193fMark Lacey ~CodeGenABITypes(); 528b54999a831bb195c08541ca995ef0505c96193fMark Lacey 538b54999a831bb195c08541ca995ef0505c96193fMark Lacey /// These methods all forward to methods in the private implementation class 548b54999a831bb195c08541ca995ef0505c96193fMark Lacey /// CodeGenTypes. 558b54999a831bb195c08541ca995ef0505c96193fMark Lacey 568b54999a831bb195c08541ca995ef0505c96193fMark Lacey const CGFunctionInfo &arrangeObjCMessageSendSignature( 578b54999a831bb195c08541ca995ef0505c96193fMark Lacey const ObjCMethodDecl *MD, 588b54999a831bb195c08541ca995ef0505c96193fMark Lacey QualType receiverType); 598b54999a831bb195c08541ca995ef0505c96193fMark Lacey const CGFunctionInfo &arrangeFreeFunctionType( 608b54999a831bb195c08541ca995ef0505c96193fMark Lacey CanQual<FunctionProtoType> Ty); 618b54999a831bb195c08541ca995ef0505c96193fMark Lacey const CGFunctionInfo &arrangeFreeFunctionType( 628b54999a831bb195c08541ca995ef0505c96193fMark Lacey CanQual<FunctionNoProtoType> Ty); 638b54999a831bb195c08541ca995ef0505c96193fMark Lacey const CGFunctionInfo &arrangeCXXMethodType(const CXXRecordDecl *RD, 648b54999a831bb195c08541ca995ef0505c96193fMark Lacey const FunctionProtoType *FTP); 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const CGFunctionInfo &arrangeFreeFunctionCall(CanQualType returnType, 66ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ArrayRef<CanQualType> argTypes, 67ef8225444452a1486bd721f3285301fe84643b00Stephen Hines FunctionType::ExtInfo info, 68ef8225444452a1486bd721f3285301fe84643b00Stephen Hines RequiredArgs args); 698b54999a831bb195c08541ca995ef0505c96193fMark Lacey 708b54999a831bb195c08541ca995ef0505c96193fMark Laceyprivate: 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines /// Default CodeGenOptions object used to initialize the 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines /// CodeGenModule and otherwise not used. More specifically, it is 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines /// not used in ABI type generation, so none of the options matter. 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CodeGenOptions *CGO; 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines /// The CodeGenModule we use get to the CodeGenTypes object. 778b54999a831bb195c08541ca995ef0505c96193fMark Lacey CodeGen::CodeGenModule *CGM; 788b54999a831bb195c08541ca995ef0505c96193fMark Lacey}; 798b54999a831bb195c08541ca995ef0505c96193fMark Lacey 808b54999a831bb195c08541ca995ef0505c96193fMark Lacey} // end namespace CodeGen 818b54999a831bb195c08541ca995ef0505c96193fMark Lacey} // end namespace clang 828b54999a831bb195c08541ca995ef0505c96193fMark Lacey 838b54999a831bb195c08541ca995ef0505c96193fMark Lacey#endif 84