Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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