aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2010-03-26 07:18:04 +0000
committerNick Lewycky <nicholas@mxc.ca>2010-03-26 07:18:04 +0000
commit0e5f067da58e43aa9bdfd1317283b52d4beeb19a (patch)
treed606aae4a6d9a5981158b872457d8e86cfcebe0c
parent9c127392efe91dadacbe28ca16b8a9a5fa7990b3 (diff)
Implement new mangling for vectors.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99616 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/Mangle.cpp9
-rw-r--r--test/CodeGen/mangle.c4
2 files changed, 11 insertions, 2 deletions
diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp
index d7ebda5e5f..37052a5462 100644
--- a/lib/CodeGen/Mangle.cpp
+++ b/lib/CodeGen/Mangle.cpp
@@ -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());
}
diff --git a/test/CodeGen/mangle.c b/test/CodeGen/mangle.c
index a087b42ad2..93d424a85d 100644
--- a/test/CodeGen/mangle.c
+++ b/test/CodeGen/mangle.c
@@ -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) {}