Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
14 | pmbaty | 1 | //===-- llvm/CodeGen/MachineCombinerPattern.h - Instruction pattern supported by |
2 | // combiner ------*- C++ -*-===// |
||
3 | // |
||
4 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
||
5 | // See https://llvm.org/LICENSE.txt for license information. |
||
6 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
||
7 | // |
||
8 | //===----------------------------------------------------------------------===// |
||
9 | // |
||
10 | // This file defines instruction pattern supported by combiner |
||
11 | // |
||
12 | //===----------------------------------------------------------------------===// |
||
13 | |||
14 | #ifndef LLVM_CODEGEN_MACHINECOMBINERPATTERN_H |
||
15 | #define LLVM_CODEGEN_MACHINECOMBINERPATTERN_H |
||
16 | |||
17 | namespace llvm { |
||
18 | |||
19 | /// These are instruction patterns matched by the machine combiner pass. |
||
20 | enum class MachineCombinerPattern { |
||
21 | // These are commutative variants for reassociating a computation chain. See |
||
22 | // the comments before getMachineCombinerPatterns() in TargetInstrInfo.cpp. |
||
23 | REASSOC_AX_BY, |
||
24 | REASSOC_AX_YB, |
||
25 | REASSOC_XA_BY, |
||
26 | REASSOC_XA_YB, |
||
27 | |||
28 | // These are patterns matched by the PowerPC to reassociate FMA chains. |
||
29 | REASSOC_XY_AMM_BMM, |
||
30 | REASSOC_XMM_AMM_BMM, |
||
31 | |||
32 | // These are patterns matched by the PowerPC to reassociate FMA and FSUB to |
||
33 | // reduce register pressure. |
||
34 | REASSOC_XY_BCA, |
||
35 | REASSOC_XY_BAC, |
||
36 | |||
37 | // These are patterns used to reduce the length of dependence chain. |
||
38 | SUBADD_OP1, |
||
39 | SUBADD_OP2, |
||
40 | |||
41 | // These are multiply-add patterns matched by the AArch64 machine combiner. |
||
42 | MULADDW_OP1, |
||
43 | MULADDW_OP2, |
||
44 | MULSUBW_OP1, |
||
45 | MULSUBW_OP2, |
||
46 | MULADDWI_OP1, |
||
47 | MULSUBWI_OP1, |
||
48 | MULADDX_OP1, |
||
49 | MULADDX_OP2, |
||
50 | MULSUBX_OP1, |
||
51 | MULSUBX_OP2, |
||
52 | MULADDXI_OP1, |
||
53 | MULSUBXI_OP1, |
||
54 | // NEON integers vectors |
||
55 | MULADDv8i8_OP1, |
||
56 | MULADDv8i8_OP2, |
||
57 | MULADDv16i8_OP1, |
||
58 | MULADDv16i8_OP2, |
||
59 | MULADDv4i16_OP1, |
||
60 | MULADDv4i16_OP2, |
||
61 | MULADDv8i16_OP1, |
||
62 | MULADDv8i16_OP2, |
||
63 | MULADDv2i32_OP1, |
||
64 | MULADDv2i32_OP2, |
||
65 | MULADDv4i32_OP1, |
||
66 | MULADDv4i32_OP2, |
||
67 | |||
68 | MULSUBv8i8_OP1, |
||
69 | MULSUBv8i8_OP2, |
||
70 | MULSUBv16i8_OP1, |
||
71 | MULSUBv16i8_OP2, |
||
72 | MULSUBv4i16_OP1, |
||
73 | MULSUBv4i16_OP2, |
||
74 | MULSUBv8i16_OP1, |
||
75 | MULSUBv8i16_OP2, |
||
76 | MULSUBv2i32_OP1, |
||
77 | MULSUBv2i32_OP2, |
||
78 | MULSUBv4i32_OP1, |
||
79 | MULSUBv4i32_OP2, |
||
80 | |||
81 | MULADDv4i16_indexed_OP1, |
||
82 | MULADDv4i16_indexed_OP2, |
||
83 | MULADDv8i16_indexed_OP1, |
||
84 | MULADDv8i16_indexed_OP2, |
||
85 | MULADDv2i32_indexed_OP1, |
||
86 | MULADDv2i32_indexed_OP2, |
||
87 | MULADDv4i32_indexed_OP1, |
||
88 | MULADDv4i32_indexed_OP2, |
||
89 | |||
90 | MULSUBv4i16_indexed_OP1, |
||
91 | MULSUBv4i16_indexed_OP2, |
||
92 | MULSUBv8i16_indexed_OP1, |
||
93 | MULSUBv8i16_indexed_OP2, |
||
94 | MULSUBv2i32_indexed_OP1, |
||
95 | MULSUBv2i32_indexed_OP2, |
||
96 | MULSUBv4i32_indexed_OP1, |
||
97 | MULSUBv4i32_indexed_OP2, |
||
98 | |||
99 | // Floating Point |
||
100 | FMULADDH_OP1, |
||
101 | FMULADDH_OP2, |
||
102 | FMULSUBH_OP1, |
||
103 | FMULSUBH_OP2, |
||
104 | FMULADDS_OP1, |
||
105 | FMULADDS_OP2, |
||
106 | FMULSUBS_OP1, |
||
107 | FMULSUBS_OP2, |
||
108 | FMULADDD_OP1, |
||
109 | FMULADDD_OP2, |
||
110 | FMULSUBD_OP1, |
||
111 | FMULSUBD_OP2, |
||
112 | FNMULSUBH_OP1, |
||
113 | FNMULSUBS_OP1, |
||
114 | FNMULSUBD_OP1, |
||
115 | FMLAv1i32_indexed_OP1, |
||
116 | FMLAv1i32_indexed_OP2, |
||
117 | FMLAv1i64_indexed_OP1, |
||
118 | FMLAv1i64_indexed_OP2, |
||
119 | FMLAv4f16_OP1, |
||
120 | FMLAv4f16_OP2, |
||
121 | FMLAv8f16_OP1, |
||
122 | FMLAv8f16_OP2, |
||
123 | FMLAv2f32_OP2, |
||
124 | FMLAv2f32_OP1, |
||
125 | FMLAv2f64_OP1, |
||
126 | FMLAv2f64_OP2, |
||
127 | FMLAv4i16_indexed_OP1, |
||
128 | FMLAv4i16_indexed_OP2, |
||
129 | FMLAv8i16_indexed_OP1, |
||
130 | FMLAv8i16_indexed_OP2, |
||
131 | FMLAv2i32_indexed_OP1, |
||
132 | FMLAv2i32_indexed_OP2, |
||
133 | FMLAv2i64_indexed_OP1, |
||
134 | FMLAv2i64_indexed_OP2, |
||
135 | FMLAv4f32_OP1, |
||
136 | FMLAv4f32_OP2, |
||
137 | FMLAv4i32_indexed_OP1, |
||
138 | FMLAv4i32_indexed_OP2, |
||
139 | FMLSv1i32_indexed_OP2, |
||
140 | FMLSv1i64_indexed_OP2, |
||
141 | FMLSv4f16_OP1, |
||
142 | FMLSv4f16_OP2, |
||
143 | FMLSv8f16_OP1, |
||
144 | FMLSv8f16_OP2, |
||
145 | FMLSv2f32_OP1, |
||
146 | FMLSv2f32_OP2, |
||
147 | FMLSv2f64_OP1, |
||
148 | FMLSv2f64_OP2, |
||
149 | FMLSv4i16_indexed_OP1, |
||
150 | FMLSv4i16_indexed_OP2, |
||
151 | FMLSv8i16_indexed_OP1, |
||
152 | FMLSv8i16_indexed_OP2, |
||
153 | FMLSv2i32_indexed_OP1, |
||
154 | FMLSv2i32_indexed_OP2, |
||
155 | FMLSv2i64_indexed_OP1, |
||
156 | FMLSv2i64_indexed_OP2, |
||
157 | FMLSv4f32_OP1, |
||
158 | FMLSv4f32_OP2, |
||
159 | FMLSv4i32_indexed_OP1, |
||
160 | FMLSv4i32_indexed_OP2, |
||
161 | |||
162 | FMULv2i32_indexed_OP1, |
||
163 | FMULv2i32_indexed_OP2, |
||
164 | FMULv2i64_indexed_OP1, |
||
165 | FMULv2i64_indexed_OP2, |
||
166 | FMULv4i16_indexed_OP1, |
||
167 | FMULv4i16_indexed_OP2, |
||
168 | FMULv4i32_indexed_OP1, |
||
169 | FMULv4i32_indexed_OP2, |
||
170 | FMULv8i16_indexed_OP1, |
||
171 | FMULv8i16_indexed_OP2, |
||
172 | |||
173 | // RISCV FMADD, FMSUB, FNMSUB patterns |
||
174 | FMADD_AX, |
||
175 | FMADD_XA, |
||
176 | FMSUB, |
||
177 | FNMSUB, |
||
178 | }; |
||
179 | |||
180 | } // end namespace llvm |
||
181 | |||
182 | #endif |