1*184ca395SNico Weber //===-- llvm/CodeGenTypes/LowLevelType.cpp 2*184ca395SNico Weber //---------------------------------===// 3*184ca395SNico Weber // 4*184ca395SNico Weber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*184ca395SNico Weber // See https://llvm.org/LICENSE.txt for license information. 6*184ca395SNico Weber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*184ca395SNico Weber // 8*184ca395SNico Weber //===----------------------------------------------------------------------===// 9*184ca395SNico Weber // 10*184ca395SNico Weber /// \file This file implements the more header-heavy bits of the LLT class to 11*184ca395SNico Weber /// avoid polluting users' namespaces. 12*184ca395SNico Weber // 13*184ca395SNico Weber //===----------------------------------------------------------------------===// 14*184ca395SNico Weber 15*184ca395SNico Weber #include "llvm/CodeGenTypes/LowLevelType.h" 16*184ca395SNico Weber #include "llvm/Support/raw_ostream.h" 17*184ca395SNico Weber using namespace llvm; 18*184ca395SNico Weber 19*184ca395SNico Weber LLT::LLT(MVT VT) { 20*184ca395SNico Weber if (VT.isVector()) { 21*184ca395SNico Weber bool asVector = VT.getVectorMinNumElements() > 1 || VT.isScalableVector(); 22*184ca395SNico Weber init(/*IsPointer=*/false, asVector, /*IsScalar=*/!asVector, 23*184ca395SNico Weber VT.getVectorElementCount(), VT.getVectorElementType().getSizeInBits(), 24*184ca395SNico Weber /*AddressSpace=*/0); 25*184ca395SNico Weber } else if (VT.isValid() && !VT.isScalableTargetExtVT()) { 26*184ca395SNico Weber // Aggregates are no different from real scalars as far as GlobalISel is 27*184ca395SNico Weber // concerned. 28*184ca395SNico Weber init(/*IsPointer=*/false, /*IsVector=*/false, /*IsScalar=*/true, 29*184ca395SNico Weber ElementCount::getFixed(0), VT.getSizeInBits(), /*AddressSpace=*/0); 30*184ca395SNico Weber } else { 31*184ca395SNico Weber IsScalar = false; 32*184ca395SNico Weber IsPointer = false; 33*184ca395SNico Weber IsVector = false; 34*184ca395SNico Weber RawData = 0; 35*184ca395SNico Weber } 36*184ca395SNico Weber } 37*184ca395SNico Weber 38*184ca395SNico Weber void LLT::print(raw_ostream &OS) const { 39*184ca395SNico Weber if (isVector()) { 40*184ca395SNico Weber OS << "<"; 41*184ca395SNico Weber OS << getElementCount() << " x " << getElementType() << ">"; 42*184ca395SNico Weber } else if (isPointer()) 43*184ca395SNico Weber OS << "p" << getAddressSpace(); 44*184ca395SNico Weber else if (isValid()) { 45*184ca395SNico Weber assert(isScalar() && "unexpected type"); 46*184ca395SNico Weber OS << "s" << getScalarSizeInBits(); 47*184ca395SNico Weber } else 48*184ca395SNico Weber OS << "LLT_invalid"; 49*184ca395SNico Weber } 50*184ca395SNico Weber 51*184ca395SNico Weber #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 52*184ca395SNico Weber LLVM_DUMP_METHOD void LLT::dump() const { 53*184ca395SNico Weber print(dbgs()); 54*184ca395SNico Weber dbgs() << '\n'; 55*184ca395SNico Weber } 56*184ca395SNico Weber #endif 57*184ca395SNico Weber 58*184ca395SNico Weber const constexpr LLT::BitFieldInfo LLT::ScalarSizeFieldInfo; 59*184ca395SNico Weber const constexpr LLT::BitFieldInfo LLT::PointerSizeFieldInfo; 60*184ca395SNico Weber const constexpr LLT::BitFieldInfo LLT::PointerAddressSpaceFieldInfo; 61*184ca395SNico Weber const constexpr LLT::BitFieldInfo LLT::VectorElementsFieldInfo; 62*184ca395SNico Weber const constexpr LLT::BitFieldInfo LLT::VectorScalableFieldInfo; 63