[llvm-commits] [llvm] r75308 - in /llvm/trunk: include/llvm/CodeGen/ValueTypes.h include/llvm/CodeGen/ValueTypes.td lib/VMCore/ValueTypes.cpp utils/TableGen/CodeGenTarget.cpp

Bob Wilson bob.wilson at apple.com
Fri Jul 10 16:05:09 PDT 2009


Author: bwilson
Date: Fri Jul 10 18:05:09 2009
New Revision: 75308

URL: http://llvm.org/viewvc/llvm-project?rev=75308&view=rev
Log:
Add new vector types for 192-bit, 348-bit and 512-bit sizes.
These are needed to represent ARM Neon struct datatypes containing 2, 3 or 4
separate vectors.

Modified:
    llvm/trunk/include/llvm/CodeGen/ValueTypes.h
    llvm/trunk/include/llvm/CodeGen/ValueTypes.td
    llvm/trunk/lib/VMCore/ValueTypes.cpp
    llvm/trunk/utils/TableGen/CodeGenTarget.cpp

Modified: llvm/trunk/include/llvm/CodeGen/ValueTypes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/ValueTypes.h?rev=75308&r1=75307&r2=75308&view=diff

==============================================================================
--- llvm/trunk/include/llvm/CodeGen/ValueTypes.h (original)
+++ llvm/trunk/include/llvm/CodeGen/ValueTypes.h Fri Jul 10 18:05:09 2009
@@ -54,30 +54,49 @@
       v4i8           =  15,   //  4 x i8
       v8i8           =  16,   //  8 x i8
       v16i8          =  17,   // 16 x i8
-      v32i8          =  18,   // 32 x i8
-      v2i16          =  19,   //  2 x i16
-      v4i16          =  20,   //  4 x i16
-      v8i16          =  21,   //  8 x i16
-      v16i16         =  22,   // 16 x i16
-      v2i32          =  23,   //  2 x i32
-      v3i32          =  24,   //  3 x i32
-      v4i32          =  25,   //  4 x i32
-      v8i32          =  26,   //  8 x i32
-      v1i64          =  27,   //  1 x i64
-      v2i64          =  28,   //  2 x i64
-      v4i64          =  29,   //  4 x i64
-
-      v2f32          =  30,   //  2 x f32
-      v3f32          =  31,   //  3 x f32
-      v4f32          =  32,   //  4 x f32
-      v8f32          =  33,   //  8 x f32
-      v2f64          =  34,   //  2 x f64
-      v4f64          =  35,   //  4 x f64
+      v24i8          =  18,   // 24 x i8
+      v32i8          =  19,   // 32 x i8
+      v48i8          =  20,   // 48 x i8
+      v64i8          =  21,   // 64 x i8
+
+      v2i16          =  22,   //  2 x i16
+      v4i16          =  23,   //  4 x i16
+      v8i16          =  24,   //  8 x i16
+      v12i16         =  25,   // 12 x i16
+      v16i16         =  26,   // 16 x i16
+      v24i16         =  27,   // 24 x i16
+      v32i16         =  28,   // 32 x i16
+
+      v2i32          =  29,   //  2 x i32
+      v3i32          =  30,   //  3 x i32
+      v4i32          =  31,   //  4 x i32
+      v6i32          =  32,   //  6 x i32
+      v8i32          =  33,   //  8 x i32
+      v12i32         =  34,   // 12 x i32
+      v16i32         =  35,   // 16 x i32
+
+      v1i64          =  36,   //  1 x i64
+      v2i64          =  37,   //  2 x i64
+      v3i64          =  38,   //  3 x i64
+      v4i64          =  39,   //  4 x i64
+      v6i64          =  40,   //  6 x i64
+      v8i64          =  41,   //  8 x i64
+
+      v2f32          =  42,   //  2 x f32
+      v3f32          =  43,   //  3 x f32
+      v4f32          =  44,   //  4 x f32
+      v6f32          =  45,   //  6 x f32
+      v8f32          =  46,   //  8 x f32
+      v12f32         =  47,   // 12 x f32
+      v16f32         =  48,   // 16 x f32
+
+      v2f64          =  49,   //  2 x f64
+      v4f64          =  50,   //  4 x f64
   
       FIRST_VECTOR_VALUETYPE = v2i8,
       LAST_VECTOR_VALUETYPE  = v4f64,
 
-      LAST_VALUETYPE =  36,   // This always remains at the end of the list.
+      LAST_VALUETYPE =  51,   // This always remains at the end of the list.
 
       // This is the current maximum for LAST_VALUETYPE.
       // MVT::MAX_ALLOWED_VALUETYPE is used for asserts and to size bit vectors
@@ -187,30 +206,45 @@
         if (NumElements == 4)  return v4i8;
         if (NumElements == 8)  return v8i8;
         if (NumElements == 16) return v16i8;
+        if (NumElements == 24) return v24i8;
         if (NumElements == 32) return v32i8;
+        if (NumElements == 48) return v48i8;
+        if (NumElements == 64) return v64i8;
         break;
       case i16:
         if (NumElements == 2)  return v2i16;
         if (NumElements == 4)  return v4i16;
         if (NumElements == 8)  return v8i16;
-        if (NumElements == 16)  return v16i16;
+        if (NumElements == 12) return v12i16;
+        if (NumElements == 16) return v16i16;
+        if (NumElements == 24) return v24i16;
+        if (NumElements == 32) return v32i16;
         break;
       case i32:
         if (NumElements == 2)  return v2i32;
         if (NumElements == 3)  return v3i32;
         if (NumElements == 4)  return v4i32;
-	if (NumElements == 8)  return v8i32;
+        if (NumElements == 6)  return v6i32;
+        if (NumElements == 8)  return v8i32;
+        if (NumElements == 12) return v12i32;
+        if (NumElements == 16) return v16i32;
         break;
       case i64:
         if (NumElements == 1)  return v1i64;
         if (NumElements == 2)  return v2i64;
-	if (NumElements == 4)  return v4i64;
+        if (NumElements == 3)  return v3i64;
+        if (NumElements == 4)  return v4i64;
+        if (NumElements == 6)  return v6i64;
+        if (NumElements == 8)  return v8i64;
         break;
       case f32:
         if (NumElements == 2)  return v2f32;
         if (NumElements == 3)  return v3f32;
         if (NumElements == 4)  return v4f32;
+        if (NumElements == 6)  return v6f32;
         if (NumElements == 8)  return v8f32;
+        if (NumElements == 12) return v12f32;
+        if (NumElements == 16) return v16f32;
         break;
       case f64:
         if (NumElements == 2)  return v2f64;
@@ -257,7 +291,7 @@
     bool isInteger() const {
       return isSimple() ?
              ((V >= FIRST_INTEGER_VALUETYPE && V <= LAST_INTEGER_VALUETYPE) ||
-              (V >= v2i8 && V <= v4i64)) : isExtendedInteger();
+              (V >= v2i8 && V <= v8i64)) : isExtendedInteger();
     }
 
     /// isVector - Return true if this is a vector value type.
@@ -344,22 +378,37 @@
       case v4i8 :
       case v8i8 :
       case v16i8:
-      case v32i8: return i8;
+      case v24i8:
+      case v32i8:
+      case v48i8:
+      case v64i8: return i8;
       case v2i16:
       case v4i16:
       case v8i16:
-      case v16i16: return i16;
+      case v12i16:
+      case v16i16:
+      case v24i16:
+      case v32i16: return i16;
       case v2i32:
       case v3i32:
       case v4i32:
-      case v8i32: return i32;
+      case v6i32:
+      case v8i32:
+      case v12i32:
+      case v16i32: return i32;
       case v1i64:
       case v2i64:
-      case v4i64: return i64;
+      case v3i64:
+      case v4i64:
+      case v6i64:
+      case v8i64: return i64;
       case v2f32:
       case v3f32:
       case v4f32:
