1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* RISCVPostLegalizerCombinerImpl 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 RISCVPostLegalizerCombinerImplRuleConfig {
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 10: // 3 strings to match.
42 switch (RuleIdentifier[0]) {
43 default: break;
44 case 'i': // 1 string to match.
45 if (memcmp(RuleIdentifier.data()+1, "2p_to_p2i", 9) != 0)
46 break;
47 return 12; // "i2p_to_p2i"
48 case 'p': // 1 string to match.
49 if (memcmp(RuleIdentifier.data()+1, "2i_to_i2p", 9) != 0)
50 break;
51 return 11; // "p2i_to_i2p"
52 case 's': // 1 string to match.
53 if (memcmp(RuleIdentifier.data()+1, "ub_to_add", 9) != 0)
54 break;
55 return 0; // "sub_to_add"
56 }
57 break;
58 case 11: // 1 string to match.
59 if (memcmp(RuleIdentifier.data()+0, "add_sub_reg", 11) != 0)
60 break;
61 return 17; // "add_sub_reg"
62 case 13: // 3 strings to match.
63 switch (RuleIdentifier[0]) {
64 default: break;
65 case 'l': // 1 string to match.
66 if (memcmp(RuleIdentifier.data()+1, "oad_and_mask", 12) != 0)
67 break;
68 return 2; // "load_and_mask"
69 case 'r': // 1 string to match.
70 if (memcmp(RuleIdentifier.data()+1, "edundant_and", 12) != 0)
71 break;
72 return 3; // "redundant_and"
73 case 's': // 1 string to match.
74 if (memcmp(RuleIdentifier.data()+1, "ame_val_zero", 12) != 0)
75 break;
76 return 8; // "same_val_zero"
77 }
78 break;
79 case 14: // 2 strings to match.
80 switch (RuleIdentifier[0]) {
81 default: break;
82 case 'b': // 1 string to match.
83 if (memcmp(RuleIdentifier.data()+1, "inop_same_val", 13) != 0)
84 break;
85 return 7; // "binop_same_val"
86 case 'f': // 1 string to match.
87 if (memcmp(RuleIdentifier.data()+1, "neg_fneg_fold", 13) != 0)
88 break;
89 return 14; // "fneg_fneg_fold"
90 }
91 break;
92 case 15: // 1 string to match.
93 if (memcmp(RuleIdentifier.data()+0, "extending_loads", 15) != 0)
94 break;
95 return 1; // "extending_loads"
96 case 17: // 2 strings to match.
97 switch (RuleIdentifier[0]) {
98 default: break;
99 case 'a': // 1 string to match.
100 if (memcmp(RuleIdentifier.data()+1, "nyext_trunc_fold", 16) != 0)
101 break;
102 return 13; // "anyext_trunc_fold"
103 case 's': // 1 string to match.
104 if (memcmp(RuleIdentifier.data()+1, "hift_immed_chain", 16) != 0)
105 break;
106 return 27; // "shift_immed_chain"
107 }
108 break;
109 case 18: // 3 strings to match.
110 switch (RuleIdentifier[0]) {
111 default: break;
112 case 'b': // 1 string to match.
113 if (memcmp(RuleIdentifier.data()+1, "inop_left_to_zero", 17) != 0)
114 break;
115 return 9; // "binop_left_to_zero"
116 case 'f': // 2 strings to match.
117 switch (RuleIdentifier[1]) {
118 default: break;
119 case 'o': // 1 string to match.
120 if (memcmp(RuleIdentifier.data()+2, "ld_fp_zero_store", 16) != 0)
121 break;
122 return 31; // "fold_fp_zero_store"
123 case 'p': // 1 string to match.
124 if (memcmp(RuleIdentifier.data()+2, "trunc_fpext_fold", 16) != 0)
125 break;
126 return 23; // "fptrunc_fpext_fold"
127 }
128 break;
129 }
130 break;
131 case 19: // 3 strings to match.
132 switch (RuleIdentifier[0]) {
133 default: break;
134 case 'b': // 1 string to match.
135 if (memcmp(RuleIdentifier.data()+1, "inop_right_to_zero", 18) != 0)
136 break;
137 return 10; // "binop_right_to_zero"
138 case 'r': // 1 string to match.
139 if (memcmp(RuleIdentifier.data()+1, "ight_identity_zero", 18) != 0)
140 break;
141 return 6; // "right_identity_zero"
142 case 's': // 1 string to match.
143 if (memcmp(RuleIdentifier.data()+1, "implify_neg_minmax", 18) != 0)
144 break;
145 return 30; // "simplify_neg_minmax"
146 }
147 break;
148 case 20: // 1 string to match.
149 if (memcmp(RuleIdentifier.data()+0, "bitcast_bitcast_fold", 20) != 0)
150 break;
151 return 21; // "bitcast_bitcast_fold"
152 case 21: // 2 strings to match.
153 switch (RuleIdentifier[0]) {
154 default: break;
155 case 'r': // 1 string to match.
156 if (memcmp(RuleIdentifier.data()+1, "ight_identity_one_fp", 20) != 0)
157 break;
158 return 16; // "right_identity_one_fp"
159 case 's': // 1 string to match.
160 if (memcmp(RuleIdentifier.data()+1, "elect_same_val_equiv", 20) != 0)
161 break;
162 return 5; // "select_same_val_equiv"
163 }
164 break;
165 case 22: // 2 strings to match.
166 switch (RuleIdentifier[0]) {
167 default: break;
168 case 'r': // 1 string to match.
169 if (memcmp(RuleIdentifier.data()+1, "ight_identity_one_int", 21) != 0)
170 break;
171 return 15; // "right_identity_one_int"
172 case 't': // 1 string to match.
173 if (memcmp(RuleIdentifier.data()+1, "runc_buildvector_fold", 21) != 0)
174 break;
175 return 19; // "trunc_buildvector_fold"
176 }
177 break;
178 case 23: // 1 string to match.
179 if (memcmp(RuleIdentifier.data()+0, "select_same_val_trivial", 23) != 0)
180 break;
181 return 4; // "select_same_val_trivial"
182 case 25: // 2 strings to match.
183 switch (RuleIdentifier[0]) {
184 default: break;
185 case 'b': // 1 string to match.
186 if (memcmp(RuleIdentifier.data()+1, "uildvector_identity_fold", 24) != 0)
187 break;
188 return 18; // "buildvector_identity_fold"
189 case 'r': // 1 string to match.
190 if (memcmp(RuleIdentifier.data()+1, "ight_identity_neg_one_fp", 24) != 0)
191 break;
192 return 26; // "right_identity_neg_one_fp"
193 }
194 break;
195 case 26: // 3 strings to match.
196 switch (RuleIdentifier[0]) {
197 default: break;
198 case 'b': // 1 string to match.
199 if (memcmp(RuleIdentifier.data()+1, "itcast_bitcast_to_bitcast", 25) != 0)
200 break;
201 return 22; // "bitcast_bitcast_to_bitcast"
202 case 'c': // 1 string to match.
203 if (memcmp(RuleIdentifier.data()+1, "ommute_fp_constant_to_rhs", 25) != 0)
204 break;
205 return 29; // "commute_fp_constant_to_rhs"
206 case 'r': // 1 string to match.
207 if (memcmp(RuleIdentifier.data()+1, "ight_identity_neg_zero_fp", 25) != 0)
208 break;
209 return 24; // "right_identity_neg_zero_fp"
210 }
211 break;
212 case 27: // 2 strings to match.
213 switch (RuleIdentifier[0]) {
214 default: break;
215 case 'c': // 1 string to match.
216 if (memcmp(RuleIdentifier.data()+1, "ommute_int_constant_to_rhs", 26) != 0)
217 break;
218 return 28; // "commute_int_constant_to_rhs"
219 case 't': // 1 string to match.
220 if (memcmp(RuleIdentifier.data()+1, "runc_lshr_buildvector_fold", 26) != 0)
221 break;
222 return 20; // "trunc_lshr_buildvector_fold"
223 }
224 break;
225 case 30: // 1 string to match.
226 if (memcmp(RuleIdentifier.data()+0, "right_identity_neg_zero_fp_nsz", 30) != 0)
227 break;
228 return 25; // "right_identity_neg_zero_fp_nsz"
229 }
230#endif // ifndef NDEBUG
231
232 return std::nullopt;
233}
234static std::optional<std::pair<uint64_t, uint64_t>> getRuleRangeForIdentifier(StringRef RuleIdentifier) {
235 std::pair<StringRef, StringRef> RangePair = RuleIdentifier.split('-');
236 if (!RangePair.second.empty()) {
237 const auto First = getRuleIdxForIdentifier(RangePair.first);
238 const auto Last = getRuleIdxForIdentifier(RangePair.second);
239 if (!First || !Last)
240 return std::nullopt;
241 if (First >= Last)
242 report_fatal_error("Beginning of range should be before end of range");
243 return {{*First, *Last + 1}};
244 }
245 if (RangePair.first == "*") {
246 return {{0, 32}};
247 }
248 const auto I = getRuleIdxForIdentifier(RangePair.first);
249 if (!I)
250 return std::nullopt;
251 return {{*I, *I + 1}};
252}
253
254bool RISCVPostLegalizerCombinerImplRuleConfig::setRuleEnabled(StringRef RuleIdentifier) {
255 auto MaybeRange = getRuleRangeForIdentifier(RuleIdentifier);
256 if (!MaybeRange)
257 return false;
258 for (auto I = MaybeRange->first; I < MaybeRange->second; ++I)
259 DisabledRules.reset(I);
260 return true;
261}
262
263bool RISCVPostLegalizerCombinerImplRuleConfig::setRuleDisabled(StringRef RuleIdentifier) {
264 auto MaybeRange = getRuleRangeForIdentifier(RuleIdentifier);
265 if (!MaybeRange)
266 return false;
267 for (auto I = MaybeRange->first; I < MaybeRange->second; ++I)
268 DisabledRules.set(I);
269 return true;
270}
271
272static std::vector<std::string> RISCVPostLegalizerCombinerOption;
273static cl::list<std::string> RISCVPostLegalizerCombinerDisableOption(
274 "riscvpostlegalizercombiner-disable-rule",
275 cl::desc("Disable one or more combiner rules temporarily in the RISCVPostLegalizerCombiner pass"),
276 cl::CommaSeparated,
277 cl::Hidden,
278 cl::cat(GICombinerOptionCategory),
279 cl::callback([](const std::string &Str) {
280 RISCVPostLegalizerCombinerOption.push_back(Str);
281 }));
282static cl::list<std::string> RISCVPostLegalizerCombinerOnlyEnableOption(
283 "riscvpostlegalizercombiner-only-enable-rule",
284 cl::desc("Disable all rules in the RISCVPostLegalizerCombiner pass then re-enable the specified ones"),
285 cl::Hidden,
286 cl::cat(GICombinerOptionCategory),
287 cl::callback([](const std::string &CommaSeparatedArg) {
288 StringRef Str = CommaSeparatedArg;
289 RISCVPostLegalizerCombinerOption.push_back("*");
290 do {
291 auto X = Str.split(",");
292 RISCVPostLegalizerCombinerOption.push_back(("!" + X.first).str());
293 Str = X.second;
294 } while (!Str.empty());
295 }));
296
297
298bool RISCVPostLegalizerCombinerImplRuleConfig::isRuleEnabled(unsigned RuleID) const {
299 return !DisabledRules.test(RuleID);
300}
301bool RISCVPostLegalizerCombinerImplRuleConfig::parseCommandLineOption() {
302 for (StringRef Identifier : RISCVPostLegalizerCombinerOption) {
303 bool Enabled = Identifier.consume_front("!");
304 if (Enabled && !setRuleEnabled(Identifier))
305 return false;
306 if (!Enabled && !setRuleDisabled(Identifier))
307 return false;
308 }
309 return true;
310}
311
312
313#endif // GET_GICOMBINER_TYPES
314
315#ifdef GET_GICOMBINER_TYPES
316
317const unsigned MAX_SUBTARGET_PREDICATES = 0;
318using PredicateBitset = llvm::Bitset<MAX_SUBTARGET_PREDICATES>;
319
320#endif // GET_GICOMBINER_TYPES
321
322#ifdef GET_GICOMBINER_CLASS_MEMBERS
323
324 bool canMatchOpcode(unsigned Opc) const override;
325 uint32_t getRootFlagsToDrop() const override;
326
327#endif // GET_GICOMBINER_CLASS_MEMBERS
328
329#ifdef GET_GICOMBINER_CLASS_MEMBERS
330
331PredicateBitset AvailableModuleFeatures;
332mutable PredicateBitset AvailableFunctionFeatures;
333PredicateBitset getAvailableFeatures() const {
334 return AvailableModuleFeatures | AvailableFunctionFeatures;
335}
336PredicateBitset
337computeAvailableModuleFeatures(const RISCVSubtarget *Subtarget) const;
338PredicateBitset
339computeAvailableFunctionFeatures(const RISCVSubtarget *Subtarget,
340 const MachineFunction *MF) const;
341void setupGeneratedPerFunctionState(MachineFunction &MF) override;
342
343#endif // GET_GICOMBINER_CLASS_MEMBERS
344
345#ifdef GET_GICOMBINER_CLASS_MEMBERS
346
347 mutable MatcherState State;
348 typedef ComplexRendererFns(RISCVPostLegalizerCombinerImpl::*ComplexMatcherMemFn)(MachineOperand &) const;
349 typedef void(RISCVPostLegalizerCombinerImpl::*CustomRendererFn)(MachineInstrBuilder &, const MachineInstr &, int) const;
350 const ExecInfoTy<PredicateBitset, ComplexMatcherMemFn, CustomRendererFn> ExecInfo;
351 static RISCVPostLegalizerCombinerImpl::ComplexMatcherMemFn ComplexPredicateFns[];
352 static RISCVPostLegalizerCombinerImpl::CustomRendererFn CustomRenderers[];
353 bool testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const override;
354 bool testImmPredicate_APInt(unsigned PredicateID, const APInt &Imm) const override;
355 bool testImmPredicate_APFloat(unsigned PredicateID, const APFloat &Imm) const override;
356 const uint8_t *getMatchTable() const override;
357 bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI, const MatcherState &State) const override;
358 bool testMOPredicate_MO(unsigned PredicateID, const MachineOperand &MO, const MatcherState &State) const override;
359 bool testSimplePredicate(unsigned PredicateID) const override;
360 bool runCustomAction(unsigned FnID, const MatcherState &State, NewMIVector &OutMIs) const override;
361
362#endif // GET_GICOMBINER_CLASS_MEMBERS
363
364#ifdef GET_GICOMBINER_IMPL
365
366// LLT Objects.
367enum {
368 GILLT_s1,
369};
370const static size_t NumTypeObjects = 1;
371const static LLT TypeObjects[] = {
372 LLT::scalar(1),
373};
374
375// Bits for subtarget features that participate in instruction matching.
376enum SubtargetFeatureBits : uint8_t {
377};
378
379PredicateBitset RISCVPostLegalizerCombinerImpl::
380computeAvailableModuleFeatures(const RISCVSubtarget *Subtarget) const {
381 PredicateBitset Features{};
382 return Features;
383}
384
385void RISCVPostLegalizerCombinerImpl::setupGeneratedPerFunctionState(MachineFunction &MF) {
386 AvailableFunctionFeatures = computeAvailableFunctionFeatures((const RISCVSubtarget *)&MF.getSubtarget(), &MF);
387}
388PredicateBitset RISCVPostLegalizerCombinerImpl::
389computeAvailableFunctionFeatures(const RISCVSubtarget *Subtarget, const MachineFunction *MF) const {
390 PredicateBitset Features{};
391 return Features;
392}
393
394// Feature bitsets.
395enum {
396 GIFBS_Invalid,
397};
398constexpr static PredicateBitset FeatureBitsets[] {
399 {}, // GIFBS_Invalid
400};
401
402// ComplexPattern predicates.
403enum {
404 GICP_Invalid,
405};
406// See constructor for table contents
407
408RISCVPostLegalizerCombinerImpl::ComplexMatcherMemFn
409RISCVPostLegalizerCombinerImpl::ComplexPredicateFns[] = {
410 nullptr, // GICP_Invalid
411};
412
413enum {
414 GICXXPred_MI_Predicate_GICombiner0 = GICXXPred_Invalid + 1,
415 GICXXPred_MI_Predicate_GICombiner1,
416 GICXXPred_MI_Predicate_GICombiner2,
417 GICXXPred_MI_Predicate_GICombiner3,
418 GICXXPred_MI_Predicate_GICombiner4,
419 GICXXPred_MI_Predicate_GICombiner5,
420 GICXXPred_MI_Predicate_GICombiner6,
421};
422bool RISCVPostLegalizerCombinerImpl::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI, const MatcherState &State) const {
423 switch (PredicateID) {
424 case GICXXPred_MI_Predicate_GICombiner0: {
425 return Helper.matchSelectSameVal(*State.MIs[0]);
426 }
427 case GICXXPred_MI_Predicate_GICombiner1: {
428 return MRI.getType(State.MIs[1]->getOperand(1).getReg()) == MRI.getType(State.MIs[0]->getOperand(0).getReg());
429 }
430 case GICXXPred_MI_Predicate_GICombiner2: {
431 return Helper.matchConstantFPOp(State.MIs[0]->getOperand(2), 1.0);
432 }
433 case GICXXPred_MI_Predicate_GICombiner3: {
434 return MRI.getType(State.MIs[1]->getOperand(1).getReg()) != MRI.getType(State.MIs[0]->getOperand(0).getReg());
435 }
436 case GICXXPred_MI_Predicate_GICombiner4: {
437 return Helper.matchConstantFPOp(State.MIs[0]->getOperand(2), -0.0);
438 }
439 case GICXXPred_MI_Predicate_GICombiner5: {
440 return Helper.matchConstantFPOp(State.MIs[0]->getOperand(2), 0.0);
441 }
442 case GICXXPred_MI_Predicate_GICombiner6: {
443 return Helper.matchConstantFPOp(State.MIs[0]->getOperand(2), -1.0);
444 }
445 }
446 llvm_unreachable("Unknown predicate");
447 return false;
448}
449bool RISCVPostLegalizerCombinerImpl::testMOPredicate_MO(unsigned PredicateID, const MachineOperand & MO, const MatcherState &State) const {
450 llvm_unreachable("Unknown predicate");
451 return false;
452}
453bool RISCVPostLegalizerCombinerImpl::testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const {
454 llvm_unreachable("Unknown predicate");
455 return false;
456}
457bool RISCVPostLegalizerCombinerImpl::testImmPredicate_APFloat(unsigned PredicateID, const APFloat & Imm) const {
458 llvm_unreachable("Unknown predicate");
459 return false;
460}
461bool RISCVPostLegalizerCombinerImpl::testImmPredicate_APInt(unsigned PredicateID, const APInt & Imm) const {
462 llvm_unreachable("Unknown predicate");
463 return false;
464}
465enum {
466 GICXXPred_Simple_IsRule0Enabled = GICXXPred_Invalid + 1,
467 GICXXPred_Simple_IsRule1Enabled,
468 GICXXPred_Simple_IsRule2Enabled,
469 GICXXPred_Simple_IsRule3Enabled,
470 GICXXPred_Simple_IsRule4Enabled,
471 GICXXPred_Simple_IsRule5Enabled,
472 GICXXPred_Simple_IsRule6Enabled,
473 GICXXPred_Simple_IsRule7Enabled,
474 GICXXPred_Simple_IsRule8Enabled,
475 GICXXPred_Simple_IsRule9Enabled,
476 GICXXPred_Simple_IsRule10Enabled,
477 GICXXPred_Simple_IsRule11Enabled,
478 GICXXPred_Simple_IsRule12Enabled,
479 GICXXPred_Simple_IsRule13Enabled,
480 GICXXPred_Simple_IsRule14Enabled,
481 GICXXPred_Simple_IsRule15Enabled,
482 GICXXPred_Simple_IsRule16Enabled,
483 GICXXPred_Simple_IsRule17Enabled,
484 GICXXPred_Simple_IsRule18Enabled,
485 GICXXPred_Simple_IsRule19Enabled,
486 GICXXPred_Simple_IsRule20Enabled,
487 GICXXPred_Simple_IsRule21Enabled,
488 GICXXPred_Simple_IsRule22Enabled,
489 GICXXPred_Simple_IsRule23Enabled,
490 GICXXPred_Simple_IsRule24Enabled,
491 GICXXPred_Simple_IsRule25Enabled,
492 GICXXPred_Simple_IsRule26Enabled,
493 GICXXPred_Simple_IsRule27Enabled,
494 GICXXPred_Simple_IsRule28Enabled,
495 GICXXPred_Simple_IsRule29Enabled,
496 GICXXPred_Simple_IsRule30Enabled,
497 GICXXPred_Simple_IsRule31Enabled,
498};
499
500bool RISCVPostLegalizerCombinerImpl::testSimplePredicate(unsigned Predicate) const {
501 return RuleConfig.isRuleEnabled(Predicate - GICXXPred_Invalid - 1);
502}
503// Custom renderers.
504enum {
505 GICR_Invalid,
506};
507RISCVPostLegalizerCombinerImpl::CustomRendererFn
508RISCVPostLegalizerCombinerImpl::CustomRenderers[] = {
509 nullptr, // GICR_Invalid
510};
511
512bool RISCVPostLegalizerCombinerImpl::canMatchOpcode(unsigned Opc) const {
513 switch (Opc) {
514 case TargetOpcode::G_SELECT:
515 case TargetOpcode::G_ADD:
516 case TargetOpcode::G_AND:
517 case TargetOpcode::G_ASHR:
518 case TargetOpcode::G_FADD:
519 case TargetOpcode::G_FMUL:
520 case TargetOpcode::G_LSHR:
521 case TargetOpcode::G_MUL:
522 case TargetOpcode::G_OR:
523 case TargetOpcode::G_PTR_ADD:
524 case TargetOpcode::G_ROTL:
525 case TargetOpcode::G_ROTR:
526 case TargetOpcode::G_SDIV:
527 case TargetOpcode::G_SHL:
528 case TargetOpcode::G_SREM:
529 case TargetOpcode::G_SUB:
530 case TargetOpcode::G_UDIV:
531 case TargetOpcode::G_UREM:
532 case TargetOpcode::G_XOR:
533 case TargetOpcode::G_ANYEXT:
534 case TargetOpcode::G_BITCAST:
535 case TargetOpcode::G_FNEG:
536 case TargetOpcode::G_FPTRUNC:
537 case TargetOpcode::G_INTTOPTR:
538 case TargetOpcode::G_PTRTOINT:
539 case TargetOpcode::G_STORE:
540 case TargetOpcode::G_TRUNC:
541 case TargetOpcode::G_BUILD_VECTOR:
542 case TargetOpcode::G_BUILD_VECTOR_TRUNC:
543 case TargetOpcode::G_FMAXIMUM:
544 case TargetOpcode::G_FMAXNUM:
545 case TargetOpcode::G_FMAXNUM_IEEE:
546 case TargetOpcode::G_FMINIMUM:
547 case TargetOpcode::G_FMINNUM:
548 case TargetOpcode::G_FMINNUM_IEEE:
549 case TargetOpcode::G_LOAD:
550 case TargetOpcode::G_SADDO:
551 case TargetOpcode::G_SADDSAT:
552 case TargetOpcode::G_SEXTLOAD:
553 case TargetOpcode::G_SMAX:
554 case TargetOpcode::G_SMIN:
555 case TargetOpcode::G_SMULFIX:
556 case TargetOpcode::G_SMULFIXSAT:
557 case TargetOpcode::G_SMULH:
558 case TargetOpcode::G_SMULO:
559 case TargetOpcode::G_SSHLSAT:
560 case TargetOpcode::G_UADDO:
561 case TargetOpcode::G_UADDSAT:
562 case TargetOpcode::G_UMAX:
563 case TargetOpcode::G_UMIN:
564 case TargetOpcode::G_UMULFIX:
565 case TargetOpcode::G_UMULFIXSAT:
566 case TargetOpcode::G_UMULH:
567 case TargetOpcode::G_UMULO:
568 case TargetOpcode::G_USHLSAT:
569 case TargetOpcode::G_ZEXTLOAD:
570 return true;
571 default:
572 return false;
573 }
574}
575
576uint32_t RISCVPostLegalizerCombinerImpl::getRootFlagsToDrop() const {
577 return MachineInstr::getPoisonGeneratingFlags();
578}
579
580bool RISCVPostLegalizerCombinerImpl::tryCombineAll(MachineInstr &I) const {
581 const PredicateBitset AvailableFeatures = getAvailableFeatures();
582 State.MIs.clear();
583 State.MIs.push_back(&I);
584 if (executeMatchTable(*this, State, ExecInfo, B, getMatchTable(), Helper.getTII(), MRI, Helper.getTRI(), Helper.getRBI(), AvailableFeatures, /*CoverageInfo*/ nullptr)) {
585 return true;
586 }
587
588 return false;
589}
590
591enum {
592 GICXXCustomAction_GICombiner0 = GICXXCustomAction_Invalid + 1,
593 GICXXCustomAction_GICombiner1,
594 GICXXCustomAction_GICombiner2,
595 GICXXCustomAction_GICombiner3,
596 GICXXCustomAction_GICombiner4,
597 GICXXCustomAction_GICombiner5,
598 GICXXCustomAction_GICombiner6,
599 GICXXCustomAction_GICombiner7,
600 GICXXCustomAction_GICombiner8,
601 GICXXCustomAction_GICombiner9,
602 GICXXCustomAction_GICombiner10,
603 GICXXCustomAction_GICombiner11,
604 GICXXCustomAction_GICombiner12,
605 GICXXCustomAction_GICombiner13,
606 GICXXCustomAction_GICombiner14,
607};
608bool RISCVPostLegalizerCombinerImpl::runCustomAction(unsigned ApplyID, const MatcherState &State, NewMIVector &OutMIs) const {
609 Helper.getBuilder().setInstrAndDebugLoc(*State.MIs[0]);
610 switch(ApplyID) {
611 case GICXXCustomAction_GICombiner0:{
612 std::function<void(MachineIRBuilder &)> GIMatchData_matchinfo;
613 // Match Patterns
614 if(![&](){return Helper.matchCombineSubToAdd(*State.MIs[0], GIMatchData_matchinfo);}()) {
615 return false;
616 }
617 // Apply Patterns
618 Helper.applyBuildFnNoErase(*State.MIs[0], GIMatchData_matchinfo);
619 return true;
620 }
621 case GICXXCustomAction_GICombiner1:{
622 PreferredTuple GIMatchData_matchinfo;
623 // Match Patterns
624 if(![&](){return Helper.matchCombineExtendingLoads(*State.MIs[0], GIMatchData_matchinfo);}()) {
625 return false;
626 }
627 // Apply Patterns
628 Helper.applyCombineExtendingLoads(*State.MIs[0], GIMatchData_matchinfo);
629 return true;
630 }
631 case GICXXCustomAction_GICombiner2:{
632 std::function<void(MachineIRBuilder &)> GIMatchData_matchinfo;
633 // Match Patterns
634 if(![&](){return Helper.matchCombineLoadWithAndMask(*State.MIs[0], GIMatchData_matchinfo);}()) {
635 return false;
636 }
637 // Apply Patterns
638 Helper.applyBuildFn(*State.MIs[0], GIMatchData_matchinfo);
639 return true;
640 }
641 case GICXXCustomAction_GICombiner3:{
642 Register GIMatchData_matchinfo;
643 // Match Patterns
644 if(![&](){return Helper.matchRedundantAnd(*State.MIs[0], GIMatchData_matchinfo);}()) {
645 return false;
646 }
647 // Apply Patterns
648 Helper.replaceSingleDefInstWithReg(*State.MIs[0], GIMatchData_matchinfo);
649 return true;
650 }
651 case GICXXCustomAction_GICombiner4:{
652 Register GIMatchData_info;
653 // Match Patterns
654 if(![&](){GIMatchData_info = State.MIs[1]->getOperand(1).getReg(); return true;}()) {
655 return false;
656 }
657 // Apply Patterns
658 Helper.applyCombineP2IToI2P(*State.MIs[0], GIMatchData_info);
659 return true;
660 }
661 case GICXXCustomAction_GICombiner5:{
662 Register GIMatchData_matchinfo;
663 // Match Patterns
664 if(![&](){return Helper.matchCombineAnyExtTrunc(*State.MIs[0], GIMatchData_matchinfo);}()) {
665 return false;
666 }
667 // Apply Patterns
668 Helper.replaceSingleDefInstWithReg(*State.MIs[0], GIMatchData_matchinfo);
669 return true;
670 }
671 case GICXXCustomAction_GICombiner6:{
672 Register GIMatchData_matchinfo;
673 // Match Patterns
674 if(![&](){return Helper.matchBuildVectorIdentityFold(*State.MIs[0], GIMatchData_matchinfo);}()) {
675 return false;
676 }
677 // Apply Patterns
678 Helper.replaceSingleDefInstWithReg(*State.MIs[0], GIMatchData_matchinfo);
679 return true;
680 }
681 case GICXXCustomAction_GICombiner7:{
682 Register GIMatchData_matchinfo;
683 // Match Patterns
684 if(![&](){return Helper.matchTruncBuildVectorFold(*State.MIs[0], GIMatchData_matchinfo);}()) {
685 return false;
686 }
687 // Apply Patterns
688 Helper.replaceSingleDefInstWithReg(*State.MIs[0], GIMatchData_matchinfo);
689 return true;
690 }
691 case GICXXCustomAction_GICombiner8:{
692 Register GIMatchData_matchinfo;
693 // Match Patterns
694 if(![&](){return Helper.matchTruncLshrBuildVectorFold(*State.MIs[0], GIMatchData_matchinfo);}()) {
695 return false;
696 }
697 // Apply Patterns
698 Helper.replaceSingleDefInstWithReg(*State.MIs[0], GIMatchData_matchinfo);
699 return true;
700 }
701 case GICXXCustomAction_GICombiner9:{
702 // Match Patterns
703 if(![&](){return MRI.getType(State.MIs[1]->getOperand(1).getReg()) == MRI.getType(State.MIs[0]->getOperand(0).getReg());}()) {
704 return false;
705 }
706 // Apply Patterns
707 Helper.replaceSingleDefInstWithReg(*State.MIs[0], State.MIs[1]->getOperand(1).getReg());
708 return true;
709 }
710 case GICXXCustomAction_GICombiner10:{
711 RegisterImmPair GIMatchData_matchinfo;
712 // Match Patterns
713 if(![&](){return Helper.matchShiftImmedChain(*State.MIs[0], GIMatchData_matchinfo);}()) {
714 return false;
715 }
716 // Apply Patterns
717 Helper.applyShiftImmedChain(*State.MIs[0], GIMatchData_matchinfo);
718 return true;
719 }
720 case GICXXCustomAction_GICombiner11:{
721 // Match Patterns
722 if(![&](){return Helper.matchCommuteConstantToRHS(*State.MIs[0]);}()) {
723 return false;
724 }
725 // Apply Patterns
726 Helper.applyCommuteBinOpOperands(*State.MIs[0]);
727 return true;
728 }
729 case GICXXCustomAction_GICombiner12:{
730 // Match Patterns
731 if(![&](){return Helper.matchCommuteFPConstantToRHS(*State.MIs[0]);}()) {
732 return false;
733 }
734 // Apply Patterns
735 Helper.applyCommuteBinOpOperands(*State.MIs[0]);
736 return true;
737 }
738 case GICXXCustomAction_GICombiner13:{
739 std::function<void(MachineIRBuilder &)> GIMatchData_matchinfo;
740 // Match Patterns
741 if(![&](){return Helper.matchSimplifyNegMinMax(*State.MIs[0], GIMatchData_matchinfo);}()) {
742 return false;
743 }
744 // Apply Patterns
745 Helper.applyBuildFn(*State.MIs[0], GIMatchData_matchinfo);
746 return true;
747 }
748 case GICXXCustomAction_GICombiner14:{
749 Register GIMatchData_matchinfo;
750 // Match Patterns
751 if(![&](){return matchFoldFPZeroStore(*State.MIs[0], MRI, STI, GIMatchData_matchinfo);}()) {
752 return false;
753 }
754 // Apply Patterns
755 applyFoldFPZeroStore(*State.MIs[0], MRI, B, STI, GIMatchData_matchinfo);
756 return true;
757 }
758 }
759 llvm_unreachable("Unknown Apply Action");
760}
761#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
762#define GIMT_Encode2(Val) uint8_t(Val), uint8_t((Val) >> 8)
763#define GIMT_Encode4(Val) uint8_t(Val), uint8_t((Val) >> 8), uint8_t((Val) >> 16), uint8_t((Val) >> 24)
764#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)
765#else
766#define GIMT_Encode2(Val) uint8_t((Val) >> 8), uint8_t(Val)
767#define GIMT_Encode4(Val) uint8_t((Val) >> 24), uint8_t((Val) >> 16), uint8_t((Val) >> 8), uint8_t(Val)
768#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)
769#endif
770const uint8_t *RISCVPostLegalizerCombinerImpl::getMatchTable() const {
771 constexpr static uint8_t MatchTable0[] = {
772 /* 0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(55), GIMT_Encode2(246), /*)*//*default:*//*Label 56*/ GIMT_Encode4(2446),
773 /* 10 */ /*TargetOpcode::G_ADD*//*Label 0*/ GIMT_Encode4(774),
774 /* 14 */ /*TargetOpcode::G_SUB*//*Label 1*/ GIMT_Encode4(877),
775 /* 18 */ /*TargetOpcode::G_MUL*//*Label 2*/ GIMT_Encode4(972),
776 /* 22 */ /*TargetOpcode::G_SDIV*//*Label 3*/ GIMT_Encode4(1070),
777 /* 26 */ /*TargetOpcode::G_UDIV*//*Label 4*/ GIMT_Encode4(1111),
778 /* 30 */ /*TargetOpcode::G_SREM*//*Label 5*/ GIMT_Encode4(1152),
779 /* 34 */ /*TargetOpcode::G_UREM*//*Label 6*/ GIMT_Encode4(1193), GIMT_Encode4(0), GIMT_Encode4(0),
780 /* 46 */ /*TargetOpcode::G_AND*//*Label 7*/ GIMT_Encode4(1234),
781 /* 50 */ /*TargetOpcode::G_OR*//*Label 8*/ GIMT_Encode4(1292),
782 /* 54 */ /*TargetOpcode::G_XOR*//*Label 9*/ GIMT_Encode4(1351), 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),
783 /* 122 */ /*TargetOpcode::G_BUILD_VECTOR*//*Label 10*/ GIMT_Encode4(1425),
784 /* 126 */ /*TargetOpcode::G_BUILD_VECTOR_TRUNC*//*Label 11*/ GIMT_Encode4(1437), GIMT_Encode4(0),
785 /* 134 */ /*TargetOpcode::G_PTRTOINT*//*Label 12*/ GIMT_Encode4(1449),
786 /* 138 */ /*TargetOpcode::G_INTTOPTR*//*Label 13*/ GIMT_Encode4(1471),
787 /* 142 */ /*TargetOpcode::G_BITCAST*//*Label 14*/ GIMT_Encode4(1505), 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),
788 /* 186 */ /*TargetOpcode::G_LOAD*//*Label 15*/ GIMT_Encode4(1559),
789 /* 190 */ /*TargetOpcode::G_SEXTLOAD*//*Label 16*/ GIMT_Encode4(1571),
790 /* 194 */ /*TargetOpcode::G_ZEXTLOAD*//*Label 17*/ GIMT_Encode4(1583), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
791 /* 214 */ /*TargetOpcode::G_STORE*//*Label 18*/ GIMT_Encode4(1595), 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),
792 /* 362 */ /*TargetOpcode::G_ANYEXT*//*Label 19*/ GIMT_Encode4(1607),
793 /* 366 */ /*TargetOpcode::G_TRUNC*//*Label 20*/ GIMT_Encode4(1619), 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),
794 /* 410 */ /*TargetOpcode::G_SHL*//*Label 21*/ GIMT_Encode4(1642),
795 /* 414 */ /*TargetOpcode::G_LSHR*//*Label 22*/ GIMT_Encode4(1717),
796 /* 418 */ /*TargetOpcode::G_ASHR*//*Label 23*/ GIMT_Encode4(1792), GIMT_Encode4(0), GIMT_Encode4(0),
797 /* 430 */ /*TargetOpcode::G_ROTR*//*Label 24*/ GIMT_Encode4(1867),
798 /* 434 */ /*TargetOpcode::G_ROTL*//*Label 25*/ GIMT_Encode4(1891), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
799 /* 454 */ /*TargetOpcode::G_SELECT*//*Label 26*/ GIMT_Encode4(1915),
800 /* 458 */ /*TargetOpcode::G_UADDO*//*Label 27*/ GIMT_Encode4(1963), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
801 /* 474 */ /*TargetOpcode::G_SADDO*//*Label 28*/ GIMT_Encode4(1975), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
802 /* 490 */ /*TargetOpcode::G_UMULO*//*Label 29*/ GIMT_Encode4(1987),
803 /* 494 */ /*TargetOpcode::G_SMULO*//*Label 30*/ GIMT_Encode4(1999),
804 /* 498 */ /*TargetOpcode::G_UMULH*//*Label 31*/ GIMT_Encode4(2011),
805 /* 502 */ /*TargetOpcode::G_SMULH*//*Label 32*/ GIMT_Encode4(2023),
806 /* 506 */ /*TargetOpcode::G_UADDSAT*//*Label 33*/ GIMT_Encode4(2035),
807 /* 510 */ /*TargetOpcode::G_SADDSAT*//*Label 34*/ GIMT_Encode4(2047), GIMT_Encode4(0), GIMT_Encode4(0),
808 /* 522 */ /*TargetOpcode::G_USHLSAT*//*Label 35*/ GIMT_Encode4(2059),
809 /* 526 */ /*TargetOpcode::G_SSHLSAT*//*Label 36*/ GIMT_Encode4(2071),
810 /* 530 */ /*TargetOpcode::G_SMULFIX*//*Label 37*/ GIMT_Encode4(2083),
811 /* 534 */ /*TargetOpcode::G_UMULFIX*//*Label 38*/ GIMT_Encode4(2095),
812 /* 538 */ /*TargetOpcode::G_SMULFIXSAT*//*Label 39*/ GIMT_Encode4(2107),
813 /* 542 */ /*TargetOpcode::G_UMULFIXSAT*//*Label 40*/ GIMT_Encode4(2119), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
814 /* 562 */ /*TargetOpcode::G_FADD*//*Label 41*/ GIMT_Encode4(2131), GIMT_Encode4(0),
815 /* 570 */ /*TargetOpcode::G_FMUL*//*Label 42*/ GIMT_Encode4(2195), 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),
816 /* 634 */ /*TargetOpcode::G_FNEG*//*Label 43*/ GIMT_Encode4(2250), GIMT_Encode4(0),
817 /* 642 */ /*TargetOpcode::G_FPTRUNC*//*Label 44*/ GIMT_Encode4(2280), 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),
818 /* 686 */ /*TargetOpcode::G_FMINNUM*//*Label 45*/ GIMT_Encode4(2302),
819 /* 690 */ /*TargetOpcode::G_FMAXNUM*//*Label 46*/ GIMT_Encode4(2314),
820 /* 694 */ /*TargetOpcode::G_FMINNUM_IEEE*//*Label 47*/ GIMT_Encode4(2326),
821 /* 698 */ /*TargetOpcode::G_FMAXNUM_IEEE*//*Label 48*/ GIMT_Encode4(2338),
822 /* 702 */ /*TargetOpcode::G_FMINIMUM*//*Label 49*/ GIMT_Encode4(2350),
823 /* 706 */ /*TargetOpcode::G_FMAXIMUM*//*Label 50*/ GIMT_Encode4(2362), 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),
824 /* 750 */ /*TargetOpcode::G_PTR_ADD*//*Label 51*/ GIMT_Encode4(2374), GIMT_Encode4(0),
825 /* 758 */ /*TargetOpcode::G_SMIN*//*Label 52*/ GIMT_Encode4(2398),
826 /* 762 */ /*TargetOpcode::G_SMAX*//*Label 53*/ GIMT_Encode4(2410),
827 /* 766 */ /*TargetOpcode::G_UMIN*//*Label 54*/ GIMT_Encode4(2422),
828 /* 770 */ /*TargetOpcode::G_UMAX*//*Label 55*/ GIMT_Encode4(2434),
829 /* 774 */ // Label 0: @774
830 /* 774 */ GIM_Try, /*On fail goto*//*Label 57*/ GIMT_Encode4(785), // Rule ID 54 //
831 /* 779 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
832 /* 782 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_ADD'
833 /* 782 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
834 /* 785 */ // Label 57: @785
835 /* 785 */ GIM_Try, /*On fail goto*//*Label 58*/ GIMT_Encode4(819), // Rule ID 38 //
836 /* 790 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule17Enabled),
837 /* 793 */ // MIs[0] dst
838 /* 793 */ // No operand predicates
839 /* 793 */ // MIs[0] __add_sub_reg_match_0.tmp
840 /* 793 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
841 /* 797 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_SUB),
842 /* 801 */ // MIs[1] src
843 /* 801 */ // No operand predicates
844 /* 801 */ // MIs[1] __add_sub_reg_match_0.x
845 /* 801 */ // No operand predicates
846 /* 801 */ // MIs[0] __add_sub_reg_match_0.x
847 /* 801 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/1, /*OtherOpIdx*/2,
848 /* 806 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
849 /* 811 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
850 /* 813 */ // Combiner Rule #17: add_sub_reg @ [__add_sub_reg_match_0[1]]
851 /* 813 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
852 /* 818 */ GIR_EraseRootFromParent_Done,
853 /* 819 */ // Label 58: @819
854 /* 819 */ GIM_Try, /*On fail goto*//*Label 59*/ GIMT_Encode4(853), // Rule ID 37 //
855 /* 824 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule17Enabled),
856 /* 827 */ // MIs[0] dst
857 /* 827 */ // No operand predicates
858 /* 827 */ // MIs[0] __add_sub_reg_match_0.x
859 /* 827 */ // No operand predicates
860 /* 827 */ // MIs[0] __add_sub_reg_match_0.tmp
861 /* 827 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
862 /* 831 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_SUB),
863 /* 835 */ // MIs[1] src
864 /* 835 */ // No operand predicates
865 /* 835 */ // MIs[1] __add_sub_reg_match_0.x
866 /* 835 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/1, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
867 /* 840 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
868 /* 845 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
869 /* 847 */ // Combiner Rule #17: add_sub_reg @ [__add_sub_reg_match_0[0]]
870 /* 847 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
871 /* 852 */ GIR_EraseRootFromParent_Done,
872 /* 853 */ // Label 59: @853
873 /* 853 */ GIM_Try, /*On fail goto*//*Label 60*/ GIMT_Encode4(876), // Rule ID 9 //
874 /* 858 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
875 /* 861 */ // MIs[0] dst
876 /* 861 */ // No operand predicates
877 /* 861 */ // MIs[0] lhs
878 /* 861 */ // No operand predicates
879 /* 861 */ // MIs[0] Operand 2
880 /* 861 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
881 /* 865 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
882 /* 870 */ // Combiner Rule #6: right_identity_zero @ [__right_identity_zero_match_0[1]]
883 /* 870 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
884 /* 875 */ GIR_EraseRootFromParent_Done,
885 /* 876 */ // Label 60: @876
886 /* 876 */ GIM_Reject,
887 /* 877 */ // Label 1: @877
888 /* 877 */ GIM_Try, /*On fail goto*//*Label 61*/ GIMT_Encode4(916), // Rule ID 20 //
889 /* 882 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule8Enabled),
890 /* 885 */ // MIs[0] dst
891 /* 885 */ // No operand predicates
892 /* 885 */ // MIs[0] x
893 /* 885 */ GIM_RecordRegType, /*MI*/0, /*Op*/1, /*TempTypeIdx*/255,
894 /* 889 */ // MIs[0] x
895 /* 889 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
896 /* 894 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/255,
897 /* 897 */ GIR_BuildConstant, /*TempRegID*/0, /*Val*/GIMT_Encode8(0),
898 /* 907 */ // Combiner Rule #8: same_val_zero @ [__same_val_zero_match_0[0]]
899 /* 907 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::COPY),
900 /* 910 */ GIR_RootToRootCopy, /*OpIdx*/0, // dst
901 /* 912 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
902 /* 915 */ GIR_EraseRootFromParent_Done,
903 /* 916 */ // Label 61: @916
904 /* 916 */ GIM_Try, /*On fail goto*//*Label 62*/ GIMT_Encode4(939), // Rule ID 8 //
905 /* 921 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
906 /* 924 */ // MIs[0] dst
907 /* 924 */ // No operand predicates
908 /* 924 */ // MIs[0] lhs
909 /* 924 */ // No operand predicates
910 /* 924 */ // MIs[0] Operand 2
911 /* 924 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
912 /* 928 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
913 /* 933 */ // Combiner Rule #6: right_identity_zero @ [__right_identity_zero_match_0[0]]
914 /* 933 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
915 /* 938 */ GIR_EraseRootFromParent_Done,
916 /* 939 */ // Label 62: @939
917 /* 939 */ GIM_Try, /*On fail goto*//*Label 63*/ GIMT_Encode4(960), // Rule ID 0 //
918 /* 944 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule0Enabled),
919 /* 947 */ // MIs[0] d
920 /* 947 */ // No operand predicates
921 /* 947 */ // MIs[0] op1
922 /* 947 */ // No operand predicates
923 /* 947 */ // MIs[0] c
924 /* 947 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
925 /* 951 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
926 /* 955 */ // MIs[1] imm
927 /* 955 */ // No operand predicates
928 /* 955 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
929 /* 957 */ // Combiner Rule #0: sub_to_add
930 /* 957 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner0),
931 /* 960 */ // Label 63: @960
932 /* 960 */ GIM_Try, /*On fail goto*//*Label 64*/ GIMT_Encode4(971), // Rule ID 83 //
933 /* 965 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule30Enabled),
934 /* 968 */ // MIs[0] dst
935 /* 968 */ // No operand predicates
936 /* 968 */ // MIs[0] src1
937 /* 968 */ // No operand predicates
938 /* 968 */ // MIs[0] src2
939 /* 968 */ // No operand predicates
940 /* 968 */ // Combiner Rule #30: simplify_neg_minmax
941 /* 968 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner13),
942 /* 971 */ // Label 64: @971
943 /* 971 */ GIM_Reject,
944 /* 972 */ // Label 2: @972
945 /* 972 */ GIM_Try, /*On fail goto*//*Label 65*/ GIMT_Encode4(983), // Rule ID 55 //
946 /* 977 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
947 /* 980 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_MUL'
948 /* 980 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
949 /* 983 */ // Label 65: @983
950 /* 983 */ GIM_Try, /*On fail goto*//*Label 66*/ GIMT_Encode4(1023), // Rule ID 29 //
951 /* 988 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
952 /* 991 */ // MIs[0] dst
953 /* 991 */ // No operand predicates
954 /* 991 */ // MIs[0] zero
955 /* 991 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
956 /* 995 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
957 /* 999 */ // MIs[1] Operand 1
958 /* 999 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
959 /* 1010 */ // MIs[0] rhs
960 /* 1010 */ // No operand predicates
961 /* 1010 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
962 /* 1015 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
963 /* 1017 */ // Combiner Rule #9: binop_left_to_zero @ [__binop_left_to_zero_match_0[7]]
964 /* 1017 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
965 /* 1022 */ GIR_EraseRootFromParent_Done,
966 /* 1023 */ // Label 66: @1023
967 /* 1023 */ GIM_Try, /*On fail goto*//*Label 67*/ GIMT_Encode4(1046), // Rule ID 30 //
968 /* 1028 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule10Enabled),
969 /* 1031 */ // MIs[0] dst
970 /* 1031 */ // No operand predicates
971 /* 1031 */ // MIs[0] lhs
972 /* 1031 */ // No operand predicates
973 /* 1031 */ // MIs[0] zero
974 /* 1031 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
975 /* 1035 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
976 /* 1040 */ // Combiner Rule #10: binop_right_to_zero
977 /* 1040 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
978 /* 1045 */ GIR_EraseRootFromParent_Done,
979 /* 1046 */ // Label 67: @1046
980 /* 1046 */ GIM_Try, /*On fail goto*//*Label 68*/ GIMT_Encode4(1069), // Rule ID 35 //
981 /* 1051 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule15Enabled),
982 /* 1054 */ // MIs[0] dst
983 /* 1054 */ // No operand predicates
984 /* 1054 */ // MIs[0] x
985 /* 1054 */ // No operand predicates
986 /* 1054 */ // MIs[0] Operand 2
987 /* 1054 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 1,
988 /* 1058 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
989 /* 1063 */ // Combiner Rule #15: right_identity_one_int
990 /* 1063 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
991 /* 1068 */ GIR_EraseRootFromParent_Done,
992 /* 1069 */ // Label 68: @1069
993 /* 1069 */ GIM_Reject,
994 /* 1070 */ // Label 3: @1070
995 /* 1070 */ GIM_Try, /*On fail goto*//*Label 69*/ GIMT_Encode4(1110), // Rule ID 25 //
996 /* 1075 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
997 /* 1078 */ // MIs[0] dst
998 /* 1078 */ // No operand predicates
999 /* 1078 */ // MIs[0] zero
1000 /* 1078 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1001 /* 1082 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1002 /* 1086 */ // MIs[1] Operand 1
1003 /* 1086 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1004 /* 1097 */ // MIs[0] rhs
1005 /* 1097 */ // No operand predicates
1006 /* 1097 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1007 /* 1102 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1008 /* 1104 */ // Combiner Rule #9: binop_left_to_zero @ [__binop_left_to_zero_match_0[3]]
1009 /* 1104 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1010 /* 1109 */ GIR_EraseRootFromParent_Done,
1011 /* 1110 */ // Label 69: @1110
1012 /* 1110 */ GIM_Reject,
1013 /* 1111 */ // Label 4: @1111
1014 /* 1111 */ GIM_Try, /*On fail goto*//*Label 70*/ GIMT_Encode4(1151), // Rule ID 26 //
1015 /* 1116 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
1016 /* 1119 */ // MIs[0] dst
1017 /* 1119 */ // No operand predicates
1018 /* 1119 */ // MIs[0] zero
1019 /* 1119 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1020 /* 1123 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1021 /* 1127 */ // MIs[1] Operand 1
1022 /* 1127 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1023 /* 1138 */ // MIs[0] rhs
1024 /* 1138 */ // No operand predicates
1025 /* 1138 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1026 /* 1143 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1027 /* 1145 */ // Combiner Rule #9: binop_left_to_zero @ [__binop_left_to_zero_match_0[4]]
1028 /* 1145 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1029 /* 1150 */ GIR_EraseRootFromParent_Done,
1030 /* 1151 */ // Label 70: @1151
1031 /* 1151 */ GIM_Reject,
1032 /* 1152 */ // Label 5: @1152
1033 /* 1152 */ GIM_Try, /*On fail goto*//*Label 71*/ GIMT_Encode4(1192), // Rule ID 27 //
1034 /* 1157 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
1035 /* 1160 */ // MIs[0] dst
1036 /* 1160 */ // No operand predicates
1037 /* 1160 */ // MIs[0] zero
1038 /* 1160 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1039 /* 1164 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1040 /* 1168 */ // MIs[1] Operand 1
1041 /* 1168 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1042 /* 1179 */ // MIs[0] rhs
1043 /* 1179 */ // No operand predicates
1044 /* 1179 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1045 /* 1184 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1046 /* 1186 */ // Combiner Rule #9: binop_left_to_zero @ [__binop_left_to_zero_match_0[5]]
1047 /* 1186 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1048 /* 1191 */ GIR_EraseRootFromParent_Done,
1049 /* 1192 */ // Label 71: @1192
1050 /* 1192 */ GIM_Reject,
1051 /* 1193 */ // Label 6: @1193
1052 /* 1193 */ GIM_Try, /*On fail goto*//*Label 72*/ GIMT_Encode4(1233), // Rule ID 28 //
1053 /* 1198 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
1054 /* 1201 */ // MIs[0] dst
1055 /* 1201 */ // No operand predicates
1056 /* 1201 */ // MIs[0] zero
1057 /* 1201 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1058 /* 1205 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1059 /* 1209 */ // MIs[1] Operand 1
1060 /* 1209 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1061 /* 1220 */ // MIs[0] rhs
1062 /* 1220 */ // No operand predicates
1063 /* 1220 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1064 /* 1225 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1065 /* 1227 */ // Combiner Rule #9: binop_left_to_zero @ [__binop_left_to_zero_match_0[6]]
1066 /* 1227 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1067 /* 1232 */ GIR_EraseRootFromParent_Done,
1068 /* 1233 */ // Label 72: @1233
1069 /* 1233 */ GIM_Reject,
1070 /* 1234 */ // Label 7: @1234
1071 /* 1234 */ GIM_Try, /*On fail goto*//*Label 73*/ GIMT_Encode4(1245), // Rule ID 56 //
1072 /* 1239 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1073 /* 1242 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_AND'
1074 /* 1242 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1075 /* 1245 */ // Label 73: @1245
1076 /* 1245 */ GIM_Try, /*On fail goto*//*Label 74*/ GIMT_Encode4(1269), // Rule ID 18 //
1077 /* 1250 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule7Enabled),
1078 /* 1253 */ // MIs[0] dst
1079 /* 1253 */ // No operand predicates
1080 /* 1253 */ // MIs[0] src
1081 /* 1253 */ // No operand predicates
1082 /* 1253 */ // MIs[0] src
1083 /* 1253 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
1084 /* 1258 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1085 /* 1263 */ // Combiner Rule #7: binop_same_val @ [__binop_same_val_match_0[0]]
1086 /* 1263 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1087 /* 1268 */ GIR_EraseRootFromParent_Done,
1088 /* 1269 */ // Label 74: @1269
1089 /* 1269 */ GIM_Try, /*On fail goto*//*Label 75*/ GIMT_Encode4(1280), // Rule ID 4 //
1090 /* 1274 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
1091 /* 1277 */ // MIs[0] dst
1092 /* 1277 */ // No operand predicates
1093 /* 1277 */ // MIs[0] src1
1094 /* 1277 */ // No operand predicates
1095 /* 1277 */ // MIs[0] src2
1096 /* 1277 */ // No operand predicates
1097 /* 1277 */ // Combiner Rule #2: load_and_mask
1098 /* 1277 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner2),
1099 /* 1280 */ // Label 75: @1280
1100 /* 1280 */ GIM_Try, /*On fail goto*//*Label 76*/ GIMT_Encode4(1291), // Rule ID 5 //
1101 /* 1285 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule3Enabled),
1102 /* 1288 */ // MIs[0] dst
1103 /* 1288 */ // No operand predicates
1104 /* 1288 */ // MIs[0] src1
1105 /* 1288 */ // No operand predicates
1106 /* 1288 */ // MIs[0] src2
1107 /* 1288 */ // No operand predicates
1108 /* 1288 */ // Combiner Rule #3: redundant_and
1109 /* 1288 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner3),
1110 /* 1291 */ // Label 76: @1291
1111 /* 1291 */ GIM_Reject,
1112 /* 1292 */ // Label 8: @1292
1113 /* 1292 */ GIM_Try, /*On fail goto*//*Label 77*/ GIMT_Encode4(1303), // Rule ID 57 //
1114 /* 1297 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1115 /* 1300 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_OR'
1116 /* 1300 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1117 /* 1303 */ // Label 77: @1303
1118 /* 1303 */ GIM_Try, /*On fail goto*//*Label 78*/ GIMT_Encode4(1327), // Rule ID 19 //
1119 /* 1308 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule7Enabled),
1120 /* 1311 */ // MIs[0] dst
1121 /* 1311 */ // No operand predicates
1122 /* 1311 */ // MIs[0] src
1123 /* 1311 */ // No operand predicates
1124 /* 1311 */ // MIs[0] src
1125 /* 1311 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
1126 /* 1316 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1127 /* 1321 */ // Combiner Rule #7: binop_same_val @ [__binop_same_val_match_0[1]]
1128 /* 1321 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1129 /* 1326 */ GIR_EraseRootFromParent_Done,
1130 /* 1327 */ // Label 78: @1327
1131 /* 1327 */ GIM_Try, /*On fail goto*//*Label 79*/ GIMT_Encode4(1350), // Rule ID 10 //
1132 /* 1332 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
1133 /* 1335 */ // MIs[0] dst
1134 /* 1335 */ // No operand predicates
1135 /* 1335 */ // MIs[0] lhs
1136 /* 1335 */ // No operand predicates
1137 /* 1335 */ // MIs[0] Operand 2
1138 /* 1335 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1139 /* 1339 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1140 /* 1344 */ // Combiner Rule #6: right_identity_zero @ [__right_identity_zero_match_0[2]]
1141 /* 1344 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1142 /* 1349 */ GIR_EraseRootFromParent_Done,
1143 /* 1350 */ // Label 79: @1350
1144 /* 1350 */ GIM_Reject,
1145 /* 1351 */ // Label 9: @1351
1146 /* 1351 */ GIM_Try, /*On fail goto*//*Label 80*/ GIMT_Encode4(1362), // Rule ID 58 //
1147 /* 1356 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1148 /* 1359 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_XOR'
1149 /* 1359 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1150 /* 1362 */ // Label 80: @1362
1151 /* 1362 */ GIM_Try, /*On fail goto*//*Label 81*/ GIMT_Encode4(1401), // Rule ID 21 //
1152 /* 1367 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule8Enabled),
1153 /* 1370 */ // MIs[0] dst
1154 /* 1370 */ // No operand predicates
1155 /* 1370 */ // MIs[0] x
1156 /* 1370 */ GIM_RecordRegType, /*MI*/0, /*Op*/1, /*TempTypeIdx*/255,
1157 /* 1374 */ // MIs[0] x
1158 /* 1374 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
1159 /* 1379 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/255,
1160 /* 1382 */ GIR_BuildConstant, /*TempRegID*/0, /*Val*/GIMT_Encode8(0),
1161 /* 1392 */ // Combiner Rule #8: same_val_zero @ [__same_val_zero_match_0[1]]
1162 /* 1392 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::COPY),
1163 /* 1395 */ GIR_RootToRootCopy, /*OpIdx*/0, // dst
1164 /* 1397 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
1165 /* 1400 */ GIR_EraseRootFromParent_Done,
1166 /* 1401 */ // Label 81: @1401
1167 /* 1401 */ GIM_Try, /*On fail goto*//*Label 82*/ GIMT_Encode4(1424), // Rule ID 11 //
1168 /* 1406 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
1169 /* 1409 */ // MIs[0] dst
1170 /* 1409 */ // No operand predicates
1171 /* 1409 */ // MIs[0] lhs
1172 /* 1409 */ // No operand predicates
1173 /* 1409 */ // MIs[0] Operand 2
1174 /* 1409 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1175 /* 1413 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1176 /* 1418 */ // Combiner Rule #6: right_identity_zero @ [__right_identity_zero_match_0[3]]
1177 /* 1418 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1178 /* 1423 */ GIR_EraseRootFromParent_Done,
1179 /* 1424 */ // Label 82: @1424
1180 /* 1424 */ GIM_Reject,
1181 /* 1425 */ // Label 10: @1425
1182 /* 1425 */ GIM_Try, /*On fail goto*//*Label 83*/ GIMT_Encode4(1436), // Rule ID 40 //
1183 /* 1430 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
1184 /* 1433 */ // Combiner Rule #18: buildvector_identity_fold; wip_match_opcode 'G_BUILD_VECTOR'
1185 /* 1433 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner6),
1186 /* 1436 */ // Label 83: @1436
1187 /* 1436 */ GIM_Reject,
1188 /* 1437 */ // Label 11: @1437
1189 /* 1437 */ GIM_Try, /*On fail goto*//*Label 84*/ GIMT_Encode4(1448), // Rule ID 39 //
1190 /* 1442 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
1191 /* 1445 */ // Combiner Rule #18: buildvector_identity_fold; wip_match_opcode 'G_BUILD_VECTOR_TRUNC'
1192 /* 1445 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner6),
1193 /* 1448 */ // Label 84: @1448
1194 /* 1448 */ GIM_Reject,
1195 /* 1449 */ // Label 12: @1449
1196 /* 1449 */ GIM_Try, /*On fail goto*//*Label 85*/ GIMT_Encode4(1470), // Rule ID 32 //
1197 /* 1454 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule12Enabled),
1198 /* 1457 */ // MIs[0] dst
1199 /* 1457 */ // No operand predicates
1200 /* 1457 */ // MIs[0] t
1201 /* 1457 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1202 /* 1461 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_INTTOPTR),
1203 /* 1465 */ // MIs[1] ptr
1204 /* 1465 */ // No operand predicates
1205 /* 1465 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1206 /* 1467 */ // Combiner Rule #12: i2p_to_p2i
1207 /* 1467 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner4),
1208 /* 1470 */ // Label 85: @1470
1209 /* 1470 */ GIM_Reject,
1210 /* 1471 */ // Label 13: @1471
1211 /* 1471 */ GIM_Try, /*On fail goto*//*Label 86*/ GIMT_Encode4(1504), // Rule ID 31 //
1212 /* 1476 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule11Enabled),
1213 /* 1479 */ // MIs[0] dst
1214 /* 1479 */ // No operand predicates
1215 /* 1479 */ // MIs[0] mid
1216 /* 1479 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1217 /* 1483 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_PTRTOINT),
1218 /* 1487 */ // MIs[1] x
1219 /* 1487 */ // No operand predicates
1220 /* 1487 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner1),
1221 /* 1491 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
1222 /* 1496 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1223 /* 1498 */ // Combiner Rule #11: p2i_to_i2p
1224 /* 1498 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
1225 /* 1503 */ GIR_EraseRootFromParent_Done,
1226 /* 1504 */ // Label 86: @1504
1227 /* 1504 */ GIM_Reject,
1228 /* 1505 */ // Label 14: @1505
1229 /* 1505 */ GIM_Try, /*On fail goto*//*Label 87*/ GIMT_Encode4(1537), // Rule ID 44 //
1230 /* 1510 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule22Enabled),
1231 /* 1513 */ // MIs[0] dst
1232 /* 1513 */ // No operand predicates
1233 /* 1513 */ // MIs[0] src1
1234 /* 1513 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1235 /* 1517 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BITCAST),
1236 /* 1521 */ // MIs[1] src0
1237 /* 1521 */ // No operand predicates
1238 /* 1521 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner3),
1239 /* 1525 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1240 /* 1527 */ // Combiner Rule #22: bitcast_bitcast_to_bitcast
1241 /* 1527 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::G_BITCAST),
1242 /* 1530 */ GIR_RootToRootCopy, /*OpIdx*/0, // dst
1243 /* 1532 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src0
1244 /* 1536 */ GIR_EraseRootFromParent_Done,
1245 /* 1537 */ // Label 87: @1537
1246 /* 1537 */ GIM_Try, /*On fail goto*//*Label 88*/ GIMT_Encode4(1558), // Rule ID 43 //
1247 /* 1542 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule21Enabled),
1248 /* 1545 */ // MIs[0] dst
1249 /* 1545 */ // No operand predicates
1250 /* 1545 */ // MIs[0] src1
1251 /* 1545 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1252 /* 1549 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BITCAST),
1253 /* 1553 */ // MIs[1] src0
1254 /* 1553 */ // No operand predicates
1255 /* 1553 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1256 /* 1555 */ // Combiner Rule #21: bitcast_bitcast_fold
1257 /* 1555 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner9),
1258 /* 1558 */ // Label 88: @1558
1259 /* 1558 */ GIM_Reject,
1260 /* 1559 */ // Label 15: @1559
1261 /* 1559 */ GIM_Try, /*On fail goto*//*Label 89*/ GIMT_Encode4(1570), // Rule ID 1 //
1262 /* 1564 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),
1263 /* 1567 */ // Combiner Rule #1: extending_loads; wip_match_opcode 'G_LOAD'
1264 /* 1567 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1265 /* 1570 */ // Label 89: @1570
1266 /* 1570 */ GIM_Reject,
1267 /* 1571 */ // Label 16: @1571
1268 /* 1571 */ GIM_Try, /*On fail goto*//*Label 90*/ GIMT_Encode4(1582), // Rule ID 2 //
1269 /* 1576 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),
1270 /* 1579 */ // Combiner Rule #1: extending_loads; wip_match_opcode 'G_SEXTLOAD'
1271 /* 1579 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1272 /* 1582 */ // Label 90: @1582
1273 /* 1582 */ GIM_Reject,
1274 /* 1583 */ // Label 17: @1583
1275 /* 1583 */ GIM_Try, /*On fail goto*//*Label 91*/ GIMT_Encode4(1594), // Rule ID 3 //
1276 /* 1588 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),
1277 /* 1591 */ // Combiner Rule #1: extending_loads; wip_match_opcode 'G_ZEXTLOAD'
1278 /* 1591 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1279 /* 1594 */ // Label 91: @1594
1280 /* 1594 */ GIM_Reject,
1281 /* 1595 */ // Label 18: @1595
1282 /* 1595 */ GIM_Try, /*On fail goto*//*Label 92*/ GIMT_Encode4(1606), // Rule ID 84 //
1283 /* 1600 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule31Enabled),
1284 /* 1603 */ // MIs[0] src
1285 /* 1603 */ // No operand predicates
1286 /* 1603 */ // MIs[0] addr
1287 /* 1603 */ // No operand predicates
1288 /* 1603 */ // Combiner Rule #31: fold_fp_zero_store
1289 /* 1603 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner14),
1290 /* 1606 */ // Label 92: @1606
1291 /* 1606 */ GIM_Reject,
1292 /* 1607 */ // Label 19: @1607
1293 /* 1607 */ GIM_Try, /*On fail goto*//*Label 93*/ GIMT_Encode4(1618), // Rule ID 33 //
1294 /* 1612 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule13Enabled),
1295 /* 1615 */ // MIs[0] dst
1296 /* 1615 */ // No operand predicates
1297 /* 1615 */ // MIs[0] src
1298 /* 1615 */ // No operand predicates
1299 /* 1615 */ // Combiner Rule #13: anyext_trunc_fold
1300 /* 1615 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner5),
1301 /* 1618 */ // Label 93: @1618
1302 /* 1618 */ GIM_Reject,
1303 /* 1619 */ // Label 20: @1619
1304 /* 1619 */ GIM_Try, /*On fail goto*//*Label 94*/ GIMT_Encode4(1630), // Rule ID 41 //
1305 /* 1624 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule19Enabled),
1306 /* 1627 */ // MIs[0] dst
1307 /* 1627 */ // No operand predicates
1308 /* 1627 */ // MIs[0] src
1309 /* 1627 */ // No operand predicates
1310 /* 1627 */ // Combiner Rule #19: trunc_buildvector_fold
1311 /* 1627 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner7),
1312 /* 1630 */ // Label 94: @1630
1313 /* 1630 */ GIM_Try, /*On fail goto*//*Label 95*/ GIMT_Encode4(1641), // Rule ID 42 //
1314 /* 1635 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule20Enabled),
1315 /* 1638 */ // MIs[0] dst
1316 /* 1638 */ // No operand predicates
1317 /* 1638 */ // MIs[0] src
1318 /* 1638 */ // No operand predicates
1319 /* 1638 */ // Combiner Rule #20: trunc_lshr_buildvector_fold
1320 /* 1638 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner8),
1321 /* 1641 */ // Label 95: @1641
1322 /* 1641 */ GIM_Reject,
1323 /* 1642 */ // Label 21: @1642
1324 /* 1642 */ GIM_Try, /*On fail goto*//*Label 96*/ GIMT_Encode4(1653), // Rule ID 49 //
1325 /* 1647 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule27Enabled),
1326 /* 1650 */ // Combiner Rule #27: shift_immed_chain; wip_match_opcode 'G_SHL'
1327 /* 1650 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner10),
1328 /* 1653 */ // Label 96: @1653
1329 /* 1653 */ GIM_Try, /*On fail goto*//*Label 97*/ GIMT_Encode4(1693), // Rule ID 22 //
1330 /* 1658 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
1331 /* 1661 */ // MIs[0] dst
1332 /* 1661 */ // No operand predicates
1333 /* 1661 */ // MIs[0] zero
1334 /* 1661 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1335 /* 1665 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1336 /* 1669 */ // MIs[1] Operand 1
1337 /* 1669 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1338 /* 1680 */ // MIs[0] rhs
1339 /* 1680 */ // No operand predicates
1340 /* 1680 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1341 /* 1685 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1342 /* 1687 */ // Combiner Rule #9: binop_left_to_zero @ [__binop_left_to_zero_match_0[0]]
1343 /* 1687 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1344 /* 1692 */ GIR_EraseRootFromParent_Done,
1345 /* 1693 */ // Label 97: @1693
1346 /* 1693 */ GIM_Try, /*On fail goto*//*Label 98*/ GIMT_Encode4(1716), // Rule ID 12 //
1347 /* 1698 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
1348 /* 1701 */ // MIs[0] dst
1349 /* 1701 */ // No operand predicates
1350 /* 1701 */ // MIs[0] lhs
1351 /* 1701 */ // No operand predicates
1352 /* 1701 */ // MIs[0] Operand 2
1353 /* 1701 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1354 /* 1705 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1355 /* 1710 */ // Combiner Rule #6: right_identity_zero @ [__right_identity_zero_match_0[4]]
1356 /* 1710 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1357 /* 1715 */ GIR_EraseRootFromParent_Done,
1358 /* 1716 */ // Label 98: @1716
1359 /* 1716 */ GIM_Reject,
1360 /* 1717 */ // Label 22: @1717
1361 /* 1717 */ GIM_Try, /*On fail goto*//*Label 99*/ GIMT_Encode4(1728), // Rule ID 51 //
1362 /* 1722 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule27Enabled),
1363 /* 1725 */ // Combiner Rule #27: shift_immed_chain; wip_match_opcode 'G_LSHR'
1364 /* 1725 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner10),
1365 /* 1728 */ // Label 99: @1728
1366 /* 1728 */ GIM_Try, /*On fail goto*//*Label 100*/ GIMT_Encode4(1768), // Rule ID 23 //
1367 /* 1733 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
1368 /* 1736 */ // MIs[0] dst
1369 /* 1736 */ // No operand predicates
1370 /* 1736 */ // MIs[0] zero
1371 /* 1736 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1372 /* 1740 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1373 /* 1744 */ // MIs[1] Operand 1
1374 /* 1744 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1375 /* 1755 */ // MIs[0] rhs
1376 /* 1755 */ // No operand predicates
1377 /* 1755 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1378 /* 1760 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1379 /* 1762 */ // Combiner Rule #9: binop_left_to_zero @ [__binop_left_to_zero_match_0[1]]
1380 /* 1762 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1381 /* 1767 */ GIR_EraseRootFromParent_Done,
1382 /* 1768 */ // Label 100: @1768
1383 /* 1768 */ GIM_Try, /*On fail goto*//*Label 101*/ GIMT_Encode4(1791), // Rule ID 14 //
1384 /* 1773 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
1385 /* 1776 */ // MIs[0] dst
1386 /* 1776 */ // No operand predicates
1387 /* 1776 */ // MIs[0] lhs
1388 /* 1776 */ // No operand predicates
1389 /* 1776 */ // MIs[0] Operand 2
1390 /* 1776 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1391 /* 1780 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1392 /* 1785 */ // Combiner Rule #6: right_identity_zero @ [__right_identity_zero_match_0[6]]
1393 /* 1785 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1394 /* 1790 */ GIR_EraseRootFromParent_Done,
1395 /* 1791 */ // Label 101: @1791
1396 /* 1791 */ GIM_Reject,
1397 /* 1792 */ // Label 23: @1792
1398 /* 1792 */ GIM_Try, /*On fail goto*//*Label 102*/ GIMT_Encode4(1803), // Rule ID 50 //
1399 /* 1797 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule27Enabled),
1400 /* 1800 */ // Combiner Rule #27: shift_immed_chain; wip_match_opcode 'G_ASHR'
1401 /* 1800 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner10),
1402 /* 1803 */ // Label 102: @1803
1403 /* 1803 */ GIM_Try, /*On fail goto*//*Label 103*/ GIMT_Encode4(1843), // Rule ID 24 //
1404 /* 1808 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
1405 /* 1811 */ // MIs[0] dst
1406 /* 1811 */ // No operand predicates
1407 /* 1811 */ // MIs[0] zero
1408 /* 1811 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1409 /* 1815 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1410 /* 1819 */ // MIs[1] Operand 1
1411 /* 1819 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1412 /* 1830 */ // MIs[0] rhs
1413 /* 1830 */ // No operand predicates
1414 /* 1830 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1415 /* 1835 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1416 /* 1837 */ // Combiner Rule #9: binop_left_to_zero @ [__binop_left_to_zero_match_0[2]]
1417 /* 1837 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1418 /* 1842 */ GIR_EraseRootFromParent_Done,
1419 /* 1843 */ // Label 103: @1843
1420 /* 1843 */ GIM_Try, /*On fail goto*//*Label 104*/ GIMT_Encode4(1866), // Rule ID 13 //
1421 /* 1848 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
1422 /* 1851 */ // MIs[0] dst
1423 /* 1851 */ // No operand predicates
1424 /* 1851 */ // MIs[0] lhs
1425 /* 1851 */ // No operand predicates
1426 /* 1851 */ // MIs[0] Operand 2
1427 /* 1851 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1428 /* 1855 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1429 /* 1860 */ // Combiner Rule #6: right_identity_zero @ [__right_identity_zero_match_0[5]]
1430 /* 1860 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1431 /* 1865 */ GIR_EraseRootFromParent_Done,
1432 /* 1866 */ // Label 104: @1866
1433 /* 1866 */ GIM_Reject,
1434 /* 1867 */ // Label 24: @1867
1435 /* 1867 */ GIM_Try, /*On fail goto*//*Label 105*/ GIMT_Encode4(1890), // Rule ID 17 //
1436 /* 1872 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
1437 /* 1875 */ // MIs[0] dst
1438 /* 1875 */ // No operand predicates
1439 /* 1875 */ // MIs[0] lhs
1440 /* 1875 */ // No operand predicates
1441 /* 1875 */ // MIs[0] Operand 2
1442 /* 1875 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1443 /* 1879 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1444 /* 1884 */ // Combiner Rule #6: right_identity_zero @ [__right_identity_zero_match_0[9]]
1445 /* 1884 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1446 /* 1889 */ GIR_EraseRootFromParent_Done,
1447 /* 1890 */ // Label 105: @1890
1448 /* 1890 */ GIM_Reject,
1449 /* 1891 */ // Label 25: @1891
1450 /* 1891 */ GIM_Try, /*On fail goto*//*Label 106*/ GIMT_Encode4(1914), // Rule ID 16 //
1451 /* 1896 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
1452 /* 1899 */ // MIs[0] dst
1453 /* 1899 */ // No operand predicates
1454 /* 1899 */ // MIs[0] lhs
1455 /* 1899 */ // No operand predicates
1456 /* 1899 */ // MIs[0] Operand 2
1457 /* 1899 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1458 /* 1903 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1459 /* 1908 */ // Combiner Rule #6: right_identity_zero @ [__right_identity_zero_match_0[8]]
1460 /* 1908 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1461 /* 1913 */ GIR_EraseRootFromParent_Done,
1462 /* 1914 */ // Label 106: @1914
1463 /* 1914 */ GIM_Reject,
1464 /* 1915 */ // Label 26: @1915
1465 /* 1915 */ GIM_Try, /*On fail goto*//*Label 107*/ GIMT_Encode4(1939), // Rule ID 6 //
1466 /* 1920 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
1467 /* 1923 */ // MIs[0] dst
1468 /* 1923 */ // No operand predicates
1469 /* 1923 */ // MIs[0] cond
1470 /* 1923 */ // No operand predicates
1471 /* 1923 */ // MIs[0] x
1472 /* 1923 */ // No operand predicates
1473 /* 1923 */ // MIs[0] x
1474 /* 1923 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/3, /*OtherMI*/0, /*OtherOpIdx*/2,
1475 /* 1928 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
1476 /* 1933 */ // Combiner Rule #4: select_same_val_trivial
1477 /* 1933 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
1478 /* 1938 */ GIR_EraseRootFromParent_Done,
1479 /* 1939 */ // Label 107: @1939
1480 /* 1939 */ GIM_Try, /*On fail goto*//*Label 108*/ GIMT_Encode4(1962), // Rule ID 7 //
1481 /* 1944 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule5Enabled),
1482 /* 1947 */ // MIs[0] dst
1483 /* 1947 */ // No operand predicates
1484 /* 1947 */ // MIs[0] cond
1485 /* 1947 */ // No operand predicates
1486 /* 1947 */ // MIs[0] tval
1487 /* 1947 */ // No operand predicates
1488 /* 1947 */ // MIs[0] fval
1489 /* 1947 */ // No operand predicates
1490 /* 1947 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner0),
1491 /* 1951 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
1492 /* 1956 */ // Combiner Rule #5: select_same_val_equiv
1493 /* 1956 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
1494 /* 1961 */ GIR_EraseRootFromParent_Done,
1495 /* 1962 */ // Label 108: @1962
1496 /* 1962 */ GIM_Reject,
1497 /* 1963 */ // Label 27: @1963
1498 /* 1963 */ GIM_Try, /*On fail goto*//*Label 109*/ GIMT_Encode4(1974), // Rule ID 63 //
1499 /* 1968 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1500 /* 1971 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_UADDO'
1501 /* 1971 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1502 /* 1974 */ // Label 109: @1974
1503 /* 1974 */ GIM_Reject,
1504 /* 1975 */ // Label 28: @1975
1505 /* 1975 */ GIM_Try, /*On fail goto*//*Label 110*/ GIMT_Encode4(1986), // Rule ID 64 //
1506 /* 1980 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1507 /* 1983 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_SADDO'
1508 /* 1983 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1509 /* 1986 */ // Label 110: @1986
1510 /* 1986 */ GIM_Reject,
1511 /* 1987 */ // Label 29: @1987
1512 /* 1987 */ GIM_Try, /*On fail goto*//*Label 111*/ GIMT_Encode4(1998), // Rule ID 65 //
1513 /* 1992 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1514 /* 1995 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_UMULO'
1515 /* 1995 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1516 /* 1998 */ // Label 111: @1998
1517 /* 1998 */ GIM_Reject,
1518 /* 1999 */ // Label 30: @1999
1519 /* 1999 */ GIM_Try, /*On fail goto*//*Label 112*/ GIMT_Encode4(2010), // Rule ID 66 //
1520 /* 2004 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1521 /* 2007 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_SMULO'
1522 /* 2007 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1523 /* 2010 */ // Label 112: @2010
1524 /* 2010 */ GIM_Reject,
1525 /* 2011 */ // Label 31: @2011
1526 /* 2011 */ GIM_Try, /*On fail goto*//*Label 113*/ GIMT_Encode4(2022), // Rule ID 67 //
1527 /* 2016 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1528 /* 2019 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_UMULH'
1529 /* 2019 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1530 /* 2022 */ // Label 113: @2022
1531 /* 2022 */ GIM_Reject,
1532 /* 2023 */ // Label 32: @2023
1533 /* 2023 */ GIM_Try, /*On fail goto*//*Label 114*/ GIMT_Encode4(2034), // Rule ID 68 //
1534 /* 2028 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1535 /* 2031 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_SMULH'
1536 /* 2031 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1537 /* 2034 */ // Label 114: @2034
1538 /* 2034 */ GIM_Reject,
1539 /* 2035 */ // Label 33: @2035
1540 /* 2035 */ GIM_Try, /*On fail goto*//*Label 115*/ GIMT_Encode4(2046), // Rule ID 69 //
1541 /* 2040 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1542 /* 2043 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_UADDSAT'
1543 /* 2043 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1544 /* 2046 */ // Label 115: @2046
1545 /* 2046 */ GIM_Reject,
1546 /* 2047 */ // Label 34: @2047
1547 /* 2047 */ GIM_Try, /*On fail goto*//*Label 116*/ GIMT_Encode4(2058), // Rule ID 70 //
1548 /* 2052 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1549 /* 2055 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_SADDSAT'
1550 /* 2055 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1551 /* 2058 */ // Label 116: @2058
1552 /* 2058 */ GIM_Reject,
1553 /* 2059 */ // Label 35: @2059
1554 /* 2059 */ GIM_Try, /*On fail goto*//*Label 117*/ GIMT_Encode4(2070), // Rule ID 53 //
1555 /* 2064 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule27Enabled),
1556 /* 2067 */ // Combiner Rule #27: shift_immed_chain; wip_match_opcode 'G_USHLSAT'
1557 /* 2067 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner10),
1558 /* 2070 */ // Label 117: @2070
1559 /* 2070 */ GIM_Reject,
1560 /* 2071 */ // Label 36: @2071
1561 /* 2071 */ GIM_Try, /*On fail goto*//*Label 118*/ GIMT_Encode4(2082), // Rule ID 52 //
1562 /* 2076 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule27Enabled),
1563 /* 2079 */ // Combiner Rule #27: shift_immed_chain; wip_match_opcode 'G_SSHLSAT'
1564 /* 2079 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner10),
1565 /* 2082 */ // Label 118: @2082
1566 /* 2082 */ GIM_Reject,
1567 /* 2083 */ // Label 37: @2083
1568 /* 2083 */ GIM_Try, /*On fail goto*//*Label 119*/ GIMT_Encode4(2094), // Rule ID 71 //
1569 /* 2088 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1570 /* 2091 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_SMULFIX'
1571 /* 2091 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1572 /* 2094 */ // Label 119: @2094
1573 /* 2094 */ GIM_Reject,
1574 /* 2095 */ // Label 38: @2095
1575 /* 2095 */ GIM_Try, /*On fail goto*//*Label 120*/ GIMT_Encode4(2106), // Rule ID 72 //
1576 /* 2100 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1577 /* 2103 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_UMULFIX'
1578 /* 2103 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1579 /* 2106 */ // Label 120: @2106
1580 /* 2106 */ GIM_Reject,
1581 /* 2107 */ // Label 39: @2107
1582 /* 2107 */ GIM_Try, /*On fail goto*//*Label 121*/ GIMT_Encode4(2118), // Rule ID 73 //
1583 /* 2112 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1584 /* 2115 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_SMULFIXSAT'
1585 /* 2115 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1586 /* 2118 */ // Label 121: @2118
1587 /* 2118 */ GIM_Reject,
1588 /* 2119 */ // Label 40: @2119
1589 /* 2119 */ GIM_Try, /*On fail goto*//*Label 122*/ GIMT_Encode4(2130), // Rule ID 74 //
1590 /* 2124 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1591 /* 2127 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_UMULFIXSAT'
1592 /* 2127 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1593 /* 2130 */ // Label 122: @2130
1594 /* 2130 */ GIM_Reject,
1595 /* 2131 */ // Label 41: @2131
1596 /* 2131 */ GIM_Try, /*On fail goto*//*Label 123*/ GIMT_Encode4(2142), // Rule ID 75 //
1597 /* 2136 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule29Enabled),
1598 /* 2139 */ // Combiner Rule #29: commute_fp_constant_to_rhs; wip_match_opcode 'G_FADD'
1599 /* 2139 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner12),
1600 /* 2142 */ // Label 123: @2142
1601 /* 2142 */ GIM_Try, /*On fail goto*//*Label 124*/ GIMT_Encode4(2165), // Rule ID 46 //
1602 /* 2147 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule24Enabled),
1603 /* 2150 */ // MIs[0] dst
1604 /* 2150 */ // No operand predicates
1605 /* 2150 */ // MIs[0] x
1606 /* 2150 */ // No operand predicates
1607 /* 2150 */ // MIs[0] y
1608 /* 2150 */ // No operand predicates
1609 /* 2150 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner4),
1610 /* 2154 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1611 /* 2159 */ // Combiner Rule #24: right_identity_neg_zero_fp
1612 /* 2159 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1613 /* 2164 */ GIR_EraseRootFromParent_Done,
1614 /* 2165 */ // Label 124: @2165
1615 /* 2165 */ GIM_Try, /*On fail goto*//*Label 125*/ GIMT_Encode4(2194), // Rule ID 47 //
1616 /* 2170 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule25Enabled),
1617 /* 2173 */ GIM_MIFlags, /*MI*/0, GIMT_Encode4(MachineInstr::FmNsz),
1618 /* 2179 */ // MIs[0] dst
1619 /* 2179 */ // No operand predicates
1620 /* 2179 */ // MIs[0] x
1621 /* 2179 */ // No operand predicates
1622 /* 2179 */ // MIs[0] y
1623 /* 2179 */ // No operand predicates
1624 /* 2179 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner5),
1625 /* 2183 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1626 /* 2188 */ // Combiner Rule #25: right_identity_neg_zero_fp_nsz
1627 /* 2188 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1628 /* 2193 */ GIR_EraseRootFromParent_Done,
1629 /* 2194 */ // Label 125: @2194
1630 /* 2194 */ GIM_Reject,
1631 /* 2195 */ // Label 42: @2195
1632 /* 2195 */ GIM_Try, /*On fail goto*//*Label 126*/ GIMT_Encode4(2206), // Rule ID 76 //
1633 /* 2200 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule29Enabled),
1634 /* 2203 */ // Combiner Rule #29: commute_fp_constant_to_rhs; wip_match_opcode 'G_FMUL'
1635 /* 2203 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner12),
1636 /* 2206 */ // Label 126: @2206
1637 /* 2206 */ GIM_Try, /*On fail goto*//*Label 127*/ GIMT_Encode4(2229), // Rule ID 36 //
1638 /* 2211 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule16Enabled),
1639 /* 2214 */ // MIs[0] dst
1640 /* 2214 */ // No operand predicates
1641 /* 2214 */ // MIs[0] x
1642 /* 2214 */ // No operand predicates
1643 /* 2214 */ // MIs[0] y
1644 /* 2214 */ // No operand predicates
1645 /* 2214 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner2),
1646 /* 2218 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1647 /* 2223 */ // Combiner Rule #16: right_identity_one_fp
1648 /* 2223 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1649 /* 2228 */ GIR_EraseRootFromParent_Done,
1650 /* 2229 */ // Label 127: @2229
1651 /* 2229 */ GIM_Try, /*On fail goto*//*Label 128*/ GIMT_Encode4(2249), // Rule ID 48 //
1652 /* 2234 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule26Enabled),
1653 /* 2237 */ // MIs[0] dst
1654 /* 2237 */ // No operand predicates
1655 /* 2237 */ // MIs[0] x
1656 /* 2237 */ // No operand predicates
1657 /* 2237 */ // MIs[0] y
1658 /* 2237 */ // No operand predicates
1659 /* 2237 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner6),
1660 /* 2241 */ // Combiner Rule #26: right_identity_neg_one_fp
1661 /* 2241 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::G_FNEG),
1662 /* 2244 */ GIR_RootToRootCopy, /*OpIdx*/0, // dst
1663 /* 2246 */ GIR_RootToRootCopy, /*OpIdx*/1, // x
1664 /* 2248 */ GIR_EraseRootFromParent_Done,
1665 /* 2249 */ // Label 128: @2249
1666 /* 2249 */ GIM_Reject,
1667 /* 2250 */ // Label 43: @2250
1668 /* 2250 */ GIM_Try, /*On fail goto*//*Label 129*/ GIMT_Encode4(2279), // Rule ID 34 //
1669 /* 2255 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule14Enabled),
1670 /* 2258 */ // MIs[0] dst
1671 /* 2258 */ // No operand predicates
1672 /* 2258 */ // MIs[0] t
1673 /* 2258 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1674 /* 2262 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FNEG),
1675 /* 2266 */ // MIs[1] src
1676 /* 2266 */ // No operand predicates
1677 /* 2266 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
1678 /* 2271 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1679 /* 2273 */ // Combiner Rule #14: fneg_fneg_fold
1680 /* 2273 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
1681 /* 2278 */ GIR_EraseRootFromParent_Done,
1682 /* 2279 */ // Label 129: @2279
1683 /* 2279 */ GIM_Reject,
1684 /* 2280 */ // Label 44: @2280
1685 /* 2280 */ GIM_Try, /*On fail goto*//*Label 130*/ GIMT_Encode4(2301), // Rule ID 45 //
1686 /* 2285 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule23Enabled),
1687 /* 2288 */ // MIs[0] dst
1688 /* 2288 */ // No operand predicates
1689 /* 2288 */ // MIs[0] src1
1690 /* 2288 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1691 /* 2292 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FPEXT),
1692 /* 2296 */ // MIs[1] src0
1693 /* 2296 */ // No operand predicates
1694 /* 2296 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1695 /* 2298 */ // Combiner Rule #23: fptrunc_fpext_fold
1696 /* 2298 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner9),
1697 /* 2301 */ // Label 130: @2301
1698 /* 2301 */ GIM_Reject,
1699 /* 2302 */ // Label 45: @2302
1700 /* 2302 */ GIM_Try, /*On fail goto*//*Label 131*/ GIMT_Encode4(2313), // Rule ID 77 //
1701 /* 2307 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule29Enabled),
1702 /* 2310 */ // Combiner Rule #29: commute_fp_constant_to_rhs; wip_match_opcode 'G_FMINNUM'
1703 /* 2310 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner12),
1704 /* 2313 */ // Label 131: @2313
1705 /* 2313 */ GIM_Reject,
1706 /* 2314 */ // Label 46: @2314
1707 /* 2314 */ GIM_Try, /*On fail goto*//*Label 132*/ GIMT_Encode4(2325), // Rule ID 78 //
1708 /* 2319 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule29Enabled),
1709 /* 2322 */ // Combiner Rule #29: commute_fp_constant_to_rhs; wip_match_opcode 'G_FMAXNUM'
1710 /* 2322 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner12),
1711 /* 2325 */ // Label 132: @2325
1712 /* 2325 */ GIM_Reject,
1713 /* 2326 */ // Label 47: @2326
1714 /* 2326 */ GIM_Try, /*On fail goto*//*Label 133*/ GIMT_Encode4(2337), // Rule ID 79 //
1715 /* 2331 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule29Enabled),
1716 /* 2334 */ // Combiner Rule #29: commute_fp_constant_to_rhs; wip_match_opcode 'G_FMINNUM_IEEE'
1717 /* 2334 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner12),
1718 /* 2337 */ // Label 133: @2337
1719 /* 2337 */ GIM_Reject,
1720 /* 2338 */ // Label 48: @2338
1721 /* 2338 */ GIM_Try, /*On fail goto*//*Label 134*/ GIMT_Encode4(2349), // Rule ID 80 //
1722 /* 2343 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule29Enabled),
1723 /* 2346 */ // Combiner Rule #29: commute_fp_constant_to_rhs; wip_match_opcode 'G_FMAXNUM_IEEE'
1724 /* 2346 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner12),
1725 /* 2349 */ // Label 134: @2349
1726 /* 2349 */ GIM_Reject,
1727 /* 2350 */ // Label 49: @2350
1728 /* 2350 */ GIM_Try, /*On fail goto*//*Label 135*/ GIMT_Encode4(2361), // Rule ID 81 //
1729 /* 2355 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule29Enabled),
1730 /* 2358 */ // Combiner Rule #29: commute_fp_constant_to_rhs; wip_match_opcode 'G_FMINIMUM'
1731 /* 2358 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner12),
1732 /* 2361 */ // Label 135: @2361
1733 /* 2361 */ GIM_Reject,
1734 /* 2362 */ // Label 50: @2362
1735 /* 2362 */ GIM_Try, /*On fail goto*//*Label 136*/ GIMT_Encode4(2373), // Rule ID 82 //
1736 /* 2367 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule29Enabled),
1737 /* 2370 */ // Combiner Rule #29: commute_fp_constant_to_rhs; wip_match_opcode 'G_FMAXIMUM'
1738 /* 2370 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner12),
1739 /* 2373 */ // Label 136: @2373
1740 /* 2373 */ GIM_Reject,
1741 /* 2374 */ // Label 51: @2374
1742 /* 2374 */ GIM_Try, /*On fail goto*//*Label 137*/ GIMT_Encode4(2397), // Rule ID 15 //
1743 /* 2379 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
1744 /* 2382 */ // MIs[0] dst
1745 /* 2382 */ // No operand predicates
1746 /* 2382 */ // MIs[0] lhs
1747 /* 2382 */ // No operand predicates
1748 /* 2382 */ // MIs[0] Operand 2
1749 /* 2382 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1750 /* 2386 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1751 /* 2391 */ // Combiner Rule #6: right_identity_zero @ [__right_identity_zero_match_0[7]]
1752 /* 2391 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1753 /* 2396 */ GIR_EraseRootFromParent_Done,
1754 /* 2397 */ // Label 137: @2397
1755 /* 2397 */ GIM_Reject,
1756 /* 2398 */ // Label 52: @2398
1757 /* 2398 */ GIM_Try, /*On fail goto*//*Label 138*/ GIMT_Encode4(2409), // Rule ID 59 //
1758 /* 2403 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1759 /* 2406 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_SMIN'
1760 /* 2406 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1761 /* 2409 */ // Label 138: @2409
1762 /* 2409 */ GIM_Reject,
1763 /* 2410 */ // Label 53: @2410
1764 /* 2410 */ GIM_Try, /*On fail goto*//*Label 139*/ GIMT_Encode4(2421), // Rule ID 60 //
1765 /* 2415 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1766 /* 2418 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_SMAX'
1767 /* 2418 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1768 /* 2421 */ // Label 139: @2421
1769 /* 2421 */ GIM_Reject,
1770 /* 2422 */ // Label 54: @2422
1771 /* 2422 */ GIM_Try, /*On fail goto*//*Label 140*/ GIMT_Encode4(2433), // Rule ID 61 //
1772 /* 2427 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1773 /* 2430 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_UMIN'
1774 /* 2430 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1775 /* 2433 */ // Label 140: @2433
1776 /* 2433 */ GIM_Reject,
1777 /* 2434 */ // Label 55: @2434
1778 /* 2434 */ GIM_Try, /*On fail goto*//*Label 141*/ GIMT_Encode4(2445), // Rule ID 62 //
1779 /* 2439 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1780 /* 2442 */ // Combiner Rule #28: commute_int_constant_to_rhs; wip_match_opcode 'G_UMAX'
1781 /* 2442 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner11),
1782 /* 2445 */ // Label 141: @2445
1783 /* 2445 */ GIM_Reject,
1784 /* 2446 */ // Label 56: @2446
1785 /* 2446 */ GIM_Reject,
1786 /* 2447 */ }; // Size: 2447 bytes
1787 return MatchTable0;
1788}
1789#undef GIMT_Encode2
1790#undef GIMT_Encode4
1791#undef GIMT_Encode8
1792
1793
1794#endif // GET_GICOMBINER_IMPL
1795
1796#ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
1797
1798AvailableModuleFeatures(computeAvailableModuleFeatures(&STI)),
1799AvailableFunctionFeatures()
1800
1801#endif // GET_GICOMBINER_CONSTRUCTOR_INITS
1802
1803#ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
1804
1805, State(0),
1806ExecInfo(TypeObjects, NumTypeObjects, FeatureBitsets, ComplexPredicateFns, CustomRenderers)
1807
1808#endif // GET_GICOMBINER_CONSTRUCTOR_INITS
1809
1810