================ @@ -7513,6 +7516,30 @@ void Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, } } + auto *CallerFD = dyn_cast<FunctionDecl>(CurContext); + bool IsCalleeStreaming = + (ExtInfo.AArch64SMEAttributes & FunctionType::SME_PStateSMEnabledMask); + bool IsCalleeStreamingCompatible = + (ExtInfo.AArch64SMEAttributes & + FunctionType::SME_PStateSMCompatibleMask); + bool IsBuiltin = (FD && FD->getBuiltinID()); + AnyScalableArgsOrRet |= Proto->getReturnType()->isSizelessVectorType(); + + // If the caller is a function and the callee has a different + // non-compitable streaming attribute. If it passed any VL-based arguments + // or return VL-based value, then warn that the streaming and non-streaming + // vector lengths may be different. + if (CallerFD && !IsBuiltin && AnyScalableArgsOrRet) { + ArmStreamingType CallerFnType = getArmStreamingFnType(CallerFD); + if ((CallerFnType != ArmStreaming && + CallerFnType != ArmStreamingCompatible && IsCalleeStreaming) || + (CallerFnType == ArmStreaming && !IsCalleeStreaming && + !IsCalleeStreamingCompatible) || + (CallerFnType == ArmStreamingCompatible && + (IsCalleeStreaming || !IsCalleeStreamingCompatible))) ---------------- sdesmalen-arm wrote:
This can be simplified to: ``` if (!IsCalleeStreamingCompatible && (CallerFnType == ArmStreamingCompatible || ((CallerFnType == ArmStreaming) ^ IsCalleeStreaming))) ``` https://github.com/llvm/llvm-project/pull/79842 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits