https://github.com/edwardnvv57k updated 
https://github.com/llvm/llvm-project/pull/196738

>From 7a87d5d0762175551fcbde17eee7060ef558bc4c Mon Sep 17 00:00:00 2001
From: Edward Nathan Varghese <[email protected]>
Date: Sat, 9 May 2026 22:45:11 +0530
Subject: [PATCH 1/3] [AArch64] Add support for MSVC-style mangling for SVE

---
 clang/lib/AST/MicrosoftMangle.cpp             | 199 +++++++++++++++++-
 .../aarch64-mangle-sve-vectors-msvc.cpp       |  58 ++++-
 2 files changed, 243 insertions(+), 14 deletions(-)

diff --git a/clang/lib/AST/MicrosoftMangle.cpp 
b/clang/lib/AST/MicrosoftMangle.cpp
index 7d0c60d57253c..579387e16e3a9 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -2831,14 +2831,201 @@ void MicrosoftCXXNameMangler::mangleType(const 
BuiltinType *T, Qualifiers,
     break;
 #include "clang/Basic/HLSLIntangibleTypes.def"
 
-#define SVE_TYPE(Name, Id, SingletonId)                                        
\
-  case BuiltinType::Id:                                                        
\
-    mangleArtificialTagType(TagTypeKind::Struct, #Name, {"__clang"});          
\
+  case BuiltinType::SveBool:
+    Out << "$_CA";
+    break;
+
+  case BuiltinType::SveInt8:
+    Out << "$_CB";
+    break;
+  case BuiltinType::SveInt16:
+    Out << "$_CC";
+    break;
+  case BuiltinType::SveInt32:
+    Out << "$_CD";
+    break;
+  case BuiltinType::SveInt64:
+    Out << "$_CE";
+    break;
+
+  case BuiltinType::SveUint8:
+    Out << "$_CF";
+    break;
+  case BuiltinType::SveUint16:
+    Out << "$_CG";
+    break;
+  case BuiltinType::SveUint32:
+    Out << "$_CH";
+    break;
+  case BuiltinType::SveUint64:
+    Out << "$_CI";
+    break;
+
+  case BuiltinType::SveBFloat16:
+    Out << "$_CJ";
+    break;
+  case BuiltinType::SveFloat16:
+    Out << "$_CK";
+    break;
+  case BuiltinType::SveFloat32:
+    Out << "$_CL";
+    break;
+  case BuiltinType::SveFloat64:
+    Out << "$_CM";
+    break;
+
+  case BuiltinType::SveInt8x2:
+    Out << "$_C2B";
+    break;
+  case BuiltinType::SveInt16x2:
+    Out << "$_C2C";
+    break;
+  case BuiltinType::SveInt32x2:
+    Out << "$_C2D";
+    break;
+  case BuiltinType::SveInt64x2:
+    Out << "$_C2E";
+    break;
+
+  case BuiltinType::SveUint8x2:
+    Out << "$_C2F";
+    break;
+  case BuiltinType::SveUint16x2:
+    Out << "$_C2G";
+    break;
+  case BuiltinType::SveUint32x2:
+    Out << "$_C2H";
+    break;
+  case BuiltinType::SveUint64x2:
+    Out << "$_C2I";
+    break;
+
+  case BuiltinType::SveBFloat16x2:
+    Out << "$_C2J";
+    break;
+  case BuiltinType::SveFloat16x2:
+    Out << "$_C2K";
+    break;
+  case BuiltinType::SveFloat32x2:
+    Out << "$_C2L";
+    break;
+  case BuiltinType::SveFloat64x2:
+    Out << "$_C2M";
+    break;
+
+  case BuiltinType::SveInt8x3:
+    Out << "$_C3B";
+    break;
+  case BuiltinType::SveInt16x3:
+    Out << "$_C3C";
+    break;
+  case BuiltinType::SveInt32x3:
+    Out << "$_C3D";
+    break;
+  case BuiltinType::SveInt64x3:
+    Out << "$_C3E";
+    break;
+
+  case BuiltinType::SveUint8x3:
+    Out << "$_C3F";
+    break;
+  case BuiltinType::SveUint16x3:
+    Out << "$_C3G";
+    break;
+  case BuiltinType::SveUint32x3:
+    Out << "$_C3H";
+    break;
+  case BuiltinType::SveUint64x3:
+    Out << "$_C3I";
+    break;
+
+  case BuiltinType::SveBFloat16x3:
+    Out << "$_C3J";
+    break;
+  case BuiltinType::SveFloat16x3:
+    Out << "$_C3K";
+    break;
+  case BuiltinType::SveFloat32x3:
+    Out << "$_C3L";
+    break;
+  case BuiltinType::SveFloat64x3:
+    Out << "$_C3M";
+    break;
+
+  case BuiltinType::SveInt8x4:
+    Out << "$_C4B";
+    break;
+  case BuiltinType::SveInt16x4:
+    Out << "$_C4C";
+    break;
+  case BuiltinType::SveInt32x4:
+    Out << "$_C4D";
+    break;
+  case BuiltinType::SveInt64x4:
+    Out << "$_C4E";
+    break;
+
+  case BuiltinType::SveUint8x4:
+    Out << "$_C4F";
+    break;
+  case BuiltinType::SveUint16x4:
+    Out << "$_C4G";
+    break;
+  case BuiltinType::SveUint32x4:
+    Out << "$_C4H";
+    break;
+  case BuiltinType::SveUint64x4:
+    Out << "$_C4I";
+    break;
+
+  case BuiltinType::SveBFloat16x4:
+    Out << "$_C4J";
+    break;
+  case BuiltinType::SveFloat16x4:
+    Out << "$_C4K";
+    break;
+  case BuiltinType::SveFloat32x4:
+    Out << "$_C4L";
+    break;
+  case BuiltinType::SveFloat64x4:
+    Out << "$_C4M";
+    break;
+
+  // Unsupported SVE types still use the legacy artificial tag mangling
+  case BuiltinType::SveMFloat8:
+    mangleArtificialTagType(TagTypeKind::Struct, "__SVMfloat8_t", {"__clang"});
+    break;
+
+  case BuiltinType::SveMFloat8x2:
+    mangleArtificialTagType(TagTypeKind::Struct, "__clang_svmfloat8x2_t",
+                            {"__clang"});
+    break;
+
+  case BuiltinType::SveMFloat8x3:
+    mangleArtificialTagType(TagTypeKind::Struct, "__clang_svmfloat8x3_t",
+                            {"__clang"});
+    break;
+
+  case BuiltinType::SveMFloat8x4:
+    mangleArtificialTagType(TagTypeKind::Struct, "__clang_svmfloat8x4_t",
+                            {"__clang"});
+    break;
+
+  case BuiltinType::SveBoolx2:
+    mangleArtificialTagType(TagTypeKind::Struct, "__clang_svboolx2_t",
+                            {"__clang"});
+    break;
+
+  case BuiltinType::SveBoolx4:
+    mangleArtificialTagType(TagTypeKind::Struct, "__clang_svboolx4_t",
+                            {"__clang"});
+    break;
+
+  case BuiltinType::SveCount:
+    mangleArtificialTagType(TagTypeKind::Struct, "__SVCount_t", {"__clang"});
     break;
-#define SVE_SCALAR_TYPE(Name, MangledName, Id, SingletonId, Bits)
-#include "clang/Basic/AArch64ACLETypes.def"
 
-    // Issue an error for any type not explicitly handled.
+  // Issue an error for any type not explicitly handled.
   default:
     Error(Range.getBegin(), "built-in type: ",
           T->getName(Context.getASTContext().getPrintingPolicy()))
diff --git a/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp 
b/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp
index 3ed75b9494c2a..2b2e1648184d2 100644
--- a/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp
+++ b/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp
@@ -1,13 +1,55 @@
-// RUN: %clang_cc1 -triple aarch64-unknown-windows-msvc %s -emit-llvm \
-// RUN:   -o - | FileCheck %s
+// RUN: %clang_cc1 -triple aarch64-unknown-windows-msvc \
+// RUN:   -target-feature +sve -emit-llvm -o - %s | FileCheck %s
 
-template<typename T> struct S {};
+template <typename T> struct S {};
 
-// CHECK: void @"?f1@@YAXU?$S@U__SVInt8_t@__clang@@@@@Z"
+// Scalar SVE types.
+
+// CHECK: void @"?f1@@YAXU?$S@$_CB@@@Z"
 void f1(S<__SVInt8_t>) {}
-// CHECK: void @"?f2@@YAXU?$S@U__SVInt32_t@__clang@@@@@Z"
+
+// CHECK: void @"?f2@@YAXU?$S@$_CD@@@Z"
 void f2(S<__SVInt32_t>) {}
-// CHECK: void @"?f3@@YAXU?$S@U__SVBool_t@__clang@@@@@Z"
+
+// CHECK: void @"?f3@@YAXU?$S@$_CA@@@Z"
 void f3(S<__SVBool_t>) {}
-// CHECK: void @"?f4@@YAXU?$S@U__clang_svfloat64x4_t@__clang@@@@@Z"
-void f4(S<__clang_svfloat64x4_t>) {}
+
+// CHECK: void @"?f4@@YAXU?$S@$_CH@@@Z"
+void f4(S<__SVUint32_t>) {}
+
+// CHECK: void @"?f5@@YAXU?$S@$_CL@@@Z"
+void f5(S<__SVFloat32_t>) {}
+
+// CHECK: void @"?f13@@YAXU?$S@$_CJ@@@Z"
+void f13(S<__SVBfloat16_t>) {}
+
+// Tuple SVE types.
+
+// CHECK: void @"?f6@@YAXU?$S@$_C2B@@@Z"
+void f6(S<__clang_svint8x2_t>) {}
+
+// CHECK: void @"?f7@@YAXU?$S@$_C3B@@@Z"
+void f7(S<__clang_svint8x3_t>) {}
+
+// CHECK: void @"?f8@@YAXU?$S@$_C4B@@@Z"
+void f8(S<__clang_svint8x4_t>) {}
+
+// CHECK: void @"?f9@@YAXU?$S@$_C4M@@@Z"
+void f9(S<__clang_svfloat64x4_t>) {}
+
+// CHECK: void @"?f14@@YAXU?$S@$_C2H@@@Z"
+void f14(S<__clang_svuint32x2_t>) {}
+
+// CHECK: void @"?f15@@YAXU?$S@$_C3L@@@Z"
+void f15(S<__clang_svfloat32x3_t>) {}
+
+// Unsupported types should continue using legacy artificial tag mangling.
+
+// CHECK: void @"?f10@@YAXU?$S@U__SVMfloat8_t@__clang@@@@@Z"
+void f10(S<__SVMfloat8_t>) {}
+
+// CHECK: void @"?f11@@YAXU?$S@U__clang_svboolx2_t@__clang@@@@@Z"
+void f11(S<__clang_svboolx2_t>) {}
+
+// CHECK: void @"?f12@@YAXU?$S@U__SVCount_t@__clang@@@@@Z"
+void f12(S<__SVCount_t>) {}
\ No newline at end of file

>From 38214446cc6004955fc1e638c37d0fe6db58ea5f Mon Sep 17 00:00:00 2001
From: Edward Nathan Varghese <[email protected]>
Date: Tue, 12 May 2026 14:49:58 +0530
Subject: [PATCH 2/3] Update clang/lib/AST/MicrosoftMangle.cpp

Co-authored-by: Eli Friedman <[email protected]>
---
 clang/lib/AST/MicrosoftMangle.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/AST/MicrosoftMangle.cpp 
b/clang/lib/AST/MicrosoftMangle.cpp
index 579387e16e3a9..8256031ea8545 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -2991,7 +2991,7 @@ void MicrosoftCXXNameMangler::mangleType(const 
BuiltinType *T, Qualifiers,
     Out << "$_C4M";
     break;
 
-  // Unsupported SVE types still use the legacy artificial tag mangling
+  // SVE types not supported by MSVC still use clang-specific artificial tag 
mangling
   case BuiltinType::SveMFloat8:
     mangleArtificialTagType(TagTypeKind::Struct, "__SVMfloat8_t", {"__clang"});
     break;

>From 74fc3cfd711f8ee97b5372f37707a9bbe91f7c2d Mon Sep 17 00:00:00 2001
From: Edward Nathan Varghese <[email protected]>
Date: Tue, 12 May 2026 15:03:18 +0530
Subject: [PATCH 3/3] Fix clang-format issues and add missing newline

---
 clang/lib/AST/MicrosoftMangle.cpp                         | 3 ++-
 clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/clang/lib/AST/MicrosoftMangle.cpp 
b/clang/lib/AST/MicrosoftMangle.cpp
index 8256031ea8545..5c0bc14b6780c 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -2991,7 +2991,8 @@ void MicrosoftCXXNameMangler::mangleType(const 
BuiltinType *T, Qualifiers,
     Out << "$_C4M";
     break;
 
-  // SVE types not supported by MSVC still use clang-specific artificial tag 
mangling
+  // SVE types not supported by MSVC still use clang-specific
+  // artificial tag mangling
   case BuiltinType::SveMFloat8:
     mangleArtificialTagType(TagTypeKind::Struct, "__SVMfloat8_t", {"__clang"});
     break;
diff --git a/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp 
b/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp
index 2b2e1648184d2..798f980d316c5 100644
--- a/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp
+++ b/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp
@@ -52,4 +52,4 @@ void f10(S<__SVMfloat8_t>) {}
 void f11(S<__clang_svboolx2_t>) {}
 
 // CHECK: void @"?f12@@YAXU?$S@U__SVCount_t@__clang@@@@@Z"
-void f12(S<__SVCount_t>) {}
\ No newline at end of file
+void f12(S<__SVCount_t>) {}

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to