X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FCodeGen%2FValueTypes.h;h=be16aa0c60ced2740f8fbf69d39bfaf867d5ea0b;hb=d743f0e8f2c1f878f578a928157dbe75d643b5bb;hp=fe1b11a2686c8ff908b0bba984192ea4afae31c8;hpb=78b9ec3820f961f6cd3c7d43a134278a3de74a5a;p=oota-llvm.git diff --git a/include/llvm/CodeGen/ValueTypes.h b/include/llvm/CodeGen/ValueTypes.h index fe1b11a2686..be16aa0c60c 100644 --- a/include/llvm/CodeGen/ValueTypes.h +++ b/include/llvm/CodeGen/ValueTypes.h @@ -52,18 +52,24 @@ 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. + + // 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 + // tblgen's consumption! + iAny = 254, // iPTR - An int value the size of the pointer of the current // target. This should only be used internal to tblgen! @@ -79,7 +85,7 @@ namespace MVT { // MVT = Machine Value Types /// MVT::isFloatingPoint - Return true if this is a simple FP, or a packed /// vector FP type. static inline bool isFloatingPoint(ValueType VT) { - return (VT >= f32 && VT <= f128) || (VT >= v4f32 && VT <= v2f64); + return (VT >= f32 && VT <= f128) || (VT >= v2f32 && VT <= v2f64); } /// MVT::isVector - Return true if this is a packed vector type (i.e. not @@ -103,6 +109,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: @@ -120,36 +127,8 @@ namespace MVT { // MVT = Machine Value Types /// NumElements in length, where each element is of type VT. If there is no /// ValueType that represents this vector, a ValueType of Other is returned. /// - static inline ValueType getVectorType(ValueType VT, unsigned NumElements) { - switch (VT) { - default: - break; - case MVT::i8: - if (NumElements == 8) return MVT::v8i8; - if (NumElements == 16) return MVT::v16i8; - break; - case MVT::i16: - if (NumElements == 4) return MVT::v4i16; - if (NumElements == 8) return MVT::v8i16; - break; - case MVT::i32: - if (NumElements == 2) return MVT::v2i32; - if (NumElements == 4) return MVT::v4i32; - break; - case MVT::i64: - if (NumElements == 2) return MVT::v2i64; - break; - case MVT::f32: - if (NumElements == 2) return MVT::v2f32; - if (NumElements == 4) return MVT::v4f32; - break; - case MVT::f64: - if (NumElements == 2) return MVT::v2f64; - break; - } - return MVT::Other; - } - + ValueType getVectorType(ValueType VT, unsigned NumElements); + /// MVT::getVectorBaseType - Given a packed vector type, return the type of /// each element. static inline ValueType getVectorBaseType(ValueType VT) { @@ -161,6 +140,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; @@ -172,17 +152,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; } } @@ -191,6 +172,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; @@ -203,13 +185,13 @@ namespace MVT { // MVT = Machine Value Types /// bits in the specified integer value type. static inline uint64_t getIntVTBitMask(ValueType VT) { assert(isInteger(VT) && !isVector(VT) && "Only applies to int scalars!"); - return ~0ULL >> (64-getSizeInBits(VT)); + return ~uint64_t(0UL) >> (64-getSizeInBits(VT)); } /// MVT::getIntVTSignBit - Return an integer with a 1 in the position of the /// sign bit for the specified integer value type. static inline uint64_t getIntVTSignBit(ValueType VT) { assert(isInteger(VT) && !isVector(VT) && "Only applies to int scalars!"); - return 1ULL << (getSizeInBits(VT)-1); + return uint64_t(1UL) << (getSizeInBits(VT)-1); } /// MVT::getValueTypeString - This function returns value type as a string, @@ -220,6 +202,11 @@ namespace MVT { // MVT = Machine Value Types /// to the specified ValueType. For integer types, this returns an unsigned /// type. Note that this will abort for types that cannot be represented. const Type *getTypeForValueType(ValueType VT); + + /// MVT::getValueType - Return the value type corresponding to the specified + /// type. This returns all vectors as MVT::Vector and all pointers as + /// MVT::iPTR. + ValueType getValueType(const Type *Ty); } } // End llvm namespace