-      case v8f32: return f32;
+      case v6f32:
+      case v8f32:
+      case v12f32:
+      case v16f32: return f32;
       case v2f64:
       case v4f64: return f64;
       }
@@ -372,13 +421,27 @@
       switch (V) {
       default:
         return getExtendedVectorNumElements();
-      case v32i8: return 32;
+      case v64i8: return 64;
+      case v48i8: return 48;
+      case v32i8:
+      case v32i16: return 32;
+      case v24i8:
+      case v24i16: return 24;
       case v16i8:
-      case v16i16: return 16;
-      case v8i8 :
+      case v16i16:
+      case v16i32:
+      case v16f32: return 16;
+      case v12i16:
+      case v12i32:
+      case v12f32: return 12;
+      case v8i8:
       case v8i16:
       case v8i32:
+      case v8i64:
       case v8f32: return 8;
+      case v6i32:
+      case v6i64:
+      case v6f32: return 6;
       case v4i8:
       case v4i16:
       case v4i32:
@@ -386,6 +449,7 @@
       case v4f32:
       case v4f64: return 4;
       case v3i32:
+      case v3i64:
       case v3f32: return 3;
       case v2i8:
       case v2i16:
@@ -435,12 +499,27 @@
       case v2i64:
       case v4f32:
       case v2f64: return 128;
+      case v24i8:
+      case v12i16:
+      case v6i32:
+      case v3i64:
+      case v6f32: return 192;
       case v32i8:
       case v16i16:
       case v8i32:
-      case v4i64:	
+      case v4i64:
       case v8f32:
       case v4f64: return 256;
+      case v48i8:
+      case v24i16:
+      case v12i32:
+      case v6i64:
+      case v12f32: return 384;
+      case v64i8:
+      case v32i16:
+      case v16i32:
+      case v8i64:
+      case v16f32: return 512;
       }
     }
 

Modified: llvm/trunk/include/llvm/CodeGen/ValueTypes.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/ValueTypes.td?rev=75308&r1=75307&r2=75308&view=diff

==============================================================================
--- llvm/trunk/include/llvm/CodeGen/ValueTypes.td (original)
+++ llvm/trunk/include/llvm/CodeGen/ValueTypes.td Fri Jul 10 18:05:09 2009
@@ -38,37 +38,56 @@
 def v4i8   : ValueType<32 , 15>;   //  4 x i8  vector value
 def v8i8   : ValueType<64 , 16>;   //  8 x i8  vector value
 def v16i8  : ValueType<128, 17>;   // 16 x i8  vector value
