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