//===-------------- VVPInstrInfo.td - VVP_* SDNode patterns ---------------===// // // 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 the VE Vector Predicated SDNodes (VVP SDNodes). VVP // SDNodes are an intermediate isel layer between the vector SDNodes emitted by // LLVM and the actual VE vector instructions. For example: // // ADD(x,y) --> VVP_ADD(x,y,mask,evl) --> VADDSWSXrvml(x,y,mask,evl) // ^ ^ ^ // The standard The VVP layer SDNode. The VE vector instruction. // SDNode. // // TODO explain how VVP nodes relate to VP SDNodes once VP ISel is uptream. //===----------------------------------------------------------------------===// // Binary Operators { // BinaryOp(x,y,mask,vl) def SDTIntBinOpVVP : SDTypeProfile<1, 4, [ // vp_add, vp_and, etc. SDTCisSameAs<0, 1>, SDTCisSameAs<0, 2>, SDTCisInt<0>, SDTCisSameNumEltsAs<0, 3>, IsVLVT<4> ]>; // Binary operator commutative pattern. class vvp_commutative : PatFrags< (ops node:$lhs, node:$rhs, node:$mask, node:$vlen), [(RootOp node:$lhs, node:$rhs, node:$mask, node:$vlen), (RootOp node:$rhs, node:$lhs, node:$mask, node:$vlen)]>; // VVP node definitions. def vvp_add : SDNode<"VEISD::VVP_ADD", SDTIntBinOpVVP>; def c_vvp_add : vvp_commutative; def vvp_and : SDNode<"VEISD::VVP_AND", SDTIntBinOpVVP>; def c_vvp_and : vvp_commutative; // } Binary Operators