-def v32i8  : ValueType<256, 18>;   // 32 x i8 vector value
-def v2i16  : ValueType<32 , 19>;   //  2 x i16 vector value
-def v4i16  : ValueType<64 , 20>;   //  4 x i16 vector value
-def v8i16  : ValueType<128, 21>;   //  8 x i16 vector value
-def v16i16 : ValueType<256, 22>;   // 16 x i16 vector value
-def v2i32  : ValueType<64 , 23>;   //  2 x i32 vector value
-def v3i32  : ValueType<96 , 24>;   //  3 x i32 vector value
-def v4i32  : ValueType<128, 25>;   //  4 x i32 vector value
-def v8i32  : ValueType<256, 26>;   //  8 x f32 vector value
-def v1i64  : ValueType<64 , 27>;   //  1 x i64 vector value
-def v2i64  : ValueType<128, 28>;   //  2 x i64 vector value
-def v4i64  : ValueType<256, 29>;   //  4 x f64 vector value
-
-def v2f32  : ValueType<64,  30>;   //  2 x f32 vector value
-def v3f32  : ValueType<96 , 31>;   //  3 x f32 vector value
-def v4f32  : ValueType<128, 32>;   //  4 x f32 vector value
-def v8f32  : ValueType<256, 33>;   //  8 x f32 vector value
-def v2f64  : ValueType<128, 34>;   //  2 x f64 vector value
-def v4f64  : ValueType<256, 35>;   //  4 x f64 vector value
+def v24i8  : ValueType<192, 18>;   // 24 x i8  vector value
+def v32i8  : ValueType<256, 19>;   // 32 x i8  vector value
+def v48i8  : ValueType<384, 20>;   // 48 x i8  vector value
+def v64i8  : ValueType<512, 21>;   // 64 x i8  vector value
+
+def v2i16  : ValueType<32 , 22>;   //  2 x i16 vector value
+def v4i16  : ValueType<64 , 23>;   //  4 x i16 vector value
+def v8i16  : ValueType<128, 24>;   //  8 x i16 vector value
+def v12i16 : ValueType<192, 25>;   // 12 x i16 vector value
+def v16i16 : ValueType<256, 26>;   // 16 x i16 vector value
+def v24i16 : ValueType<384, 27>;   // 24 x i16 vector value
+def v32i16 : ValueType<512, 28>;   // 32 x i16 vector value
+
+def v2i32  : ValueType<64 , 29>;   //  2 x i32 vector value
+def v3i32  : ValueType<96 , 30>;   //  3 x i32 vector value
+def v4i32  : ValueType<128, 31>;   //  4 x i32 vector value
+def v6i32  : ValueType<192, 32>;   //  6 x i32 vector value
+def v8i32  : ValueType<256, 33>;   //  8 x i32 vector value
+def v12i32 : ValueType<384, 34>;   // 12 x i32 vector value
+def v16i32 : ValueType<512, 35>;   // 16 x i32 vector value
+
+def v1i64  : ValueType<64 , 36>;   //  1 x i64 vector value
+def v2i64  : ValueType<128, 37>;   //  2 x i64 vector value
+def v3i64  : ValueType<192, 38>;   //  3 x i64 vector value
+def v4i64  : ValueType<256, 39>;   //  4 x i64 vector value
+def v6i64  : ValueType<384, 40>;   //  6 x i64 vector value
+def v8i64  : ValueType<512, 41>;   //  8 x i64 vector value
+
+def v2f32  : ValueType<64,  42>;   //  2 x f32 vector value
+def v3f32  : ValueType<96 , 43>;   //  3 x f32 vector value
+def v4f32  : ValueType<128, 44>;   //  4 x f32 vector value
+def v6f32  : ValueType<192, 45>;   //  6 x f32 vector value
+def v8f32  : ValueType<256, 46>;   //  8 x f32 vector value
+def v12f32 : ValueType<384, 47>;   // 12 x f32 vector value
+def v16f32 : ValueType<512, 48>;   // 16 x f32 vector value
+
+def v2f64  : ValueType<128, 49>;   //  2 x f64 vector value
+def v4f64  : ValueType<256, 50>;   //  4 x f64 vector value
 
 def MetadataVT: ValueType<0, 251>; // Metadata
 
 // Pseudo valuetype mapped to the current pointer size to any address space.
 // Should only be used in TableGen.
-def iPTRAny   : ValueType<0, 252>;
+def iPTRAny: ValueType<0, 252>;
 
 // Pseudo valuetype to represent "float of any format"
-def fAny   : ValueType<0  , 253>;
+def fAny   : ValueType<0, 253>;
 
 // Pseudo valuetype to represent "integer of any bit width"
-def iAny   : ValueType<0  , 254>;
+def iAny   : ValueType<0, 254>;
 
 // Pseudo valuetype mapped to the current pointer size.
-def iPTR   : ValueType<0  , 255>;
+def iPTR   : ValueType<0, 255>;

Modified: llvm/trunk/lib/VMCore/ValueTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/ValueTypes.cpp?rev=75308&r1=75307&r2=75308&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/ValueTypes.cpp (original)
+++ llvm/trunk/lib/VMCore/ValueTypes.cpp Fri Jul 10 18:05:09 2009
@@ -110,22 +110,37 @@
   case MVT::v4i8:    return "v4i8";
   case MVT::v8i8:    return "v8i8";
   case MVT::v16i8:   return "v16i8";
+  case MVT::v24i8:   return "v24i8";
   case MVT::v32i8:   return "v32i8";
