| //===-- llvm/Support/LowLevelType.cpp -------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| /// \file This file implements the more header-heavy bits of the LLT class to |
| /// avoid polluting users' namespaces. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/Support/LowLevelTypeImpl.h" |
| #include "llvm/Support/raw_ostream.h" |
| using namespace llvm; |
| |
| LLT::LLT(MVT VT) { |
| if (VT.isVector()) { |
| bool asVector = VT.getVectorNumElements() > 1; |
| init(/*IsPointer=*/false, asVector, /*IsScalar=*/!asVector, |
| VT.getVectorElementCount(), VT.getVectorElementType().getSizeInBits(), |
| /*AddressSpace=*/0); |
| } else if (VT.isValid()) { |
| // Aggregates are no different from real scalars as far as GlobalISel is |
| // concerned. |
| init(/*IsPointer=*/false, /*IsVector=*/false, /*IsScalar=*/true, |
| ElementCount::getFixed(0), VT.getSizeInBits(), /*AddressSpace=*/0); |
| } else { |
| IsScalar = false; |
| IsPointer = false; |
| IsVector = false; |
| RawData = 0; |
| } |
| } |
| |
| void LLT::print(raw_ostream &OS) const { |
| if (isVector()) { |
| OS << "<"; |
| OS << getElementCount() << " x " << getElementType() << ">"; |
| } else if (isPointer()) |
| OS << "p" << getAddressSpace(); |
| else if (isValid()) { |
| assert(isScalar() && "unexpected type"); |
| OS << "s" << getScalarSizeInBits(); |
| } else |
| OS << "LLT_invalid"; |
| } |
| |
| const constexpr LLT::BitFieldInfo LLT::ScalarSizeFieldInfo; |
| const constexpr LLT::BitFieldInfo LLT::PointerSizeFieldInfo; |
| const constexpr LLT::BitFieldInfo LLT::PointerAddressSpaceFieldInfo; |
| const constexpr LLT::BitFieldInfo LLT::VectorElementsFieldInfo; |
| const constexpr LLT::BitFieldInfo LLT::VectorScalableFieldInfo; |
| const constexpr LLT::BitFieldInfo LLT::VectorSizeFieldInfo; |
| const constexpr LLT::BitFieldInfo LLT::PointerVectorElementsFieldInfo; |
| const constexpr LLT::BitFieldInfo LLT::PointerVectorScalableFieldInfo; |
| const constexpr LLT::BitFieldInfo LLT::PointerVectorSizeFieldInfo; |
| const constexpr LLT::BitFieldInfo LLT::PointerVectorAddressSpaceFieldInfo; |