forked from OSchip/llvm-project
[NVPTX] Update ABI handling
For PTX, we want the target to handle struct returns directly. llvm-svn: 195268
This commit is contained in:
parent
17bdb0f815
commit
f9329ff650
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue