xref: /freebsd/contrib/llvm-project/llvm/lib/Target/VE/VVPNodes.def (revision 04eeddc0aa8e0a417a16eaf9d7d095207f4a8623)
1e8d8bef9SDimitry Andric//===-- VVPNodes.def - Lists & properties of VE Vector Predication Nodes --===//
2e8d8bef9SDimitry Andric//
3e8d8bef9SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e8d8bef9SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
5e8d8bef9SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e8d8bef9SDimitry Andric//
7e8d8bef9SDimitry Andric//===----------------------------------------------------------------------===//
8e8d8bef9SDimitry Andric//
9e8d8bef9SDimitry Andric// This file defines all VVP_* SDNodes and their properties
10e8d8bef9SDimitry Andric//
11e8d8bef9SDimitry Andric//===----------------------------------------------------------------------===//
12e8d8bef9SDimitry Andric
13e8d8bef9SDimitry Andric/// HANDLE_VP_TO_VVP(VPOPC, VVPOPC)
14e8d8bef9SDimitry Andric/// \p  VPOPC is the VP_* SDNode opcode.
15e8d8bef9SDimitry Andric/// \p  VVPOPC is the VVP_* SDNode opcode.
16e8d8bef9SDimitry Andric#ifndef HANDLE_VP_TO_VVP
17e8d8bef9SDimitry Andric#define HANDLE_VP_TO_VVP(VPOPC, VVPOPC)
18e8d8bef9SDimitry Andric#endif
19e8d8bef9SDimitry Andric
20e8d8bef9SDimitry Andric/// ADD_VVP_OP(VVPNAME,SDNAME)
21e8d8bef9SDimitry Andric/// \p VVPName is a VVP SDNode operator.
22e8d8bef9SDimitry Andric/// \p SDNAME is the generic SD opcode corresponding to \p VVPName.
23e8d8bef9SDimitry Andric#ifndef ADD_VVP_OP
24e8d8bef9SDimitry Andric#define ADD_VVP_OP(X, Y)
25e8d8bef9SDimitry Andric#endif
26e8d8bef9SDimitry Andric
27e8d8bef9SDimitry Andric/// ADD_BINARY_VVP_OP(VVPNAME,SDNAME)
28e8d8bef9SDimitry Andric/// \p VVPName is a VVP Binary operator.
29e8d8bef9SDimitry Andric/// \p SDNAME is the generic SD opcode corresponding to \p VVPName.
30e8d8bef9SDimitry Andric#ifndef ADD_BINARY_VVP_OP
310eae32dcSDimitry Andric#define ADD_BINARY_VVP_OP(VVPNAME,VPNAME,SDNAME) \
320eae32dcSDimitry Andric            ADD_VVP_OP(VVPNAME,SDNAME) \
330eae32dcSDimitry Andric            HANDLE_VP_TO_VVP(VPNAME, VVPNAME)
340eae32dcSDimitry Andric#endif
350eae32dcSDimitry Andric
360eae32dcSDimitry Andric#ifndef ADD_BINARY_VVP_OP_COMPACT
370eae32dcSDimitry Andric#define ADD_BINARY_VVP_OP_COMPACT(NAME) \
380eae32dcSDimitry Andric    ADD_BINARY_VVP_OP(VVP_##NAME,VP_##NAME,NAME)
39e8d8bef9SDimitry Andric#endif
40e8d8bef9SDimitry Andric
41e8d8bef9SDimitry Andric// Integer arithmetic.
420eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(ADD)
430eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(SUB)
440eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(MUL)
450eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(UDIV)
460eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(SDIV)
47e8d8bef9SDimitry Andric
480eae32dcSDimitry AndricADD_BINARY_VVP_OP(VVP_SRA,VP_ASHR,SRA)
490eae32dcSDimitry AndricADD_BINARY_VVP_OP(VVP_SRL,VP_LSHR,SRL)
500eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(SHL)
51e8d8bef9SDimitry Andric
520eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(AND)
530eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(OR)
540eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(XOR)
550eae32dcSDimitry Andric
560eae32dcSDimitry Andric// FP arithmetic.
570eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(FADD)
580eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(FSUB)
590eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(FMUL)
600eae32dcSDimitry AndricADD_BINARY_VVP_OP_COMPACT(FDIV)
610eae32dcSDimitry Andric
62*04eeddc0SDimitry Andric// Shuffles.
63*04eeddc0SDimitry AndricADD_VVP_OP(VVP_SELECT,VSELECT)
64*04eeddc0SDimitry AndricHANDLE_VP_TO_VVP(VP_SELECT, VVP_SELECT)
65*04eeddc0SDimitry AndricHANDLE_VP_TO_VVP(VP_MERGE, VVP_SELECT)
66*04eeddc0SDimitry Andric
67e8d8bef9SDimitry Andric#undef ADD_BINARY_VVP_OP
680eae32dcSDimitry Andric#undef ADD_BINARY_VVP_OP_COMPACT
69e8d8bef9SDimitry Andric#undef ADD_VVP_OP
700eae32dcSDimitry Andric#undef HANDLE_VP_TO_VVP
71