@@ -1148,15 +1148,18 @@ void AArch64TargetCodeGenInfo::checkFunctionABI(
11481148
11491149enum class ArmSMEInlinability : uint8_t {
11501150 Ok = 0 ,
1151- MismatchedStreamingCompatibility = 1 << 0 ,
1152- IncompatibleStreamingModes = 1 << 1 ,
1153- CalleeRequiresNewZA = 1 << 2 ,
1154- LLVM_MARK_AS_BITMASK_ENUM (/* LargestValue=*/ CalleeRequiresNewZA),
1151+ ErrorCalleeRequiresNewZA = 1 << 0 ,
1152+ WarnIncompatibleStreamingModes = 1 << 1 ,
1153+ ErrorIncompatibleStreamingModes = 1 << 2 ,
1154+
1155+ IncompatibleStreamingModes =
1156+ WarnIncompatibleStreamingModes | ErrorIncompatibleStreamingModes,
1157+
1158+ LLVM_MARK_AS_BITMASK_ENUM (/* LargestValue=*/ ErrorIncompatibleStreamingModes),
11551159};
11561160
11571161// / Determines if there are any Arm SME ABI issues with inlining \p Callee into
1158- // / \p Caller. Returns the issues in the ArmSMEInlinability bit enum (multiple
1159- // / bits can be set).
1162+ // / \p Caller. Returns the issue (if any) in the ArmSMEInlinability bit enum.
11601163static ArmSMEInlinability GetArmSMEInlinability (const FunctionDecl *Caller,
11611164 const FunctionDecl *Callee) {
11621165 bool CallerIsStreaming =
@@ -1170,13 +1173,14 @@ static ArmSMEInlinability GetArmSMEInlinability(const FunctionDecl *Caller,
11701173
11711174 if (!CalleeIsStreamingCompatible &&
11721175 (CallerIsStreaming != CalleeIsStreaming || CallerIsStreamingCompatible)) {
1173- Inlinability |= ArmSMEInlinability::MismatchedStreamingCompatibility;
11741176 if (CalleeIsStreaming)
1175- Inlinability |= ArmSMEInlinability::IncompatibleStreamingModes;
1177+ Inlinability |= ArmSMEInlinability::ErrorIncompatibleStreamingModes;
1178+ else
1179+ Inlinability |= ArmSMEInlinability::WarnIncompatibleStreamingModes;
11761180 }
11771181 if (auto *NewAttr = Callee->getAttr <ArmNewAttr>())
11781182 if (NewAttr->isNewZA ())
1179- Inlinability |= ArmSMEInlinability::CalleeRequiresNewZA ;
1183+ Inlinability |= ArmSMEInlinability::ErrorCalleeRequiresNewZA ;
11801184
11811185 return Inlinability;
11821186}
@@ -1189,18 +1193,18 @@ void AArch64TargetCodeGenInfo::checkFunctionCallABIStreaming(
11891193
11901194 ArmSMEInlinability Inlinability = GetArmSMEInlinability (Caller, Callee);
11911195
1192- if ((Inlinability & ArmSMEInlinability::MismatchedStreamingCompatibility ) !=
1196+ if ((Inlinability & ArmSMEInlinability::IncompatibleStreamingModes ) !=
11931197 ArmSMEInlinability::Ok)
11941198 CGM.getDiags ().Report (
11951199 CallLoc,
1196- (Inlinability & ArmSMEInlinability::IncompatibleStreamingModes) ! =
1197- ArmSMEInlinability::Ok
1200+ (Inlinability & ArmSMEInlinability::ErrorIncompatibleStreamingModes) = =
1201+ ArmSMEInlinability::ErrorIncompatibleStreamingModes
11981202 ? diag::err_function_always_inline_attribute_mismatch
11991203 : diag::warn_function_always_inline_attribute_mismatch)
12001204 << Caller->getDeclName () << Callee->getDeclName () << " streaming" ;
12011205
1202- if ((Inlinability & ArmSMEInlinability::CalleeRequiresNewZA) ! =
1203- ArmSMEInlinability::Ok )
1206+ if ((Inlinability & ArmSMEInlinability::ErrorCalleeRequiresNewZA) = =
1207+ ArmSMEInlinability::ErrorCalleeRequiresNewZA )
12041208 CGM.getDiags ().Report (CallLoc, diag::err_function_always_inline_new_za)
12051209 << Callee->getDeclName ();
12061210}
0 commit comments