https://github.com/albertbolt1 created https://github.com/llvm/llvm-project/pull/199567
Added mangling code for sme attributes >From 7d2b0b48e1d095f45764d5092128efd2feb00ff4 Mon Sep 17 00:00:00 2001 From: albertbolt <[email protected]> Date: Tue, 26 May 2026 00:30:07 +0530 Subject: [PATCH] added mangling code for sme attributes --- clang/lib/AST/MicrosoftMangle.cpp | 6 +++ .../aarch64-mangle-sme-attrs-ms.cpp | 40 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 clang/test/CodeGenCXX/aarch64-mangle-sme-attrs-ms.cpp diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index 7d0c60d57253c..995e626f620ef 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -2910,6 +2910,12 @@ void MicrosoftCXXNameMangler::mangleFunctionType(const FunctionType *T, mangleCallingConvention(CC, Range); + if (Proto) { + unsigned SMEAttrs = Proto->getAArch64SMEAttributes(); + if (SMEAttrs) + Out << "$$SME" << 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..11c273ce797da --- /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$$SME1XXZ@Z" +void fn_streaming(void (*foo)() __arm_streaming) { foo(); } + +// CHECK: define dso_local void @"?fn_streaming_compatible@@YAXP6A$$SME2HXZ@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$$SME256XXZ@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$$SME257XXZ@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@Z" +void no_sme_attrs(void (*foo)()) { foo(); } + +// CHECK: define dso_local void @"?locally_streaming_caller@@YAXP6AXXZ@Z" +__arm_locally_streaming void locally_streaming_caller(void (*foo)()) { foo(); } + +// CHECK: define dso_local void @"?streaming_caller@@YA$$SME1XXZ" +void streaming_caller() __arm_streaming {} + +// CHECK: define dso_local void @"?za_shared_caller@@YA$$SME8XXZ" +void za_shared_caller() __arm_in("za") {} + +// CHECK: define dso_local void @"?zt0_shared_caller@@YA$$SME96XXZ" +void zt0_shared_caller() __arm_out("zt0") {} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
