136 lines
4.4 KiB
Modula-2
136 lines
4.4 KiB
Modula-2
//===-- VVPNodes.def - Lists & properties of VE Vector Predication Nodes --===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines all VVP_* SDNodes and their properties
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
/// HANDLE_VP_TO_VVP(VPOPC, VVPOPC)
|
|
/// \p VPOPC is the VP_* SDNode opcode.
|
|
/// \p VVPOPC is the VVP_* SDNode opcode.
|
|
#ifndef HANDLE_VP_TO_VVP
|
|
#define HANDLE_VP_TO_VVP(VPOPC, VVPOPC)
|
|
#endif
|
|
|
|
/// ADD_VVP_OP(VVPNAME,SDNAME)
|
|
/// \p VVPName is a VVP SDNode operator.
|
|
/// \p SDNAME is the generic SD opcode corresponding to \p VVPName.
|
|
#ifndef ADD_VVP_OP
|
|
#define ADD_VVP_OP(X, Y)
|
|
#endif
|
|
|
|
/// ADD_UNARY_VVP_OP(VVPNAME,SDNAME)
|
|
/// \p VVPName is a VVP Unary operator.
|
|
/// \p SDNAME is the generic SD opcode corresponding to \p VVPName.
|
|
#ifndef ADD_UNARY_VVP_OP
|
|
#define ADD_UNARY_VVP_OP(VVPNAME,SDNAME) \
|
|
ADD_VVP_OP(VVPNAME,SDNAME)
|
|
#endif
|
|
|
|
/// ADD_BINARY_VVP_OP(VVPNAME,SDNAME)
|
|
/// \p VVPName is a VVP Binary operator.
|
|
/// \p SDNAME is the generic SD opcode corresponding to \p VVPName.
|
|
#ifndef ADD_BINARY_VVP_OP
|
|
#define ADD_BINARY_VVP_OP(VVPNAME,VPNAME,SDNAME) \
|
|
ADD_VVP_OP(VVPNAME,SDNAME) \
|
|
HANDLE_VP_TO_VVP(VPNAME, VVPNAME)
|
|
#endif
|
|
|
|
/// ADD_TERNARY_VVP_OP(VVPNAME,SDNAME)
|
|
/// \p VVPName is a VVP Ternary operator.
|
|
/// \p SDNAME is the generic SD opcode corresponding to \p VVPName.
|
|
#ifndef ADD_TERNARY_VVP_OP
|
|
#define ADD_TERNARY_VVP_OP(VVPNAME,SDNAME) \
|
|
ADD_VVP_OP(VVPNAME,SDNAME)
|
|
#endif
|
|
|
|
#ifndef ADD_BINARY_VVP_OP_COMPACT
|
|
#define ADD_BINARY_VVP_OP_COMPACT(NAME) \
|
|
ADD_BINARY_VVP_OP(VVP_##NAME,VP_##NAME,NAME)
|
|
#endif
|
|
|
|
/// REGISTER_PACKED(OPC)
|
|
/// \p OPC The VVP opcode of the operation.
|
|
#ifndef REGISTER_PACKED
|
|
#define REGISTER_PACKED(OPC)
|
|
#endif
|
|
|
|
/// ADD_REDUCE_VVP_OP(OPC)
|
|
/// \p OPC The VVP opcode of the operation.
|
|
/// \p SDNAME The standard opcode of the operation.
|
|
#ifndef ADD_REDUCE_VVP_OP
|
|
#define ADD_REDUCE_VVP_OP(OPC, SDNAME) ADD_VVP_OP(OPC, SDNAME)
|
|
#endif
|
|
|
|
// Scalar standard ISD to perform this reduction.
|
|
#ifndef HANDLE_VVP_REDUCE_TO_SCALAR
|
|
#define HANDLE_VVP_REDUCE_TO_SCALAR(VVP_RED_ISD, REDUCE_ISD)
|
|
#endif
|
|
|
|
/// Reductions.
|
|
#define HELPER_REDUCTION(OPC, SCALAR_OPC) \
|
|
ADD_REDUCE_VVP_OP(VVP_REDUCE_##OPC,VECREDUCE_##OPC) \
|
|
HANDLE_VP_TO_VVP(VP_REDUCE_##OPC, VVP_REDUCE_##OPC) \
|
|
HANDLE_VVP_REDUCE_TO_SCALAR(VVP_REDUCE_##OPC, SCALAR_OPC)
|
|
|
|
HELPER_REDUCTION(ADD, ADD)
|
|
HELPER_REDUCTION(AND, AND)
|
|
HELPER_REDUCTION(OR, OR)
|
|
HELPER_REDUCTION(XOR, XOR)
|
|
HELPER_REDUCTION(SMAX, SMAX)
|
|
|
|
#undef HELPER_REDUCTION
|
|
|
|
ADD_VVP_OP(VVP_LOAD,LOAD) HANDLE_VP_TO_VVP(VP_LOAD, VVP_LOAD) REGISTER_PACKED(VVP_LOAD)
|
|
ADD_VVP_OP(VVP_STORE,STORE) HANDLE_VP_TO_VVP(VP_STORE, VVP_STORE) REGISTER_PACKED(VVP_STORE)
|
|
|
|
ADD_VVP_OP(VVP_GATHER, MGATHER) HANDLE_VP_TO_VVP(VP_GATHER, VVP_GATHER)
|
|
ADD_VVP_OP(VVP_SCATTER, MSCATTER) HANDLE_VP_TO_VVP(VP_SCATTER, VVP_SCATTER)
|
|
|
|
// Integer arithmetic.
|
|
ADD_BINARY_VVP_OP_COMPACT(ADD) REGISTER_PACKED(VVP_ADD)
|
|
ADD_BINARY_VVP_OP_COMPACT(SUB) REGISTER_PACKED(VVP_SUB)
|
|
ADD_BINARY_VVP_OP_COMPACT(MUL)
|
|
ADD_BINARY_VVP_OP_COMPACT(UDIV)
|
|
ADD_BINARY_VVP_OP_COMPACT(SDIV)
|
|
|
|
ADD_BINARY_VVP_OP(VVP_SRA,VP_ASHR,SRA) REGISTER_PACKED(VVP_SRA)
|
|
ADD_BINARY_VVP_OP(VVP_SRL,VP_LSHR,SRL) REGISTER_PACKED(VVP_SRL)
|
|
ADD_BINARY_VVP_OP_COMPACT(SHL) REGISTER_PACKED(VVP_SHL)
|
|
|
|
ADD_BINARY_VVP_OP_COMPACT(AND) REGISTER_PACKED(VVP_AND)
|
|
ADD_BINARY_VVP_OP_COMPACT(OR) REGISTER_PACKED(VVP_OR)
|
|
ADD_BINARY_VVP_OP_COMPACT(XOR) REGISTER_PACKED(VVP_XOR)
|
|
|
|
// FP arithmetic.
|
|
ADD_UNARY_VVP_OP(VVP_FNEG, FNEG) HANDLE_VP_TO_VVP(VP_FNEG, VVP_FNEG) REGISTER_PACKED(VVP_FNEG)
|
|
ADD_BINARY_VVP_OP_COMPACT(FADD) REGISTER_PACKED(VVP_FADD)
|
|
ADD_BINARY_VVP_OP_COMPACT(FSUB) REGISTER_PACKED(VVP_FSUB)
|
|
ADD_BINARY_VVP_OP_COMPACT(FMUL) REGISTER_PACKED(VVP_FMUL)
|
|
ADD_BINARY_VVP_OP_COMPACT(FDIV)
|
|
|
|
ADD_TERNARY_VVP_OP(VVP_FFMA,FMA) HANDLE_VP_TO_VVP(VP_FMA, VVP_FFMA) REGISTER_PACKED(VVP_FFMA)
|
|
|
|
ADD_VVP_OP(VVP_SETCC, SETCC)
|
|
|
|
// Shuffles.
|
|
ADD_VVP_OP(VVP_SELECT,VSELECT) REGISTER_PACKED(VVP_SELECT)
|
|
HANDLE_VP_TO_VVP(VP_SELECT, VVP_SELECT)
|
|
HANDLE_VP_TO_VVP(VP_MERGE, VVP_SELECT)
|
|
|
|
|
|
#undef ADD_BINARY_VVP_OP
|
|
#undef ADD_TERNARY_VVP_OP
|
|
#undef ADD_UNARY_VVP_OP
|
|
#undef ADD_BINARY_VVP_OP_COMPACT
|
|
#undef ADD_REDUCE_VVP_OP
|
|
#undef ADD_VVP_OP
|
|
#undef HANDLE_VP_TO_VVP
|
|
#undef HANDLE_VVP_REDUCE_TO_SCALAR
|
|
#undef REGISTER_PACKED
|