[clang] 219c085 - [arm64] Added Microsoft mangling code for sme attributes (#199567)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 9 11:46:49 PDT 2026
Author: albertbolt1
Date: 2026-06-09T11:46:44-07:00
New Revision: 219c085c45b8e0bb4f2ea0e1131646e7916b9936
URL: https://github.com/llvm/llvm-project/commit/219c085c45b8e0bb4f2ea0e1131646e7916b9936
DIFF: https://github.com/llvm/llvm-project/commit/219c085c45b8e0bb4f2ea0e1131646e7916b9936.diff
LOG: [arm64] Added Microsoft mangling code for sme attributes (#199567)
Fixes #178804 .
Added:
clang/test/CodeGenCXX/aarch64-mangle-sme-attrs-ms.cpp
Modified:
clang/lib/AST/MicrosoftMangle.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp
index 5c0bc14b6780c..adfe260a0d091 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -3098,6 +3098,12 @@ void MicrosoftCXXNameMangler::mangleFunctionType(const FunctionType *T,
mangleCallingConvention(CC, Range);
+ if (Proto) {
+ unsigned SMEAttrs = Proto->getAArch64SMEAttributes();
+ if (SMEAttrs)
+ Out << "__clang_sme_attr" << SMEAttrs;
+ }
+
// <return-type> ::= <type>
// ::= @ # structors (they have no declared return type)
if (IsStructor) {
diff --git a/clang/test/CodeGenCXX/aarch64-mangle-sme-attrs-ms.cpp b/clang/test/CodeGenCXX/aarch64-mangle-sme-attrs-ms.cpp
new file mode 100644
index 0000000000000..06d07a5a47e31
--- /dev/null
+++ b/clang/test/CodeGenCXX/aarch64-mangle-sme-attrs-ms.cpp
@@ -0,0 +1,40 @@
+// RUN: %clang_cc1 -triple aarch64-windows-msvc -target-feature +sve -target-feature +sme -target-feature +sme2 %s -emit-llvm -o - | FileCheck %s
+
+//
+// Streaming-Mode Attributes
+//
+
+// CHECK: define dso_local void @"?fn_streaming@@YAXP6A__clang_sme_attr1XXZ at Z"
+void fn_streaming(void (*foo)() __arm_streaming) { foo(); }
+
+// CHECK: define dso_local void @"?fn_streaming_compatible@@YAXP6A__clang_sme_attr2HXZ at Z"
+void fn_streaming_compatible(int (*foo)() __arm_streaming_compatible) { foo(); }
+
+//
+// __arm_agnostic("sme_za_state") Attribute
+//
+
+// CHECK: define dso_local void @"?fn_sme_za_state_agnostic@@YAXP6A__clang_sme_attr256XXZ at Z"
+void fn_sme_za_state_agnostic(void (*foo)() __arm_agnostic("sme_za_state")) { foo(); }
+
+// CHECK: define dso_local void @"?fn_sme_za_state_streaming_agnostic@@YAXP6A__clang_sme_attr257XXZ at Z"
+void fn_sme_za_state_streaming_agnostic(void (*foo)() __arm_streaming __arm_agnostic("sme_za_state")) { foo(); }
+
+//
+// No SME Attributes
+//
+
+// CHECK: define dso_local void @"?no_sme_attrs@@YAXP6AXXZ at Z"
+void no_sme_attrs(void (*foo)()) { foo(); }
+
+// CHECK: define dso_local void @"?locally_streaming_caller@@YAXP6AXXZ at Z"
+__arm_locally_streaming void locally_streaming_caller(void (*foo)()) { foo(); }
+
+// CHECK: define dso_local void @"?streaming_caller@@YA__clang_sme_attr1XXZ"
+void streaming_caller() __arm_streaming {}
+
+// CHECK: define dso_local void @"?za_shared_caller@@YA__clang_sme_attr8XXZ"
+void za_shared_caller() __arm_in("za") {}
+
+// CHECK: define dso_local void @"?zt0_shared_caller@@YA__clang_sme_attr96XXZ"
+void zt0_shared_caller() __arm_out("zt0") {}
More information about the cfe-commits
mailing list