[clang] [AArch64][Clang] Add support for __arm_agnostic("sme_za_state") (PR #121788)
Benjamin Maxwell via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 6 08:36:00 PST 2025
================
@@ -7745,6 +7746,38 @@ static bool checkMutualExclusion(TypeProcessingState &state,
return true;
}
+static bool handleArmAgnosticAttribute(Sema &S,
+ FunctionProtoType::ExtProtoInfo &EPI,
+ ParsedAttr &Attr) {
+ if (!Attr.getNumArgs()) {
+ S.Diag(Attr.getLoc(), diag::err_missing_arm_state) << Attr;
+ Attr.setInvalid();
+ return true;
+ }
+
+ for (unsigned I = 0; I < Attr.getNumArgs(); ++I) {
+ StringRef StateName;
+ SourceLocation LiteralLoc;
+ if (!S.checkStringLiteralArgumentAttr(Attr, I, StateName, &LiteralLoc))
+ return true;
+
+ if (StateName == "sme_za_state") {
+ if (EPI.AArch64SMEAttributes &
+ (FunctionType::SME_ZAMask | FunctionType::SME_ZT0Mask)) {
+ S.Diag(Attr.getLoc(), diag::err_conflicting_attributes_arm_agnostic);
+ Attr.setInvalid();
+ return true;
+ }
+ EPI.setArmSMEAttribute(FunctionType::SME_AgnosticZAStateMask);
+ } else {
+ S.Diag(LiteralLoc, diag::err_unknown_arm_state) << StateName;
+ Attr.setInvalid();
+ return true;
----------------
MacDue wrote:
nit: Flip the condition to `StateName != "sme_za_state` and exit early (avoids one level of nesting).
https://github.com/llvm/llvm-project/pull/121788
More information about the cfe-commits
mailing list