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