| //===----------------------------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_LIB_TARGET_NVPTX_NVPTXSELECTIONDAGINFO_H |
| #define LLVM_LIB_TARGET_NVPTX_NVPTXSELECTIONDAGINFO_H |
| |
| #include "llvm/CodeGen/SelectionDAGTargetInfo.h" |
| |
| #define GET_SDNODE_ENUM |
| #include "NVPTXGenSDNodeInfo.inc" |
| |
| namespace llvm { |
| namespace NVPTXISD { |
| |
| enum NodeType : unsigned { |
| SETP_F16X2 = GENERATED_OPCODE_END, |
| SETP_BF16X2, |
| UNPACK_VECTOR, |
| |
| FIRST_MEMORY_OPCODE, |
| |
| /// These nodes are used to lower atomic instructions with i128 type. They are |
| /// similar to the generic nodes, but the input and output values are split |
| /// into two 64-bit values. |
| /// ValLo, ValHi, OUTCHAIN = ATOMIC_CMP_SWAP_B128(INCHAIN, ptr, cmpLo, cmpHi, |
| /// swapLo, swapHi) |
| /// ValLo, ValHi, OUTCHAIN = ATOMIC_SWAP_B128(INCHAIN, ptr, amtLo, amtHi) |
| ATOMIC_CMP_SWAP_B128 = FIRST_MEMORY_OPCODE, |
| ATOMIC_SWAP_B128, |
| |
| LoadV2, |
| LoadV4, |
| LoadV8, |
| MLoad, |
| LDUV2, // LDU.v2 |
| LDUV4, // LDU.v4 |
| StoreV2, |
| StoreV4, |
| StoreV8, |
| LAST_MEMORY_OPCODE = StoreV8, |
| }; |
| |
| } // namespace NVPTXISD |
| |
| class NVPTXSelectionDAGInfo : public SelectionDAGGenTargetInfo { |
| public: |
| NVPTXSelectionDAGInfo(); |
| |
| ~NVPTXSelectionDAGInfo() override; |
| |
| const char *getTargetNodeName(unsigned Opcode) const override; |
| |
| bool isTargetMemoryOpcode(unsigned Opcode) const override; |
| |
| void verifyTargetNode(const SelectionDAG &DAG, |
| const SDNode *N) const override; |
| }; |
| |
| } // namespace llvm |
| |
| #endif // LLVM_LIB_TARGET_NVPTX_NVPTXSELECTIONDAGINFO_H |