1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* RISCVO0PreLegalizerCombinerImpl Combiner Match Table *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* *|
7\*===----------------------------------------------------------------------===*/
8
9#ifdef GET_GICOMBINER_DEPS
10
11#include "llvm/ADT/SparseBitVector.h"
12namespace llvm {
13
14extern cl::OptionCategory GICombinerOptionCategory;
15
16} // namespace llvm
17
18#endif // GET_GICOMBINER_DEPS
19
20#ifdef GET_GICOMBINER_TYPES
21
22struct RISCVO0PreLegalizerCombinerImplRuleConfig {
23 SparseBitVector<> DisabledRules;
24
25 bool isRuleEnabled(unsigned RuleID) const;
26 bool parseCommandLineOption();
27 bool setRuleEnabled(StringRef RuleIdentifier);
28 bool setRuleDisabled(StringRef RuleIdentifier);
29};
30
31static std::optional<uint64_t> getRuleIdxForIdentifier(StringRef RuleIdentifier) {
32 uint64_t I;
33 // getAtInteger(...) returns false on success
34 bool Parsed = !RuleIdentifier.getAsInteger(0, I);
35 if (Parsed)
36 return I;
37
38#ifndef NDEBUG
39 switch (RuleIdentifier.size()) {
40 default: break;
41 case 9: // 1 string to match.
42 if (memcmp(RuleIdentifier.data()+0, "copy_prop", 9) != 0)
43 break;
44 return 0; // "copy_prop"
45 case 10: // 2 strings to match.
46 switch (RuleIdentifier[0]) {
47 default: break;
48 case 'm': // 1 string to match.
49 if (memcmp(RuleIdentifier.data()+1, "ul_to_shl", 9) != 0)
50 break;
51 return 1; // "mul_to_shl"
52 case 's': // 1 string to match.
53 if (memcmp(RuleIdentifier.data()+1, "ub_to_add", 9) != 0)
54 break;
55 return 2; // "sub_to_add"
56 }
57 break;
58 case 12: // 1 string to match.
59 if (memcmp(RuleIdentifier.data()+0, "not_cmp_fold", 12) != 0)
60 break;
61 return 9; // "not_cmp_fold"
62 case 13: // 1 string to match.
63 if (memcmp(RuleIdentifier.data()+0, "load_and_mask", 13) != 0)
64 break;
65 return 8; // "load_and_mask"
66 case 14: // 1 string to match.
67 if (memcmp(RuleIdentifier.data()+0, "mul_by_neg_one", 14) != 0)
68 break;
69 return 4; // "mul_by_neg_one"
70 case 15: // 2 strings to match.
71 switch (RuleIdentifier[0]) {
72 default: break;
73 case 'e': // 1 string to match.
74 if (memcmp(RuleIdentifier.data()+1, "xtending_loads", 14) != 0)
75 break;
76 return 7; // "extending_loads"
77 case 'i': // 1 string to match.
78 if (memcmp(RuleIdentifier.data()+1, "dempotent_prop", 14) != 0)
79 break;
80 return 5; // "idempotent_prop"
81 }
82 break;
83 case 17: // 1 string to match.
84 if (memcmp(RuleIdentifier.data()+0, "add_p2i_to_ptradd", 17) != 0)
85 break;
86 return 3; // "add_p2i_to_ptradd"
87 case 19: // 1 string to match.
88 if (memcmp(RuleIdentifier.data()+0, "ptr_add_immed_chain", 19) != 0)
89 break;
90 return 6; // "ptr_add_immed_chain"
91 case 21: // 1 string to match.
92 if (memcmp(RuleIdentifier.data()+0, "combine_concat_vector", 21) != 0)
93 break;
94 return 10; // "combine_concat_vector"
95 }
96#endif // ifndef NDEBUG
97
98 return std::nullopt;
99}
100static std::optional<std::pair<uint64_t, uint64_t>> getRuleRangeForIdentifier(StringRef RuleIdentifier) {
101 std::pair<StringRef, StringRef> RangePair = RuleIdentifier.split('-');
102 if (!RangePair.second.empty()) {
103 const auto First = getRuleIdxForIdentifier(RangePair.first);
104 const auto Last = getRuleIdxForIdentifier(RangePair.second);
105 if (!First || !Last)
106 return std::nullopt;
107 if (First >= Last)
108 report_fatal_error("Beginning of range should be before end of range");
109 return {{*First, *Last + 1}};
110 }
111 if (RangePair.first == "*") {
112 return {{0, 11}};
113 }
114 const auto I = getRuleIdxForIdentifier(RangePair.first);
115 if (!I)
116 return std::nullopt;
117 return {{*I, *I + 1}};
118}
119
120bool RISCVO0PreLegalizerCombinerImplRuleConfig::setRuleEnabled(StringRef RuleIdentifier) {
121 auto MaybeRange = getRuleRangeForIdentifier(RuleIdentifier);
122 if (!MaybeRange)
123 return false;
124 for (auto I = MaybeRange->first; I < MaybeRange->second; ++I)
125 DisabledRules.reset(I);
126 return true;
127}
128
129bool RISCVO0PreLegalizerCombinerImplRuleConfig::setRuleDisabled(StringRef RuleIdentifier) {
130 auto MaybeRange = getRuleRangeForIdentifier(RuleIdentifier);
131 if (!MaybeRange)
132 return false;
133 for (auto I = MaybeRange->first; I < MaybeRange->second; ++I)
134 DisabledRules.set(I);
135 return true;
136}
137
138static std::vector<std::string> RISCVO0PreLegalizerCombinerOption;
139static cl::list<std::string> RISCVO0PreLegalizerCombinerDisableOption(
140 "riscvo0prelegalizercombiner-disable-rule",
141 cl::desc("Disable one or more combiner rules temporarily in the RISCVO0PreLegalizerCombiner pass"),
142 cl::CommaSeparated,
143 cl::Hidden,
144 cl::cat(GICombinerOptionCategory),
145 cl::callback([](const std::string &Str) {
146 RISCVO0PreLegalizerCombinerOption.push_back(Str);
147 }));
148static cl::list<std::string> RISCVO0PreLegalizerCombinerOnlyEnableOption(
149 "riscvo0prelegalizercombiner-only-enable-rule",
150 cl::desc("Disable all rules in the RISCVO0PreLegalizerCombiner pass then re-enable the specified ones"),
151 cl::Hidden,
152 cl::cat(GICombinerOptionCategory),
153 cl::callback([](const std::string &CommaSeparatedArg) {
154 StringRef Str = CommaSeparatedArg;
155 RISCVO0PreLegalizerCombinerOption.push_back("*");
156 do {
157 auto X = Str.split(",");
158 RISCVO0PreLegalizerCombinerOption.push_back(("!" + X.first).str());
159 Str = X.second;
160 } while (!Str.empty());
161 }));
162
163
164bool RISCVO0PreLegalizerCombinerImplRuleConfig::isRuleEnabled(unsigned RuleID) const {
165 return !DisabledRules.test(RuleID);
166}
167bool RISCVO0PreLegalizerCombinerImplRuleConfig::parseCommandLineOption() {
168 for (StringRef Identifier : RISCVO0PreLegalizerCombinerOption) {
169 bool Enabled = Identifier.consume_front("!");
170 if (Enabled && !setRuleEnabled(Identifier))
171 return false;
172 if (!Enabled && !setRuleDisabled(Identifier))
173 return false;
174 }
175 return true;
176}
177
178
179#endif // GET_GICOMBINER_TYPES
180
181#ifdef GET_GICOMBINER_TYPES
182
183const unsigned MAX_SUBTARGET_PREDICATES = 0;
184using PredicateBitset = llvm::Bitset<MAX_SUBTARGET_PREDICATES>;
185
186#endif // GET_GICOMBINER_TYPES
187
188#ifdef GET_GICOMBINER_CLASS_MEMBERS
189
190PredicateBitset AvailableModuleFeatures;
191mutable PredicateBitset AvailableFunctionFeatures;
192PredicateBitset getAvailableFeatures() const {
193 return AvailableModuleFeatures | AvailableFunctionFeatures;
194}
195PredicateBitset
196computeAvailableModuleFeatures(const RISCVSubtarget *Subtarget) const;
197PredicateBitset
198computeAvailableFunctionFeatures(const RISCVSubtarget *Subtarget,
199 const MachineFunction *MF) const;
200void setupGeneratedPerFunctionState(MachineFunction &MF) override;
201
202#endif // GET_GICOMBINER_CLASS_MEMBERS
203
204#ifdef GET_GICOMBINER_CLASS_MEMBERS
205
206 mutable MatcherState State;
207 typedef ComplexRendererFns(RISCVO0PreLegalizerCombinerImpl::*ComplexMatcherMemFn)(MachineOperand &) const;
208 typedef void(RISCVO0PreLegalizerCombinerImpl::*CustomRendererFn)(MachineInstrBuilder &, const MachineInstr &, int) const;
209 const ExecInfoTy<PredicateBitset, ComplexMatcherMemFn, CustomRendererFn> ExecInfo;
210 static RISCVO0PreLegalizerCombinerImpl::ComplexMatcherMemFn ComplexPredicateFns[];
211 static RISCVO0PreLegalizerCombinerImpl::CustomRendererFn CustomRenderers[];
212 bool testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const override;
213 bool testImmPredicate_APInt(unsigned PredicateID, const APInt &Imm) const override;
214 bool testImmPredicate_APFloat(unsigned PredicateID, const APFloat &Imm) const override;
215 const uint8_t *getMatchTable() const override;
216 bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI, const MatcherState &State) const override;
217 bool testMOPredicate_MO(unsigned PredicateID, const MachineOperand &MO, const MatcherState &State) const override;
218 bool testSimplePredicate(unsigned PredicateID) const override;
219 bool runCustomAction(unsigned FnID, const MatcherState &State, NewMIVector &OutMIs) const override;
220
221#endif // GET_GICOMBINER_CLASS_MEMBERS
222
223#ifdef GET_GICOMBINER_IMPL
224
225// LLT Objects.
226enum {
227 GILLT_s1,
228};
229const static size_t NumTypeObjects = 1;
230const static LLT TypeObjects[] = {
231 LLT::scalar(1),
232};
233
234// Bits for subtarget features that participate in instruction matching.
235enum SubtargetFeatureBits : uint8_t {
236};
237
238PredicateBitset RISCVO0PreLegalizerCombinerImpl::
239computeAvailableModuleFeatures(const RISCVSubtarget *Subtarget) const {
240 PredicateBitset Features{};
241 return Features;
242}
243
244void RISCVO0PreLegalizerCombinerImpl::setupGeneratedPerFunctionState(MachineFunction &MF) {
245 AvailableFunctionFeatures = computeAvailableFunctionFeatures((const RISCVSubtarget *)&MF.getSubtarget(), &MF);
246}
247PredicateBitset RISCVO0PreLegalizerCombinerImpl::
248computeAvailableFunctionFeatures(const RISCVSubtarget *Subtarget, const MachineFunction *MF) const {
249 PredicateBitset Features{};
250 return Features;
251}
252
253// Feature bitsets.
254enum {
255 GIFBS_Invalid,
256};
257constexpr static PredicateBitset FeatureBitsets[] {
258 {}, // GIFBS_Invalid
259};
260
261// ComplexPattern predicates.
262enum {
263 GICP_Invalid,
264};
265// See constructor for table contents
266
267RISCVO0PreLegalizerCombinerImpl::ComplexMatcherMemFn
268RISCVO0PreLegalizerCombinerImpl::ComplexPredicateFns[] = {
269 nullptr, // GICP_Invalid
270};
271
272bool RISCVO0PreLegalizerCombinerImpl::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI, const MatcherState &State) const {
273 llvm_unreachable("Unknown predicate");
274 return false;
275}
276bool RISCVO0PreLegalizerCombinerImpl::testMOPredicate_MO(unsigned PredicateID, const MachineOperand & MO, const MatcherState &State) const {
277 llvm_unreachable("Unknown predicate");
278 return false;
279}
280bool RISCVO0PreLegalizerCombinerImpl::testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const {
281 llvm_unreachable("Unknown predicate");
282 return false;
283}
284bool RISCVO0PreLegalizerCombinerImpl::testImmPredicate_APFloat(unsigned PredicateID, const APFloat & Imm) const {
285 llvm_unreachable("Unknown predicate");
286 return false;
287}
288bool RISCVO0PreLegalizerCombinerImpl::testImmPredicate_APInt(unsigned PredicateID, const APInt & Imm) const {
289 llvm_unreachable("Unknown predicate");
290 return false;
291}
292enum {
293 GICXXPred_Simple_IsRule0Enabled = GICXXPred_Invalid + 1,
294 GICXXPred_Simple_IsRule1Enabled,
295 GICXXPred_Simple_IsRule2Enabled,
296 GICXXPred_Simple_IsRule3Enabled,
297 GICXXPred_Simple_IsRule4Enabled,
298 GICXXPred_Simple_IsRule5Enabled,
299 GICXXPred_Simple_IsRule6Enabled,
300 GICXXPred_Simple_IsRule7Enabled,
301 GICXXPred_Simple_IsRule8Enabled,
302 GICXXPred_Simple_IsRule9Enabled,
303 GICXXPred_Simple_IsRule10Enabled,
304};
305
306bool RISCVO0PreLegalizerCombinerImpl::testSimplePredicate(unsigned Predicate) const {
307 return RuleConfig.isRuleEnabled(Predicate - GICXXPred_Invalid - 1);
308}
309// Custom renderers.
310enum {
311 GICR_Invalid,
312};
313RISCVO0PreLegalizerCombinerImpl::CustomRendererFn
314RISCVO0PreLegalizerCombinerImpl::CustomRenderers[] = {
315 nullptr, // GICR_Invalid
316};
317
318static bool RISCVO0PreLegalizerCombinerImpl_canMatchOpcode(unsigned Opc) {
319 switch (Opc) {
320 case TargetOpcode::G_MUL:
321 case TargetOpcode::G_SUB:
322 case TargetOpcode::COPY:
323 case TargetOpcode::G_FABS:
324 case TargetOpcode::G_FCANONICALIZE:
325 case TargetOpcode::G_FREEZE:
326 case TargetOpcode::G_ADD:
327 case TargetOpcode::G_AND:
328 case TargetOpcode::G_CONCAT_VECTORS:
329 case TargetOpcode::G_LOAD:
330 case TargetOpcode::G_PTR_ADD:
331 case TargetOpcode::G_SEXTLOAD:
332 case TargetOpcode::G_XOR:
333 case TargetOpcode::G_ZEXTLOAD:
334 return true;
335 default:
336 return false;
337 }
338}
339
340bool RISCVO0PreLegalizerCombinerImpl::tryCombineAll(MachineInstr &I) const {
341 if (!RISCVO0PreLegalizerCombinerImpl_canMatchOpcode(I.getOpcode()))
342 return false;
343 const PredicateBitset AvailableFeatures = getAvailableFeatures();
344 State.MIs.clear();
345 State.MIs.push_back(&I);
346 if (executeMatchTable(*this, State, ExecInfo, B, getMatchTable(), Helper.getTII(), MRI, Helper.getTRI(), Helper.getRBI(), AvailableFeatures, /*CoverageInfo*/ nullptr)) {
347 return true;
348 }
349
350 return false;
351}
352
353enum {
354 GICXXCustomAction_GICombiner0 = GICXXCustomAction_Invalid + 1,
355 GICXXCustomAction_GICombiner1,
356 GICXXCustomAction_GICombiner2,
357 GICXXCustomAction_GICombiner3,
358 GICXXCustomAction_GICombiner4,
359 GICXXCustomAction_GICombiner5,
360 GICXXCustomAction_GICombiner6,
361 GICXXCustomAction_GICombiner7,
362 GICXXCustomAction_GICombiner8,
363};
364bool RISCVO0PreLegalizerCombinerImpl::runCustomAction(unsigned ApplyID, const MatcherState &State, NewMIVector &OutMIs) const {
365 Helper.getBuilder().setInstrAndDebugLoc(*State.MIs[0]);
366 switch(ApplyID) {
367 case GICXXCustomAction_GICombiner0:{
368 // Match Patterns
369 if(![&](){return Helper.matchCombineCopy(*State.MIs[0]);}()) {
370 return false;
371 }
372 // Apply Patterns
373 Helper.applyCombineCopy(*State.MIs[0]);
374 return true;
375 }
376 case GICXXCustomAction_GICombiner1:{
377 unsigned GIMatchData_matchinfo;
378 // Match Patterns
379 if(![&](){return Helper.matchCombineMulToShl(*State.MIs[0], GIMatchData_matchinfo);}()) {
380 return false;
381 }
382 // Apply Patterns
383 Helper.applyCombineMulToShl(*State.MIs[0], GIMatchData_matchinfo);
384 return true;
385 }
386 case GICXXCustomAction_GICombiner2:{
387 std::function<void(MachineIRBuilder &)> GIMatchData_matchinfo;
388 // Match Patterns
389 if(![&](){return Helper.matchCombineSubToAdd(*State.MIs[0], GIMatchData_matchinfo);}()) {
390 return false;
391 }
392 // Apply Patterns
393 Helper.applyBuildFnNoErase(*State.MIs[0], GIMatchData_matchinfo);
394 return true;
395 }
396 case GICXXCustomAction_GICombiner3:{
397 std::pair<Register, bool> GIMatchData_info;
398 // Match Patterns
399 if(![&](){return Helper.matchCombineAddP2IToPtrAdd(*State.MIs[0], GIMatchData_info);}()) {
400 return false;
401 }
402 // Apply Patterns
403 Helper.applyCombineAddP2IToPtrAdd(*State.MIs[0], GIMatchData_info);
404 return true;
405 }
406 case GICXXCustomAction_GICombiner4:{
407 PtrAddChain GIMatchData_matchinfo;
408 // Match Patterns
409 if(![&](){return Helper.matchPtrAddImmedChain(*State.MIs[0], GIMatchData_matchinfo);}()) {
410 return false;
411 }
412 // Apply Patterns
413 Helper.applyPtrAddImmedChain(*State.MIs[0], GIMatchData_matchinfo);
414 return true;
415 }
416 case GICXXCustomAction_GICombiner5:{
417 PreferredTuple GIMatchData_matchinfo;
418 // Match Patterns
419 if(![&](){return Helper.matchCombineExtendingLoads(*State.MIs[0], GIMatchData_matchinfo);}()) {
420 return false;
421 }
422 // Apply Patterns
423 Helper.applyCombineExtendingLoads(*State.MIs[0], GIMatchData_matchinfo);
424 return true;
425 }
426 case GICXXCustomAction_GICombiner6:{
427 std::function<void(MachineIRBuilder &)> GIMatchData_matchinfo;
428 // Match Patterns
429 if(![&](){return Helper.matchCombineLoadWithAndMask(*State.MIs[0], GIMatchData_matchinfo);}()) {
430 return false;
431 }
432 // Apply Patterns
433 Helper.applyBuildFn(*State.MIs[0], GIMatchData_matchinfo);
434 return true;
435 }
436 case GICXXCustomAction_GICombiner7:{
437 SmallVector<Register> GIMatchData_info;
438 // Match Patterns
439 if(![&](){return Helper.matchNotCmp(*State.MIs[0], GIMatchData_info);}()) {
440 return false;
441 }
442 // Apply Patterns
443 Helper.applyNotCmp(*State.MIs[0], GIMatchData_info);
444 return true;
445 }
446 case GICXXCustomAction_GICombiner8:{
447 SmallVector<Register> GIMatchData_matchinfo;
448 // Match Patterns
449 if(![&](){return Helper.matchCombineConcatVectors(*State.MIs[0], GIMatchData_matchinfo);}()) {
450 return false;
451 }
452 // Apply Patterns
453 Helper.applyCombineConcatVectors(*State.MIs[0], GIMatchData_matchinfo);
454 return true;
455 }
456 }
457 llvm_unreachable("Unknown Apply Action");
458}
459#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
460#define GIMT_Encode2(Val) uint8_t(Val), uint8_t((Val) >> 8)
461#define GIMT_Encode4(Val) uint8_t(Val), uint8_t((Val) >> 8), uint8_t((Val) >> 16), uint8_t((Val) >> 24)
462#define GIMT_Encode8(Val) uint8_t(Val), uint8_t((Val) >> 8), uint8_t((Val) >> 16), uint8_t((Val) >> 24), uint8_t(uint64_t(Val) >> 32), uint8_t(uint64_t(Val) >> 40), uint8_t(uint64_t(Val) >> 48), uint8_t(uint64_t(Val) >> 56)
463#else
464#define GIMT_Encode2(Val) uint8_t((Val) >> 8), uint8_t(Val)
465#define GIMT_Encode4(Val) uint8_t((Val) >> 24), uint8_t((Val) >> 16), uint8_t((Val) >> 8), uint8_t(Val)
466#define GIMT_Encode8(Val) uint8_t(uint64_t(Val) >> 56), uint8_t(uint64_t(Val) >> 48), uint8_t(uint64_t(Val) >> 40), uint8_t(uint64_t(Val) >> 32), uint8_t((Val) >> 24), uint8_t((Val) >> 16), uint8_t((Val) >> 8), uint8_t(Val)
467#endif
468const uint8_t *RISCVO0PreLegalizerCombinerImpl::getMatchTable() const {
469 constexpr static uint8_t MatchTable0[] = {
470 /* 0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(20), GIMT_Encode2(241), /*)*//*default:*//*Label 14*/ GIMT_Encode4(1166),
471 /* 10 */ /*TargetOpcode::COPY*//*Label 0*/ GIMT_Encode4(894), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
472 /* 150 */ /*TargetOpcode::G_ADD*//*Label 1*/ GIMT_Encode4(906),
473 /* 154 */ /*TargetOpcode::G_SUB*//*Label 2*/ GIMT_Encode4(918),
474 /* 158 */ /*TargetOpcode::G_MUL*//*Label 3*/ GIMT_Encode4(940), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
475 /* 186 */ /*TargetOpcode::G_AND*//*Label 4*/ GIMT_Encode4(992), GIMT_Encode4(0),
476 /* 194 */ /*TargetOpcode::G_XOR*//*Label 5*/ GIMT_Encode4(1004), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
477 /* 270 */ /*TargetOpcode::G_CONCAT_VECTORS*//*Label 6*/ GIMT_Encode4(1016), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
478 /* 286 */ /*TargetOpcode::G_FREEZE*//*Label 7*/ GIMT_Encode4(1028), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
479 /* 326 */ /*TargetOpcode::G_LOAD*//*Label 8*/ GIMT_Encode4(1058),
480 /* 330 */ /*TargetOpcode::G_SEXTLOAD*//*Label 9*/ GIMT_Encode4(1070),
481 /* 334 */ /*TargetOpcode::G_ZEXTLOAD*//*Label 10*/ GIMT_Encode4(1082), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
482 /* 810 */ /*TargetOpcode::G_FABS*//*Label 11*/ GIMT_Encode4(1094), GIMT_Encode4(0), GIMT_Encode4(0),
483 /* 822 */ /*TargetOpcode::G_FCANONICALIZE*//*Label 12*/ GIMT_Encode4(1124), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
484 /* 890 */ /*TargetOpcode::G_PTR_ADD*//*Label 13*/ GIMT_Encode4(1154),
485 /* 894 */ // Label 0: @894
486 /* 894 */ GIM_Try, /*On fail goto*//*Label 15*/ GIMT_Encode4(905), // Rule ID 0 //
487 /* 899 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule0Enabled),
488 /* 902 */ // MIs[0] d
489 /* 902 */ // No operand predicates
490 /* 902 */ // MIs[0] s
491 /* 902 */ // No operand predicates
492 /* 902 */ // Combiner Rule #0: copy_prop
493 /* 902 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner0),
494 /* 905 */ // Label 15: @905
495 /* 905 */ GIM_Reject,
496 /* 906 */ // Label 1: @906
497 /* 906 */ GIM_Try, /*On fail goto*//*Label 16*/ GIMT_Encode4(917), // Rule ID 3 //
498 /* 911 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule3Enabled),
499 /* 914 */ // Combiner Rule #3: add_p2i_to_ptradd; wip_match_opcode 'G_ADD'
500 /* 914 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner3),
501 /* 917 */ // Label 16: @917
502 /* 917 */ GIM_Reject,
503 /* 918 */ // Label 2: @918
504 /* 918 */ GIM_Try, /*On fail goto*//*Label 17*/ GIMT_Encode4(939), // Rule ID 2 //
505 /* 923 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
506 /* 926 */ // MIs[0] d
507 /* 926 */ // No operand predicates
508 /* 926 */ // MIs[0] op1
509 /* 926 */ // No operand predicates
510 /* 926 */ // MIs[0] c
511 /* 926 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
512 /* 930 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
513 /* 934 */ // MIs[1] imm
514 /* 934 */ // No operand predicates
515 /* 934 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
516 /* 936 */ // Combiner Rule #2: sub_to_add
517 /* 936 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner2),
518 /* 939 */ // Label 17: @939
519 /* 939 */ GIM_Reject,
520 /* 940 */ // Label 3: @940
521 /* 940 */ GIM_Try, /*On fail goto*//*Label 18*/ GIMT_Encode4(980), // Rule ID 4 //
522 /* 945 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
523 /* 948 */ // MIs[0] dst
524 /* 948 */ GIM_RecordRegType, /*MI*/0, /*Op*/0, /*TempTypeIdx*/255,
525 /* 952 */ // MIs[0] x
526 /* 952 */ // No operand predicates
527 /* 952 */ // MIs[0] Operand 2
528 /* 952 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 255,
529 /* 956 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/255,
530 /* 959 */ GIR_BuildConstant, /*TempRegID*/0, /*Val*/GIMT_Encode8(0),
531 /* 969 */ // Combiner Rule #4: mul_by_neg_one
532 /* 969 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::G_SUB),
533 /* 972 */ GIR_RootToRootCopy, /*OpIdx*/0, // dst
534 /* 974 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
535 /* 977 */ GIR_RootToRootCopy, /*OpIdx*/1, // x
536 /* 979 */ GIR_EraseRootFromParent_Done,
537 /* 980 */ // Label 18: @980
538 /* 980 */ GIM_Try, /*On fail goto*//*Label 19*/ GIMT_Encode4(991), // Rule ID 1 //
539 /* 985 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),
540 /* 988 */ // MIs[0] d
541 /* 988 */ // No operand predicates
542 /* 988 */ // MIs[0] op1
543 /* 988 */ // No operand predicates
544 /* 988 */ // MIs[0] op2
545 /* 988 */ // No operand predicates
546 /* 988 */ // Combiner Rule #1: mul_to_shl
547 /* 988 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
548 /* 991 */ // Label 19: @991
549 /* 991 */ GIM_Reject,
550 /* 992 */ // Label 4: @992
551 /* 992 */ GIM_Try, /*On fail goto*//*Label 20*/ GIMT_Encode4(1003), // Rule ID 12 //
552 /* 997 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule8Enabled),
553 /* 1000 */ // Combiner Rule #8: load_and_mask; wip_match_opcode 'G_AND'
554 /* 1000 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner6),
555 /* 1003 */ // Label 20: @1003
556 /* 1003 */ GIM_Reject,
557 /* 1004 */ // Label 5: @1004
558 /* 1004 */ GIM_Try, /*On fail goto*//*Label 21*/ GIMT_Encode4(1015), // Rule ID 13 //
559 /* 1009 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
560 /* 1012 */ // Combiner Rule #9: not_cmp_fold; wip_match_opcode 'G_XOR'
561 /* 1012 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner7),
562 /* 1015 */ // Label 21: @1015
563 /* 1015 */ GIM_Reject,
564 /* 1016 */ // Label 6: @1016
565 /* 1016 */ GIM_Try, /*On fail goto*//*Label 22*/ GIMT_Encode4(1027), // Rule ID 14 //
566 /* 1021 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule10Enabled),
567 /* 1024 */ // Combiner Rule #10: combine_concat_vector; wip_match_opcode 'G_CONCAT_VECTORS'
568 /* 1024 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner8),
569 /* 1027 */ // Label 22: @1027
570 /* 1027 */ GIM_Reject,
571 /* 1028 */ // Label 7: @1028
572 /* 1028 */ GIM_Try, /*On fail goto*//*Label 23*/ GIMT_Encode4(1057), // Rule ID 5 //
573 /* 1033 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule5Enabled),
574 /* 1036 */ // MIs[0] dst
575 /* 1036 */ // No operand predicates
576 /* 1036 */ // MIs[0] src
577 /* 1036 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
578 /* 1040 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FREEZE),
579 /* 1044 */ // MIs[1] __idempotent_prop_match_0.x
580 /* 1044 */ // No operand predicates
581 /* 1044 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
582 /* 1049 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
583 /* 1051 */ // Combiner Rule #5: idempotent_prop @ [__idempotent_prop_match_0[0]]
584 /* 1051 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
585 /* 1056 */ GIR_EraseRootFromParent_Done,
586 /* 1057 */ // Label 23: @1057
587 /* 1057 */ GIM_Reject,
588 /* 1058 */ // Label 8: @1058
589 /* 1058 */ GIM_Try, /*On fail goto*//*Label 24*/ GIMT_Encode4(1069), // Rule ID 9 //
590 /* 1063 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule7Enabled),
591 /* 1066 */ // Combiner Rule #7: extending_loads; wip_match_opcode 'G_LOAD'
592 /* 1066 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner5),
593 /* 1069 */ // Label 24: @1069
594 /* 1069 */ GIM_Reject,
595 /* 1070 */ // Label 9: @1070
596 /* 1070 */ GIM_Try, /*On fail goto*//*Label 25*/ GIMT_Encode4(1081), // Rule ID 10 //
597 /* 1075 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule7Enabled),
598 /* 1078 */ // Combiner Rule #7: extending_loads; wip_match_opcode 'G_SEXTLOAD'
599 /* 1078 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner5),
600 /* 1081 */ // Label 25: @1081
601 /* 1081 */ GIM_Reject,
602 /* 1082 */ // Label 10: @1082
603 /* 1082 */ GIM_Try, /*On fail goto*//*Label 26*/ GIMT_Encode4(1093), // Rule ID 11 //
604 /* 1087 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule7Enabled),
605 /* 1090 */ // Combiner Rule #7: extending_loads; wip_match_opcode 'G_ZEXTLOAD'
606 /* 1090 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner5),
607 /* 1093 */ // Label 26: @1093
608 /* 1093 */ GIM_Reject,
609 /* 1094 */ // Label 11: @1094
610 /* 1094 */ GIM_Try, /*On fail goto*//*Label 27*/ GIMT_Encode4(1123), // Rule ID 6 //
611 /* 1099 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule5Enabled),
612 /* 1102 */ // MIs[0] dst
613 /* 1102 */ // No operand predicates
614 /* 1102 */ // MIs[0] src
615 /* 1102 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
616 /* 1106 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FABS),
617 /* 1110 */ // MIs[1] __idempotent_prop_match_0.x
618 /* 1110 */ // No operand predicates
619 /* 1110 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
620 /* 1115 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
621 /* 1117 */ // Combiner Rule #5: idempotent_prop @ [__idempotent_prop_match_0[1]]
622 /* 1117 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
623 /* 1122 */ GIR_EraseRootFromParent_Done,
624 /* 1123 */ // Label 27: @1123
625 /* 1123 */ GIM_Reject,
626 /* 1124 */ // Label 12: @1124
627 /* 1124 */ GIM_Try, /*On fail goto*//*Label 28*/ GIMT_Encode4(1153), // Rule ID 7 //
628 /* 1129 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule5Enabled),
629 /* 1132 */ // MIs[0] dst
630 /* 1132 */ // No operand predicates
631 /* 1132 */ // MIs[0] src
632 /* 1132 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
633 /* 1136 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCANONICALIZE),
634 /* 1140 */ // MIs[1] __idempotent_prop_match_0.x
635 /* 1140 */ // No operand predicates
636 /* 1140 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
637 /* 1145 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
638 /* 1147 */ // Combiner Rule #5: idempotent_prop @ [__idempotent_prop_match_0[2]]
639 /* 1147 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
640 /* 1152 */ GIR_EraseRootFromParent_Done,
641 /* 1153 */ // Label 28: @1153
642 /* 1153 */ GIM_Reject,
643 /* 1154 */ // Label 13: @1154
644 /* 1154 */ GIM_Try, /*On fail goto*//*Label 29*/ GIMT_Encode4(1165), // Rule ID 8 //
645 /* 1159 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
646 /* 1162 */ // Combiner Rule #6: ptr_add_immed_chain; wip_match_opcode 'G_PTR_ADD'
647 /* 1162 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner4),
648 /* 1165 */ // Label 29: @1165
649 /* 1165 */ GIM_Reject,
650 /* 1166 */ // Label 14: @1166
651 /* 1166 */ GIM_Reject,
652 /* 1167 */ }; // Size: 1167 bytes
653 return MatchTable0;
654}
655#undef GIMT_Encode2
656#undef GIMT_Encode4
657#undef GIMT_Encode8
658
659
660#endif // GET_GICOMBINER_IMPL
661
662#ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
663
664AvailableModuleFeatures(computeAvailableModuleFeatures(&STI)),
665AvailableFunctionFeatures()
666
667#endif // GET_GICOMBINER_CONSTRUCTOR_INITS
668
669#ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
670
671, State(0),
672ExecInfo(TypeObjects, NumTypeObjects, FeatureBitsets, ComplexPredicateFns, CustomRenderers)
673
674#endif // GET_GICOMBINER_CONSTRUCTOR_INITS
675
676