Home | History | Annotate | Line # | Download | only in Support
      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"
     16 using namespace llvm;
     17 
     18 LLT::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().isNonZero() && "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 
     36 void 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 
     48 const constexpr LLT::BitFieldInfo LLT::ScalarSizeFieldInfo;
     49 const constexpr LLT::BitFieldInfo LLT::PointerSizeFieldInfo;
     50 const constexpr LLT::BitFieldInfo LLT::PointerAddressSpaceFieldInfo;
     51 const constexpr LLT::BitFieldInfo LLT::VectorElementsFieldInfo;
     52 const constexpr LLT::BitFieldInfo LLT::VectorSizeFieldInfo;
     53 const constexpr LLT::BitFieldInfo LLT::PointerVectorElementsFieldInfo;
     54 const constexpr LLT::BitFieldInfo LLT::PointerVectorSizeFieldInfo;
     55 const constexpr LLT::BitFieldInfo LLT::PointerVectorAddressSpaceFieldInfo;
     56