[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