[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