1//===----------------------------------------------------------------------===//
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#include "NVPTXSelectionDAGInfo.h"
10
11#define GET_SDNODE_DESC
12#include "NVPTXGenSDNodeInfo.inc"
13
14using namespace llvm;
15
16NVPTXSelectionDAGInfo::NVPTXSelectionDAGInfo()
17 : SelectionDAGGenTargetInfo(NVPTXGenSDNodeInfo) {}
18
19NVPTXSelectionDAGInfo::~NVPTXSelectionDAGInfo() = default;
20
21const char *NVPTXSelectionDAGInfo::getTargetNodeName(unsigned Opcode) const {
22#define MAKE_CASE(V) \
23 case V: \
24 return #V;
25
26 // These nodes don't have corresponding entries in *.td files yet.
27 switch (static_cast<NVPTXISD::NodeType>(Opcode)) {
28 MAKE_CASE(NVPTXISD::ATOMIC_CMP_SWAP_B128)
29 MAKE_CASE(NVPTXISD::ATOMIC_SWAP_B128)
30 MAKE_CASE(NVPTXISD::LoadV2)
31 MAKE_CASE(NVPTXISD::LoadV4)
32 MAKE_CASE(NVPTXISD::LoadV8)
33 MAKE_CASE(NVPTXISD::MLoad)
34 MAKE_CASE(NVPTXISD::LDUV2)
35 MAKE_CASE(NVPTXISD::LDUV4)
36 MAKE_CASE(NVPTXISD::StoreV2)
37 MAKE_CASE(NVPTXISD::StoreV4)
38 MAKE_CASE(NVPTXISD::StoreV8)
39 MAKE_CASE(NVPTXISD::SETP_F16X2)
40 MAKE_CASE(NVPTXISD::SETP_BF16X2)
41 MAKE_CASE(NVPTXISD::UNPACK_VECTOR)
42 }
43#undef MAKE_CASE
44
45 return SelectionDAGGenTargetInfo::getTargetNodeName(Opcode);
46}
47
48bool NVPTXSelectionDAGInfo::isTargetMemoryOpcode(unsigned Opcode) const {
49 // These nodes don't have corresponding entries in *.td files.
50 if (Opcode >= NVPTXISD::FIRST_MEMORY_OPCODE &&
51 Opcode <= NVPTXISD::LAST_MEMORY_OPCODE)
52 return true;
53
54 return SelectionDAGGenTargetInfo::isTargetMemoryOpcode(Opcode);
55}
56
57void NVPTXSelectionDAGInfo::verifyTargetNode(const SelectionDAG &DAG,
58 const SDNode *N) const {
59 switch (N->getOpcode()) {
60 default:
61 break;
62 case NVPTXISD::ProxyReg:
63 // invalid number of results; expected 2, got 1
64 return;
65 }
66
67 return SelectionDAGGenTargetInfo::verifyTargetNode(DAG, N);
68}
69