+  case MVT::v48i8:   return "v48i8";
+  case MVT::v64i8:   return "v64i8";
   case MVT::v2i16:   return "v2i16";
   case MVT::v4i16:   return "v4i16";
   case MVT::v8i16:   return "v8i16";
+  case MVT::v12i16:  return "v12i16";
   case MVT::v16i16:  return "v16i16";
+  case MVT::v24i16:  return "v24i16";
+  case MVT::v32i16:  return "v32i16";
   case MVT::v2i32:   return "v2i32";
   case MVT::v3i32:   return "v3i32";
   case MVT::v4i32:   return "v4i32";
+  case MVT::v6i32:   return "v6i32";
   case MVT::v8i32:   return "v8i32";
+  case MVT::v12i32:  return "v12i32";
+  case MVT::v16i32:  return "v16i32";
   case MVT::v1i64:   return "v1i64";
   case MVT::v2i64:   return "v2i64";
+  case MVT::v3i64:   return "v3i64";
   case MVT::v4i64:   return "v4i64";
+  case MVT::v6i64:   return "v6i64";
+  case MVT::v8i64:   return "v8i64";
   case MVT::v2f32:   return "v2f32";
   case MVT::v3f32:   return "v3f32";
   case MVT::v4f32:   return "v4f32";
+  case MVT::v6f32:   return "v6f32";
   case MVT::v8f32:   return "v8f32";
+  case MVT::v12f32:  return "v12f32";
+  case MVT::v16f32:  return "v16f32";
   case MVT::v2f64:   return "v2f64";
   case MVT::v4f64:   return "v4f64";
   }
@@ -155,22 +170,37 @@
   case MVT::v4i8:    return Context.getVectorType(Type::Int8Ty, 4);
   case MVT::v8i8:    return Context.getVectorType(Type::Int8Ty, 8);
   case MVT::v16i8:   return Context.getVectorType(Type::Int8Ty, 16);
+  case MVT::v24i8:   return Context.getVectorType(Type::Int8Ty, 24);
   case MVT::v32i8:   return Context.getVectorType(Type::Int8Ty, 32);
+  case MVT::v48i8:   return Context.getVectorType(Type::Int8Ty, 48);
+  case MVT::v64i8:   return Context.getVectorType(Type::Int8Ty, 64);
   case MVT::v2i16:   return Context.getVectorType(Type::Int16Ty, 2);
   case MVT::v4i16:   return Context.getVectorType(Type::Int16Ty, 4);
-  case MVT::v8i16:   return Context.getVectorType(Type::Int16Ty, 16);
-  case MVT::v16i16:  return Context.getVectorType(Type::Int16Ty, 8);
+  case MVT::v8i16:   return Context.getVectorType(Type::Int16Ty, 8);
+  case MVT::v12i16:  return Context.getVectorType(Type::Int16Ty, 12);
+  case MVT::v16i16:  return Context.getVectorType(Type::Int16Ty, 16);
+  case MVT::v24i16:  return Context.getVectorType(Type::Int16Ty, 24);
+  case MVT::v32i16:  return Context.getVectorType(Type::Int16Ty, 32);
   case MVT::v2i32:   return Context.getVectorType(Type::Int32Ty, 2);
   case MVT::v3i32:   return Context.getVectorType(Type::Int32Ty, 3);
   case MVT::v4i32:   return Context.getVectorType(Type::Int32Ty, 4);
+  case MVT::v6i32:   return Context.getVectorType(Type::Int32Ty, 6);
   case MVT::v8i32:   return Context.getVectorType(Type::Int32Ty, 8);
+  case MVT::v12i32:  return Context.getVectorType(Type::Int32Ty, 12);
+  case MVT::v16i32:  return Context.getVectorType(Type::Int32Ty, 16);
   case MVT::v1i64:   return Context.getVectorType(Type::Int64Ty, 1);
   case MVT::v2i64:   return Context.getVectorType(Type::Int64Ty, 2);
+  case MVT::v3i64:   return Context.getVectorType(Type::Int64Ty, 3);
   case MVT::v4i64:   return Context.getVectorType(Type::Int64Ty, 4);
