add a valuetype for v1i64, which is needed by mmx.
authorChris Lattner <sabre@nondot.org>
Sat, 24 Mar 2007 17:36:26 +0000 (17:36 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 24 Mar 2007 17:36:26 +0000 (17:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35298 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/ValueTypes.h
include/llvm/CodeGen/ValueTypes.td
lib/VMCore/ValueTypes.cpp

index b7a3c9a8e5ef6caec7b88610483abd7cb88412ac..cc24563b8dfd21a2a8a6075d2e80e3b88bc6f820 100644 (file)
@@ -52,18 +52,19 @@ namespace MVT {  // MVT = Machine Value Types
     v8i8           =  14,   //  8 x i8
     v4i16          =  15,   //  4 x i16
     v2i32          =  16,   //  2 x i32
-    v16i8          =  17,   // 16 x i8
-    v8i16          =  18,   //  8 x i16
-    v4i32          =  19,   //  4 x i32
-    v2i64          =  20,   //  2 x i64
-
-    v2f32          =  21,   //  2 x f32
-    v4f32          =  22,   //  4 x f32
-    v2f64          =  23,   //  2 x f64
+    v1i64          =  17,   //  1 x i64
+    v16i8          =  18,   // 16 x i8
+    v8i16          =  19,   //  8 x i16
+    v4i32          =  20,   //  4 x i32
+    v2i64          =  21,   //  2 x i64
+
+    v2f32          =  22,   //  2 x f32
+    v4f32          =  23,   //  4 x f32
+    v2f64          =  24,   //  2 x f64
     FIRST_VECTOR_VALUETYPE = v8i8,
     LAST_VECTOR_VALUETYPE  = v2f64,
 
-    LAST_VALUETYPE =  24,   // This always remains at the end of the list.
+    LAST_VALUETYPE =  25,   // This always remains at the end of the list.
 
     // iPTR - An int value the size of the pointer of the current
     // target.  This should only be used internal to tblgen!
@@ -103,6 +104,7 @@ namespace MVT {  // MVT = Machine Value Types
     case MVT::v8i8:
     case MVT::v4i16:
     case MVT::v2i32: 
+    case MVT::v1i64:
     case MVT::v2f32: return 64;
     case MVT::f80 :  return 80;
     case MVT::f128:
@@ -133,6 +135,7 @@ namespace MVT {  // MVT = Machine Value Types
     case v8i16: return i16; 
     case v2i32:
     case v4i32: return i32;
+    case v1i64:
     case v2i64: return i64;
     case v2f32:
     case v4f32: return f32;
@@ -144,17 +147,18 @@ namespace MVT {  // MVT = Machine Value Types
   /// of elements it contains.
   static inline unsigned getVectorNumElements(ValueType VT) {
     switch (VT) {
-      default: assert(0 && "Invalid vector type!");
-      case v16i8: return 16;
-      case v8i8 :
-      case v8i16: return 8;
-      case v4i16:
-      case v4i32: 
-      case v4f32: return 4;
-      case v2i32:
-      case v2i64:
-      case v2f32:
-      case v2f64: return 2;
+    default: assert(0 && "Invalid vector type!");
+    case v16i8: return 16;
+    case v8i8 :
+    case v8i16: return 8;
+    case v4i16:
+    case v4i32: 
+    case v4f32: return 4;
+    case v2i32:
+    case v2i64:
+    case v2f32:
+    case v2f64: return 2;
+    case v1i64: return 1;
     }
   }
   
@@ -163,6 +167,7 @@ namespace MVT {  // MVT = Machine Value Types
   static inline ValueType getIntVectorWithNumElements(unsigned NumElts) {
     switch (NumElts) {
     default: assert(0 && "Invalid vector type!");
+    case  1: return v1i64;
     case  2: return v2i32;
     case  4: return v4i16;
     case  8: return v8i8;
index 4e384adc2cf4d4b0994f8efcbe996c7a2becf8c3..8c4758321d3d9ecb7eca2550da73d70f1789e50e 100644 (file)
@@ -36,13 +36,15 @@ def Vector : ValueType<0  , 13>;   // Abstract vector value
 def v8i8   : ValueType<64 , 14>;   //  8 x i8  vector value
 def v4i16  : ValueType<64 , 15>;   //  4 x i16 vector value
 def v2i32  : ValueType<64 , 16>;   //  2 x i32 vector value
-def v16i8  : ValueType<128, 17>;   // 16 x i8  vector value
-def v8i16  : ValueType<128, 18>;   //  8 x i16 vector value
-def v4i32  : ValueType<128, 19>;   //  4 x i32 vector value
-def v2i64  : ValueType<128, 20>;   //  2 x i64 vector value
-def v2f32  : ValueType<64,  21>;   //  2 x f32 vector value
-def v4f32  : ValueType<128, 22>;   //  4 x f32 vector value
-def v2f64  : ValueType<128, 23>;   //  2 x f64 vector value
+def v1i64  : ValueType<64 , 17>;   //  1 x i64 vector value
+
+def v16i8  : ValueType<128, 18>;   // 16 x i8  vector value
+def v8i16  : ValueType<128, 19>;   //  8 x i16 vector value
+def v4i32  : ValueType<128, 20>;   //  4 x i32 vector value
+def v2i64  : ValueType<128, 21>;   //  2 x i64 vector value
+def v2f32  : ValueType<64,  22>;   //  2 x f32 vector value
+def v4f32  : ValueType<128, 23>;   //  4 x f32 vector value
+def v2f64  : ValueType<128, 24>;   //  2 x f64 vector value
 
 
 // Pseudo valuetype mapped to the current pointer size.
index f13245b3f7398ecc251ef30ada6c864f9772a6c0..9fb76554f7f31064d72f91c1eb1baaf05f25b370 100644 (file)
@@ -38,6 +38,7 @@ const char *MVT::getValueTypeString(MVT::ValueType VT) {
   case MVT::v8i8:  return "v8i8";
   case MVT::v4i16: return "v4i16";
   case MVT::v2i32: return "v2i32";
+  case MVT::v1i64: return "v1i64";
   case MVT::v16i8: return "v16i8";
   case MVT::v8i16: return "v8i16";
   case MVT::v4i32: return "v4i32";
@@ -68,6 +69,7 @@ MVT::ValueType MVT::getVectorType(ValueType VT, unsigned NumElements) {
     if (NumElements == 4)  return MVT::v4i32;
     break;
   case MVT::i64:
+    if (NumElements == 1)  return MVT::v1i64;
     if (NumElements == 2)  return MVT::v2i64;
     break;
   case MVT::f32:
@@ -99,6 +101,7 @@ const Type *MVT::getTypeForValueType(MVT::ValueType VT) {
   case MVT::v8i8:  return VectorType::get(Type::Int8Ty, 8);
   case MVT::v4i16: return VectorType::get(Type::Int16Ty, 4);
   case MVT::v2i32: return VectorType::get(Type::Int32Ty, 2);
+  case MVT::v1i64: return VectorType::get(Type::Int64Ty, 1);
   case MVT::v16i8: return VectorType::get(Type::Int8Ty, 16);
   case MVT::v8i16: return VectorType::get(Type::Int16Ty, 8);
   case MVT::v4i32: return VectorType::get(Type::Int32Ty, 4);