92 lines · plain
1//==- HexagonPatternsV65.td -------------------------------*- tablegen -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9multiclass vgathermh<RegisterClass RC> {10 let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1,11 mayStore = 1, addrMode = BaseImmOffset, accessSize = HalfWordAccess in12 def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),13 (ins IntRegs:$_dst_, s4_0Imm:$Ii,14 IntRegs:$Rt, ModRegs:$Mu, RC:$Vv),15 ".error \"should not emit\" ",16 []>;17}18 19multiclass vgathermw<RegisterClass RC> {20 let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1,21 mayStore = 1, addrMode = BaseImmOffset, accessSize = WordAccess in22 def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),23 (ins IntRegs:$_dst_, s4_0Imm:$Ii,24 IntRegs:$Rt, ModRegs:$Mu, RC:$Vv),25 ".error \"should not emit\" ",26 []>;27}28 29multiclass vgathermhw<RegisterClass RC> {30 let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1,31 mayStore = 1, addrMode = BaseImmOffset, accessSize = HalfWordAccess in32 def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),33 (ins IntRegs:$_dst_, s4_0Imm:$Ii,34 IntRegs:$Rt, ModRegs:$Mu, RC:$Vv),35 ".error \"should not emit\" ",36 []>;37}38 39defm V6_vgathermh_pseudo : vgathermh<HvxVR>;40defm V6_vgathermw_pseudo : vgathermw<HvxVR>;41defm V6_vgathermhw_pseudo : vgathermhw<HvxWR>;42 43 44multiclass vgather_scatter_mh<RegisterClass RC> {45 let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1,46 mayStore = 1, addrMode = BaseImmOffset, accessSize = HalfWordAccess in47 def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),48 (ins IntRegs:$_dst_, s4_0Imm:$Ii,49 IntRegs:$Rt, ModRegs:$Mu, RC:$Vv),50 ".error \"should not emit\" ",51 []>;52}53 54defm V6_vgather_vscatter_mh_pseudo : vgather_scatter_mh<HvxVR>;55 56multiclass vgathermhq<RegisterClass RC1, RegisterClass RC2> {57 let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1,58 mayStore = 1, addrMode = BaseImmOffset, accessSize = HalfWordAccess in59 def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),60 (ins IntRegs:$_dst_, s4_0Imm:$Ii,61 RC2:$Vq, IntRegs:$Rt, ModRegs:$Mu,62 RC1:$Vv),63 ".error \"should not emit\" ",64 []>;65}66 67multiclass vgathermwq<RegisterClass RC1, RegisterClass RC2> {68 let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1,69 mayStore = 1, addrMode = BaseImmOffset, accessSize = WordAccess in70 def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),71 (ins IntRegs:$_dst_, s4_0Imm:$Ii,72 RC2:$Vq, IntRegs:$Rt, ModRegs:$Mu,73 RC1:$Vv),74 ".error \"should not emit\" ",75 []>;76}77 78multiclass vgathermhwq<RegisterClass RC1, RegisterClass RC2> {79 let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1,80 mayStore = 1, addrMode = BaseImmOffset, accessSize = HalfWordAccess in81 def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),82 (ins IntRegs:$_dst_, s4_0Imm:$Ii,83 RC2:$Vq, IntRegs:$Rt, ModRegs:$Mu,84 RC1:$Vv),85 ".error \"should not emit\" ",86 []>;87}88 89defm V6_vgathermhq_pseudo : vgathermhq<HvxVR, HvxQR>;90defm V6_vgathermwq_pseudo : vgathermwq<HvxVR, HvxQR>;91defm V6_vgathermhwq_pseudo : vgathermhwq<HvxWR, HvxQR>;92