[clang] [Clang][AArch64] Include SME attributes in the name mangling of function types (PR #114209)
Kerry McLaughlin via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 25 08:55:39 PST 2024
================
@@ -3536,35 +3536,64 @@ void CXXNameMangler::mangleExtFunctionInfo(const FunctionType *T) {
// FIXME: noreturn
}
-bool hasSharedState(unsigned SMEAttrs) {
+unsigned getZAState(unsigned SMEAttrs) {
switch (SMEAttrs) {
case FunctionType::ARM_In:
+ return 1;
case FunctionType::ARM_Out:
+ return 2;
case FunctionType::ARM_InOut:
+ return 3;
case FunctionType::ARM_Preserves:
- return true;
+ return 4;
default:
- return false;
+ return 0;
}
}
+// The mangling scheme for function types which have SME attributes is implemented as
+// a "pseudo" template:
+//
+// '__SME_ATTRS<<normal_function_type>, <sme_state>>'
+//
+// Combining the function type with a bitmask representing the streaming and ZA properties
+// of the function's interface. The bits of sme_state are defined as follows:
+// 0: Streaming Mode
+// 1: Streaming Compatible
+// 2: ZA Agnostic
+// 3-5: ZA State
+// 6-8: ZT0 State
+// 9-63: 0, reserved for future type attributes.
+//
+// For example:
+// void f(svint8_t (*fn)() __arm_streaming_compatible __arm_inout("za")) { fn(); }
+//
+// The function fn is described as '__SME_ATTRS<Fu10__SVInt8_tvE, 26u>' and mangled as:
+//
+// "11__SME_ATTRSI" + function type mangling + "Lj" + bitmask + "EE"
+//
+// i.e. "11__SME_ATTRSIFu10__SVInt8_tvELj26EE"
+//
void CXXNameMangler::mangleSMEAttrs(unsigned SMEAttrs) {
if (!SMEAttrs)
return;
// Streaming Mode
+ unsigned Bitmask = 0;
if (SMEAttrs & FunctionType::SME_PStateSMEnabledMask)
- Out << "Lj1E";
+ Bitmask |= 1;
----------------
kmclaughlin-arm wrote:
I've removed details of what each bit represents from the comment now that there is an enum with this information. I've still left in a short description of the template, similar to what has been written for the `arm_sve_vector_bits` attribute.
https://github.com/llvm/llvm-project/pull/114209
More information about the cfe-commits
mailing list