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