]> granicus.if.org Git - clang/commitdiff
Implement new mangling for vectors.
authorNick Lewycky <nicholas@mxc.ca>
Fri, 26 Mar 2010 07:18:04 +0000 (07:18 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Fri, 26 Mar 2010 07:18:04 +0000 (07:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99616 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/Mangle.cpp
test/CodeGen/mangle.c

index d7ebda5e5f0c964dcc0a3414d24dde998d2d3969..37052a54622f7e36bfad0628439c5de9ac0248c1 100644 (file)
@@ -1136,15 +1136,20 @@ void CXXNameMangler::mangleType(const ComplexType *T) {
 }
 
 // GNU extension: vector types
+// <type>        ::= <vector-type>
+// <vector-type> ::= Dv <positive dimension number> _ <element type>
+//               ::= Dv [<dimension expression>] _ <element type>
 void CXXNameMangler::mangleType(const VectorType *T) {
-  Out << "U8__vector";
+  Out << "Dv" << T->getNumElements() << '_';
   mangleType(T->getElementType());
 }
 void CXXNameMangler::mangleType(const ExtVectorType *T) {
   mangleType(static_cast<const VectorType*>(T));
 }
 void CXXNameMangler::mangleType(const DependentSizedExtVectorType *T) {
-  Out << "U8__vector";
+  Out << "Dv";
+  mangleExpression(T->getSizeExpr());
+  Out << '_';
   mangleType(T->getElementType());
 }
 
index a087b42ad21a7ae6c916a1208531a86319ae1fd7..93d424a85dad371a8ba463eb4e0632283879d64d 100644 (file)
@@ -59,3 +59,7 @@ extern int func (void) __asm__ ("FUNC");
 int func(void) {
   return 42;
 }
+
+// CHECK: @_Z4foo9Dv4_f
+typedef __attribute__(( vector_size(16) )) float float4;
+void __attribute__((__overloadable__)) foo9(float4 f) {}