1e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson//===----------- ValueTypes.cpp - Implementation of EVT methods -----------===//
2edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman//
357bf3287dd15a26073be4dae2204463264328e44Chris Lattner//                     The LLVM Compiler Infrastructure
457bf3287dd15a26073be4dae2204463264328e44Chris Lattner//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
7edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman//
857bf3287dd15a26073be4dae2204463264328e44Chris Lattner//===----------------------------------------------------------------------===//
957bf3287dd15a26073be4dae2204463264328e44Chris Lattner//
1057bf3287dd15a26073be4dae2204463264328e44Chris Lattner// This file implements methods in the CodeGen/ValueTypes.h header.
1157bf3287dd15a26073be4dae2204463264328e44Chris Lattner//
1257bf3287dd15a26073be4dae2204463264328e44Chris Lattner//===----------------------------------------------------------------------===//
1357bf3287dd15a26073be4dae2204463264328e44Chris Lattner
1457bf3287dd15a26073be4dae2204463264328e44Chris Lattner#include "llvm/CodeGen/ValueTypes.h"
15d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/ADT/StringExtras.h"
160b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/DerivedTypes.h"
170b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/LLVMContext.h"
180b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Type.h"
19c25e7581b9b8088910da31702d4ca21c4734c6d7Torok Edwin#include "llvm/Support/ErrorHandling.h"
2057bf3287dd15a26073be4dae2204463264328e44Chris Lattnerusing namespace llvm;
2157bf3287dd15a26073be4dae2204463264328e44Chris Lattner
2228b77e968d2b01fc9da724762bd8ddcd80650e32Duncan SandsEVT EVT::changeExtendedVectorElementTypeToInteger() const {
2328b77e968d2b01fc9da724762bd8ddcd80650e32Duncan Sands  LLVMContext &Context = LLVMTy->getContext();
2428b77e968d2b01fc9da724762bd8ddcd80650e32Duncan Sands  EVT IntTy = getIntegerVT(Context, getVectorElementType().getSizeInBits());
2528b77e968d2b01fc9da724762bd8ddcd80650e32Duncan Sands  return getVectorVT(Context, IntTy, getVectorNumElements());
2628b77e968d2b01fc9da724762bd8ddcd80650e32Duncan Sands}
2728b77e968d2b01fc9da724762bd8ddcd80650e32Duncan Sands
2823b9b19b1a5a00faa9fce0788155c7dbfd00bfb1Owen AndersonEVT EVT::getExtendedIntegerVT(LLVMContext &Context, unsigned BitWidth) {
29e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  EVT VT;
301d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  VT.LLVMTy = IntegerType::get(Context, BitWidth);
3138bb2f8d094a7e98d07b258ec5b722b07ad45dcbDan Gohman  assert(VT.isExtended() && "Type is not extended!");
323a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman  return VT;
333a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman}
343a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman
3523b9b19b1a5a00faa9fce0788155c7dbfd00bfb1Owen AndersonEVT EVT::getExtendedVectorVT(LLVMContext &Context, EVT VT,
3623b9b19b1a5a00faa9fce0788155c7dbfd00bfb1Owen Anderson                             unsigned NumElements) {
37e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  EVT ResultVT;
3823b9b19b1a5a00faa9fce0788155c7dbfd00bfb1Owen Anderson  ResultVT.LLVMTy = VectorType::get(VT.getTypeForEVT(Context), NumElements);
3938bb2f8d094a7e98d07b258ec5b722b07ad45dcbDan Gohman  assert(ResultVT.isExtended() && "Type is not extended!");
403a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman  return ResultVT;
413a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman}
423a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman
43e50ed30282bb5b4a9ed952580523f2dda16215acOwen Andersonbool EVT::isExtendedFloatingPoint() const {
443a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman  assert(isExtended() && "Type is not extended!");
45b0bc6c361da9009e8414efde317d9bbff755f6c0Duncan Sands  return LLVMTy->isFPOrFPVectorTy();
463a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman}
473a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman
48e50ed30282bb5b4a9ed952580523f2dda16215acOwen Andersonbool EVT::isExtendedInteger() const {
493a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman  assert(isExtended() && "Type is not extended!");
50b0bc6c361da9009e8414efde317d9bbff755f6c0Duncan Sands  return LLVMTy->isIntOrIntVectorTy();
513a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman}
523a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman
53e50ed30282bb5b4a9ed952580523f2dda16215acOwen Andersonbool EVT::isExtendedVector() const {
543a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman  assert(isExtended() && "Type is not extended!");
551df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  return LLVMTy->isVectorTy();
563a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman}
573a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman
583e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmowbool EVT::isExtended16BitVector() const {
59542b716bbcb3fa1b3354bc71bb84327921f73da3Craig Topper  return isExtendedVector() && getExtendedSizeInBits() == 16;
603e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow}
613e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow
623e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmowbool EVT::isExtended32BitVector() const {
63542b716bbcb3fa1b3354bc71bb84327921f73da3Craig Topper  return isExtendedVector() && getExtendedSizeInBits() == 32;
643e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow}
653e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow
66e50ed30282bb5b4a9ed952580523f2dda16215acOwen Andersonbool EVT::isExtended64BitVector() const {
67542b716bbcb3fa1b3354bc71bb84327921f73da3Craig Topper  return isExtendedVector() && getExtendedSizeInBits() == 64;
683a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman}
693a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman
70e50ed30282bb5b4a9ed952580523f2dda16215acOwen Andersonbool EVT::isExtended128BitVector() const {
71542b716bbcb3fa1b3354bc71bb84327921f73da3Craig Topper  return isExtendedVector() && getExtendedSizeInBits() == 128;
723a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman}
733a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman
74e50ed30282bb5b4a9ed952580523f2dda16215acOwen Andersonbool EVT::isExtended256BitVector() const {
75542b716bbcb3fa1b3354bc71bb84327921f73da3Craig Topper  return isExtendedVector() && getExtendedSizeInBits() == 256;
769b9838dbd4593e988b0614bb170427f153b14931David Greene}
779b9838dbd4593e988b0614bb170427f153b14931David Greene
78dbf67fefeaccfeb53fb9d6098180ba1f29e682d5Evan Chengbool EVT::isExtended512BitVector() const {
79542b716bbcb3fa1b3354bc71bb84327921f73da3Craig Topper  return isExtendedVector() && getExtendedSizeInBits() == 512;
80dbf67fefeaccfeb53fb9d6098180ba1f29e682d5Evan Cheng}
81dbf67fefeaccfeb53fb9d6098180ba1f29e682d5Evan Cheng
82b3fb028ebde36fab441a731aebe3a21bc30bda9aMicah Villmowbool EVT::isExtended1024BitVector() const {
83542b716bbcb3fa1b3354bc71bb84327921f73da3Craig Topper  return isExtendedVector() && getExtendedSizeInBits() == 1024;
84b3fb028ebde36fab441a731aebe3a21bc30bda9aMicah Villmow}
85b3fb028ebde36fab441a731aebe3a21bc30bda9aMicah Villmow
86e50ed30282bb5b4a9ed952580523f2dda16215acOwen AndersonEVT EVT::getExtendedVectorElementType() const {
873a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman  assert(isExtended() && "Type is not extended!");
88e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson  return EVT::getEVT(cast<VectorType>(LLVMTy)->getElementType());
893a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman}
903a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman
91e50ed30282bb5b4a9ed952580523f2dda16215acOwen Andersonunsigned EVT::getExtendedVectorNumElements() const {
923a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman  assert(isExtended() && "Type is not extended!");
933a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman  return cast<VectorType>(LLVMTy)->getNumElements();
943a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman}
953a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman
96e50ed30282bb5b4a9ed952580523f2dda16215acOwen Andersonunsigned EVT::getExtendedSizeInBits() const {
973a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman  assert(isExtended() && "Type is not extended!");
98db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  if (IntegerType *ITy = dyn_cast<IntegerType>(LLVMTy))
993a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman    return ITy->getBitWidth();
100db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  if (VectorType *VTy = dyn_cast<VectorType>(LLVMTy))
1013a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman    return VTy->getBitWidth();
10250bee42b54cd9aec5f49566307df2b0cf23afcf6Craig Topper  llvm_unreachable("Unrecognized extended type!");
1033a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman}
1043a5797d94662d1e3cd52ade56bc16e159ec05838Dan Gohman
105e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson/// getEVTString - This function returns value type as a string, e.g. "i32".
106e50ed30282bb5b4a9ed952580523f2dda16215acOwen Andersonstd::string EVT::getEVTString() const {
107825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  switch (V.SimpleTy) {
1087f32156bb9c017b71971c52fac892fa7b9b06dd2Dan Gohman  default:
10983ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands    if (isVector())
11083ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands      return "v" + utostr(getVectorNumElements()) +
111e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson             getVectorElementType().getEVTString();
11283ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands    if (isInteger())
11383ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands      return "i" + utostr(getSizeInBits());
114e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson    llvm_unreachable("Invalid EVT!");
115825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::i1:      return "i1";
116825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::i8:      return "i8";
117825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::i16:     return "i16";
118825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::i32:     return "i32";
119825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::i64:     return "i64";
120825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::i128:    return "i128";
121e3376ecd504300ae529c902135f51baffbdc2824Dan Gohman  case MVT::f16:     return "f16";
122825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::f32:     return "f32";
123825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::f64:     return "f64";
124825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::f80:     return "f80";
125825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::f128:    return "f128";
126825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::ppcf128: return "ppcf128";
127825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::isVoid:  return "isVoid";
128825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::Other:   return "ch";
129f1b4eafbfec976f939ec0ea3e8acf91cef5363e3Chris Lattner  case MVT::Glue:    return "glue";
130d8dd5757e0e31c55bb15498aa1d75fad08850c5aBill Wendling  case MVT::x86mmx:  return "x86mmx";
1313e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v2i1:    return "v2i1";
1323e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v4i1:    return "v4i1";
1333e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v8i1:    return "v8i1";
1343e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v16i1:   return "v16i1";
13594d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v32i1:   return "v32i1";
13694d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v64i1:   return "v64i1";
137825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v2i8:    return "v2i8";
138825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v4i8:    return "v4i8";
139825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v8i8:    return "v8i8";
140825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v16i8:   return "v16i8";
141825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v32i8:   return "v32i8";
14294d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v64i8:   return "v64i8";
1433e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v1i16:   return "v1i16";
144825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v2i16:   return "v2i16";
145825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v4i16:   return "v4i16";
146825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v8i16:   return "v8i16";
147825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v16i16:  return "v16i16";
14894d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v32i16:  return "v32i16";
1493e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v1i32:   return "v1i32";
150825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v2i32:   return "v2i32";
151825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v4i32:   return "v4i32";
152825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v8i32:   return "v8i32";
153b3fb028ebde36fab441a731aebe3a21bc30bda9aMicah Villmow  case MVT::v16i32:  return "v16i32";
154825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v1i64:   return "v1i64";
155825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v2i64:   return "v2i64";
156825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v4i64:   return "v4i64";
157dbf67fefeaccfeb53fb9d6098180ba1f29e682d5Evan Cheng  case MVT::v8i64:   return "v8i64";
158b3fb028ebde36fab441a731aebe3a21bc30bda9aMicah Villmow  case MVT::v16i64:  return "v16i64";
159825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v2f32:   return "v2f32";
160ddfda5cd1648c4cae12e6f62c3d86a36be3aefe4Pete Cooper  case MVT::v2f16:   return "v2f16";
161825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v4f32:   return "v4f32";
162825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v8f32:   return "v8f32";
16394d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v16f32:  return "v16f32";
164825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v2f64:   return "v2f64";
165825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case MVT::v4f64:   return "v4f64";
16694d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v8f64:   return "v8f64";
167350df33d722200b429838136d25bc6359c4bc1e4Dale Johannesen  case MVT::Metadata:return "Metadata";
16899aa14ff64c92eab347d23696e358361d3bd90eaOwen Anderson  case MVT::Untyped: return "Untyped";
16957bf3287dd15a26073be4dae2204463264328e44Chris Lattner  }
17057bf3287dd15a26073be4dae2204463264328e44Chris Lattner}
17157bf3287dd15a26073be4dae2204463264328e44Chris Lattner
172e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson/// getTypeForEVT - This method returns an LLVM type corresponding to the
173e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson/// specified EVT.  For integer types, this returns an unsigned type.  Note
17483ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands/// that this will abort for types that cannot be represented.
175db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris LattnerType *EVT::getTypeForEVT(LLVMContext &Context) const {
176825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  switch (V.SimpleTy) {
1777f32156bb9c017b71971c52fac892fa7b9b06dd2Dan Gohman  default:
1789a99325141ca9c67165bbdabbc5a854a5c679a23Dan Gohman    assert(isExtended() && "Type is not extended!");
1799a99325141ca9c67165bbdabbc5a854a5c679a23Dan Gohman    return LLVMTy;
1801d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::isVoid:  return Type::getVoidTy(Context);
1811d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::i1:      return Type::getInt1Ty(Context);
1821d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::i8:      return Type::getInt8Ty(Context);
1831d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::i16:     return Type::getInt16Ty(Context);
1841d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::i32:     return Type::getInt32Ty(Context);
1851d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::i64:     return Type::getInt64Ty(Context);
1861d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::i128:    return IntegerType::get(Context, 128);
187e3376ecd504300ae529c902135f51baffbdc2824Dan Gohman  case MVT::f16:     return Type::getHalfTy(Context);
1881d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::f32:     return Type::getFloatTy(Context);
1891d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::f64:     return Type::getDoubleTy(Context);
1901d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::f80:     return Type::getX86_FP80Ty(Context);
1911d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::f128:    return Type::getFP128Ty(Context);
1921d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::ppcf128: return Type::getPPC_FP128Ty(Context);
193bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen  case MVT::x86mmx:  return Type::getX86_MMXTy(Context);
1943e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v2i1:    return VectorType::get(Type::getInt1Ty(Context), 2);
1953e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v4i1:    return VectorType::get(Type::getInt1Ty(Context), 4);
1963e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v8i1:    return VectorType::get(Type::getInt1Ty(Context), 8);
1973e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v16i1:   return VectorType::get(Type::getInt1Ty(Context), 16);
19894d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v32i1:   return VectorType::get(Type::getInt1Ty(Context), 32);
19994d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v64i1:   return VectorType::get(Type::getInt1Ty(Context), 64);
2001d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v2i8:    return VectorType::get(Type::getInt8Ty(Context), 2);
2011d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v4i8:    return VectorType::get(Type::getInt8Ty(Context), 4);
2021d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v8i8:    return VectorType::get(Type::getInt8Ty(Context), 8);
2031d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v16i8:   return VectorType::get(Type::getInt8Ty(Context), 16);
2041d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v32i8:   return VectorType::get(Type::getInt8Ty(Context), 32);
20594d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v64i8:   return VectorType::get(Type::getInt8Ty(Context), 64);
2063e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v1i16:   return VectorType::get(Type::getInt16Ty(Context), 1);
2071d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v2i16:   return VectorType::get(Type::getInt16Ty(Context), 2);
2081d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v4i16:   return VectorType::get(Type::getInt16Ty(Context), 4);
2091d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v8i16:   return VectorType::get(Type::getInt16Ty(Context), 8);
2101d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v16i16:  return VectorType::get(Type::getInt16Ty(Context), 16);
21194d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v32i16:  return VectorType::get(Type::getInt16Ty(Context), 32);
2123e9b6db60ff5864d6789f768610a3509dac0b5efMicah Villmow  case MVT::v1i32:   return VectorType::get(Type::getInt32Ty(Context), 1);
2131d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v2i32:   return VectorType::get(Type::getInt32Ty(Context), 2);
2141d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v4i32:   return VectorType::get(Type::getInt32Ty(Context), 4);
2151d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v8i32:   return VectorType::get(Type::getInt32Ty(Context), 8);
216b3fb028ebde36fab441a731aebe3a21bc30bda9aMicah Villmow  case MVT::v16i32:  return VectorType::get(Type::getInt32Ty(Context), 16);
2171d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v1i64:   return VectorType::get(Type::getInt64Ty(Context), 1);
2181d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v2i64:   return VectorType::get(Type::getInt64Ty(Context), 2);
2191d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v4i64:   return VectorType::get(Type::getInt64Ty(Context), 4);
220dbf67fefeaccfeb53fb9d6098180ba1f29e682d5Evan Cheng  case MVT::v8i64:   return VectorType::get(Type::getInt64Ty(Context), 8);
221b3fb028ebde36fab441a731aebe3a21bc30bda9aMicah Villmow  case MVT::v16i64:  return VectorType::get(Type::getInt64Ty(Context), 16);
222ddfda5cd1648c4cae12e6f62c3d86a36be3aefe4Pete Cooper  case MVT::v2f16:   return VectorType::get(Type::getHalfTy(Context), 2);
2231d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v2f32:   return VectorType::get(Type::getFloatTy(Context), 2);
2241d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v4f32:   return VectorType::get(Type::getFloatTy(Context), 4);
2251d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v8f32:   return VectorType::get(Type::getFloatTy(Context), 8);
22694d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v16f32:   return VectorType::get(Type::getFloatTy(Context), 16);
2271d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v2f64:   return VectorType::get(Type::getDoubleTy(Context), 2);
2281d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson  case MVT::v4f64:   return VectorType::get(Type::getDoubleTy(Context), 4);
22994d7ab7da4601d0caa75e7cffcf542214fb830a8Elena Demikhovsky  case MVT::v8f64:   return VectorType::get(Type::getDoubleTy(Context), 8);
230e4b275610a7a05b7ee4c0378a906a6330e4c4ab0Devang Patel  case MVT::Metadata: return Type::getMetadataTy(Context);
2319b9838dbd4593e988b0614bb170427f153b14931David Greene }
23257bf3287dd15a26073be4dae2204463264328e44Chris Lattner}
2332df6dc579ca7c85a20d2d221f4df32fbb26fc97aChris Lattner
234c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund/// Return the value type corresponding to the specified type.  This returns all
235c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund/// pointers as MVT::iPTR.  If HandleUnknown is true, unknown types are returned
236c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund/// as Other, otherwise they are invalid.
237c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik HagglundMVT MVT::getVT(Type *Ty, bool HandleUnknown){
2382df6dc579ca7c85a20d2d221f4df32fbb26fc97aChris Lattner  switch (Ty->getTypeID()) {
239bb58b9c3c03dda9d03e92a9dd2a0d00dfb922331Chris Lattner  default:
240825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson    if (HandleUnknown) return MVT(MVT::Other);
241c23197a26f34f559ea9797de51e187087c039c42Torok Edwin    llvm_unreachable("Unknown type!");
2422df6dc579ca7c85a20d2d221f4df32fbb26fc97aChris Lattner  case Type::VoidTyID:
24323b9b19b1a5a00faa9fce0788155c7dbfd00bfb1Owen Anderson    return MVT::isVoid;
2442df6dc579ca7c85a20d2d221f4df32fbb26fc97aChris Lattner  case Type::IntegerTyID:
245c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund    return getIntegerVT(cast<IntegerType>(Ty)->getBitWidth());
246e3376ecd504300ae529c902135f51baffbdc2824Dan Gohman  case Type::HalfTyID:      return MVT(MVT::f16);
247825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case Type::FloatTyID:     return MVT(MVT::f32);
248825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case Type::DoubleTyID:    return MVT(MVT::f64);
249825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case Type::X86_FP80TyID:  return MVT(MVT::f80);
25029fc6f35a5a284e0c304b1877e9acf040bfca339Dale Johannesen  case Type::X86_MMXTyID:   return MVT(MVT::x86mmx);
251825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case Type::FP128TyID:     return MVT(MVT::f128);
252825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case Type::PPC_FP128TyID: return MVT(MVT::ppcf128);
253825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson  case Type::PointerTyID:   return MVT(MVT::iPTR);
2547f32156bb9c017b71971c52fac892fa7b9b06dd2Dan Gohman  case Type::VectorTyID: {
255db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner    VectorType *VTy = cast<VectorType>(Ty);
256c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund    return getVectorVT(
257c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund      getVT(VTy->getElementType(), false), VTy->getNumElements());
258c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund  }
259c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund  }
260c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund}
261c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund
262c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund/// getEVT - Return the value type corresponding to the specified type.  This
263c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund/// returns all pointers as MVT::iPTR.  If HandleUnknown is true, unknown types
264c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund/// are returned as Other, otherwise they are invalid.
265c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik HagglundEVT EVT::getEVT(Type *Ty, bool HandleUnknown){
266c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund  switch (Ty->getTypeID()) {
267c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund  default:
268c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund    return MVT::getVT(Ty, HandleUnknown);
269c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund  case Type::IntegerTyID:
270c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund    return getIntegerVT(Ty->getContext(), cast<IntegerType>(Ty)->getBitWidth());
271c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund  case Type::VectorTyID: {
272c698d3a2a40f0909d16cbe857685f0f22cb9ae43Patrik Hagglund    VectorType *VTy = cast<VectorType>(Ty);
27323b9b19b1a5a00faa9fce0788155c7dbfd00bfb1Owen Anderson    return getVectorVT(Ty->getContext(), getEVT(VTy->getElementType(), false),
27483ec4b6711980242ef3c55a4fa36b2d7a39c1bfbDuncan Sands                       VTy->getNumElements());
2757f32156bb9c017b71971c52fac892fa7b9b06dd2Dan Gohman  }
2762df6dc579ca7c85a20d2d221f4df32fbb26fc97aChris Lattner  }
277a573f5962840f10241f96da8ba93645688fc00b8Bob Wilson}
278