diff options
Diffstat (limited to 'clang/lib/CodeGen/Targets/AArch64.cpp')
-rw-r--r-- | clang/lib/CodeGen/Targets/AArch64.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/Targets/AArch64.cpp b/clang/lib/CodeGen/Targets/AArch64.cpp index ad7f405..7db67ec 100644 --- a/clang/lib/CodeGen/Targets/AArch64.cpp +++ b/clang/lib/CodeGen/Targets/AArch64.cpp @@ -662,7 +662,7 @@ bool AArch64ABIInfo::isZeroLengthBitfieldPermittedInHomogeneousAggregate() bool AArch64ABIInfo::passAsAggregateType(QualType Ty) const { if (Kind == AArch64ABIKind::AAPCS && Ty->isSVESizelessBuiltinType()) { - const auto *BT = Ty->getAs<BuiltinType>(); + const auto *BT = Ty->castAs<BuiltinType>(); return !BT->isSVECount() && getContext().getBuiltinVectorTypeInfo(BT).NumVectors > 1; } @@ -1169,8 +1169,9 @@ void AArch64TargetCodeGenInfo::checkFunctionABI( enum class ArmSMEInlinability : uint8_t { Ok = 0, ErrorCalleeRequiresNewZA = 1 << 0, - WarnIncompatibleStreamingModes = 1 << 1, - ErrorIncompatibleStreamingModes = 1 << 2, + ErrorCalleeRequiresNewZT0 = 1 << 1, + WarnIncompatibleStreamingModes = 1 << 2, + ErrorIncompatibleStreamingModes = 1 << 3, IncompatibleStreamingModes = WarnIncompatibleStreamingModes | ErrorIncompatibleStreamingModes, @@ -1198,9 +1199,12 @@ static ArmSMEInlinability GetArmSMEInlinability(const FunctionDecl *Caller, else Inlinability |= ArmSMEInlinability::WarnIncompatibleStreamingModes; } - if (auto *NewAttr = Callee->getAttr<ArmNewAttr>()) + if (auto *NewAttr = Callee->getAttr<ArmNewAttr>()) { if (NewAttr->isNewZA()) Inlinability |= ArmSMEInlinability::ErrorCalleeRequiresNewZA; + if (NewAttr->isNewZT0()) + Inlinability |= ArmSMEInlinability::ErrorCalleeRequiresNewZT0; + } return Inlinability; } @@ -1227,6 +1231,11 @@ void AArch64TargetCodeGenInfo::checkFunctionCallABIStreaming( ArmSMEInlinability::ErrorCalleeRequiresNewZA) CGM.getDiags().Report(CallLoc, diag::err_function_always_inline_new_za) << Callee->getDeclName(); + + if ((Inlinability & ArmSMEInlinability::ErrorCalleeRequiresNewZT0) == + ArmSMEInlinability::ErrorCalleeRequiresNewZT0) + CGM.getDiags().Report(CallLoc, diag::err_function_always_inline_new_zt0) + << Callee->getDeclName(); } // If the target does not have floating-point registers, but we are using a |