================ @@ -814,6 +821,42 @@ Address AArch64ABIInfo::EmitMSVAArg(CodeGenFunction &CGF, Address VAListAddr, /*allowHigherAlign*/ false); } +void AArch64TargetCodeGenInfo::checkFunctionCallABI( + CodeGenModule &CGM, SourceLocation CallLoc, const FunctionDecl *Caller, + const FunctionDecl *Callee, const CallArgList &Args) const { + if (!Callee->hasAttr<AlwaysInlineAttr>()) + return; + + auto GetSMEAttrs = [](const FunctionDecl *F) { + llvm::SMEAttrs FAttrs; + if (F->hasAttr<ArmLocallyStreamingAttr>()) + FAttrs.set(llvm::SMEAttrs::Mask::SM_Enabled); + if (auto *NewAttr = F->getAttr<ArmNewAttr>()) { + if (NewAttr->isNewZA()) + FAttrs.set(llvm::SMEAttrs::Mask::ZA_New); + } + if (const auto *T = F->getType()->getAs<FunctionProtoType>()) { + if (T->getAArch64SMEAttributes() & FunctionType::SME_PStateSMEnabledMask) + FAttrs.set(llvm::SMEAttrs::Mask::SM_Enabled); + if (T->getAArch64SMEAttributes() & + FunctionType::SME_PStateSMCompatibleMask) + FAttrs.set(llvm::SMEAttrs::Mask::SM_Compatible); + } + return FAttrs; + }; + + auto CalleeAttrs = GetSMEAttrs(Callee); + auto CallerAttrs = GetSMEAttrs(Caller); + + if (CallerAttrs.requiresSMChange(CalleeAttrs, true)) + CGM.getDiags().Report(CallLoc, + diag::err_function_always_inline_attribute_mismatch) + << Caller->getDeclName() << Callee->getDeclName() << "streaming"; + if (CalleeAttrs.hasNewZABody()) + CGM.getDiags().Report(CallLoc, diag::err_function_always_inline_new_za) + << Callee->getDeclName(); +} ---------------- SamTebbs33 wrote:
It is, thanks! https://github.com/llvm/llvm-project/pull/77936 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits