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