clang  6.0.0svn
Classes | Functions
clang::CodeGen::swiftcall Namespace Reference

Classes

class  SwiftAggLowering
 

Functions

CharUnits getMaximumVoluntaryIntegerSize (CodeGenModule &CGM)
 Return the maximum voluntary integer size for the current target. More...
 
CharUnits getNaturalAlignment (CodeGenModule &CGM, llvm::Type *type)
 Return the Swift CC's notion of the natural alignment of a type. More...
 
bool isLegalIntegerType (CodeGenModule &CGM, llvm::IntegerType *type)
 Is the given integer type "legal" for Swift's perspective on the current platform? More...
 
bool isLegalVectorType (CodeGenModule &CGM, CharUnits vectorSize, llvm::VectorType *vectorTy)
 Is the given vector type "legal" for Swift's perspective on the current platform? More...
 
bool isLegalVectorType (CodeGenModule &CGM, CharUnits vectorSize, llvm::Type *eltTy, unsigned numElts)
 
std::pair< llvm::Type *, unsigned > splitLegalVectorType (CodeGenModule &CGM, CharUnits vectorSize, llvm::VectorType *vectorTy)
 Minimally split a legal vector type. More...
 
void legalizeVectorType (CodeGenModule &CGM, CharUnits vectorSize, llvm::VectorType *vectorTy, llvm::SmallVectorImpl< llvm::Type *> &types)
 Turn a vector type in a sequence of legal component vector types. More...
 
bool shouldPassCXXRecordIndirectly (CodeGenModule &CGM, const CXXRecordDecl *record)
 Should a C++ record type be passed and returned indirectly? More...
 
ABIArgInfo classifyReturnType (CodeGenModule &CGM, CanQualType type)
 Classify the rules for how to return a particular type. More...
 
ABIArgInfo classifyArgumentType (CodeGenModule &CGM, CanQualType type)
 Classify the rules for how to pass a particular type. More...
 
void computeABIInfo (CodeGenModule &CGM, CGFunctionInfo &FI)
 Compute the ABI information of a swiftcall function. More...
 
bool isSwiftErrorLoweredInRegister (CodeGenModule &CGM)
 Is swifterror lowered to a register by the target ABI. More...
 

Function Documentation

◆ classifyArgumentType()

ABIArgInfo clang::CodeGen::swiftcall::classifyArgumentType ( CodeGenModule CGM,
CanQualType  type 
)

Classify the rules for how to pass a particular type.

Definition at line 823 of file SwiftCallingConv.cpp.

References classifyType().

Referenced by computeABIInfo(), EmitX86_64VAArgFromMemory(), and GetX86_64ByValArgumentPair().

◆ classifyReturnType()

ABIArgInfo clang::CodeGen::swiftcall::classifyReturnType ( CodeGenModule CGM,
CanQualType  type 
)

Classify the rules for how to return a particular type.

Definition at line 819 of file SwiftCallingConv.cpp.

References classifyType().

Referenced by addBaseAndFieldSizes(), clang::CodeGen::CGCXXABI::canCallMismatchedFunctionType(), computeABIInfo(), GetX86_64ByValArgumentPair(), and isDeletingDtor().

◆ computeABIInfo()

void clang::CodeGen::swiftcall::computeABIInfo ( CodeGenModule CGM,
CGFunctionInfo FI 
)

◆ getMaximumVoluntaryIntegerSize()

CharUnits clang::CodeGen::swiftcall::getMaximumVoluntaryIntegerSize ( CodeGenModule CGM)

◆ getNaturalAlignment()

CharUnits clang::CodeGen::swiftcall::getNaturalAlignment ( CodeGenModule CGM,
llvm::Type type 
)

◆ isLegalIntegerType()

bool clang::CodeGen::swiftcall::isLegalIntegerType ( CodeGenModule CGM,
llvm::IntegerType *  type 
)

Is the given integer type "legal" for Swift's perspective on the current platform?

Definition at line 618 of file SwiftCallingConv.cpp.

References clang::CodeGen::CodeGenModule::getContext(), clang::ASTContext::getTargetInfo(), and clang::TargetInfo::hasInt128Type().

Referenced by clang::CodeGen::swiftcall::SwiftAggLowering::addTypedData().

◆ isLegalVectorType() [1/2]

bool clang::CodeGen::swiftcall::isLegalVectorType ( CodeGenModule CGM,
CharUnits  vectorSize,
llvm::VectorType *  vectorTy 
)

Is the given vector type "legal" for Swift's perspective on the current platform?

Definition at line 638 of file SwiftCallingConv.cpp.

Referenced by legalizeVectorType(), and splitLegalVectorType().

◆ isLegalVectorType() [2/2]

bool clang::CodeGen::swiftcall::isLegalVectorType ( CodeGenModule CGM,
CharUnits  vectorSize,
llvm::Type eltTy,
unsigned  numElts 
)

◆ isSwiftErrorLoweredInRegister()

bool clang::CodeGen::swiftcall::isSwiftErrorLoweredInRegister ( CodeGenModule CGM)

Is swifterror lowered to a register by the target ABI.

Definition at line 839 of file SwiftCallingConv.cpp.

References getSwiftABIInfo(), and clang::CodeGen::SwiftABIInfo::isSwiftErrorInRegister().

◆ legalizeVectorType()

void clang::CodeGen::swiftcall::legalizeVectorType ( CodeGenModule CGM,
CharUnits  vectorSize,
llvm::VectorType *  vectorTy,
llvm::SmallVectorImpl< llvm::Type *> &  types 
)

Turn a vector type in a sequence of legal component vector types.

The caller may assume that the sum of the data sizes of the resulting types will equal the data size of the vector type.

Definition at line 666 of file SwiftCallingConv.cpp.

References isLegalVectorType(), and isPowerOf2().

Referenced by clang::CodeGen::swiftcall::SwiftAggLowering::addTypedData().

◆ shouldPassCXXRecordIndirectly()

bool clang::CodeGen::swiftcall::shouldPassCXXRecordIndirectly ( CodeGenModule CGM,
const CXXRecordDecl record 
)

Should a C++ record type be passed and returned indirectly?

Definition at line 739 of file SwiftCallingConv.cpp.

References clang::CXXRecordDecl::ctors(), and clang::CXXRecordDecl::hasNonTrivialDestructor().

Referenced by classifyType().

◆ splitLegalVectorType()

std::pair< llvm::Type *, unsigned > clang::CodeGen::swiftcall::splitLegalVectorType ( CodeGenModule CGM,
CharUnits  vectorSize,
llvm::VectorType *  vectorTy 
)

Minimally split a legal vector type.

Definition at line 652 of file SwiftCallingConv.cpp.

References isLegalVectorType(), and isPowerOf2().

Referenced by clang::CodeGen::swiftcall::SwiftAggLowering::addTypedData().