//===-- 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