llvm-project

Форк
0
/
LowLevelType.cpp 
67 строк · 2.5 Кб
1
//===-- llvm/CodeGenTypes/LowLevelType.cpp
2
//---------------------------------===//
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-exception
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/CodeGenTypes/LowLevelType.h"
16
#include "llvm/Support/raw_ostream.h"
17
using namespace llvm;
18

19
LLT::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 is
27
    // 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

38
void 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
  } else
48
    OS << "LLT_invalid";
49
}
50

51
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
52
LLVM_DUMP_METHOD void LLT::dump() const {
53
  print(dbgs());
54
  dbgs() << '\n';
55
}
56
#endif
57

58
const constexpr LLT::BitFieldInfo LLT::ScalarSizeFieldInfo;
59
const constexpr LLT::BitFieldInfo LLT::PointerSizeFieldInfo;
60
const constexpr LLT::BitFieldInfo LLT::PointerAddressSpaceFieldInfo;
61
const constexpr LLT::BitFieldInfo LLT::VectorElementsFieldInfo;
62
const constexpr LLT::BitFieldInfo LLT::VectorScalableFieldInfo;
63
const constexpr LLT::BitFieldInfo LLT::VectorSizeFieldInfo;
64
const constexpr LLT::BitFieldInfo LLT::PointerVectorElementsFieldInfo;
65
const constexpr LLT::BitFieldInfo LLT::PointerVectorScalableFieldInfo;
66
const constexpr LLT::BitFieldInfo LLT::PointerVectorSizeFieldInfo;
67
const constexpr LLT::BitFieldInfo LLT::PointerVectorAddressSpaceFieldInfo;
68

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.