//===-- VEInstrPatternsVec.td - VEC_-type SDNodes and isel for VE Target --===// // // 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 the VEC_* prefixed intermediate SDNodes and their // isel patterns. // //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// // Instruction format superclass //===----------------------------------------------------------------------===// multiclass vbrd_elem32 { // VBRDil def : Pat<(v32 (vec_broadcast (s32 ImmOp:$sy), i32:$vl)), (VBRDil (ImmCast $sy), i32:$vl)>; // VBRDrl def : Pat<(v32 (vec_broadcast s32:$sy, i32:$vl)), (VBRDrl (SuperRegCast $sy), i32:$vl)>; } multiclass vbrd_elem64 { // VBRDil def : Pat<(v64 (vec_broadcast (s64 ImmOp:$sy), i32:$vl)), (VBRDil (ImmCast $sy), i32:$vl)>; // VBRDrl def : Pat<(v64 (vec_broadcast s64:$sy, i32:$vl)), (VBRDrl s64:$sy, i32:$vl)>; } multiclass extract_insert_elem32 { // LVSvi def: Pat<(s32 (extractelt v32:$vec, uimm7:$idx)), (SubRegCast (LVSvi v32:$vec, (ULO7 $idx)))>; // LVSvr def: Pat<(s32 (extractelt v32:$vec, i64:$idx)), (SubRegCast (LVSvr v32:$vec, $idx))>; // LSVir def: Pat<(v32 (insertelt v32:$vec, s32:$val, uimm7:$idx)), (LSVir_v (ULO7 $idx), (SuperRegCast $val), $vec)>; // LSVrr def: Pat<(v32 (insertelt v32:$vec, s32:$val, i64:$idx)), (LSVrr_v $idx, (SuperRegCast $val), $vec)>; } multiclass extract_insert_elem64 { // LVSvi def: Pat<(s64 (extractelt v64:$vec, uimm7:$idx)), (LVSvi v64:$vec, (ULO7 $idx))>; // LVSvr def: Pat<(s64 (extractelt v64:$vec, i64:$idx)), (LVSvr v64:$vec, $idx)>; // LSVir def: Pat<(v64 (insertelt v64:$vec, s64:$val, uimm7:$idx)), (LSVir_v (ULO7 $idx), $val, $vec)>; // LSVrr def: Pat<(v64 (insertelt v64:$vec, s64:$val, i64:$idx)), (LSVrr_v $idx, $val, $vec)>; } multiclass patterns_elem32 { defm : vbrd_elem32; defm : extract_insert_elem32; } multiclass patterns_elem64 { defm : vbrd_elem64; defm : extract_insert_elem64; } defm : patterns_elem32; defm : patterns_elem32; defm : patterns_elem64; defm : patterns_elem64;