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