[cfe-commits] r119299 - /cfe/trunk/lib/CodeGen/Mangle.cpp

Bob Wilson bob.wilson at apple.com
Mon Nov 15 16:32:18 PST 2010


Author: bwilson
Date: Mon Nov 15 18:32:18 2010
New Revision: 119299

URL: http://llvm.org/viewvc/llvm-project?rev=119299&view=rev
Log:
Change CXXNameMangler::mangleNeonVectorType to require the vector type to be
one of the special Neon types.  We'll check for invalid Neon vectors when
they are created, so there's no point in handling them when mangling.

Modified:
    cfe/trunk/lib/CodeGen/Mangle.cpp

Modified: cfe/trunk/lib/CodeGen/Mangle.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/Mangle.cpp?rev=119299&r1=119298&r2=119299&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/Mangle.cpp (original)
+++ cfe/trunk/lib/CodeGen/Mangle.cpp Mon Nov 15 18:32:18 2010
@@ -235,7 +235,7 @@
   void mangleType(TemplateName);
   void mangleBareFunctionType(const FunctionType *T,
                               bool MangleReturnType);
-  bool mangleNeonVectorType(const VectorType *T);
+  void mangleNeonVectorType(const VectorType *T);
 
   void mangleIntegerLiteral(QualType T, const llvm::APSInt &Value);
   void mangleMemberExpr(const Expr *Base, bool IsArrow,
@@ -1404,19 +1404,17 @@
 }
 
 // ARM's ABI for Neon vector types specifies that they should be mangled as
-// if they are structs (to match ARM's initial implementation).  If the
-// vector type is not one of the special types predefined by ARM, return false
-// so it will be mangled as an ordinary vector type.
-bool CXXNameMangler::mangleNeonVectorType(const VectorType *T) {
+// if they are structs (to match ARM's initial implementation).  The
+// vector type must be one of the special types predefined by ARM.
+void CXXNameMangler::mangleNeonVectorType(const VectorType *T) {
   QualType EltType = T->getElementType();
-  if (!EltType->isBuiltinType())
-    return false;
+  assert(EltType->isBuiltinType() && "Neon vector element not a BuiltinType");
   const char *EltName = 0;
   if (T->getVectorKind() == VectorType::NeonPolyVector) {
     switch (cast<BuiltinType>(EltType)->getKind()) {
     case BuiltinType::SChar:     EltName = "poly8_t"; break;
     case BuiltinType::Short:     EltName = "poly16_t"; break;
-    default: return false;
+    default: llvm_unreachable("unexpected Neon polynomial vector element type");
     }
   } else {
     switch (cast<BuiltinType>(EltType)->getKind()) {
@@ -1429,7 +1427,7 @@
     case BuiltinType::LongLong:  EltName = "int64_t"; break;
     case BuiltinType::ULongLong: EltName = "uint64_t"; break;
     case BuiltinType::Float:     EltName = "float32_t"; break;
-    default: return false;
+    default: llvm_unreachable("unexpected Neon vector element type");
     }
   }
   const char *BaseName = 0;
@@ -1437,13 +1435,12 @@
                       getASTContext().getTypeSize(EltType));
   if (BitSize == 64)
     BaseName = "__simd64_";
-  else if (BitSize == 128)
+  else {
+    assert(BitSize == 128 && "Neon vector type not 64 or 128 bits");
     BaseName = "__simd128_";
-  else
-    return false;
+  }
   Out << strlen(BaseName) + strlen(EltName);
   Out << BaseName << EltName;
-  return true;
 }
 
 // GNU extension: vector types
@@ -1455,9 +1452,10 @@
 //                         ::= p # AltiVec vector pixel
 void CXXNameMangler::mangleType(const VectorType *T) {
   if ((T->getVectorKind() == VectorType::NeonVector ||
-       T->getVectorKind() == VectorType::NeonPolyVector) &&
-      mangleNeonVectorType(T))
+       T->getVectorKind() == VectorType::NeonPolyVector)) {
+    mangleNeonVectorType(T);
     return;
+  }
   Out << "Dv" << T->getNumElements() << '_';
   if (T->getVectorKind() == VectorType::AltiVecPixel)
     Out << 'p';





More information about the cfe-commits mailing list