136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===- CodeGen/MachineValueType.h - Machine-Level types ---------*- C++ -*-===//
236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//                     The LLVM Compiler Infrastructure
436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// This file is distributed under the University of Illinois Open Source
636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// License. See LICENSE.TXT for details.
736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// This file defines the set of machine-level target independent types which
1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// legal values in the code generator use.
1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#ifndef LLVM_CODEGEN_MACHINEVALUETYPE_H
1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#define LLVM_CODEGEN_MACHINEVALUETYPE_H
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
18ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/ADT/iterator_range.h"
1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/Support/ErrorHandling.h"
20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/Support/MathExtras.h"
2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace llvm {
2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  class Type;
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  /// MVT - Machine Value Type. Every type that is supported natively by some
2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  /// processor targeted by LLVM occurs here. This means that any legal value
2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  /// type can be represented by an MVT.
2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  class MVT {
3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  public:
3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    enum SimpleValueType {
3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // INVALID_SIMPLE_VALUE_TYPE - Simple value types less than zero are
3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // considered extended value types.
3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      INVALID_SIMPLE_VALUE_TYPE = -1,
3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // If you change this numbering, you must change the values in
3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // ValueTypes.td as well!
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      Other          =   0,   // This is a non-standard value
3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      i1             =   1,   // This is a 1 bit integer value
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      i8             =   2,   // This is an 8 bit integer value
4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      i16            =   3,   // This is a 16 bit integer value
4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      i32            =   4,   // This is a 32 bit integer value
4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      i64            =   5,   // This is a 64 bit integer value
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      i128           =   6,   // This is a 128 bit integer value
4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      FIRST_INTEGER_VALUETYPE = i1,
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      LAST_INTEGER_VALUETYPE  = i128,
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      f16            =   7,   // This is a 16 bit floating point value
5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      f32            =   8,   // This is a 32 bit floating point value
5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      f64            =   9,   // This is a 64 bit floating point value
5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      f80            =  10,   // This is a 80 bit floating point value
5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      f128           =  11,   // This is a 128 bit floating point value
5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      ppcf128        =  12,   // This is a PPC 128-bit floating point value
5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      FIRST_FP_VALUETYPE = f16,
5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      LAST_FP_VALUETYPE  = ppcf128,
5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v2i1           =  13,   //  2 x i1
6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v4i1           =  14,   //  4 x i1
6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v8i1           =  15,   //  8 x i1
6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v16i1          =  16,   // 16 x i1
6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v32i1          =  17,   // 32 x i1
6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v64i1          =  18,   // 64 x i1
6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v1i8           =  19,   //  1 x i8
6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v2i8           =  20,   //  2 x i8
6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v4i8           =  21,   //  4 x i8
6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v8i8           =  22,   //  8 x i8
7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v16i8          =  23,   // 16 x i8
7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v32i8          =  24,   // 32 x i8
7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v64i8          =  25,   // 64 x i8
7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v1i16          =  26,   //  1 x i16
7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v2i16          =  27,   //  2 x i16
7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v4i16          =  28,   //  4 x i16
7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v8i16          =  29,   //  8 x i16
7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v16i16         =  30,   // 16 x i16
7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v32i16         =  31,   // 32 x i16
7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v1i32          =  32,   //  1 x i32
8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v2i32          =  33,   //  2 x i32
8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v4i32          =  34,   //  4 x i32
8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v8i32          =  35,   //  8 x i32
8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v16i32         =  36,   // 16 x i32
8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v1i64          =  37,   //  1 x i64
8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v2i64          =  38,   //  2 x i64
8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v4i64          =  39,   //  4 x i64
8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v8i64          =  40,   //  8 x i64
8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v16i64         =  41,   // 16 x i64
8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      FIRST_INTEGER_VECTOR_VALUETYPE = v2i1,
9136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      LAST_INTEGER_VECTOR_VALUETYPE = v16i64,
9236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
9336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v2f16          =  42,   //  2 x f16
9436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v4f16          =  43,   //  4 x f16
9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v8f16          =  44,   //  8 x f16
9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v1f32          =  45,   //  1 x f32
9736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v2f32          =  46,   //  2 x f32
9836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v4f32          =  47,   //  4 x f32
9936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v8f32          =  48,   //  8 x f32
10036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v16f32         =  49,   // 16 x f32
10136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v1f64          =  50,   //  1 x f64
10236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v2f64          =  51,   //  2 x f64
10336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v4f64          =  52,   //  4 x f64
10436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      v8f64          =  53,   //  8 x f64
10536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
10636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      FIRST_FP_VECTOR_VALUETYPE = v2f16,
10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      LAST_FP_VECTOR_VALUETYPE = v8f64,
10836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
10936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      FIRST_VECTOR_VALUETYPE = v2i1,
11036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      LAST_VECTOR_VALUETYPE  = v8f64,
11136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
11236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      x86mmx         =  54,   // This is an X86 MMX value
11336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
11436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      Glue           =  55,   // This glues nodes together during pre-RA sched
11536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
11636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      isVoid         =  56,   // This has no value
11736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
11836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      Untyped        =  57,   // This value takes a register, but has
11936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                              // unspecified type.  The register class
12036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                              // will be determined by the opcode.
12136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
122ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      FIRST_VALUETYPE = 0,    // This is always the beginning of the list.
12336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      LAST_VALUETYPE =  58,   // This always remains at the end of the list.
12436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
12536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // This is the current maximum for LAST_VALUETYPE.
12636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // MVT::MAX_ALLOWED_VALUETYPE is used for asserts and to size bit vectors
12736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // This value must be a multiple of 32.
12836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      MAX_ALLOWED_VALUETYPE = 64,
12936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
13036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // Metadata - This is MDNode or MDString.
13136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      Metadata       = 250,
13236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
13336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // iPTRAny - An int value the size of the pointer of the current
13436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // target to any address space. This must only be used internal to
13536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // tblgen. Other than for overloading, we treat iPTRAny the same as iPTR.
13636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      iPTRAny        = 251,
13736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
13836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // vAny - A vector with any length and element size. This is used
13936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // for intrinsics that have overloadings based on vector types.
14036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // This is only for tblgen's consumption!
14136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      vAny           = 252,
14236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
14336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // fAny - Any floating-point or vector floating-point value. This is used
14436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // for intrinsics that have overloadings based on floating-point types.
14536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // This is only for tblgen's consumption!
14636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      fAny           = 253,
14736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
14836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // iAny - An integer or vector integer value of any bit width. This is
14936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // used for intrinsics that have overloadings based on integer bit widths.
15036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // This is only for tblgen's consumption!
15136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      iAny           = 254,
15236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
15336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // iPTR - An int value the size of the pointer of the current
15436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      // target.  This should only be used internal to tblgen!
155ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      iPTR           = 255,
156ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
157ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      // Any - Any type. This is used for intrinsics that have overloadings.
158ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      // This is only for tblgen's consumption!
159ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      Any            = 256
16036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    };
16136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
16236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    SimpleValueType SimpleTy;
16336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1644c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar    LLVM_CONSTEXPR MVT() : SimpleTy(INVALID_SIMPLE_VALUE_TYPE) {}
1654c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar    LLVM_CONSTEXPR MVT(SimpleValueType SVT) : SimpleTy(SVT) { }
16636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
16736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool operator>(const MVT& S)  const { return SimpleTy >  S.SimpleTy; }
16836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool operator<(const MVT& S)  const { return SimpleTy <  S.SimpleTy; }
16936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool operator==(const MVT& S) const { return SimpleTy == S.SimpleTy; }
17036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool operator!=(const MVT& S) const { return SimpleTy != S.SimpleTy; }
17136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool operator>=(const MVT& S) const { return SimpleTy >= S.SimpleTy; }
17236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool operator<=(const MVT& S) const { return SimpleTy <= S.SimpleTy; }
17336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
174ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    /// isValid - Return true if this is a valid simple valuetype.
175ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    bool isValid() const {
176ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      return (SimpleTy >= MVT::FIRST_VALUETYPE &&
177ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines              SimpleTy < MVT::LAST_VALUETYPE);
178ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
179ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
18036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// isFloatingPoint - Return true if this is a FP, or a vector FP type.
18136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool isFloatingPoint() const {
18236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return ((SimpleTy >= MVT::FIRST_FP_VALUETYPE &&
18336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines               SimpleTy <= MVT::LAST_FP_VALUETYPE) ||
18436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              (SimpleTy >= MVT::FIRST_FP_VECTOR_VALUETYPE &&
18536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines               SimpleTy <= MVT::LAST_FP_VECTOR_VALUETYPE));
18636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
18736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
18836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// isInteger - Return true if this is an integer, or a vector integer type.
18936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool isInteger() const {
19036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return ((SimpleTy >= MVT::FIRST_INTEGER_VALUETYPE &&
19136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines               SimpleTy <= MVT::LAST_INTEGER_VALUETYPE) ||
19236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              (SimpleTy >= MVT::FIRST_INTEGER_VECTOR_VALUETYPE &&
19336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines               SimpleTy <= MVT::LAST_INTEGER_VECTOR_VALUETYPE));
19436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
19536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
19636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// isVector - Return true if this is a vector value type.
19736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool isVector() const {
19836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return (SimpleTy >= MVT::FIRST_VECTOR_VALUETYPE &&
19936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              SimpleTy <= MVT::LAST_VECTOR_VALUETYPE);
20036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
20136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
20236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// is16BitVector - Return true if this is a 16-bit vector type.
20336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool is16BitVector() const {
20436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return (SimpleTy == MVT::v2i8  || SimpleTy == MVT::v1i16 ||
20536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              SimpleTy == MVT::v16i1);
20636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
20736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
20836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// is32BitVector - Return true if this is a 32-bit vector type.
20936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool is32BitVector() const {
21036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return (SimpleTy == MVT::v4i8  || SimpleTy == MVT::v2i16 ||
21137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines              SimpleTy == MVT::v1i32 || SimpleTy == MVT::v2f16 ||
21237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines              SimpleTy == MVT::v1f32);
21336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
21436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
21536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// is64BitVector - Return true if this is a 64-bit vector type.
21636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool is64BitVector() const {
21736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return (SimpleTy == MVT::v8i8  || SimpleTy == MVT::v4i16 ||
21836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              SimpleTy == MVT::v2i32 || SimpleTy == MVT::v1i64 ||
21937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines              SimpleTy == MVT::v4f16 || SimpleTy == MVT::v2f32 ||
22037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines              SimpleTy == MVT::v1f64);
22136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
22236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
22336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// is128BitVector - Return true if this is a 128-bit vector type.
22436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool is128BitVector() const {
22536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return (SimpleTy == MVT::v16i8 || SimpleTy == MVT::v8i16 ||
22636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              SimpleTy == MVT::v4i32 || SimpleTy == MVT::v2i64 ||
22737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines              SimpleTy == MVT::v8f16 || SimpleTy == MVT::v4f32 ||
22837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines              SimpleTy == MVT::v2f64);
22936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
23036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
23136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// is256BitVector - Return true if this is a 256-bit vector type.
23236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool is256BitVector() const {
23336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return (SimpleTy == MVT::v8f32 || SimpleTy == MVT::v4f64  ||
23436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              SimpleTy == MVT::v32i8 || SimpleTy == MVT::v16i16 ||
23536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              SimpleTy == MVT::v8i32 || SimpleTy == MVT::v4i64);
23636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
23736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
23836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// is512BitVector - Return true if this is a 512-bit vector type.
23936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool is512BitVector() const {
24036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return (SimpleTy == MVT::v8f64 || SimpleTy == MVT::v16f32 ||
24136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              SimpleTy == MVT::v64i8 || SimpleTy == MVT::v32i16 ||
24236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              SimpleTy == MVT::v8i64 || SimpleTy == MVT::v16i32);
24336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
24436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
24536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// is1024BitVector - Return true if this is a 1024-bit vector type.
24636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool is1024BitVector() const {
24736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return (SimpleTy == MVT::v16i64);
24836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
24936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
25036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// isOverloaded - Return true if this is an overloaded type for TableGen.
25136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool isOverloaded() const {
252ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      return (SimpleTy==MVT::Any  ||
253ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines              SimpleTy==MVT::iAny || SimpleTy==MVT::fAny ||
25436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines              SimpleTy==MVT::vAny || SimpleTy==MVT::iPTRAny);
25536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
25636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
25736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// isPow2VectorType - Returns true if the given vector is a power of 2.
25836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool isPow2VectorType() const {
25936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      unsigned NElts = getVectorNumElements();
26036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return !(NElts & (NElts - 1));
26136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
26236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
26336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// getPow2VectorType - Widens the length of the given vector MVT up to
26436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// the nearest power of 2 and returns that type.
26536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    MVT getPow2VectorType() const {
26636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      if (isPow2VectorType())
26736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return *this;
26836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
26936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      unsigned NElts = getVectorNumElements();
27036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      unsigned Pow2NElts = 1 << Log2_32_Ceil(NElts);
27136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return MVT::getVectorVT(getVectorElementType(), Pow2NElts);
27236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
27336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
27436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// getScalarType - If this is a vector type, return the element type,
27536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// otherwise return this.
27636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    MVT getScalarType() const {
27736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return isVector() ? getVectorElementType() : *this;
27836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
27936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
28036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    MVT getVectorElementType() const {
28136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      switch (SimpleTy) {
28236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      default:
28336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        llvm_unreachable("Not a vector MVT!");
28436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i1 :
28536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i1 :
28636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i1 :
28736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i1 :
28836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v32i1 :
28936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v64i1: return i1;
29036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i8 :
29136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i8 :
29236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i8 :
29336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i8 :
29436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i8:
29536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v32i8:
29636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v64i8: return i8;
29736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i16:
29836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i16:
29936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i16:
30036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i16:
30136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i16:
30236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v32i16: return i16;
30336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i32:
30436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i32:
30536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i32:
30636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i32:
30736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i32: return i32;
30836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i64:
30936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i64:
31036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i64:
31136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i64:
31236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i64: return i64;
31336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2f16:
31436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4f16:
31536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8f16: return f16;
31636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1f32:
31736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2f32:
31836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4f32:
31936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8f32:
32036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16f32: return f32;
32136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1f64:
32236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2f64:
32336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4f64:
32436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8f64: return f64;
32536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      }
32636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
32736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
32836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    unsigned getVectorNumElements() const {
32936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      switch (SimpleTy) {
33036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      default:
33136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        llvm_unreachable("Not a vector MVT!");
33236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v32i1:
33336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v32i8:
33436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v32i16: return 32;
33536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v64i1:
33636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v64i8: return 64;
33736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i1:
33836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i8:
33936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i16:
34036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i32:
34136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i64:
34236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16f32: return 16;
34336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i1 :
34436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i8 :
34536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i16:
34636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i32:
34736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i64:
34836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8f16:
34936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8f32:
35036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8f64: return 8;
35136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i1:
35236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i8:
35336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i16:
35436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i32:
35536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i64:
35636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4f16:
35736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4f32:
35836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4f64: return 4;
35936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i1:
36036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i8:
36136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i16:
36236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i32:
36336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i64:
36436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2f16:
36536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2f32:
36636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2f64: return 2;
36736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i8:
36836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i16:
36936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i32:
37036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i64:
37136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1f32:
37236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1f64: return 1;
37336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      }
37436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
37536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
37636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    unsigned getSizeInBits() const {
37736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      switch (SimpleTy) {
37836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      default:
37936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        llvm_unreachable("getSizeInBits called on extended MVT.");
38036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case Other:
38136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        llvm_unreachable("Value type is non-standard value, Other.");
38236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case iPTR:
38336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        llvm_unreachable("Value type size is target-dependent. Ask TLI.");
38436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case iPTRAny:
38536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case iAny:
38636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case fAny:
38736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case vAny:
388ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      case Any:
38936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        llvm_unreachable("Value type is overloaded.");
39036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case Metadata:
39136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        llvm_unreachable("Value type is metadata.");
39236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case i1  :  return 1;
39336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i1:  return 2;
39436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i1:  return 4;
39536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case i8  :
39636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i8:
39736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i1: return 8;
39836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case i16 :
39936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case f16:
40036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i1:
40136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i8:
40236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i16: return 16;
40336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case f32 :
40436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case i32 :
40536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v32i1:
40636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i8:
40736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i16:
40836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2f16:
40936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1f32:
41036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i32: return 32;
41136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case x86mmx:
41236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case f64 :
41336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case i64 :
41436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v64i1:
41536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i8:
41636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i16:
41736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i32:
41836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1i64:
41936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4f16:
42036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2f32:
42136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v1f64: return 64;
42236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case f80 :  return 80;
42336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case f128:
42436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case ppcf128:
42536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case i128:
42636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i8:
42736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i16:
42836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i32:
42936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2i64:
43036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8f16:
43136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4f32:
43236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v2f64: return 128;
43336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v32i8:
43436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i16:
43536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i32:
43636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4i64:
43736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8f32:
43836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v4f64: return 256;
43936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v64i8:
44036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v32i16:
44136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i32:
44236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8i64:
44336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16f32:
44436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v8f64: return 512;
44536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case v16i64:return 1024;
44636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      }
44736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
44836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
44936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    unsigned getScalarSizeInBits() const {
45036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return getScalarType().getSizeInBits();
45136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
45236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
45336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// getStoreSize - Return the number of bytes overwritten by a store
45436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// of the specified value type.
45536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    unsigned getStoreSize() const {
45636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return (getSizeInBits() + 7) / 8;
45736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
45836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
45936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// getStoreSizeInBits - Return the number of bits overwritten by a store
46036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// of the specified value type.
46136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    unsigned getStoreSizeInBits() const {
46236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return getStoreSize() * 8;
46336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
46436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
46536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// Return true if this has more bits than VT.
46636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool bitsGT(MVT VT) const {
46736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return getSizeInBits() > VT.getSizeInBits();
46836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
46936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
47036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// Return true if this has no less bits than VT.
47136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool bitsGE(MVT VT) const {
47236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return getSizeInBits() >= VT.getSizeInBits();
47336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
47436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
47536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// Return true if this has less bits than VT.
47636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool bitsLT(MVT VT) const {
47736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return getSizeInBits() < VT.getSizeInBits();
47836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
47936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
48036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// Return true if this has no more bits than VT.
48136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool bitsLE(MVT VT) const {
48236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return getSizeInBits() <= VT.getSizeInBits();
48336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
48436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
48536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
48636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    static MVT getFloatingPointVT(unsigned BitWidth) {
48736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      switch (BitWidth) {
48836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      default:
48936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        llvm_unreachable("Bad bit width!");
49036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 16:
49136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::f16;
49236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 32:
49336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::f32;
49436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 64:
49536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::f64;
49636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 80:
49736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::f80;
49836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 128:
49936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::f128;
50036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      }
50136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
50236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
50336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    static MVT getIntegerVT(unsigned BitWidth) {
50436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      switch (BitWidth) {
50536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      default:
50636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return (MVT::SimpleValueType)(MVT::INVALID_SIMPLE_VALUE_TYPE);
50736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 1:
50836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::i1;
50936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 8:
51036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::i8;
51136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 16:
51236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::i16;
51336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 32:
51436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::i32;
51536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 64:
51636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::i64;
51736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case 128:
51836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        return MVT::i128;
51936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      }
52036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
52136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
52236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    static MVT getVectorVT(MVT VT, unsigned NumElements) {
52336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      switch (VT.SimpleTy) {
52436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      default:
52536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        break;
52636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case MVT::i1:
52736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 2)  return MVT::v2i1;
52836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 4)  return MVT::v4i1;
52936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 8)  return MVT::v8i1;
53036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 16) return MVT::v16i1;
53136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 32) return MVT::v32i1;
53236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 64) return MVT::v64i1;
53336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        break;
53436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case MVT::i8:
53536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 1)  return MVT::v1i8;
53636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 2)  return MVT::v2i8;
53736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 4)  return MVT::v4i8;
53836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 8)  return MVT::v8i8;
53936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 16) return MVT::v16i8;
54036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 32) return MVT::v32i8;
54136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 64) return MVT::v64i8;
54236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        break;
54336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case MVT::i16:
54436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 1)  return MVT::v1i16;
54536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 2)  return MVT::v2i16;
54636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 4)  return MVT::v4i16;
54736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 8)  return MVT::v8i16;
54836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 16) return MVT::v16i16;
54936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 32) return MVT::v32i16;
55036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        break;
55136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case MVT::i32:
55236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 1)  return MVT::v1i32;
55336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 2)  return MVT::v2i32;
55436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 4)  return MVT::v4i32;
55536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 8)  return MVT::v8i32;
55636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 16) return MVT::v16i32;
55736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        break;
55836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case MVT::i64:
55936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 1)  return MVT::v1i64;
56036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 2)  return MVT::v2i64;
56136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 4)  return MVT::v4i64;
56236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 8)  return MVT::v8i64;
56336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 16) return MVT::v16i64;
56436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        break;
56536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case MVT::f16:
56636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 2)  return MVT::v2f16;
56736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 4)  return MVT::v4f16;
56836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 8)  return MVT::v8f16;
56936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        break;
57036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case MVT::f32:
57136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 1)  return MVT::v1f32;
57236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 2)  return MVT::v2f32;
57336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 4)  return MVT::v4f32;
57436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 8)  return MVT::v8f32;
57536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 16) return MVT::v16f32;
57636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        break;
57736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      case MVT::f64:
57836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 1)  return MVT::v1f64;
57936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 2)  return MVT::v2f64;
58036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 4)  return MVT::v4f64;
58136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        if (NumElements == 8)  return MVT::v8f64;
58236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        break;
58336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      }
58436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return (MVT::SimpleValueType)(MVT::INVALID_SIMPLE_VALUE_TYPE);
58536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    }
58636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
58736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// Return the value type corresponding to the specified type.  This returns
58836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// all pointers as iPTR.  If HandleUnknown is true, unknown types are
58936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    /// returned as Other, otherwise they are invalid.
59036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    static MVT getVT(Type *Ty, bool HandleUnknown = false);
59136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
592ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  private:
593ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    /// A simple iterator over the MVT::SimpleValueType enum.
594ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    struct mvt_iterator {
595ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      SimpleValueType VT;
596ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      mvt_iterator(SimpleValueType VT) : VT(VT) {}
597ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      MVT operator*() const { return VT; }
598ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      bool operator!=(const mvt_iterator &LHS) const { return VT != LHS.VT; }
599ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      mvt_iterator& operator++() {
600ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        VT = (MVT::SimpleValueType)((int)VT + 1);
601ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        assert((int)VT <= MVT::MAX_ALLOWED_VALUETYPE &&
602ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines               "MVT iterator overflowed.");
603ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        return *this;
604ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      }
605ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    };
606ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    /// A range of the MVT::SimpleValueType enum.
607ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    typedef iterator_range<mvt_iterator> mvt_range;
608ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
609ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  public:
610ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    /// SimpleValueType Iteration
611ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    /// @{
612ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    static mvt_range all_valuetypes() {
613ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      return mvt_range(MVT::FIRST_VALUETYPE, MVT::LAST_VALUETYPE);
614ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
615ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    static mvt_range integer_valuetypes() {
616ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      return mvt_range(MVT::FIRST_INTEGER_VALUETYPE,
617ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       (MVT::SimpleValueType)(MVT::LAST_INTEGER_VALUETYPE + 1));
618ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
619ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    static mvt_range fp_valuetypes() {
620ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      return mvt_range(MVT::FIRST_FP_VALUETYPE,
621ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       (MVT::SimpleValueType)(MVT::LAST_FP_VALUETYPE + 1));
622ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
623ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    static mvt_range vector_valuetypes() {
624ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      return mvt_range(MVT::FIRST_VECTOR_VALUETYPE,
625ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                       (MVT::SimpleValueType)(MVT::LAST_VECTOR_VALUETYPE + 1));
626ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
627ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    static mvt_range integer_vector_valuetypes() {
628ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      return mvt_range(
629ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines          MVT::FIRST_INTEGER_VECTOR_VALUETYPE,
630ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines          (MVT::SimpleValueType)(MVT::LAST_INTEGER_VECTOR_VALUETYPE + 1));
631ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
632ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    static mvt_range fp_vector_valuetypes() {
633ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      return mvt_range(
634ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines          MVT::FIRST_FP_VECTOR_VALUETYPE,
635ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines          (MVT::SimpleValueType)(MVT::LAST_FP_VECTOR_VALUETYPE + 1));
636ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
637ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    /// @}
63836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  };
63936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
64036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} // End llvm namespace
64136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
64236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif
643