@@ -58,6 +58,50 @@ def FeatureReserveX18 : SubtargetFeature<"reserve-x18", "ReserveX18", "true",
58
58
"Reserve X18, making it unavailable "
59
59
"as a GPR">;
60
60
61
+ def FeatureMergeNarrowLd : SubtargetFeature<"merge-narrow-ld",
62
+ "MergeNarrowLoads", "true",
63
+ "Merge narrow load instructions">;
64
+
65
+ def FeatureUseAA : SubtargetFeature<"use-aa", "UseAA", "true",
66
+ "Use alias analysis during codegen">;
67
+
68
+ def FeatureBalanceFPOps : SubtargetFeature<"balance-fp-ops", "BalanceFPOps",
69
+ "true",
70
+ "balance mix of odd and even D-registers for fp multiply(-accumulate) ops">;
71
+
72
+ def FeaturePredictableSelectIsExpensive : SubtargetFeature<
73
+ "predictable-select-expensive", "PredictableSelectIsExpensive", "true",
74
+ "Prefer likely predicted branches over selects">;
75
+
76
+ def FeatureCustomCheapAsMoveHandling : SubtargetFeature<"custom-cheap-as-move",
77
+ "CustomAsCheapAsMove", "true",
78
+ "Use custom code for TargetInstrInfo::isAsCheapAsAMove()">;
79
+
80
+ def FeaturePostRAScheduler : SubtargetFeature<"use-postra-scheduler",
81
+ "UsePostRAScheduler", "true", "Schedule again after register allocation">;
82
+
83
+ def FeatureSlowMisaligned128Store : SubtargetFeature<"slow-misaligned-128store",
84
+ "Misaligned128StoreIsSlow", "true", "Misaligned 128 bit stores are slow">;
85
+
86
+ def FeatureAvoidQuadLdStPairs : SubtargetFeature<"no-quad-ldst-pairs",
87
+ "AvoidQuadLdStPairs", "true",
88
+ "Do not form quad load/store pair operations">;
89
+
90
+ def FeatureAlternateSExtLoadCVTF32Pattern : SubtargetFeature<
91
+ "alternate-sextload-cvt-f32-pattern", "UseAlternateSExtLoadCVTF32Pattern",
92
+ "true", "Use alternative pattern for sextload convert to f32">;
93
+
94
+ def FeatureMacroOpFusion : SubtargetFeature<
95
+ "macroop-fusion", "HasMacroOpFusion", "true",
96
+ "CPU supports macro op fusion">;
97
+
98
+ def FeatureDisableLatencySchedHeuristic : SubtargetFeature<
99
+ "disable-latency-sched-heuristic", "DisableLatencySchedHeuristic", "true",
100
+ "Disable latency scheduling heuristic">;
101
+
102
+ def FeatureUseRSqrt : SubtargetFeature<
103
+ "use-reverse-square-root", "UseRSqrt", "true", "Use reverse square root">;
104
+
61
105
//===----------------------------------------------------------------------===//
62
106
// Architectures.
63
107
//
@@ -94,57 +138,87 @@ include "AArch64SchedM1.td"
94
138
include "AArch64SchedKryo.td"
95
139
96
140
def ProcA35 : SubtargetFeature<"a35", "ARMProcFamily", "CortexA35",
97
- "Cortex-A35 ARM processors",
98
- [FeatureFPARMv8,
99
- FeatureNEON,
100
- FeatureCrypto,
141
+ "Cortex-A35 ARM processors", [
101
142
FeatureCRC,
102
- FeaturePerfMon]>;
143
+ FeatureCrypto,
144
+ FeatureFPARMv8,
145
+ FeatureNEON,
146
+ FeaturePerfMon
147
+ ]>;
103
148
104
149
def ProcA53 : SubtargetFeature<"a53", "ARMProcFamily", "CortexA53",
105
- "Cortex-A53 ARM processors",
106
- [FeatureFPARMv8,
107
- FeatureNEON,
108
- FeatureCrypto,
150
+ "Cortex-A53 ARM processors", [
151
+ FeatureBalanceFPOps,
109
152
FeatureCRC,
110
- FeaturePerfMon]>;
153
+ FeatureCrypto,
154
+ FeatureCustomCheapAsMoveHandling,
155
+ FeatureFPARMv8,
156
+ FeatureNEON,
157
+ FeaturePerfMon,
158
+ FeaturePostRAScheduler,
159
+ FeatureUseAA
160
+ ]>;
111
161
112
162
def ProcA57 : SubtargetFeature<"a57", "ARMProcFamily", "CortexA57",
113
- "Cortex-A57 ARM processors",
114
- [FeatureFPARMv8,
115
- FeatureNEON,
116
- FeatureCrypto,
163
+ "Cortex-A57 ARM processors", [
164
+ FeatureBalanceFPOps,
117
165
FeatureCRC,
118
- FeaturePerfMon]>;
166
+ FeatureCrypto,
167
+ FeatureCustomCheapAsMoveHandling,
168
+ FeatureFPARMv8,
169
+ FeatureMergeNarrowLd,
170
+ FeatureNEON,
171
+ FeaturePerfMon,
172
+ FeaturePostRAScheduler,
173
+ FeaturePredictableSelectIsExpensive
174
+ ]>;
119
175
120
176
def ProcCyclone : SubtargetFeature<"cyclone", "ARMProcFamily", "Cyclone",
121
- "Cyclone",
122
- [FeatureFPARMv8,
123
- FeatureNEON,
177
+ "Cyclone", [
178
+ FeatureAlternateSExtLoadCVTF32Pattern,
124
179
FeatureCrypto,
180
+ FeatureDisableLatencySchedHeuristic,
181
+ FeatureFPARMv8,
182
+ FeatureMacroOpFusion,
183
+ FeatureNEON,
125
184
FeaturePerfMon,
126
- FeatureZCRegMove, FeatureZCZeroing]>;
185
+ FeatureSlowMisaligned128Store,
186
+ FeatureZCRegMove,
187
+ FeatureZCZeroing
188
+ ]>;
127
189
128
190
def ProcExynosM1 : SubtargetFeature<"exynosm1", "ARMProcFamily", "ExynosM1",
129
- "Samsung Exynos-M1 processors",
130
- [FeatureFPARMv8,
131
- FeatureNEON,
132
- FeatureCrypto,
191
+ "Samsung Exynos-M1 processors", [
192
+ FeatureAvoidQuadLdStPairs,
133
193
FeatureCRC,
134
- FeaturePerfMon]>;
194
+ FeatureCrypto,
195
+ FeatureCustomCheapAsMoveHandling,
196
+ FeatureFPARMv8,
197
+ FeatureNEON,
198
+ FeaturePerfMon,
199
+ FeatureUseRSqrt
200
+ ]>;
135
201
136
202
def ProcKryo : SubtargetFeature<"kryo", "ARMProcFamily", "Kryo",
137
- "Qualcomm Kryo processors",
138
- [FeatureFPARMv8,
139
- FeatureNEON,
140
- FeatureCrypto,
203
+ "Qualcomm Kryo processors", [
141
204
FeatureCRC,
142
- FeaturePerfMon]>;
143
-
144
- def : ProcessorModel<"generic", NoSchedModel, [FeatureFPARMv8,
145
- FeatureNEON,
146
- FeatureCRC,
147
- FeaturePerfMon]>;
205
+ FeatureCrypto,
206
+ FeatureCustomCheapAsMoveHandling,
207
+ FeatureFPARMv8,
208
+ FeatureMergeNarrowLd,
209
+ FeatureNEON,
210
+ FeaturePerfMon,
211
+ FeaturePostRAScheduler,
212
+ FeaturePredictableSelectIsExpensive
213
+ ]>;
214
+
215
+ def : ProcessorModel<"generic", NoSchedModel, [
216
+ FeatureCRC,
217
+ FeatureFPARMv8,
218
+ FeatureNEON,
219
+ FeaturePerfMon,
220
+ FeaturePostRAScheduler
221
+ ]>;
148
222
149
223
// FIXME: Cortex-A35 is currently modelled as a Cortex-A53
150
224
def : ProcessorModel<"cortex-a35", CortexA53Model, [ProcA35]>;
0 commit comments