+  case MVT::v6i64:   return Context.getVectorType(Type::Int64Ty, 6);
+  case MVT::v8i64:   return Context.getVectorType(Type::Int64Ty, 8);
   case MVT::v2f32:   return Context.getVectorType(Type::FloatTy, 2);
   case MVT::v3f32:   return Context.getVectorType(Type::FloatTy, 3);
   case MVT::v4f32:   return Context.getVectorType(Type::FloatTy, 4);
+  case MVT::v6f32:   return Context.getVectorType(Type::FloatTy, 6);
   case MVT::v8f32:   return Context.getVectorType(Type::FloatTy, 8);
+  case MVT::v12f32:  return Context.getVectorType(Type::FloatTy, 12);
+  case MVT::v16f32:  return Context.getVectorType(Type::FloatTy, 16);
   case MVT::v2f64:   return Context.getVectorType(Type::DoubleTy, 2);
   case MVT::v4f64:   return Context.getVectorType(Type::DoubleTy, 4); 
  }
@@ -201,4 +231,4 @@
                        VTy->getNumElements());
   }
   }
-}
\ No newline at end of file
+}

Modified: llvm/trunk/utils/TableGen/CodeGenTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenTarget.cpp?rev=75308&r1=75307&r2=75308&view=diff

==============================================================================
--- llvm/trunk/utils/TableGen/CodeGenTarget.cpp (original)
+++ llvm/trunk/utils/TableGen/CodeGenTarget.cpp Fri Jul 10 18:05:09 2009
@@ -63,24 +63,39 @@
   case MVT::v4i8:  return "MVT::v4i8";
   case MVT::v8i8:  return "MVT::v8i8";
   case MVT::v16i8: return "MVT::v16i8";
+  case MVT::v24i8: return "MVT::v24i8";
   case MVT::v32i8: return "MVT::v32i8";
+  case MVT::v48i8: return "MVT::v48i8";
+  case MVT::v64i8: return "MVT::v64i8";
   case MVT::v2i16: return "MVT::v2i16";
   case MVT::v4i16: return "MVT::v4i16";
   case MVT::v8i16: return "MVT::v8i16";
+  case MVT::v12i16: return "MVT::v12i16";
   case MVT::v16i16: return "MVT::v16i16";
+  case MVT::v24i16: return "MVT::v24i16";
+  case MVT::v32i16: return "MVT::v32i16";
   case MVT::v2i32: return "MVT::v2i32";
+  case MVT::v3i32: return "MVT::v3i32";
   case MVT::v4i32: return "MVT::v4i32";
+  case MVT::v6i32: return "MVT::v6i32";
   case MVT::v8i32: return "MVT::v8i32";
+  case MVT::v12i32: return "MVT::v12i32";
+  case MVT::v16i32: return "MVT::v16i32";
   case MVT::v1i64: return "MVT::v1i64";
   case MVT::v2i64: return "MVT::v2i64";
+  case MVT::v3i64: return "MVT::v3i64";
   case MVT::v4i64: return "MVT::v4i64";
+  case MVT::v6i64: return "MVT::v6i64";
+  case MVT::v8i64: return "MVT::v8i64";
   case MVT::v2f32: return "MVT::v2f32";
+  case MVT::v3f32: return "MVT::v3f32";
   case MVT::v4f32: return "MVT::v4f32";
+  case MVT::v6f32: return "MVT::v6f32";
   case MVT::v8f32: return "MVT::v8f32";
+  case MVT::v12f32: return "MVT::v12f32";
+  case MVT::v16f32: return "MVT::v16f32";
   case MVT::v2f64: return "MVT::v2f64";
   case MVT::v4f64: return "MVT::v4f64";
-  case MVT::v3i32: return "MVT::v3i32";
-  case MVT::v3f32: return "MVT::v3f32";
   case MVT::Metadata: return "MVT::Metadata";
   case MVT::iPTR:  return "MVT::iPTR";
   case MVT::iPTRAny:  return "MVT::iPTRAny";





More information about the llvm-commits mailing list