Add support for 3 element 32-bit vector ValueTypes.
authorChristopher Lamb <christopher.lamb@gmail.com>
Thu, 26 Jul 2007 01:46:52 +0000 (01:46 +0000)
committerChristopher Lamb <christopher.lamb@gmail.com>
Thu, 26 Jul 2007 01:46:52 +0000 (01:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40506 91177308-0d34-0410-b5e6-96231b3b80d8

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

index d2a6414fcc59aaf39caba4e3fbdaa280d91394db..57826ad0d8a981d166555be1a6ef0f7b73da6a75 100644 (file)
@@ -52,16 +52,19 @@ namespace MVT {  // MVT = Machine Value Types
     v1i64          =  16,   //  1 x i64
     v16i8          =  17,   // 16 x i8
     v8i16          =  18,   //  8 x i16
-    v4i32          =  19,   //  4 x i32
-    v2i64          =  20,   //  2 x i64
+    v3i32           = 19,   //  3 x i32
+    v4i32          =  20,   //  4 x i32
+    v2i64          =  21,   //  2 x i64
 
-    v2f32          =  21,   //  2 x f32
-    v4f32          =  22,   //  4 x f32
-    v2f64          =  23,   //  2 x f64
+    v2f32          =  22,   //  2 x f32
+    v3f32           = 23,   //  3 x f32
+    v4f32          =  24,   //  4 x f32
+    v2f64          =  25,   //  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 =  26,   // This always remains at the end of the list.
 
     // iAny - An integer value of any bit width. This is used for intrinsics
     // that have overloadings based on integer bit widths. This is only for
@@ -133,10 +136,12 @@ namespace MVT {  // MVT = Machine Value Types
     case v4i16:
     case v8i16: return i16; 
     case v2i32:
+    case v3i32:
     case v4i32: return i32;
     case v1i64:
     case v2i64: return i64;
     case v2f32:
+    case v3f32:
     case v4f32: return f32;
     case v2f64: return f64;
     }
@@ -156,6 +161,8 @@ namespace MVT {  // MVT = Machine Value Types
     case v4i16:
     case v4i32: 
     case v4f32: return 4;
+    case v3i32:
+    case v3f32: return 3;
     case v2i32:
     case v2i64:
     case v2f32:
@@ -187,6 +194,8 @@ namespace MVT {  // MVT = Machine Value Types
     case MVT::v1i64:
     case MVT::v2f32: return 64;
     case MVT::f80 :  return 80;
+    case MVT::v3i32:
+    case MVT::v3f32: return 96;
     case MVT::f128:
     case MVT::i128: 
     case MVT::v16i8:
@@ -215,6 +224,7 @@ namespace MVT {  // MVT = Machine Value Types
       break;
     case MVT::i32:
       if (NumElements == 2)  return MVT::v2i32;
+      if (NumElements == 3)  return MVT::v3i32;
       if (NumElements == 4)  return MVT::v4i32;
       break;
     case MVT::i64:
@@ -223,6 +233,7 @@ namespace MVT {  // MVT = Machine Value Types
       break;
     case MVT::f32:
       if (NumElements == 2)  return MVT::v2f32;
+      if (NumElements == 3)  return MVT::v3f32;
       if (NumElements == 4)  return MVT::v4f32;
       break;
     case MVT::f64:
@@ -244,6 +255,7 @@ namespace MVT {  // MVT = Machine Value Types
     default: return getVectorType(i8, NumElts);
     case  1: return v1i64;
     case  2: return v2i32;
+    case  3: return v3i32;
     case  4: return v4i16;
     case  8: return v8i8;
     case 16: return v16i8;
index 557a02b34bed16861a78bbb40f5500fe6d7377a6..8e7bca766cc19168a4502a3962e41134358e91a0 100644 (file)
@@ -39,11 +39,14 @@ def v1i64  : ValueType<64 , 16>;   //  1 x i64 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 v3i32  : ValueType<96 , 19>;   //  3 x f32 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 v3f32  : ValueType<96 , 23>;   //  3 x f64 vector value
+def v4f32  : ValueType<128, 24>;   //  4 x f32 vector value
+def v2f64  : ValueType<128, 25>;   //  2 x f64 vector value
 
 // Pseudo valuetype to represent "integer of any bit width"
 def iAny   : ValueType<0  , 254>;   // integer value of any bit width
index 0518aa20d7746bb15d22be2bb4ae8ba0949b5a27..3ea33ce9ff6611cce72df5de0c0d475e41e6cd52 100644 (file)
@@ -50,6 +50,8 @@ std::string MVT::getValueTypeString(MVT::ValueType VT) {
   case MVT::v2f32: return "v2f32";
   case MVT::v4f32: return "v4f32";
   case MVT::v2f64: return "v2f64";
+  case MVT::v3i32: return "v3i32";
+  case MVT::v3f32: return "v3f32";
   }
 }
 
@@ -83,6 +85,8 @@ const Type *MVT::getTypeForValueType(MVT::ValueType VT) {
   case MVT::v2f32: return VectorType::get(Type::FloatTy, 2);
   case MVT::v4f32: return VectorType::get(Type::FloatTy, 4);
   case MVT::v2f64: return VectorType::get(Type::DoubleTy, 2);
+  case MVT::v3i32: return VectorType::get(Type::Int32Ty, 3);
+  case MVT::v3f32: return VectorType::get(Type::FloatTy, 3);
   }
 }