//===----------- VVPInstrPatternsVec.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 describes how VVP_* SDNodes are lowered to machine instructions. // //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// // // VVP SDNode definitions. // //===----------------------------------------------------------------------===// include "VVPInstrInfo.td" multiclass VectorBinaryArith< SDPatternOperator OpNode, ValueType ScalarVT, ValueType DataVT, ValueType MaskVT, string OpBaseName, SDPatternOperator ImmOp, SDNodeXForm ImmCast> { // No mask. def : Pat<(OpNode (any_broadcast ScalarVT:$sx), DataVT:$vy, (MaskVT true_mask), i32:$avl), (!cast(OpBaseName#"rvl") ScalarVT:$sx, $vy, $avl)>; def : Pat<(OpNode DataVT:$vx, DataVT:$vy, (MaskVT true_mask), i32:$avl), (!cast(OpBaseName#"vvl") $vx, $vy, $avl)>; // Mask. def : Pat<(OpNode (any_broadcast ScalarVT:$sx), DataVT:$vy, MaskVT:$mask, i32:$avl), (!cast(OpBaseName#"rvml") ScalarVT:$sx, $vy, $mask, $avl)>; def : Pat<(OpNode DataVT:$vx, DataVT:$vy, MaskVT:$mask, i32:$avl), (!cast(OpBaseName#"vvml") $vx, $vy, $mask, $avl)>; // TODO We do not specify patterns for the immediate variants here. There // will be an immediate folding pass that takes care of switching to the // immediate variant where applicable. // TODO Fold vvp_select into passthru. } // Expand both 64bit and 32 bit variant (256 elements) multiclass VectorBinaryArith_ShortLong< SDPatternOperator OpNode, ValueType LongScalarVT, ValueType LongDataVT, string LongOpBaseName, ValueType ShortScalarVT, ValueType ShortDataVT, string ShortOpBaseName> { defm : VectorBinaryArith; defm : VectorBinaryArith; } defm : VectorBinaryArith_ShortLong; defm : VectorBinaryArith_ShortLong;