forked from OSchip/llvm-project
ARM/APCS: Pass Complex types following llvm-gcc.
llvm-svn: 95029
This commit is contained in:
parent
0972067c93
commit
eedf151cb1
|
@ -1661,6 +1661,14 @@ ABIArgInfo ARMABIInfo::classifyReturnType(QualType RetTy,
|
|||
if (isEmptyRecord(Context, RetTy, false))
|
||||
return ABIArgInfo::getIgnore();
|
||||
|
||||
// Complex types are all returned as packed integers.
|
||||
//
|
||||
// FIXME: Consider using 2 x vector types if the back end handles them
|
||||
// correctly.
|
||||
if (RetTy->isAnyComplexType())
|
||||
return ABIArgInfo::getCoerce(llvm::IntegerType::get(
|
||||
VMContext, Context.getTypeSize(RetTy)));
|
||||
|
||||
// Integer like structures are returned in r0.
|
||||
if (isIntegerLikeType(RetTy, Context, VMContext)) {
|
||||
// Return in the smallest viable integer type.
|
||||
|
|
|
@ -119,3 +119,22 @@ struct s20 f20(void) {}
|
|||
// AAPCS: define arm_aapcscc i32 @f21()
|
||||
struct s21 { struct {} f1; int f0 : 4; };
|
||||
struct s21 f21(void) {}
|
||||
|
||||
// APCS-GNU: define arm_apcscc i16 @f22()
|
||||
// APCS-GNU: define arm_apcscc i32 @f23()
|
||||
// APCS-GNU: define arm_apcscc i64 @f24()
|
||||
// APCS-GNU: define arm_apcscc i128 @f25()
|
||||
// APCS-GNU: define arm_apcscc i64 @f26()
|
||||
// APCS-GNU: define arm_apcscc i128 @f27()
|
||||
// AAPCS: define arm_aapcscc i16 @f22()
|
||||
// AAPCS: define arm_aapcscc i32 @f23()
|
||||
// AAPCS: define arm_aapcscc void @f24({{.*}} noalias sret
|
||||
// AAPCS: define arm_aapcscc void @f25({{.*}} noalias sret
|
||||
// AAPCS: define arm_aapcscc void @f26({{.*}} noalias sret
|
||||
// AAPCS: define arm_aapcscc void @f27({{.*}} noalias sret
|
||||
_Complex char f22(void) {}
|
||||
_Complex short f23(void) {}
|
||||
_Complex int f24(void) {}
|
||||
_Complex long long f25(void) {}
|
||||
_Complex float f26(void) {}
|
||||
_Complex double f27(void) {}
|
||||
|
|
Loading…
Reference in New Issue