@@ -34,10 +34,10 @@ class AArch64ABIInfo : public ABIInfo {
34
34
AArch64ABIKind getABIKind () const { return Kind; }
35
35
bool isDarwinPCS () const { return Kind == AArch64ABIKind::DarwinPCS; }
36
36
37
- ABIArgInfo classifyReturnType (QualType RetTy, bool IsVariadic ) const ;
38
- ABIArgInfo classifyArgumentType (QualType RetTy, bool IsVariadic ,
39
- unsigned CallingConvention , unsigned &NSRN ,
40
- unsigned &NPRN) const ;
37
+ ABIArgInfo classifyReturnType (QualType RetTy, bool IsVariadicFn ) const ;
38
+ ABIArgInfo classifyArgumentType (QualType RetTy, bool IsVariadicFn ,
39
+ bool IsNamedArg , unsigned CallingConvention ,
40
+ unsigned &NSRN, unsigned & NPRN) const ;
41
41
llvm::Type *convertFixedToScalableVectorType (const VectorType *VT) const ;
42
42
ABIArgInfo coerceIllegalVector (QualType Ty, unsigned &NSRN,
43
43
unsigned &NPRN) const ;
@@ -65,8 +65,9 @@ class AArch64ABIInfo : public ABIInfo {
65
65
66
66
unsigned NSRN = 0 , NPRN = 0 ;
67
67
for (auto &it : FI.arguments ())
68
- it.info = classifyArgumentType (it.type , FI.isVariadic (),
69
- FI.getCallingConvention (), NSRN, NPRN);
68
+ it.info =
69
+ classifyArgumentType (it.type , FI.isVariadic (), /* IsNamedArg */ true ,
70
+ FI.getCallingConvention (), NSRN, NPRN);
70
71
}
71
72
72
73
RValue EmitDarwinVAArg (Address VAListAddr, QualType Ty, CodeGenFunction &CGF,
@@ -343,7 +344,8 @@ ABIArgInfo AArch64ABIInfo::coerceAndExpandPureScalableAggregate(
343
344
return ABIArgInfo::getCoerceAndExpand (CoerceToType, UnpaddedCoerceToType);
344
345
}
345
346
346
- ABIArgInfo AArch64ABIInfo::classifyArgumentType (QualType Ty, bool IsVariadic,
347
+ ABIArgInfo AArch64ABIInfo::classifyArgumentType (QualType Ty, bool IsVariadicFn,
348
+ bool IsNamedArg,
347
349
unsigned CallingConvention,
348
350
unsigned &NSRN,
349
351
unsigned &NPRN) const {
@@ -408,7 +410,7 @@ ABIArgInfo AArch64ABIInfo::classifyArgumentType(QualType Ty, bool IsVariadic,
408
410
uint64_t Members = 0 ;
409
411
bool IsWin64 = Kind == AArch64ABIKind::Win64 ||
410
412
CallingConvention == llvm::CallingConv::Win64;
411
- bool IsWinVariadic = IsWin64 && IsVariadic ;
413
+ bool IsWinVariadic = IsWin64 && IsVariadicFn ;
412
414
// In variadic functions on Windows, all composite types are treated alike,
413
415
// no special handling of HFAs/HVAs.
414
416
if (!IsWinVariadic && isHomogeneousAggregate (Ty, Base, Members)) {
@@ -429,7 +431,7 @@ ABIArgInfo AArch64ABIInfo::classifyArgumentType(QualType Ty, bool IsVariadic,
429
431
430
432
// In AAPCS named arguments of a Pure Scalable Type are passed expanded in
431
433
// registers, or indirectly if there are not enough registers.
432
- if (Kind == AArch64ABIKind::AAPCS && !IsVariadic ) {
434
+ if (Kind == AArch64ABIKind::AAPCS && IsNamedArg ) {
433
435
unsigned NVec = 0 , NPred = 0 ;
434
436
SmallVector<llvm::Type *> UnpaddedCoerceToSeq;
435
437
if (passAsPureScalableType (Ty, NVec, NPred, UnpaddedCoerceToSeq) &&
@@ -468,7 +470,7 @@ ABIArgInfo AArch64ABIInfo::classifyArgumentType(QualType Ty, bool IsVariadic,
468
470
}
469
471
470
472
ABIArgInfo AArch64ABIInfo::classifyReturnType (QualType RetTy,
471
- bool IsVariadic ) const {
473
+ bool IsVariadicFn ) const {
472
474
if (RetTy->isVoidType ())
473
475
return ABIArgInfo::getIgnore ();
474
476
@@ -506,7 +508,7 @@ ABIArgInfo AArch64ABIInfo::classifyReturnType(QualType RetTy,
506
508
uint64_t Members = 0 ;
507
509
if (isHomogeneousAggregate (RetTy, Base, Members) &&
508
510
!(getTarget ().getTriple ().getArch () == llvm::Triple::aarch64_32 &&
509
- IsVariadic ))
511
+ IsVariadicFn ))
510
512
// Homogeneous Floating-point Aggregates (HFAs) are returned directly.
511
513
return ABIArgInfo::getDirect ();
512
514
@@ -796,7 +798,7 @@ RValue AArch64ABIInfo::EmitAAPCSVAArg(Address VAListAddr, QualType Ty,
796
798
// `classifyArgumentType` here.
797
799
unsigned NSRN = 0 , NPRN = 0 ;
798
800
ABIArgInfo AI =
799
- classifyArgumentType (Ty, /* IsVariadic =*/ true ,
801
+ classifyArgumentType (Ty, /* IsVariadicFn =*/ true , /* IsNamedArg */ false ,
800
802
CGF.CurFnInfo ->getCallingConvention (), NSRN, NPRN);
801
803
// Empty records are ignored for parameter passing purposes.
802
804
if (AI.isIgnore ())
0 commit comments