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