zap the now unused MVT::getIntVectorWithNumElements
[oota-llvm.git] / include / llvm / CodeGen / ValueTypes.h
1 //===- CodeGen/ValueTypes.h - Low-Level Target independ. types --*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the set of low-level target independent types which various
11 // values in the code generator are.  This allows the target specific behavior
12 // of instructions to be described to target independent passes.
13 //
14 //===----------------------------------------------------------------------===//
15
16 #ifndef LLVM_CODEGEN_VALUETYPES_H
17 #define LLVM_CODEGEN_VALUETYPES_H
18
19 #include <cassert>
20 #include <string>
21 #include "llvm/System/DataTypes.h"
22 #include "llvm/Support/MathExtras.h"
23
24 namespace llvm {
25   class Type;
26   class LLVMContext;
27   struct EVT;
28
29   class MVT { // MVT = Machine Value Type
30   public:
31     enum SimpleValueType {
32       // If you change this numbering, you must change the values in
33       // ValueTypes.td as well!
34       Other          =   0,   // This is a non-standard value
35       i1             =   1,   // This is a 1 bit integer value
36       i8             =   2,   // This is an 8 bit integer value
37       i16            =   3,   // This is a 16 bit integer value
38       i32            =   4,   // This is a 32 bit integer value
39       i64            =   5,   // This is a 64 bit integer value
40       i128           =   6,   // This is a 128 bit integer value
41
42       FIRST_INTEGER_VALUETYPE = i1,
43       LAST_INTEGER_VALUETYPE  = i128,
44
45       f32            =   7,   // This is a 32 bit floating point value
46       f64            =   8,   // This is a 64 bit floating point value
47       f80            =   9,   // This is a 80 bit floating point value
48       f128           =  10,   // This is a 128 bit floating point value
49       ppcf128        =  11,   // This is a PPC 128-bit floating point value
50
51       v2i8           =  12,   //  2 x i8
52       v4i8           =  13,   //  4 x i8
53       v8i8           =  14,   //  8 x i8
54       v16i8          =  15,   // 16 x i8
55       v32i8          =  16,   // 32 x i8
56       v2i16          =  17,   //  2 x i16
57       v4i16          =  18,   //  4 x i16
58       v8i16          =  19,   //  8 x i16
59       v16i16         =  20,   // 16 x i16
60       v2i32          =  21,   //  2 x i32
61       v4i32          =  22,   //  4 x i32
62       v8i32          =  23,   //  8 x i32
63       v1i64          =  24,   //  1 x i64
64       v2i64          =  25,   //  2 x i64
65       v4i64          =  26,   //  4 x i64
66       v8i64          =  27,   //  8 x i64
67
68       v2f32          =  28,   //  2 x f32
69       v4f32          =  29,   //  4 x f32
70       v8f32          =  30,   //  8 x f32
71       v2f64          =  31,   //  2 x f64
72       v4f64          =  32,   //  4 x f64
73
74       FIRST_VECTOR_VALUETYPE = v2i8,
75       LAST_VECTOR_VALUETYPE  = v4f64,
76
77       Flag           =  33,   // This glues nodes together during pre-RA sched
78
79       isVoid         =  34,   // This has no value
80
81       LAST_VALUETYPE =  35,   // This always remains at the end of the list.
82
83       // This is the current maximum for LAST_VALUETYPE.
84       // EVT::MAX_ALLOWED_VALUETYPE is used for asserts and to size bit vectors
85       // This value must be a multiple of 32.
86       MAX_ALLOWED_VALUETYPE = 64,
87
88       // Metadata - This is MDNode or MDString.
89       Metadata       = 250,
90
91       // iPTRAny - An int value the size of the pointer of the current
92       // target to any address space. This must only be used internal to
93       // tblgen. Other than for overloading, we treat iPTRAny the same as iPTR.
94       iPTRAny        = 251,
95
96       // vAny - A vector with any length and element size. This is used
97       // for intrinsics that have overloadings based on vector types.
98       // This is only for tblgen's consumption!
99       vAny           = 252,
100
101       // fAny - Any floating-point or vector floating-point value. This is used
102       // for intrinsics that have overloadings based on floating-point types.
103       // This is only for tblgen's consumption!
104       fAny           = 253,
105
106       // iAny - An integer or vector integer value of any bit width. This is
107       // used for intrinsics that have overloadings based on integer bit widths.
108       // This is only for tblgen's consumption!
109       iAny           = 254,
110
111       // iPTR - An int value the size of the pointer of the current
112       // target.  This should only be used internal to tblgen!
113       iPTR           = 255,
114
115       // LastSimpleValueType - The greatest valid SimpleValueType value.
116       LastSimpleValueType = 255,
117
118       // INVALID_SIMPLE_VALUE_TYPE - Simple value types greater than or equal
119       // to this are considered extended value types.
120       INVALID_SIMPLE_VALUE_TYPE = LastSimpleValueType + 1
121     };
122
123     SimpleValueType SimpleTy;
124
125     MVT() : SimpleTy((SimpleValueType)(INVALID_SIMPLE_VALUE_TYPE)) {}
126     MVT(SimpleValueType SVT) : SimpleTy(SVT) { }
127     
128     bool operator>(const MVT& S)  const { return SimpleTy >  S.SimpleTy; }
129     bool operator<(const MVT& S)  const { return SimpleTy <  S.SimpleTy; }
130     bool operator==(const MVT& S) const { return SimpleTy == S.SimpleTy; }
131     bool operator>=(const MVT& S) const { return SimpleTy >= S.SimpleTy; }
132     bool operator<=(const MVT& S) const { return SimpleTy <= S.SimpleTy; }
133     
134     /// isFloatingPoint - Return true if this is a FP, or a vector FP type.
135     bool isFloatingPoint() const {
136       return ((SimpleTy >= MVT::f32 && SimpleTy <= MVT::ppcf128) ||
137         (SimpleTy >= MVT::v2f32 && SimpleTy <= MVT::v4f64));
138     }
139
140     /// isInteger - Return true if this is an integer, or a vector integer type.
141     bool isInteger() const {
142       return ((SimpleTy >= MVT::FIRST_INTEGER_VALUETYPE &&
143                SimpleTy <= MVT::LAST_INTEGER_VALUETYPE) ||
144                (SimpleTy >= MVT::v2i8 && SimpleTy <= MVT::v8i64));
145     }
146
147     /// isVector - Return true if this is a vector value type.
148     bool isVector() const {
149       return (SimpleTy >= MVT::FIRST_VECTOR_VALUETYPE &&
150               SimpleTy <= MVT::LAST_VECTOR_VALUETYPE);
151     }
152     
153     /// isPow2VectorType - Returns true if the given vector is a power of 2.
154     bool isPow2VectorType() const {
155       unsigned NElts = getVectorNumElements();
156       return !(NElts & (NElts - 1));
157     }
158
159     /// getPow2VectorType - Widens the length of the given vector EVT up to
160     /// the nearest power of 2 and returns that type.
161     MVT getPow2VectorType() const {
162       if (isPow2VectorType())
163         return *this;
164
165       unsigned NElts = getVectorNumElements();
166       unsigned Pow2NElts = 1 << Log2_32_Ceil(NElts);
167       return MVT::getVectorVT(getVectorElementType(), Pow2NElts);
168     }
169
170     /// getScalarType - If this is a vector type, return the element type,
171     /// otherwise return this.
172     MVT getScalarType() const {
173       return isVector() ? getVectorElementType() : *this;
174     }
175     
176     MVT getVectorElementType() const {
177       switch (SimpleTy) {
178       default:
179         return (MVT::SimpleValueType)(MVT::INVALID_SIMPLE_VALUE_TYPE);
180       case v2i8 :
181       case v4i8 :
182       case v8i8 :
183       case v16i8:
184       case v32i8: return i8;
185       case v2i16:
186       case v4i16:
187       case v8i16:
188       case v16i16: return i16;
189       case v2i32:
190       case v4i32:
191       case v8i32: return i32;
192       case v1i64:
193       case v2i64:
194       case v4i64:
195       case v8i64: return i64;
196       case v2f32:
197       case v4f32:
198       case v8f32: return f32;
199       case v2f64:
200       case v4f64: return f64;
201       }
202     }
203     
204     unsigned getVectorNumElements() const {
205       switch (SimpleTy) {
206       default:
207         return ~0U;
208       case v32i8: return 32;
209       case v16i8:
210       case v16i16: return 16;
211       case v8i8 :
212       case v8i16:
213       case v8i32:
214       case v8i64:
215       case v8f32: return 8;
216       case v4i8:
217       case v4i16:
218       case v4i32:
219       case v4i64:
220       case v4f32:
221       case v4f64: return 4;
222       case v2i8:
223       case v2i16:
224       case v2i32:
225       case v2i64:
226       case v2f32:
227       case v2f64: return 2;
228       case v1i64: return 1;
229       }
230     }
231     
232     unsigned getSizeInBits() const {
233       switch (SimpleTy) {
234       case iPTR:
235         assert(0 && "Value type size is target-dependent. Ask TLI.");
236       case iPTRAny:
237       case iAny:
238       case fAny:
239         assert(0 && "Value type is overloaded.");
240       default:
241         assert(0 && "getSizeInBits called on extended MVT.");
242       case i1  :  return 1;
243       case i8  :  return 8;
244       case i16 :
245       case v2i8:  return 16;
246       case f32 :
247       case i32 :
248       case v4i8:
249       case v2i16: return 32;
250       case f64 :
251       case i64 :
252       case v8i8:
253       case v4i16:
254       case v2i32:
255       case v1i64:
256       case v2f32: return 64;
257       case f80 :  return 80;
258       case f128:
259       case ppcf128:
260       case i128:
261       case v16i8:
262       case v8i16:
263       case v4i32:
264       case v2i64:
265       case v4f32:
266       case v2f64: return 128;
267       case v32i8:
268       case v16i16:
269       case v8i32:
270       case v4i64:
271       case v8f32:
272       case v4f64: return 256;
273       case v8i64: return 512;
274       }
275     }
276     
277     static MVT getFloatingPointVT(unsigned BitWidth) {
278       switch (BitWidth) {
279       default:
280         assert(false && "Bad bit width!");
281       case 32:
282         return MVT::f32;
283       case 64:
284         return MVT::f64;
285       case 80:
286         return MVT::f80;
287       case 128:
288         return MVT::f128;
289       }
290     }
291     
292     static MVT getIntegerVT(unsigned BitWidth) {
293       switch (BitWidth) {
294       default:
295         return (MVT::SimpleValueType)(MVT::INVALID_SIMPLE_VALUE_TYPE);
296       case 1:
297         return MVT::i1;
298       case 8:
299         return MVT::i8;
300       case 16:
301         return MVT::i16;
302       case 32:
303         return MVT::i32;
304       case 64:
305         return MVT::i64;
306       case 128:
307         return MVT::i128;
308       }
309     }
310     
311     static MVT getVectorVT(MVT VT, unsigned NumElements) {
312       switch (VT.SimpleTy) {
313       default:
314         break;
315       case MVT::i8:
316         if (NumElements == 2)  return MVT::v2i8;
317         if (NumElements == 4)  return MVT::v4i8;
318         if (NumElements == 8)  return MVT::v8i8;
319         if (NumElements == 16) return MVT::v16i8;
320         if (NumElements == 32) return MVT::v32i8;
321         break;
322       case MVT::i16:
323         if (NumElements == 2)  return MVT::v2i16;
324         if (NumElements == 4)  return MVT::v4i16;
325         if (NumElements == 8)  return MVT::v8i16;
326         if (NumElements == 16) return MVT::v16i16;
327         break;
328       case MVT::i32:
329         if (NumElements == 2)  return MVT::v2i32;
330         if (NumElements == 4)  return MVT::v4i32;
331         if (NumElements == 8)  return MVT::v8i32;
332         break;
333       case MVT::i64:
334         if (NumElements == 1)  return MVT::v1i64;
335         if (NumElements == 2)  return MVT::v2i64;
336         if (NumElements == 4)  return MVT::v4i64;
337         if (NumElements == 8)  return MVT::v8i64;
338         break;
339       case MVT::f32:
340         if (NumElements == 2)  return MVT::v2f32;
341         if (NumElements == 4)  return MVT::v4f32;
342         if (NumElements == 8)  return MVT::v8f32;
343         break;
344       case MVT::f64:
345         if (NumElements == 2)  return MVT::v2f64;
346         if (NumElements == 4)  return MVT::v4f64;
347         break;
348       }
349       return (MVT::SimpleValueType)(MVT::INVALID_SIMPLE_VALUE_TYPE);
350     }
351   };
352
353   struct EVT { // EVT = Extended Value Type
354   private:
355     MVT V;
356     const Type *LLVMTy;
357
358   public:
359     EVT() : V((MVT::SimpleValueType)(MVT::INVALID_SIMPLE_VALUE_TYPE)),
360             LLVMTy(0) {}
361     EVT(MVT::SimpleValueType SVT) : V(SVT), LLVMTy(0) { }
362     EVT(MVT S) : V(S), LLVMTy(0) {}
363
364     bool operator==(EVT VT) const {
365       return !(*this != VT);
366     }
367     bool operator!=(EVT VT) const {
368       if (V.SimpleTy != VT.V.SimpleTy)
369         return true;
370       if (V.SimpleTy == MVT::INVALID_SIMPLE_VALUE_TYPE)
371         return LLVMTy != VT.LLVMTy;
372       return false;
373     }
374
375     /// getFloatingPointVT - Returns the EVT that represents a floating point
376     /// type with the given number of bits.  There are two floating point types
377     /// with 128 bits - this returns f128 rather than ppcf128.
378     static EVT getFloatingPointVT(unsigned BitWidth) {
379       return MVT::getFloatingPointVT(BitWidth);
380     }
381
382     /// getIntegerVT - Returns the EVT that represents an integer with the given
383     /// number of bits.
384     static EVT getIntegerVT(LLVMContext &Context, unsigned BitWidth) {
385       MVT M = MVT::getIntegerVT(BitWidth);
386       if (M.SimpleTy != MVT::INVALID_SIMPLE_VALUE_TYPE)
387         return M;
388       return getExtendedIntegerVT(Context, BitWidth);
389     }
390
391     /// getVectorVT - Returns the EVT that represents a vector NumElements in
392     /// length, where each element is of type VT.
393     static EVT getVectorVT(LLVMContext &Context, EVT VT, unsigned NumElements) {
394       MVT M = MVT::getVectorVT(VT.V, NumElements);
395       if (M.SimpleTy != MVT::INVALID_SIMPLE_VALUE_TYPE)
396         return M;
397       return getExtendedVectorVT(Context, VT, NumElements);
398     }
399
400     /// getIntVectorWithNumElements - Return any integer vector type that has
401     /// the specified number of elements.
402     static EVT getIntVectorWithNumElements(LLVMContext &C, unsigned NumElts) {
403       switch (NumElts) {
404       default: return getVectorVT(C, MVT::i8, NumElts);
405       case  1: return MVT::v1i64;
406       case  2: return MVT::v2i32;
407       case  4: return MVT::v4i16;
408       case  8: return MVT::v8i8;
409       case 16: return MVT::v16i8;
410       }
411       return MVT::INVALID_SIMPLE_VALUE_TYPE;
412     }
413
414     /// isSimple - Test if the given EVT is simple (as opposed to being
415     /// extended).
416     bool isSimple() const {
417       return V.SimpleTy <= MVT::LastSimpleValueType;
418     }
419
420     /// isExtended - Test if the given EVT is extended (as opposed to
421     /// being simple).
422     bool isExtended() const {
423       return !isSimple();
424     }
425
426     /// isFloatingPoint - Return true if this is a FP, or a vector FP type.
427     bool isFloatingPoint() const {
428       return isSimple() ? V.isFloatingPoint() : isExtendedFloatingPoint();
429     }
430
431     /// isInteger - Return true if this is an integer, or a vector integer type.
432     bool isInteger() const {
433       return isSimple() ? V.isInteger() : isExtendedInteger();
434     }
435
436     /// isVector - Return true if this is a vector value type.
437     bool isVector() const {
438       return isSimple() ? V.isVector() : isExtendedVector();
439     }
440
441     /// is64BitVector - Return true if this is a 64-bit vector type.
442     bool is64BitVector() const {
443       if (!isSimple())
444         return isExtended64BitVector();
445
446       return (V == MVT::v8i8  || V==MVT::v4i16 || V==MVT::v2i32 ||
447               V == MVT::v1i64 || V==MVT::v2f32);
448     }
449
450     /// is128BitVector - Return true if this is a 128-bit vector type.
451     bool is128BitVector() const {
452       if (!isSimple())
453         return isExtended128BitVector();
454       return (V==MVT::v16i8 || V==MVT::v8i16 || V==MVT::v4i32 ||
455               V==MVT::v2i64 || V==MVT::v4f32 || V==MVT::v2f64);
456     }
457
458     /// is256BitVector - Return true if this is a 256-bit vector type.
459     inline bool is256BitVector() const {
460       if (!isSimple())
461         return isExtended256BitVector();
462       return (V == MVT::v8f32  || V == MVT::v4f64 || V == MVT::v32i8 ||
463               V == MVT::v16i16 || V == MVT::v8i32 || V == MVT::v4i64);
464     }
465
466     /// is512BitVector - Return true if this is a 512-bit vector type.
467     inline bool is512BitVector() const {
468       return isSimple() ? (V == MVT::v8i64) : isExtended512BitVector();
469     }
470
471     /// isOverloaded - Return true if this is an overloaded type for TableGen.
472     bool isOverloaded() const {
473       return (V==MVT::iAny || V==MVT::fAny || V==MVT::vAny || V==MVT::iPTRAny);
474     }
475
476     /// isByteSized - Return true if the bit size is a multiple of 8.
477     bool isByteSized() const {
478       return (getSizeInBits() & 7) == 0;
479     }
480
481     /// isRound - Return true if the size is a power-of-two number of bytes.
482     bool isRound() const {
483       unsigned BitSize = getSizeInBits();
484       return BitSize >= 8 && !(BitSize & (BitSize - 1));
485     }
486
487     /// bitsEq - Return true if this has the same number of bits as VT.
488     bool bitsEq(EVT VT) const {
489       if (EVT::operator==(VT)) return true;
490       return getSizeInBits() == VT.getSizeInBits();
491     }
492
493     /// bitsGT - Return true if this has more bits than VT.
494     bool bitsGT(EVT VT) const {
495       if (EVT::operator==(VT)) return false;
496       return getSizeInBits() > VT.getSizeInBits();
497     }
498
499     /// bitsGE - Return true if this has no less bits than VT.
500     bool bitsGE(EVT VT) const {
501       if (EVT::operator==(VT)) return true;
502       return getSizeInBits() >= VT.getSizeInBits();
503     }
504
505     /// bitsLT - Return true if this has less bits than VT.
506     bool bitsLT(EVT VT) const {
507       if (EVT::operator==(VT)) return false;
508       return getSizeInBits() < VT.getSizeInBits();
509     }
510
511     /// bitsLE - Return true if this has no more bits than VT.
512     bool bitsLE(EVT VT) const {
513       if (EVT::operator==(VT)) return true;
514       return getSizeInBits() <= VT.getSizeInBits();
515     }
516
517
518     /// getSimpleVT - Return the SimpleValueType held in the specified
519     /// simple EVT.
520     MVT getSimpleVT() const {
521       assert(isSimple() && "Expected a SimpleValueType!");
522       return V;
523     }
524
525     /// getScalarType - If this is a vector type, return the element type,
526     /// otherwise return this.
527     EVT getScalarType() const {
528       return isVector() ? getVectorElementType() : *this;
529     }
530     
531     /// getVectorElementType - Given a vector type, return the type of
532     /// each element.
533     EVT getVectorElementType() const {
534       assert(isVector() && "Invalid vector type!");
535       if (isSimple())
536         return V.getVectorElementType();
537       return getExtendedVectorElementType();
538     }
539
540     /// getVectorNumElements - Given a vector type, return the number of
541     /// elements it contains.
542     unsigned getVectorNumElements() const {
543       assert(isVector() && "Invalid vector type!");
544       if (isSimple())
545         return V.getVectorNumElements();
546       return getExtendedVectorNumElements();
547     }
548
549     /// getSizeInBits - Return the size of the specified value type in bits.
550     unsigned getSizeInBits() const {
551       if (isSimple())
552         return V.getSizeInBits();
553       return getExtendedSizeInBits();
554     }
555
556     /// getStoreSize - Return the number of bytes overwritten by a store
557     /// of the specified value type.
558     unsigned getStoreSize() const {
559       return (getSizeInBits() + 7) / 8;
560     }
561
562     /// getStoreSizeInBits - Return the number of bits overwritten by a store
563     /// of the specified value type.
564     unsigned getStoreSizeInBits() const {
565       return getStoreSize() * 8;
566     }
567
568     /// getRoundIntegerType - Rounds the bit-width of the given integer EVT up
569     /// to the nearest power of two (and at least to eight), and returns the
570     /// integer EVT with that number of bits.
571     EVT getRoundIntegerType(LLVMContext &Context) const {
572       assert(isInteger() && !isVector() && "Invalid integer type!");
573       unsigned BitWidth = getSizeInBits();
574       if (BitWidth <= 8)
575         return EVT(MVT::i8);
576       return getIntegerVT(Context, 1 << Log2_32_Ceil(BitWidth));
577     }
578
579     /// getHalfSizedIntegerVT - Finds the smallest simple value type that is
580     /// greater than or equal to half the width of this EVT. If no simple
581     /// value type can be found, an extended integer value type of half the
582     /// size (rounded up) is returned.
583     EVT getHalfSizedIntegerVT(LLVMContext &Context) const {
584       assert(isInteger() && !isVector() && "Invalid integer type!");
585       unsigned EVTSize = getSizeInBits();
586       for (unsigned IntVT = MVT::FIRST_INTEGER_VALUETYPE;
587           IntVT <= MVT::LAST_INTEGER_VALUETYPE; ++IntVT) {
588         EVT HalfVT = EVT((MVT::SimpleValueType)IntVT);
589         if (HalfVT.getSizeInBits() * 2 >= EVTSize)
590           return HalfVT;
591       }
592       return getIntegerVT(Context, (EVTSize + 1) / 2);
593     }
594
595     /// isPow2VectorType - Returns true if the given vector is a power of 2.
596     bool isPow2VectorType() const {
597       unsigned NElts = getVectorNumElements();
598       return !(NElts & (NElts - 1));
599     }
600
601     /// getPow2VectorType - Widens the length of the given vector EVT up to
602     /// the nearest power of 2 and returns that type.
603     EVT getPow2VectorType(LLVMContext &Context) const {
604       if (!isPow2VectorType()) {
605         unsigned NElts = getVectorNumElements();
606         unsigned Pow2NElts = 1 <<  Log2_32_Ceil(NElts);
607         return EVT::getVectorVT(Context, getVectorElementType(), Pow2NElts);
608       }
609       else {
610         return *this;
611       }
612     }
613
614     /// getEVTString - This function returns value type as a string,
615     /// e.g. "i32".
616     std::string getEVTString() const;
617
618     /// getTypeForEVT - This method returns an LLVM type corresponding to the
619     /// specified EVT.  For integer types, this returns an unsigned type.  Note
620     /// that this will abort for types that cannot be represented.
621     const Type *getTypeForEVT(LLVMContext &Context) const;
622
623     /// getEVT - Return the value type corresponding to the specified type.
624     /// This returns all pointers as iPTR.  If HandleUnknown is true, unknown
625     /// types are returned as Other, otherwise they are invalid.
626     static EVT getEVT(const Type *Ty, bool HandleUnknown = false);
627
628     intptr_t getRawBits() {
629       if (isSimple())
630         return V.SimpleTy;
631       else
632         return (intptr_t)(LLVMTy);
633     }
634
635     /// compareRawBits - A meaningless but well-behaved order, useful for
636     /// constructing containers.
637     struct compareRawBits {
638       bool operator()(EVT L, EVT R) const {
639         if (L.V.SimpleTy == R.V.SimpleTy)
640           return L.LLVMTy < R.LLVMTy;
641         else
642           return L.V.SimpleTy < R.V.SimpleTy;
643       }
644     };
645
646   private:
647     // Methods for handling the Extended-type case in functions above.
648     // These are all out-of-line to prevent users of this header file
649     // from having a dependency on Type.h.
650     static EVT getExtendedIntegerVT(LLVMContext &C, unsigned BitWidth);
651     static EVT getExtendedVectorVT(LLVMContext &C, EVT VT,
652                                    unsigned NumElements);
653     bool isExtendedFloatingPoint() const;
654     bool isExtendedInteger() const;
655     bool isExtendedVector() const;
656     bool isExtended64BitVector() const;
657     bool isExtended128BitVector() const;
658     bool isExtended256BitVector() const;
659     bool isExtended512BitVector() const;
660     EVT getExtendedVectorElementType() const;
661     unsigned getExtendedVectorNumElements() const;
662     unsigned getExtendedSizeInBits() const;
663   };
664
665 } // End llvm namespace
666
667 #endif