1//===--- HexagonMapAsm2IntrinV62.gen.td -----------------------------------===//
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-exception
6//
7//===----------------------------------------------------------------------===//
8
9multiclass T_VR_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
10  def: Pat<(IntID HvxVR:$src1, IntRegs:$src2),
11           (MI HvxVR:$src1, IntRegs:$src2)>;
12  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxVR:$src1, IntRegs:$src2),
13           (MI HvxVR:$src1, IntRegs:$src2)>;
14}
15
16multiclass T_VVL_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
17  def: Pat<(IntID HvxVR:$src1, HvxVR:$src2, IntRegsLow8:$src3),
18           (MI HvxVR:$src1, HvxVR:$src2, IntRegsLow8:$src3)>;
19  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxVR:$src1, HvxVR:$src2,
20                                            IntRegsLow8:$src3),
21           (MI HvxVR:$src1, HvxVR:$src2, IntRegsLow8:$src3)>;
22}
23
24multiclass T_VV_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
25  def: Pat<(IntID HvxVR:$src1, HvxVR:$src2),
26           (MI HvxVR:$src1, HvxVR:$src2)>;
27  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxVR:$src1, HvxVR:$src2),
28           (MI HvxVR:$src1, HvxVR:$src2)>;
29}
30
31multiclass T_WW_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
32  def: Pat<(IntID HvxWR:$src1, HvxWR:$src2),
33           (MI HvxWR:$src1, HvxWR:$src2)>;
34  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxWR:$src1, HvxWR:$src2),
35           (MI HvxWR:$src1, HvxWR:$src2)>;
36}
37
38multiclass T_WVV_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
39  def: Pat<(IntID HvxWR:$src1, HvxVR:$src2, HvxVR:$src3),
40           (MI HvxWR:$src1, HvxVR:$src2, HvxVR:$src3)>;
41  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxWR:$src1, HvxVR:$src2,
42                                            HvxVR:$src3),
43           (MI HvxWR:$src1, HvxVR:$src2, HvxVR:$src3)>;
44}
45
46multiclass T_WR_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
47  def: Pat<(IntID HvxWR:$src1, IntRegs:$src2),
48           (MI HvxWR:$src1, IntRegs:$src2)>;
49  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxWR:$src1, IntRegs:$src2),
50           (MI HvxWR:$src1, IntRegs:$src2)>;
51}
52
53multiclass T_WWR_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
54  def: Pat<(IntID HvxWR:$src1, HvxWR:$src2, IntRegs:$src3),
55           (MI HvxWR:$src1, HvxWR:$src2, IntRegs:$src3)>;
56  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxWR:$src1, HvxWR:$src2,
57                                            IntRegs:$src3),
58           (MI HvxWR:$src1, HvxWR:$src2, IntRegs:$src3)>;
59}
60
61multiclass T_VVR_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
62  def: Pat<(IntID HvxVR:$src1, HvxVR:$src2, IntRegs:$src3),
63           (MI HvxVR:$src1, HvxVR:$src2, IntRegs:$src3)>;
64  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxVR:$src1, HvxVR:$src2,
65                                            IntRegs:$src3),
66           (MI HvxVR:$src1, HvxVR:$src2, IntRegs:$src3)>;
67}
68
69multiclass T_ZR_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
70  def: Pat<(IntID HvxQR:$src1, IntRegs:$src2),
71           (MI HvxQR:$src1, IntRegs:$src2)>;
72  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxQR:$src1, IntRegs:$src2),
73           (MI HvxQR:$src1, IntRegs:$src2)>;
74}
75
76multiclass T_VZR_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
77  def: Pat<(IntID HvxVR:$src1, HvxQR:$src2, IntRegs:$src3),
78           (MI HvxVR:$src1, HvxQR:$src2, IntRegs:$src3)>;
79  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxVR:$src1, HvxQR:$src2,
80                                            IntRegs:$src3),
81           (MI HvxVR:$src1, HvxQR:$src2, IntRegs:$src3)>;
82}
83
84multiclass T_ZV_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
85  def: Pat<(IntID HvxQR:$src1, HvxVR:$src2),
86           (MI HvxQR:$src1, HvxVR:$src2)>;
87  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxQR:$src1, HvxVR:$src2),
88           (MI HvxQR:$src1, HvxVR:$src2)>;
89}
90
91multiclass T_R_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
92  def: Pat<(IntID IntRegs:$src1),
93           (MI IntRegs:$src1)>;
94  def: Pat<(!cast<Intrinsic>(IntID#"_128B") IntRegs:$src1),
95           (MI IntRegs:$src1)>;
96}
97
98multiclass T_ZZ_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
99  def: Pat<(IntID HvxQR:$src1, HvxQR:$src2),
100           (MI HvxQR:$src1, HvxQR:$src2)>;
101  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxQR:$src1, HvxQR:$src2),
102           (MI HvxQR:$src1, HvxQR:$src2)>;
103}
104
105multiclass T_VVI_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
106  def: Pat<(IntID HvxVR:$src1, HvxVR:$src2, imm:$src3),
107           (MI HvxVR:$src1, HvxVR:$src2, imm:$src3)>;
108  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxVR:$src1, HvxVR:$src2,
109                                            imm:$src3),
110           (MI HvxVR:$src1, HvxVR:$src2, imm:$src3)>;
111}
112
113multiclass T_VVVI_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
114  def: Pat<(IntID HvxVR:$src1, HvxVR:$src2, HvxVR:$src3, imm:$src4),
115           (MI HvxVR:$src1, HvxVR:$src2, HvxVR:$src3, imm:$src4)>;
116  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxVR:$src1, HvxVR:$src2,
117                                            HvxVR:$src3, imm:$src4),
118           (MI HvxVR:$src1, HvxVR:$src2, HvxVR:$src3, imm:$src4)>;
119}
120
121multiclass T_WVVI_HVX_gen_pat <InstHexagon MI, Intrinsic IntID> {
122  def: Pat<(IntID HvxWR:$src1, HvxVR:$src2, HvxVR:$src3, imm:$src4),
123           (MI HvxWR:$src1, HvxVR:$src2, HvxVR:$src3, imm:$src4)>;
124  def: Pat<(!cast<Intrinsic>(IntID#"_128B") HvxWR:$src1, HvxVR:$src2,
125                                            HvxVR:$src3, imm:$src4),
126           (MI HvxWR:$src1, HvxVR:$src2, HvxVR:$src3, imm:$src4)>;
127}
128
129def : T_R_pat <S6_vsplatrbp, int_hexagon_S6_vsplatrbp>;
130def : T_PP_pat <M6_vabsdiffb, int_hexagon_M6_vabsdiffb>;
131def : T_PP_pat <M6_vabsdiffub, int_hexagon_M6_vabsdiffub>;
132def : T_PP_pat <S6_vtrunehb_ppp, int_hexagon_S6_vtrunehb_ppp>;
133def : T_PP_pat <S6_vtrunohb_ppp, int_hexagon_S6_vtrunohb_ppp>;
134
135defm : T_VR_HVX_gen_pat <V6_vlsrb, int_hexagon_V6_vlsrb>;
136defm : T_VR_HVX_gen_pat <V6_vmpyiwub, int_hexagon_V6_vmpyiwub>;
137defm : T_VVL_HVX_gen_pat <V6_vasrwuhrndsat, int_hexagon_V6_vasrwuhrndsat>;
138defm : T_VVL_HVX_gen_pat <V6_vasruwuhrndsat, int_hexagon_V6_vasruwuhrndsat>;
139defm : T_VVL_HVX_gen_pat <V6_vasrhbsat, int_hexagon_V6_vasrhbsat>;
140defm : T_VVL_HVX_gen_pat <V6_vlutvvb_nm, int_hexagon_V6_vlutvvb_nm>;
141defm : T_VVL_HVX_gen_pat <V6_vlutvwh_nm, int_hexagon_V6_vlutvwh_nm>;
142defm : T_VV_HVX_gen_pat <V6_vrounduwuh, int_hexagon_V6_vrounduwuh>;
143defm : T_VV_HVX_gen_pat <V6_vrounduhub, int_hexagon_V6_vrounduhub>;
144defm : T_VV_HVX_gen_pat <V6_vadduwsat, int_hexagon_V6_vadduwsat>;
145defm : T_VV_HVX_gen_pat <V6_vsubuwsat, int_hexagon_V6_vsubuwsat>;
146defm : T_VV_HVX_gen_pat <V6_vaddbsat, int_hexagon_V6_vaddbsat>;
147defm : T_VV_HVX_gen_pat <V6_vsubbsat, int_hexagon_V6_vsubbsat>;
148defm : T_VV_HVX_gen_pat <V6_vaddububb_sat, int_hexagon_V6_vaddububb_sat>;
149defm : T_VV_HVX_gen_pat <V6_vsubububb_sat, int_hexagon_V6_vsubububb_sat>;
150defm : T_VV_HVX_gen_pat <V6_vmpyewuh_64, int_hexagon_V6_vmpyewuh_64>;
151defm : T_VV_HVX_gen_pat <V6_vmaxb, int_hexagon_V6_vmaxb>;
152defm : T_VV_HVX_gen_pat <V6_vminb, int_hexagon_V6_vminb>;
153defm : T_VV_HVX_gen_pat <V6_vsatuwuh, int_hexagon_V6_vsatuwuh>;
154defm : T_VV_HVX_gen_pat <V6_vaddclbw, int_hexagon_V6_vaddclbw>;
155defm : T_VV_HVX_gen_pat <V6_vaddclbh, int_hexagon_V6_vaddclbh>;
156defm : T_WW_HVX_gen_pat <V6_vadduwsat_dv, int_hexagon_V6_vadduwsat_dv>;
157defm : T_WW_HVX_gen_pat <V6_vsubuwsat_dv, int_hexagon_V6_vsubuwsat_dv>;
158defm : T_WW_HVX_gen_pat <V6_vaddbsat_dv, int_hexagon_V6_vaddbsat_dv>;
159defm : T_WW_HVX_gen_pat <V6_vsubbsat_dv, int_hexagon_V6_vsubbsat_dv>;
160defm : T_WVV_HVX_gen_pat <V6_vaddhw_acc, int_hexagon_V6_vaddhw_acc>;
161defm : T_WVV_HVX_gen_pat <V6_vadduhw_acc, int_hexagon_V6_vadduhw_acc>;
162defm : T_WVV_HVX_gen_pat <V6_vaddubh_acc, int_hexagon_V6_vaddubh_acc>;
163defm : T_WVV_HVX_gen_pat <V6_vmpyowh_64_acc, int_hexagon_V6_vmpyowh_64_acc>;
164defm : T_WR_HVX_gen_pat <V6_vmpauhb, int_hexagon_V6_vmpauhb>;
165defm : T_WWR_HVX_gen_pat <V6_vmpauhb_acc, int_hexagon_V6_vmpauhb_acc>;
166defm : T_VVR_HVX_gen_pat <V6_vmpyiwub_acc, int_hexagon_V6_vmpyiwub_acc>;
167defm : T_ZR_HVX_gen_pat <V6_vandnqrt, int_hexagon_V6_vandnqrt>;
168defm : T_VZR_HVX_gen_pat <V6_vandnqrt_acc, int_hexagon_V6_vandnqrt_acc>;
169defm : T_ZV_HVX_gen_pat <V6_vandvqv, int_hexagon_V6_vandvqv>;
170defm : T_ZV_HVX_gen_pat <V6_vandvnqv, int_hexagon_V6_vandvnqv>;
171defm : T_R_HVX_gen_pat <V6_pred_scalar2v2, int_hexagon_V6_pred_scalar2v2>;
172defm : T_R_HVX_gen_pat <V6_lvsplath, int_hexagon_V6_lvsplath>;
173defm : T_R_HVX_gen_pat <V6_lvsplatb, int_hexagon_V6_lvsplatb>;
174defm : T_ZZ_HVX_gen_pat <V6_shuffeqw, int_hexagon_V6_shuffeqw>;
175defm : T_ZZ_HVX_gen_pat <V6_shuffeqh, int_hexagon_V6_shuffeqh>;
176defm : T_VVI_HVX_gen_pat <V6_vlutvvbi, int_hexagon_V6_vlutvvbi>;
177defm : T_VVI_HVX_gen_pat <V6_vlutvwhi, int_hexagon_V6_vlutvwhi>;
178defm : T_VVVI_HVX_gen_pat <V6_vlutvvb_oracci, int_hexagon_V6_vlutvvb_oracci>;
179defm : T_WVVI_HVX_gen_pat <V6_vlutvwh_oracci, int_hexagon_V6_vlutvwh_oracci>;
180