================ @@ -814,6 +820,49 @@ Address AArch64ABIInfo::EmitMSVAArg(CodeGenFunction &CGF, Address VAListAddr, /*allowHigherAlign*/ false); } +class SMEAttributes { +public: + bool IsStreaming = false; + bool IsStreamingCompatible = false; + bool HasNewZA = false; + + SMEAttributes(const FunctionDecl *F) { + if (F->hasAttr<ArmLocallyStreamingAttr>()) + IsStreaming = true; + if (auto *NewAttr = F->getAttr<ArmNewAttr>()) { + if (NewAttr->isNewZA()) + HasNewZA = true; + } + if (const auto *T = F->getType()->getAs<FunctionProtoType>()) { + if (T->getAArch64SMEAttributes() & FunctionType::SME_PStateSMEnabledMask) + IsStreaming = true; + if (T->getAArch64SMEAttributes() & + FunctionType::SME_PStateSMCompatibleMask) + IsStreamingCompatible = true; + } + } +}; + +void AArch64TargetCodeGenInfo::checkFunctionCallABI( + CodeGenModule &CGM, SourceLocation CallLoc, const FunctionDecl *Caller, + const FunctionDecl *Callee, const CallArgList &Args) const { + if (!Callee->hasAttr<AlwaysInlineAttr>()) + return; + + SMEAttributes CalleeAttrs(Callee); + SMEAttributes CallerAttrs(Caller); ---------------- SamTebbs33 wrote:
`Caller` could actually be null here but based on where this function is called in `CGCall`, `Callee` can't. I've added a null check on `Caller`. 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