From b60736ec1405bb0a8dd40989f67ef4c93da068ab Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Tue, 16 Feb 2021 21:13:02 +0100 Subject: Vendor import of llvm-project main 8e464dd76bef, the last commit before the upstream release/12.x branch was created. --- llvm/lib/Target/VE/VEInstrPatternsVec.td | 91 ++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 llvm/lib/Target/VE/VEInstrPatternsVec.td (limited to 'llvm/lib/Target/VE/VEInstrPatternsVec.td') diff --git a/llvm/lib/Target/VE/VEInstrPatternsVec.td b/llvm/lib/Target/VE/VEInstrPatternsVec.td new file mode 100644 index 000000000000..0084876f9f1b --- /dev/null +++ b/llvm/lib/Target/VE/VEInstrPatternsVec.td @@ -0,0 +1,91 @@ +//===-- 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; -- cgit v1.2.3