[NVPTX] Update ABI handling

For PTX, we want the target to handle struct returns directly.

llvm-svn: 195268
This commit is contained in:
Justin Holewinski 2013-11-20 20:35:34 +00:00
parent 17bdb0f815
commit f9329ff650
2 changed files with 33 additions and 6 deletions

View File

@ -4197,16 +4197,26 @@ private:
ABIArgInfo NVPTXABIInfo::classifyReturnType(QualType RetTy) const {
if (RetTy->isVoidType())
return ABIArgInfo::getIgnore();
if (isAggregateTypeForABI(RetTy))
return ABIArgInfo::getIndirect(0);
return ABIArgInfo::getDirect();
// note: this is different from default ABI
if (!RetTy->isScalarType())
return ABIArgInfo::getDirect();
// Treat an enum type as its underlying type.
if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
RetTy = EnumTy->getDecl()->getIntegerType();
return (RetTy->isPromotableIntegerType() ?
ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
}
ABIArgInfo NVPTXABIInfo::classifyArgumentType(QualType Ty) const {
if (isAggregateTypeForABI(Ty))
return ABIArgInfo::getIndirect(0);
// Treat an enum type as its underlying type.
if (const EnumType *EnumTy = Ty->getAs<EnumType>())
Ty = EnumTy->getDecl()->getIntegerType();
return ABIArgInfo::getDirect();
return (Ty->isPromotableIntegerType() ?
ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
}
void NVPTXABIInfo::computeInfo(CGFunctionInfo &FI) const {

View File

@ -0,0 +1,17 @@
// RUN: %clang_cc1 -triple nvptx-unknown-unknown -S -o - %s -emit-llvm | FileCheck %s
// RUN: %clang_cc1 -triple nvptx64-unknown-unknown -S -o - %s -emit-llvm | FileCheck %s
typedef struct float4_s {
float x, y, z, w;
} float4_t;
float4_t my_function(void);
// CHECK-DAG: declare %struct.float4_s @my_function
float bar(void) {
float4_t ret;
// CHECK-DAG: call %struct.float4_s @my_function
ret = my_function();
return ret.x;
}