Home | History | Annotate | Download | only in Hexagon
      1 //==- HexagonPatternsV65.td -------------------------------*- tablegen -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 multiclass vgathermh<RegisterClass RC> {
     11   let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1, mayStore = 1 in
     12   def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),
     13                            (ins  IntRegs:$_dst_, IntRegs:$Rt,
     14                                  ModRegs:$Mu, RC:$Vv),
     15                            ".error \"should not emit\" ",
     16                            []>;
     17 }
     18 
     19 multiclass vgathermw<RegisterClass RC> {
     20   let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1, mayStore = 1 in
     21   def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),
     22                            (ins IntRegs:$_dst_, IntRegs:$Rt,
     23                                 ModRegs:$Mu, RC:$Vv),
     24                            ".error \"should not emit\" ",
     25                            []>;
     26 }
     27 
     28 multiclass vgathermhw<RegisterClass RC> {
     29   let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1, mayStore = 1 in
     30   def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),
     31                            (ins IntRegs:$_dst_, IntRegs:$Rt,
     32                                 ModRegs:$Mu, RC:$Vv),
     33                            ".error \"should not emit\" ",
     34                            []>;
     35 }
     36 
     37 defm V6_vgathermh_pseudo  : vgathermh<HvxVR>;
     38 defm V6_vgathermw_pseudo  : vgathermw<HvxVR>;
     39 defm V6_vgathermhw_pseudo  : vgathermhw<HvxWR>;
     40 
     41 multiclass vgathermhq<RegisterClass RC1, RegisterClass RC2> {
     42   let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1, mayStore = 1 in
     43   def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),
     44                            (ins  IntRegs:$_dst_, RC2:$Vq, IntRegs:$Rt,
     45                                  ModRegs:$Mu, RC1:$Vv),
     46                            ".error \"should not emit\" ",
     47                            []>;
     48 }
     49 
     50 multiclass vgathermwq<RegisterClass RC1, RegisterClass RC2> {
     51   let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1, mayStore = 1 in
     52   def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),
     53                            (ins IntRegs:$_dst_, RC2:$Vq, IntRegs:$Rt,
     54                                 ModRegs:$Mu, RC1:$Vv),
     55                            ".error \"should not emit\" ",
     56                            []>;
     57 }
     58 
     59 multiclass vgathermhwq<RegisterClass RC1, RegisterClass RC2> {
     60   let isCodeGenOnly = 1, isPseudo = 1, mayLoad = 1, mayStore = 1 in
     61   def NAME : CVI_GATHER_TMP_LD_Resource_NoOpcode<(outs ),
     62                            (ins IntRegs:$_dst_, RC2:$Vq, IntRegs:$Rt,
     63                                 ModRegs:$Mu, RC1:$Vv),
     64                            ".error \"should not emit\" ",
     65                            []>;
     66 }
     67 
     68 defm V6_vgathermhq_pseudo  : vgathermhq<HvxVR, HvxQR>;
     69 defm V6_vgathermwq_pseudo  : vgathermwq<HvxVR, HvxQR>;
     70 defm V6_vgathermhwq_pseudo  : vgathermhwq<HvxWR, HvxQR>;
     71