12fa14362SCraig Topper //===----------- ValueTypes.cpp - Implementation of EVT methods -----------===//
22fa14362SCraig Topper //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62fa14362SCraig Topper //
72fa14362SCraig Topper //===----------------------------------------------------------------------===//
82fa14362SCraig Topper
92fa14362SCraig Topper #include "llvm/CodeGen/ValueTypes.h"
102fa14362SCraig Topper #include "llvm/ADT/StringExtras.h"
112fa14362SCraig Topper #include "llvm/IR/DerivedTypes.h"
122fa14362SCraig Topper #include "llvm/IR/Type.h"
132fa14362SCraig Topper #include "llvm/Support/ErrorHandling.h"
143f08ad61SGraham Hunter #include "llvm/Support/TypeSize.h"
15989f1c72Sserge-sans-paille #include "llvm/Support/WithColor.h"
162fa14362SCraig Topper using namespace llvm;
172fa14362SCraig Topper
changeExtendedTypeToInteger() const182fa14362SCraig Topper EVT EVT::changeExtendedTypeToInteger() const {
19baab7978SCraig Topper assert(isExtended() && "Type is not extended!");
202fa14362SCraig Topper LLVMContext &Context = LLVMTy->getContext();
212fa14362SCraig Topper return getIntegerVT(Context, getSizeInBits());
222fa14362SCraig Topper }
232fa14362SCraig Topper
changeExtendedVectorElementTypeToInteger() const242fa14362SCraig Topper EVT EVT::changeExtendedVectorElementTypeToInteger() const {
25baab7978SCraig Topper assert(isExtended() && "Type is not extended!");
262fa14362SCraig Topper LLVMContext &Context = LLVMTy->getContext();
272fa14362SCraig Topper EVT IntTy = getIntegerVT(Context, getScalarSizeInBits());
282dd20a31SFraser Cormack return getVectorVT(Context, IntTy, getVectorElementCount());
292fa14362SCraig Topper }
302fa14362SCraig Topper
changeExtendedVectorElementType(EVT EltVT) const3189fc0166SKerry McLaughlin EVT EVT::changeExtendedVectorElementType(EVT EltVT) const {
32baab7978SCraig Topper assert(isExtended() && "Type is not extended!");
3389fc0166SKerry McLaughlin LLVMContext &Context = LLVMTy->getContext();
3489fc0166SKerry McLaughlin return getVectorVT(Context, EltVT, getVectorElementCount());
3589fc0166SKerry McLaughlin }
3689fc0166SKerry McLaughlin
getExtendedIntegerVT(LLVMContext & Context,unsigned BitWidth)372fa14362SCraig Topper EVT EVT::getExtendedIntegerVT(LLVMContext &Context, unsigned BitWidth) {
382fa14362SCraig Topper EVT VT;
392fa14362SCraig Topper VT.LLVMTy = IntegerType::get(Context, BitWidth);
402fa14362SCraig Topper assert(VT.isExtended() && "Type is not extended!");
412fa14362SCraig Topper return VT;
422fa14362SCraig Topper }
432fa14362SCraig Topper
getExtendedVectorVT(LLVMContext & Context,EVT VT,unsigned NumElements,bool IsScalable)445ce38fcbSCullen Rhodes EVT EVT::getExtendedVectorVT(LLVMContext &Context, EVT VT, unsigned NumElements,
455ce38fcbSCullen Rhodes bool IsScalable) {
462fa14362SCraig Topper EVT ResultVT;
475ce38fcbSCullen Rhodes ResultVT.LLVMTy =
485ce38fcbSCullen Rhodes VectorType::get(VT.getTypeForEVT(Context), NumElements, IsScalable);
495ce38fcbSCullen Rhodes assert(ResultVT.isExtended() && "Type is not extended!");
505ce38fcbSCullen Rhodes return ResultVT;
515ce38fcbSCullen Rhodes }
525ce38fcbSCullen Rhodes
getExtendedVectorVT(LLVMContext & Context,EVT VT,ElementCount EC)535ce38fcbSCullen Rhodes EVT EVT::getExtendedVectorVT(LLVMContext &Context, EVT VT, ElementCount EC) {
545ce38fcbSCullen Rhodes EVT ResultVT;
55a407ec9bSMehdi Amini ResultVT.LLVMTy = VectorType::get(VT.getTypeForEVT(Context), EC);
562fa14362SCraig Topper assert(ResultVT.isExtended() && "Type is not extended!");
572fa14362SCraig Topper return ResultVT;
582fa14362SCraig Topper }
592fa14362SCraig Topper
isExtendedFloatingPoint() const602fa14362SCraig Topper bool EVT::isExtendedFloatingPoint() const {
612fa14362SCraig Topper assert(isExtended() && "Type is not extended!");
622fa14362SCraig Topper return LLVMTy->isFPOrFPVectorTy();
632fa14362SCraig Topper }
642fa14362SCraig Topper
isExtendedInteger() const652fa14362SCraig Topper bool EVT::isExtendedInteger() const {
662fa14362SCraig Topper assert(isExtended() && "Type is not extended!");
672fa14362SCraig Topper return LLVMTy->isIntOrIntVectorTy();
682fa14362SCraig Topper }
692fa14362SCraig Topper
isExtendedScalarInteger() const702fa14362SCraig Topper bool EVT::isExtendedScalarInteger() const {
712fa14362SCraig Topper assert(isExtended() && "Type is not extended!");
722fa14362SCraig Topper return LLVMTy->isIntegerTy();
732fa14362SCraig Topper }
742fa14362SCraig Topper
isExtendedVector() const752fa14362SCraig Topper bool EVT::isExtendedVector() const {
762fa14362SCraig Topper assert(isExtended() && "Type is not extended!");
772fa14362SCraig Topper return LLVMTy->isVectorTy();
782fa14362SCraig Topper }
792fa14362SCraig Topper
isExtended16BitVector() const802fa14362SCraig Topper bool EVT::isExtended16BitVector() const {
812fa14362SCraig Topper return isExtendedVector() && getExtendedSizeInBits() == 16;
822fa14362SCraig Topper }
832fa14362SCraig Topper
isExtended32BitVector() const842fa14362SCraig Topper bool EVT::isExtended32BitVector() const {
852fa14362SCraig Topper return isExtendedVector() && getExtendedSizeInBits() == 32;
862fa14362SCraig Topper }
872fa14362SCraig Topper
isExtended64BitVector() const882fa14362SCraig Topper bool EVT::isExtended64BitVector() const {
892fa14362SCraig Topper return isExtendedVector() && getExtendedSizeInBits() == 64;
902fa14362SCraig Topper }
912fa14362SCraig Topper
isExtended128BitVector() const922fa14362SCraig Topper bool EVT::isExtended128BitVector() const {
932fa14362SCraig Topper return isExtendedVector() && getExtendedSizeInBits() == 128;
942fa14362SCraig Topper }
952fa14362SCraig Topper
isExtended256BitVector() const962fa14362SCraig Topper bool EVT::isExtended256BitVector() const {
972fa14362SCraig Topper return isExtendedVector() && getExtendedSizeInBits() == 256;
982fa14362SCraig Topper }
992fa14362SCraig Topper
isExtended512BitVector() const1002fa14362SCraig Topper bool EVT::isExtended512BitVector() const {
1012fa14362SCraig Topper return isExtendedVector() && getExtendedSizeInBits() == 512;
1022fa14362SCraig Topper }
1032fa14362SCraig Topper
isExtended1024BitVector() const1042fa14362SCraig Topper bool EVT::isExtended1024BitVector() const {
1052fa14362SCraig Topper return isExtendedVector() && getExtendedSizeInBits() == 1024;
1062fa14362SCraig Topper }
1072fa14362SCraig Topper
isExtended2048BitVector() const1082fa14362SCraig Topper bool EVT::isExtended2048BitVector() const {
1092fa14362SCraig Topper return isExtendedVector() && getExtendedSizeInBits() == 2048;
1102fa14362SCraig Topper }
1112fa14362SCraig Topper
isExtendedFixedLengthVector() const1125c296df0SCullen Rhodes bool EVT::isExtendedFixedLengthVector() const {
113ccd623eaSChristopher Tetreault return isExtendedVector() && isa<FixedVectorType>(LLVMTy);
1145c296df0SCullen Rhodes }
1155c296df0SCullen Rhodes
isExtendedScalableVector() const1165ce38fcbSCullen Rhodes bool EVT::isExtendedScalableVector() const {
117ccd623eaSChristopher Tetreault return isExtendedVector() && isa<ScalableVectorType>(LLVMTy);
1185ce38fcbSCullen Rhodes }
1195ce38fcbSCullen Rhodes
getExtendedVectorElementType() const1202fa14362SCraig Topper EVT EVT::getExtendedVectorElementType() const {
1212fa14362SCraig Topper assert(isExtended() && "Type is not extended!");
1222fa14362SCraig Topper return EVT::getEVT(cast<VectorType>(LLVMTy)->getElementType());
1232fa14362SCraig Topper }
1242fa14362SCraig Topper
getExtendedVectorNumElements() const1252fa14362SCraig Topper unsigned EVT::getExtendedVectorNumElements() const {
1262fa14362SCraig Topper assert(isExtended() && "Type is not extended!");
127ff5b9a7bSChristopher Tetreault ElementCount EC = cast<VectorType>(LLVMTy)->getElementCount();
128f4257c58SDavid Sherwood if (EC.isScalable()) {
129ff5b9a7bSChristopher Tetreault WithColor::warning()
130ff5b9a7bSChristopher Tetreault << "The code that requested the fixed number of elements has made the "
131ff5b9a7bSChristopher Tetreault "assumption that this vector is not scalable. This assumption was "
132ff5b9a7bSChristopher Tetreault "not correct, and this may lead to broken code\n";
133ff5b9a7bSChristopher Tetreault }
134f4257c58SDavid Sherwood return EC.getKnownMinValue();
1352fa14362SCraig Topper }
1362fa14362SCraig Topper
getExtendedVectorElementCount() const1375ce38fcbSCullen Rhodes ElementCount EVT::getExtendedVectorElementCount() const {
1385ce38fcbSCullen Rhodes assert(isExtended() && "Type is not extended!");
1395ce38fcbSCullen Rhodes return cast<VectorType>(LLVMTy)->getElementCount();
1405ce38fcbSCullen Rhodes }
1415ce38fcbSCullen Rhodes
getExtendedSizeInBits() const1423f08ad61SGraham Hunter TypeSize EVT::getExtendedSizeInBits() const {
1432fa14362SCraig Topper assert(isExtended() && "Type is not extended!");
1442fa14362SCraig Topper if (IntegerType *ITy = dyn_cast<IntegerType>(LLVMTy))
1453f08ad61SGraham Hunter return TypeSize::Fixed(ITy->getBitWidth());
1462fa14362SCraig Topper if (VectorType *VTy = dyn_cast<VectorType>(LLVMTy))
1473f08ad61SGraham Hunter return VTy->getPrimitiveSizeInBits();
1482fa14362SCraig Topper llvm_unreachable("Unrecognized extended type!");
1492fa14362SCraig Topper }
1502fa14362SCraig Topper
1512fa14362SCraig Topper /// getEVTString - This function returns value type as a string, e.g. "i32".
getEVTString() const1522fa14362SCraig Topper std::string EVT::getEVTString() const {
1532fa14362SCraig Topper switch (V.SimpleTy) {
1542fa14362SCraig Topper default:
1552fa14362SCraig Topper if (isVector())
156f4257c58SDavid Sherwood return (isScalableVector() ? "nxv" : "v") +
157f4257c58SDavid Sherwood utostr(getVectorElementCount().getKnownMinValue()) +
158f4257c58SDavid Sherwood getVectorElementType().getEVTString();
1592fa14362SCraig Topper if (isInteger())
1602fa14362SCraig Topper return "i" + utostr(getSizeInBits());
16117e537bcSCullen Rhodes if (isFloatingPoint())
16217e537bcSCullen Rhodes return "f" + utostr(getSizeInBits());
1632fa14362SCraig Topper llvm_unreachable("Invalid EVT!");
1640508fb45STies Stuij case MVT::bf16: return "bf16";
1652fa14362SCraig Topper case MVT::ppcf128: return "ppcf128";
1662fa14362SCraig Topper case MVT::isVoid: return "isVoid";
1672fa14362SCraig Topper case MVT::Other: return "ch";
1682fa14362SCraig Topper case MVT::Glue: return "glue";
1692fa14362SCraig Topper case MVT::x86mmx: return "x86mmx";
170981a0bd8SLuo, Yuanke case MVT::x86amx: return "x86amx";
1713094e538SAlexandros Lamprineas case MVT::i64x8: return "i64x8";
1722fa14362SCraig Topper case MVT::Metadata: return "Metadata";
1732fa14362SCraig Topper case MVT::Untyped: return "Untyped";
17469e2797eSPaulo Matos case MVT::funcref: return "funcref";
17569e2797eSPaulo Matos case MVT::externref: return "externref";
1762fa14362SCraig Topper }
1772fa14362SCraig Topper }
1782fa14362SCraig Topper
1792fa14362SCraig Topper /// getTypeForEVT - This method returns an LLVM type corresponding to the
1802fa14362SCraig Topper /// specified EVT. For integer types, this returns an unsigned type. Note
1812fa14362SCraig Topper /// that this will abort for types that cannot be represented.
getTypeForEVT(LLVMContext & Context) const1822fa14362SCraig Topper Type *EVT::getTypeForEVT(LLVMContext &Context) const {
183a92ed167SHendrik Greving // clang-format off
1842fa14362SCraig Topper switch (V.SimpleTy) {
1852fa14362SCraig Topper default:
1862fa14362SCraig Topper assert(isExtended() && "Type is not extended!");
1872fa14362SCraig Topper return LLVMTy;
1882fa14362SCraig Topper case MVT::isVoid: return Type::getVoidTy(Context);
1892fa14362SCraig Topper case MVT::i1: return Type::getInt1Ty(Context);
190a92ed167SHendrik Greving case MVT::i2: return Type::getIntNTy(Context, 2);
191a92ed167SHendrik Greving case MVT::i4: return Type::getIntNTy(Context, 4);
1922fa14362SCraig Topper case MVT::i8: return Type::getInt8Ty(Context);
1932fa14362SCraig Topper case MVT::i16: return Type::getInt16Ty(Context);
1942fa14362SCraig Topper case MVT::i32: return Type::getInt32Ty(Context);
1952fa14362SCraig Topper case MVT::i64: return Type::getInt64Ty(Context);
1962fa14362SCraig Topper case MVT::i128: return IntegerType::get(Context, 128);
1972fa14362SCraig Topper case MVT::f16: return Type::getHalfTy(Context);
1980508fb45STies Stuij case MVT::bf16: return Type::getBFloatTy(Context);
1992fa14362SCraig Topper case MVT::f32: return Type::getFloatTy(Context);
2002fa14362SCraig Topper case MVT::f64: return Type::getDoubleTy(Context);
2012fa14362SCraig Topper case MVT::f80: return Type::getX86_FP80Ty(Context);
2022fa14362SCraig Topper case MVT::f128: return Type::getFP128Ty(Context);
2032fa14362SCraig Topper case MVT::ppcf128: return Type::getPPC_FP128Ty(Context);
2042fa14362SCraig Topper case MVT::x86mmx: return Type::getX86_MMXTy(Context);
205981a0bd8SLuo, Yuanke case MVT::x86amx: return Type::getX86_AMXTy(Context);
2063094e538SAlexandros Lamprineas case MVT::i64x8: return IntegerType::get(Context, 512);
20746667a10SPaulo Matos case MVT::externref:
2082fd634a5SPaulo Matos // pointer to opaque struct in addrspace(10)
20946667a10SPaulo Matos return PointerType::get(StructType::create(Context), 10);
21046667a10SPaulo Matos case MVT::funcref:
2112fd634a5SPaulo Matos // pointer to i8 addrspace(20)
2122fd634a5SPaulo Matos return PointerType::get(Type::getInt8Ty(Context), 20);
213caa2fddcSChristopher Tetreault case MVT::v1i1:
214caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 1);
215caa2fddcSChristopher Tetreault case MVT::v2i1:
216caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 2);
217caa2fddcSChristopher Tetreault case MVT::v4i1:
218caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 4);
219caa2fddcSChristopher Tetreault case MVT::v8i1:
220caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 8);
221caa2fddcSChristopher Tetreault case MVT::v16i1:
222caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 16);
223caa2fddcSChristopher Tetreault case MVT::v32i1:
224caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 32);
225caa2fddcSChristopher Tetreault case MVT::v64i1:
226caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 64);
227caa2fddcSChristopher Tetreault case MVT::v128i1:
228caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 128);
229caa2fddcSChristopher Tetreault case MVT::v256i1:
230caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 256);
231caa2fddcSChristopher Tetreault case MVT::v512i1:
232caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 512);
233caa2fddcSChristopher Tetreault case MVT::v1024i1:
234caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt1Ty(Context), 1024);
235a92ed167SHendrik Greving case MVT::v128i2:
236a92ed167SHendrik Greving return FixedVectorType::get(Type::getIntNTy(Context, 2), 128);
237a92ed167SHendrik Greving case MVT::v64i4:
238a92ed167SHendrik Greving return FixedVectorType::get(Type::getIntNTy(Context, 4), 64);
239caa2fddcSChristopher Tetreault case MVT::v1i8:
240caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt8Ty(Context), 1);
241caa2fddcSChristopher Tetreault case MVT::v2i8:
242caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt8Ty(Context), 2);
243caa2fddcSChristopher Tetreault case MVT::v4i8:
244caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt8Ty(Context), 4);
245caa2fddcSChristopher Tetreault case MVT::v8i8:
246caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt8Ty(Context), 8);
247caa2fddcSChristopher Tetreault case MVT::v16i8:
248caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt8Ty(Context), 16);
249caa2fddcSChristopher Tetreault case MVT::v32i8:
250caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt8Ty(Context), 32);
251caa2fddcSChristopher Tetreault case MVT::v64i8:
252caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt8Ty(Context), 64);
253caa2fddcSChristopher Tetreault case MVT::v128i8:
254caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt8Ty(Context), 128);
255caa2fddcSChristopher Tetreault case MVT::v256i8:
256caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt8Ty(Context), 256);
257502edebdSFraser Cormack case MVT::v512i8:
258502edebdSFraser Cormack return FixedVectorType::get(Type::getInt8Ty(Context), 512);
259502edebdSFraser Cormack case MVT::v1024i8:
260502edebdSFraser Cormack return FixedVectorType::get(Type::getInt8Ty(Context), 1024);
261caa2fddcSChristopher Tetreault case MVT::v1i16:
262caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt16Ty(Context), 1);
263caa2fddcSChristopher Tetreault case MVT::v2i16:
264caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt16Ty(Context), 2);
265caa2fddcSChristopher Tetreault case MVT::v3i16:
266caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt16Ty(Context), 3);
267caa2fddcSChristopher Tetreault case MVT::v4i16:
268caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt16Ty(Context), 4);
269caa2fddcSChristopher Tetreault case MVT::v8i16:
270caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt16Ty(Context), 8);
271caa2fddcSChristopher Tetreault case MVT::v16i16:
272caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt16Ty(Context), 16);
273caa2fddcSChristopher Tetreault case MVT::v32i16:
274caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt16Ty(Context), 32);
275caa2fddcSChristopher Tetreault case MVT::v64i16:
276caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt16Ty(Context), 64);
277caa2fddcSChristopher Tetreault case MVT::v128i16:
278caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt16Ty(Context), 128);
2796523ff6dSFraser Cormack case MVT::v256i16:
2806523ff6dSFraser Cormack return FixedVectorType::get(Type::getInt16Ty(Context), 256);
281502edebdSFraser Cormack case MVT::v512i16:
282502edebdSFraser Cormack return FixedVectorType::get(Type::getInt16Ty(Context), 512);
283caa2fddcSChristopher Tetreault case MVT::v1i32:
284caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 1);
285caa2fddcSChristopher Tetreault case MVT::v2i32:
286caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 2);
287caa2fddcSChristopher Tetreault case MVT::v3i32:
288caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 3);
289caa2fddcSChristopher Tetreault case MVT::v4i32:
290caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 4);
291caa2fddcSChristopher Tetreault case MVT::v5i32:
292caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 5);
2932c2d2922SCarl Ritson case MVT::v6i32:
2942c2d2922SCarl Ritson return FixedVectorType::get(Type::getInt32Ty(Context), 6);
2952c2d2922SCarl Ritson case MVT::v7i32:
2962c2d2922SCarl Ritson return FixedVectorType::get(Type::getInt32Ty(Context), 7);
297caa2fddcSChristopher Tetreault case MVT::v8i32:
298caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 8);
299caa2fddcSChristopher Tetreault case MVT::v16i32:
300caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 16);
301caa2fddcSChristopher Tetreault case MVT::v32i32:
302caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 32);
303caa2fddcSChristopher Tetreault case MVT::v64i32:
304caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 64);
305caa2fddcSChristopher Tetreault case MVT::v128i32:
306caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 128);
307caa2fddcSChristopher Tetreault case MVT::v256i32:
308caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 256);
309caa2fddcSChristopher Tetreault case MVT::v512i32:
310caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 512);
311caa2fddcSChristopher Tetreault case MVT::v1024i32:
312caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 1024);
313caa2fddcSChristopher Tetreault case MVT::v2048i32:
314caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt32Ty(Context), 2048);
315caa2fddcSChristopher Tetreault case MVT::v1i64:
316caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt64Ty(Context), 1);
317caa2fddcSChristopher Tetreault case MVT::v2i64:
318caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt64Ty(Context), 2);
3196b0f98d4SCarl Ritson case MVT::v3i64:
3206b0f98d4SCarl Ritson return FixedVectorType::get(Type::getInt64Ty(Context), 3);
321caa2fddcSChristopher Tetreault case MVT::v4i64:
322caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt64Ty(Context), 4);
323caa2fddcSChristopher Tetreault case MVT::v8i64:
324caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt64Ty(Context), 8);
325caa2fddcSChristopher Tetreault case MVT::v16i64:
326caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt64Ty(Context), 16);
327caa2fddcSChristopher Tetreault case MVT::v32i64:
328caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt64Ty(Context), 32);
3291d1c1f8fSKazushi (Jam) Marukawa case MVT::v64i64:
3301d1c1f8fSKazushi (Jam) Marukawa return FixedVectorType::get(Type::getInt64Ty(Context), 64);
3311d1c1f8fSKazushi (Jam) Marukawa case MVT::v128i64:
3321d1c1f8fSKazushi (Jam) Marukawa return FixedVectorType::get(Type::getInt64Ty(Context), 128);
3331d1c1f8fSKazushi (Jam) Marukawa case MVT::v256i64:
3341d1c1f8fSKazushi (Jam) Marukawa return FixedVectorType::get(Type::getInt64Ty(Context), 256);
335caa2fddcSChristopher Tetreault case MVT::v1i128:
336caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getInt128Ty(Context), 1);
337e9426dfbSCraig Topper case MVT::v1f16:
338e9426dfbSCraig Topper return FixedVectorType::get(Type::getHalfTy(Context), 1);
339caa2fddcSChristopher Tetreault case MVT::v2f16:
340caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getHalfTy(Context), 2);
341caa2fddcSChristopher Tetreault case MVT::v3f16:
342caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getHalfTy(Context), 3);
343caa2fddcSChristopher Tetreault case MVT::v4f16:
344caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getHalfTy(Context), 4);
345caa2fddcSChristopher Tetreault case MVT::v8f16:
346caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getHalfTy(Context), 8);
347caa2fddcSChristopher Tetreault case MVT::v16f16:
348caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getHalfTy(Context), 16);
349caa2fddcSChristopher Tetreault case MVT::v32f16:
350caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getHalfTy(Context), 32);
3512c09e910SPaul Walker case MVT::v64f16:
352ae35c09cSChristopher Tetreault return FixedVectorType::get(Type::getHalfTy(Context), 64);
3532c09e910SPaul Walker case MVT::v128f16:
354ae35c09cSChristopher Tetreault return FixedVectorType::get(Type::getHalfTy(Context), 128);
3556523ff6dSFraser Cormack case MVT::v256f16:
3566523ff6dSFraser Cormack return FixedVectorType::get(Type::getHalfTy(Context), 256);
357502edebdSFraser Cormack case MVT::v512f16:
358502edebdSFraser Cormack return FixedVectorType::get(Type::getHalfTy(Context), 512);
359caa2fddcSChristopher Tetreault case MVT::v2bf16:
360caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getBFloatTy(Context), 2);
361caa2fddcSChristopher Tetreault case MVT::v3bf16:
362caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getBFloatTy(Context), 3);
363caa2fddcSChristopher Tetreault case MVT::v4bf16:
364caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getBFloatTy(Context), 4);
365caa2fddcSChristopher Tetreault case MVT::v8bf16:
366caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getBFloatTy(Context), 8);
367caa2fddcSChristopher Tetreault case MVT::v16bf16:
368caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getBFloatTy(Context), 16);
369caa2fddcSChristopher Tetreault case MVT::v32bf16:
370caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getBFloatTy(Context), 32);
3712c09e910SPaul Walker case MVT::v64bf16:
3722c09e910SPaul Walker return FixedVectorType::get(Type::getBFloatTy(Context), 64);
3732c09e910SPaul Walker case MVT::v128bf16:
3742c09e910SPaul Walker return FixedVectorType::get(Type::getBFloatTy(Context), 128);
375caa2fddcSChristopher Tetreault case MVT::v1f32:
376caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 1);
377caa2fddcSChristopher Tetreault case MVT::v2f32:
378caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 2);
379caa2fddcSChristopher Tetreault case MVT::v3f32:
380caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 3);
381caa2fddcSChristopher Tetreault case MVT::v4f32:
382caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 4);
383caa2fddcSChristopher Tetreault case MVT::v5f32:
384caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 5);
3852c2d2922SCarl Ritson case MVT::v6f32:
3862c2d2922SCarl Ritson return FixedVectorType::get(Type::getFloatTy(Context), 6);
3872c2d2922SCarl Ritson case MVT::v7f32:
3882c2d2922SCarl Ritson return FixedVectorType::get(Type::getFloatTy(Context), 7);
389caa2fddcSChristopher Tetreault case MVT::v8f32:
390caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 8);
391caa2fddcSChristopher Tetreault case MVT::v16f32:
392caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 16);
393caa2fddcSChristopher Tetreault case MVT::v32f32:
394caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 32);
395caa2fddcSChristopher Tetreault case MVT::v64f32:
396caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 64);
397caa2fddcSChristopher Tetreault case MVT::v128f32:
398caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 128);
399caa2fddcSChristopher Tetreault case MVT::v256f32:
400caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 256);
401caa2fddcSChristopher Tetreault case MVT::v512f32:
402caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 512);
403caa2fddcSChristopher Tetreault case MVT::v1024f32:
404caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 1024);
405caa2fddcSChristopher Tetreault case MVT::v2048f32:
406caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getFloatTy(Context), 2048);
407caa2fddcSChristopher Tetreault case MVT::v1f64:
408caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getDoubleTy(Context), 1);
409caa2fddcSChristopher Tetreault case MVT::v2f64:
410caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getDoubleTy(Context), 2);
4116b0f98d4SCarl Ritson case MVT::v3f64:
4126b0f98d4SCarl Ritson return FixedVectorType::get(Type::getDoubleTy(Context), 3);
413caa2fddcSChristopher Tetreault case MVT::v4f64:
414caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getDoubleTy(Context), 4);
415caa2fddcSChristopher Tetreault case MVT::v8f64:
416caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getDoubleTy(Context), 8);
417caa2fddcSChristopher Tetreault case MVT::v16f64:
418caa2fddcSChristopher Tetreault return FixedVectorType::get(Type::getDoubleTy(Context), 16);
4192c09e910SPaul Walker case MVT::v32f64:
4202c09e910SPaul Walker return FixedVectorType::get(Type::getDoubleTy(Context), 32);
4211d1c1f8fSKazushi (Jam) Marukawa case MVT::v64f64:
4221d1c1f8fSKazushi (Jam) Marukawa return FixedVectorType::get(Type::getDoubleTy(Context), 64);
4231d1c1f8fSKazushi (Jam) Marukawa case MVT::v128f64:
4241d1c1f8fSKazushi (Jam) Marukawa return FixedVectorType::get(Type::getDoubleTy(Context), 128);
4251d1c1f8fSKazushi (Jam) Marukawa case MVT::v256f64:
4261d1c1f8fSKazushi (Jam) Marukawa return FixedVectorType::get(Type::getDoubleTy(Context), 256);
427208d63eaSGraham Hunter case MVT::nxv1i1:
428caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt1Ty(Context), 1);
429208d63eaSGraham Hunter case MVT::nxv2i1:
430caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt1Ty(Context), 2);
431208d63eaSGraham Hunter case MVT::nxv4i1:
432caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt1Ty(Context), 4);
433208d63eaSGraham Hunter case MVT::nxv8i1:
434caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt1Ty(Context), 8);
435208d63eaSGraham Hunter case MVT::nxv16i1:
436caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt1Ty(Context), 16);
437208d63eaSGraham Hunter case MVT::nxv32i1:
438caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt1Ty(Context), 32);
439a7b0f391SHsiangkai Wang case MVT::nxv64i1:
440a7b0f391SHsiangkai Wang return ScalableVectorType::get(Type::getInt1Ty(Context), 64);
441208d63eaSGraham Hunter case MVT::nxv1i8:
442caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt8Ty(Context), 1);
443208d63eaSGraham Hunter case MVT::nxv2i8:
444caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt8Ty(Context), 2);
445208d63eaSGraham Hunter case MVT::nxv4i8:
446caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt8Ty(Context), 4);
447208d63eaSGraham Hunter case MVT::nxv8i8:
448caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt8Ty(Context), 8);
449208d63eaSGraham Hunter case MVT::nxv16i8:
450caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt8Ty(Context), 16);
451208d63eaSGraham Hunter case MVT::nxv32i8:
452caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt8Ty(Context), 32);
453a7b0f391SHsiangkai Wang case MVT::nxv64i8:
454a7b0f391SHsiangkai Wang return ScalableVectorType::get(Type::getInt8Ty(Context), 64);
455208d63eaSGraham Hunter case MVT::nxv1i16:
456caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt16Ty(Context), 1);
457208d63eaSGraham Hunter case MVT::nxv2i16:
458caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt16Ty(Context), 2);
459208d63eaSGraham Hunter case MVT::nxv4i16:
460caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt16Ty(Context), 4);
461208d63eaSGraham Hunter case MVT::nxv8i16:
462caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt16Ty(Context), 8);
463208d63eaSGraham Hunter case MVT::nxv16i16:
464caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt16Ty(Context), 16);
465208d63eaSGraham Hunter case MVT::nxv32i16:
466caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt16Ty(Context), 32);
467208d63eaSGraham Hunter case MVT::nxv1i32:
468caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt32Ty(Context), 1);
469208d63eaSGraham Hunter case MVT::nxv2i32:
470caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt32Ty(Context), 2);
471208d63eaSGraham Hunter case MVT::nxv4i32:
472caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt32Ty(Context), 4);
473208d63eaSGraham Hunter case MVT::nxv8i32:
474caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt32Ty(Context), 8);
475208d63eaSGraham Hunter case MVT::nxv16i32:
476caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt32Ty(Context), 16);
477208d63eaSGraham Hunter case MVT::nxv32i32:
478caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt32Ty(Context), 32);
479208d63eaSGraham Hunter case MVT::nxv1i64:
480caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt64Ty(Context), 1);
481208d63eaSGraham Hunter case MVT::nxv2i64:
482caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt64Ty(Context), 2);
483208d63eaSGraham Hunter case MVT::nxv4i64:
484caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt64Ty(Context), 4);
485208d63eaSGraham Hunter case MVT::nxv8i64:
486caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt64Ty(Context), 8);
487208d63eaSGraham Hunter case MVT::nxv16i64:
488caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt64Ty(Context), 16);
489208d63eaSGraham Hunter case MVT::nxv32i64:
490caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getInt64Ty(Context), 32);
491a7b0f391SHsiangkai Wang case MVT::nxv1f16:
492a7b0f391SHsiangkai Wang return ScalableVectorType::get(Type::getHalfTy(Context), 1);
493208d63eaSGraham Hunter case MVT::nxv2f16:
494caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getHalfTy(Context), 2);
495208d63eaSGraham Hunter case MVT::nxv4f16:
496caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getHalfTy(Context), 4);
497208d63eaSGraham Hunter case MVT::nxv8f16:
498caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getHalfTy(Context), 8);
499a7b0f391SHsiangkai Wang case MVT::nxv16f16:
500a7b0f391SHsiangkai Wang return ScalableVectorType::get(Type::getHalfTy(Context), 16);
501a7b0f391SHsiangkai Wang case MVT::nxv32f16:
502a7b0f391SHsiangkai Wang return ScalableVectorType::get(Type::getHalfTy(Context), 32);
503750a78cdSSander de Smalen case MVT::nxv1bf16:
504750a78cdSSander de Smalen return ScalableVectorType::get(Type::getBFloatTy(Context), 1);
5050508fb45STies Stuij case MVT::nxv2bf16:
506caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getBFloatTy(Context), 2);
5070508fb45STies Stuij case MVT::nxv4bf16:
508caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getBFloatTy(Context), 4);
5090508fb45STies Stuij case MVT::nxv8bf16:
510caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getBFloatTy(Context), 8);
511*3aa6ec61SCraig Topper case MVT::nxv16bf16:
512*3aa6ec61SCraig Topper return ScalableVectorType::get(Type::getBFloatTy(Context), 16);
513*3aa6ec61SCraig Topper case MVT::nxv32bf16:
514*3aa6ec61SCraig Topper return ScalableVectorType::get(Type::getBFloatTy(Context), 32);
515208d63eaSGraham Hunter case MVT::nxv1f32:
516caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getFloatTy(Context), 1);
517208d63eaSGraham Hunter case MVT::nxv2f32:
518caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getFloatTy(Context), 2);
519208d63eaSGraham Hunter case MVT::nxv4f32:
520caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getFloatTy(Context), 4);
521208d63eaSGraham Hunter case MVT::nxv8f32:
522caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getFloatTy(Context), 8);
523208d63eaSGraham Hunter case MVT::nxv16f32:
524caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getFloatTy(Context), 16);
525208d63eaSGraham Hunter case MVT::nxv1f64:
526caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getDoubleTy(Context), 1);
527208d63eaSGraham Hunter case MVT::nxv2f64:
528caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getDoubleTy(Context), 2);
529208d63eaSGraham Hunter case MVT::nxv4f64:
530caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getDoubleTy(Context), 4);
531208d63eaSGraham Hunter case MVT::nxv8f64:
532caa2fddcSChristopher Tetreault return ScalableVectorType::get(Type::getDoubleTy(Context), 8);
5332fa14362SCraig Topper case MVT::Metadata: return Type::getMetadataTy(Context);
5342fa14362SCraig Topper }
535a92ed167SHendrik Greving // clang-format on
5362fa14362SCraig Topper }
5372fa14362SCraig Topper
5382fa14362SCraig Topper /// Return the value type corresponding to the specified type. This returns all
5392fa14362SCraig Topper /// pointers as MVT::iPTR. If HandleUnknown is true, unknown types are returned
5402fa14362SCraig Topper /// as Other, otherwise they are invalid.
getVT(Type * Ty,bool HandleUnknown)5412fa14362SCraig Topper MVT MVT::getVT(Type *Ty, bool HandleUnknown){
5422fa14362SCraig Topper switch (Ty->getTypeID()) {
5432fa14362SCraig Topper default:
5442fa14362SCraig Topper if (HandleUnknown) return MVT(MVT::Other);
5452fa14362SCraig Topper llvm_unreachable("Unknown type!");
5462fa14362SCraig Topper case Type::VoidTyID:
5472fa14362SCraig Topper return MVT::isVoid;
5482fa14362SCraig Topper case Type::IntegerTyID:
5492fa14362SCraig Topper return getIntegerVT(cast<IntegerType>(Ty)->getBitWidth());
5502fa14362SCraig Topper case Type::HalfTyID: return MVT(MVT::f16);
5510508fb45STies Stuij case Type::BFloatTyID: return MVT(MVT::bf16);
5522fa14362SCraig Topper case Type::FloatTyID: return MVT(MVT::f32);
5532fa14362SCraig Topper case Type::DoubleTyID: return MVT(MVT::f64);
5542fa14362SCraig Topper case Type::X86_FP80TyID: return MVT(MVT::f80);
5552fa14362SCraig Topper case Type::X86_MMXTyID: return MVT(MVT::x86mmx);
556981a0bd8SLuo, Yuanke case Type::X86_AMXTyID: return MVT(MVT::x86amx);
5572fa14362SCraig Topper case Type::FP128TyID: return MVT(MVT::f128);
5582fa14362SCraig Topper case Type::PPC_FP128TyID: return MVT(MVT::ppcf128);
5592fa14362SCraig Topper case Type::PointerTyID: return MVT(MVT::iPTR);
5602dea3f12SChristopher Tetreault case Type::FixedVectorTyID:
5612dea3f12SChristopher Tetreault case Type::ScalableVectorTyID: {
5622fa14362SCraig Topper VectorType *VTy = cast<VectorType>(Ty);
5632fa14362SCraig Topper return getVectorVT(
564208d63eaSGraham Hunter getVT(VTy->getElementType(), /*HandleUnknown=*/ false),
565208d63eaSGraham Hunter VTy->getElementCount());
5662fa14362SCraig Topper }
5672fa14362SCraig Topper }
5682fa14362SCraig Topper }
5692fa14362SCraig Topper
5702fa14362SCraig Topper /// getEVT - Return the value type corresponding to the specified type. This
5712fa14362SCraig Topper /// returns all pointers as MVT::iPTR. If HandleUnknown is true, unknown types
5722fa14362SCraig Topper /// are returned as Other, otherwise they are invalid.
getEVT(Type * Ty,bool HandleUnknown)5732fa14362SCraig Topper EVT EVT::getEVT(Type *Ty, bool HandleUnknown){
5742fa14362SCraig Topper switch (Ty->getTypeID()) {
5752fa14362SCraig Topper default:
5762fa14362SCraig Topper return MVT::getVT(Ty, HandleUnknown);
5772fa14362SCraig Topper case Type::IntegerTyID:
5782fa14362SCraig Topper return getIntegerVT(Ty->getContext(), cast<IntegerType>(Ty)->getBitWidth());
5792dea3f12SChristopher Tetreault case Type::FixedVectorTyID:
5802dea3f12SChristopher Tetreault case Type::ScalableVectorTyID: {
5812fa14362SCraig Topper VectorType *VTy = cast<VectorType>(Ty);
582208d63eaSGraham Hunter return getVectorVT(Ty->getContext(),
583208d63eaSGraham Hunter getEVT(VTy->getElementType(), /*HandleUnknown=*/ false),
584208d63eaSGraham Hunter VTy->getElementCount());
5852fa14362SCraig Topper }
5862fa14362SCraig Topper }
5872fa14362SCraig Topper }
588