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