From 0d3988f4083f9bec1c6da46a5aee0c2307fa42f3 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 24 Mar 2007 17:36:26 +0000 Subject: [PATCH] add a valuetype for v1i64, which is needed by mmx. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35298 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/ValueTypes.h | 45 +++++++++++++++++------------- include/llvm/CodeGen/ValueTypes.td | 16 ++++++----- lib/VMCore/ValueTypes.cpp | 3 ++ 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/include/llvm/CodeGen/ValueTypes.h b/include/llvm/CodeGen/ValueTypes.h index b7a3c9a8e5e..cc24563b8df 100644 --- a/include/llvm/CodeGen/ValueTypes.h +++ b/include/llvm/CodeGen/ValueTypes.h @@ -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; diff --git a/include/llvm/CodeGen/ValueTypes.td b/include/llvm/CodeGen/ValueTypes.td index 4e384adc2cf..8c4758321d3 100644 --- a/include/llvm/CodeGen/ValueTypes.td +++ b/include/llvm/CodeGen/ValueTypes.td @@ -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. diff --git a/lib/VMCore/ValueTypes.cpp b/lib/VMCore/ValueTypes.cpp index f13245b3f73..9fb76554f7f 100644 --- a/lib/VMCore/ValueTypes.cpp +++ b/lib/VMCore/ValueTypes.cpp @@ -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); -- 2.34.1