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(287), /*)*//*default:*//*Label 42*/ GIMT_Encode4(2589),
753 /* 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),
754 /* 150 */ /*TargetOpcode::G_ADD*//*Label 1*/ GIMT_Encode4(1090),
755 /* 154 */ /*TargetOpcode::G_SUB*//*Label 2*/ GIMT_Encode4(1182),
756 /* 158 */ /*TargetOpcode::G_MUL*//*Label 3*/ GIMT_Encode4(1245),
757 /* 162 */ /*TargetOpcode::G_SDIV*//*Label 4*/ GIMT_Encode4(1332),
758 /* 166 */ /*TargetOpcode::G_UDIV*//*Label 5*/ GIMT_Encode4(1373),
759 /* 170 */ /*TargetOpcode::G_SREM*//*Label 6*/ GIMT_Encode4(1414),
760 /* 174 */ /*TargetOpcode::G_UREM*//*Label 7*/ GIMT_Encode4(1455), GIMT_Encode4(0), GIMT_Encode4(0),
761 /* 186 */ /*TargetOpcode::G_AND*//*Label 8*/ GIMT_Encode4(1496),
762 /* 190 */ /*TargetOpcode::G_OR*//*Label 9*/ GIMT_Encode4(1521),
763 /* 194 */ /*TargetOpcode::G_XOR*//*Label 10*/ GIMT_Encode4(1580), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), 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(1643),
765 /* 266 */ /*TargetOpcode::G_BUILD_VECTOR_TRUNC*//*Label 12*/ GIMT_Encode4(1655), GIMT_Encode4(0),
766 /* 274 */ /*TargetOpcode::G_PTRTOINT*//*Label 13*/ GIMT_Encode4(1667),
767 /* 278 */ /*TargetOpcode::G_INTTOPTR*//*Label 14*/ GIMT_Encode4(1689),
768 /* 282 */ /*TargetOpcode::G_BITCAST*//*Label 15*/ GIMT_Encode4(1723), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
769 /* 298 */ /*TargetOpcode::G_INTRINSIC_TRUNC*//*Label 16*/ GIMT_Encode4(1777),
770 /* 302 */ /*TargetOpcode::G_INTRINSIC_ROUND*//*Label 17*/ GIMT_Encode4(1799), GIMT_Encode4(0), GIMT_Encode4(0),
771 /* 314 */ /*TargetOpcode::G_INTRINSIC_ROUNDEVEN*//*Label 18*/ GIMT_Encode4(1821), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), 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(1843),
773 /* 506 */ /*TargetOpcode::G_TRUNC*//*Label 20*/ GIMT_Encode4(1855), GIMT_Encode4(0), GIMT_Encode4(0), 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(1878),
775 /* 554 */ /*TargetOpcode::G_LSHR*//*Label 22*/ GIMT_Encode4(1942),
776 /* 558 */ /*TargetOpcode::G_ASHR*//*Label 23*/ GIMT_Encode4(2006), GIMT_Encode4(0), GIMT_Encode4(0),
777 /* 570 */ /*TargetOpcode::G_ROTR*//*Label 24*/ GIMT_Encode4(2070),
778 /* 574 */ /*TargetOpcode::G_ROTL*//*Label 25*/ GIMT_Encode4(2094), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
779 /* 594 */ /*TargetOpcode::G_SELECT*//*Label 26*/ GIMT_Encode4(2118), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), 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(2166), GIMT_Encode4(0),
781 /* 710 */ /*TargetOpcode::G_FMUL*//*Label 28*/ GIMT_Encode4(2219), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), 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(2263), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
783 /* 774 */ /*TargetOpcode::G_FNEG*//*Label 30*/ GIMT_Encode4(2285),
784 /* 778 */ /*TargetOpcode::G_FPEXT*//*Label 31*/ GIMT_Encode4(2336),
785 /* 782 */ /*TargetOpcode::G_FPTRUNC*//*Label 32*/ GIMT_Encode4(2358), GIMT_Encode4(0), GIMT_Encode4(0),
786 /* 794 */ /*TargetOpcode::G_SITOFP*//*Label 33*/ GIMT_Encode4(2401),
787 /* 798 */ /*TargetOpcode::G_UITOFP*//*Label 34*/ GIMT_Encode4(2417), GIMT_Encode4(0), GIMT_Encode4(0),
788 /* 810 */ /*TargetOpcode::G_FABS*//*Label 35*/ GIMT_Encode4(2433), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), 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(2455), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), 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 /* 1014 */ /*TargetOpcode::G_FCEIL*//*Label 37*/ GIMT_Encode4(2479), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), 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 /* 1062 */ /*TargetOpcode::G_FSQRT*//*Label 38*/ GIMT_Encode4(2501),
792 /* 1066 */ /*TargetOpcode::G_FFLOOR*//*Label 39*/ GIMT_Encode4(2523),
793 /* 1070 */ /*TargetOpcode::G_FRINT*//*Label 40*/ GIMT_Encode4(2545),
794 /* 1074 */ /*TargetOpcode::G_FNEARBYINT*//*Label 41*/ GIMT_Encode4(2567),
795 /* 1078 */ // Label 0: @1078
796 /* 1078 */ GIM_Try, /*On fail goto*//*Label 43*/ GIMT_Encode4(1089), // Rule ID 59 //
797 /* 1083 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule39Enabled),
798 /* 1086 */ // MIs[0] d
799 /* 1086 */ // No operand predicates
800 /* 1086 */ // MIs[0] s
801 /* 1086 */ // No operand predicates
802 /* 1086 */ // Combiner Rule #39: copy_prop
803 /* 1086 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner9),
804 /* 1089 */ // Label 43: @1089
805 /* 1089 */ GIM_Reject,
806 /* 1090 */ // Label 1: @1090
807 /* 1090 */ GIM_Try, /*On fail goto*//*Label 44*/ GIMT_Encode4(1124), // Rule ID 48 //
808 /* 1095 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule29Enabled),
809 /* 1098 */ // MIs[0] dst
810 /* 1098 */ // No operand predicates
811 /* 1098 */ // MIs[0] __add_sub_reg_match_0.tmp
812 /* 1098 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
813 /* 1102 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_SUB),
814 /* 1106 */ // MIs[1] src
815 /* 1106 */ // No operand predicates
816 /* 1106 */ // MIs[1] __add_sub_reg_match_0.x
817 /* 1106 */ // No operand predicates
818 /* 1106 */ // MIs[0] __add_sub_reg_match_0.x
819 /* 1106 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/1, /*OtherOpIdx*/2,
820 /* 1111 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
821 /* 1116 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
822 /* 1118 */ // Combiner Rule #29: add_sub_reg @ [__add_sub_reg_match_0[1]]
823 /* 1118 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
824 /* 1123 */ GIR_EraseRootFromParent_Done,
825 /* 1124 */ // Label 44: @1124
826 /* 1124 */ GIM_Try, /*On fail goto*//*Label 45*/ GIMT_Encode4(1158), // Rule ID 47 //
827 /* 1129 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule29Enabled),
828 /* 1132 */ // MIs[0] dst
829 /* 1132 */ // No operand predicates
830 /* 1132 */ // MIs[0] __add_sub_reg_match_0.x
831 /* 1132 */ // No operand predicates
832 /* 1132 */ // MIs[0] __add_sub_reg_match_0.tmp
833 /* 1132 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
834 /* 1136 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_SUB),
835 /* 1140 */ // MIs[1] src
836 /* 1140 */ // No operand predicates
837 /* 1140 */ // MIs[1] __add_sub_reg_match_0.x
838 /* 1140 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/1, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
839 /* 1145 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
840 /* 1150 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
841 /* 1152 */ // Combiner Rule #29: add_sub_reg @ [__add_sub_reg_match_0[0]]
842 /* 1152 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
843 /* 1157 */ GIR_EraseRootFromParent_Done,
844 /* 1158 */ // Label 45: @1158
845 /* 1158 */ GIM_Try, /*On fail goto*//*Label 46*/ GIMT_Encode4(1181), // Rule ID 19 //
846 /* 1163 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
847 /* 1166 */ // MIs[0] dst
848 /* 1166 */ // No operand predicates
849 /* 1166 */ // MIs[0] lhs
850 /* 1166 */ // No operand predicates
851 /* 1166 */ // MIs[0] Operand 2
852 /* 1166 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
853 /* 1170 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
854 /* 1175 */ // Combiner Rule #18: right_identity_zero @ [__right_identity_zero_match_0[1]]
855 /* 1175 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
856 /* 1180 */ GIR_EraseRootFromParent_Done,
857 /* 1181 */ // Label 46: @1181
858 /* 1181 */ GIM_Reject,
859 /* 1182 */ // Label 2: @1182
860 /* 1182 */ GIM_Try, /*On fail goto*//*Label 47*/ GIMT_Encode4(1221), // Rule ID 30 //
861 /* 1187 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule20Enabled),
862 /* 1190 */ // MIs[0] dst
863 /* 1190 */ // No operand predicates
864 /* 1190 */ // MIs[0] x
865 /* 1190 */ GIM_RecordRegType, /*MI*/0, /*Op*/1, /*TempTypeIdx*/255,
866 /* 1194 */ // MIs[0] x
867 /* 1194 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
868 /* 1199 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/255,
869 /* 1202 */ GIR_BuildConstant, /*TempRegID*/0, /*Val*/GIMT_Encode8(0),
870 /* 1212 */ // Combiner Rule #20: same_val_zero @ [__same_val_zero_match_0[0]]
871 /* 1212 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::COPY),
872 /* 1215 */ GIR_RootToRootCopy, /*OpIdx*/0, // dst
873 /* 1217 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
874 /* 1220 */ GIR_EraseRootFromParent_Done,
875 /* 1221 */ // Label 47: @1221
876 /* 1221 */ GIM_Try, /*On fail goto*//*Label 48*/ GIMT_Encode4(1244), // Rule ID 18 //
877 /* 1226 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
878 /* 1229 */ // MIs[0] dst
879 /* 1229 */ // No operand predicates
880 /* 1229 */ // MIs[0] lhs
881 /* 1229 */ // No operand predicates
882 /* 1229 */ // MIs[0] Operand 2
883 /* 1229 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
884 /* 1233 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
885 /* 1238 */ // Combiner Rule #18: right_identity_zero @ [__right_identity_zero_match_0[0]]
886 /* 1238 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
887 /* 1243 */ GIR_EraseRootFromParent_Done,
888 /* 1244 */ // Label 48: @1244
889 /* 1244 */ GIM_Reject,
890 /* 1245 */ // Label 3: @1245
891 /* 1245 */ GIM_Try, /*On fail goto*//*Label 49*/ GIMT_Encode4(1285), // Rule ID 39 //
892 /* 1250 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule21Enabled),
893 /* 1253 */ // MIs[0] dst
894 /* 1253 */ // No operand predicates
895 /* 1253 */ // MIs[0] zero
896 /* 1253 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
897 /* 1257 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
898 /* 1261 */ // MIs[1] Operand 1
899 /* 1261 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
900 /* 1272 */ // MIs[0] rhs
901 /* 1272 */ // No operand predicates
902 /* 1272 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
903 /* 1277 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
904 /* 1279 */ // Combiner Rule #21: binop_left_to_zero @ [__binop_left_to_zero_match_0[7]]
905 /* 1279 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
906 /* 1284 */ GIR_EraseRootFromParent_Done,
907 /* 1285 */ // Label 49: @1285
908 /* 1285 */ GIM_Try, /*On fail goto*//*Label 50*/ GIMT_Encode4(1308), // Rule ID 40 //
909 /* 1290 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule22Enabled),
910 /* 1293 */ // MIs[0] dst
911 /* 1293 */ // No operand predicates
912 /* 1293 */ // MIs[0] lhs
913 /* 1293 */ // No operand predicates
914 /* 1293 */ // MIs[0] zero
915 /* 1293 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
916 /* 1297 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
917 /* 1302 */ // Combiner Rule #22: binop_right_to_zero
918 /* 1302 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
919 /* 1307 */ GIR_EraseRootFromParent_Done,
920 /* 1308 */ // Label 50: @1308
921 /* 1308 */ GIM_Try, /*On fail goto*//*Label 51*/ GIMT_Encode4(1331), // Rule ID 45 //
922 /* 1313 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule27Enabled),
923 /* 1316 */ // MIs[0] dst
924 /* 1316 */ // No operand predicates
925 /* 1316 */ // MIs[0] x
926 /* 1316 */ // No operand predicates
927 /* 1316 */ // MIs[0] Operand 2
928 /* 1316 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 1,
929 /* 1320 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
930 /* 1325 */ // Combiner Rule #27: right_identity_one_int
931 /* 1325 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
932 /* 1330 */ GIR_EraseRootFromParent_Done,
933 /* 1331 */ // Label 51: @1331
934 /* 1331 */ GIM_Reject,
935 /* 1332 */ // Label 4: @1332
936 /* 1332 */ GIM_Try, /*On fail goto*//*Label 52*/ GIMT_Encode4(1372), // Rule ID 35 //
937 /* 1337 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule21Enabled),
938 /* 1340 */ // MIs[0] dst
939 /* 1340 */ // No operand predicates
940 /* 1340 */ // MIs[0] zero
941 /* 1340 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
942 /* 1344 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
943 /* 1348 */ // MIs[1] Operand 1
944 /* 1348 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
945 /* 1359 */ // MIs[0] rhs
946 /* 1359 */ // No operand predicates
947 /* 1359 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
948 /* 1364 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
949 /* 1366 */ // Combiner Rule #21: binop_left_to_zero @ [__binop_left_to_zero_match_0[3]]
950 /* 1366 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
951 /* 1371 */ GIR_EraseRootFromParent_Done,
952 /* 1372 */ // Label 52: @1372
953 /* 1372 */ GIM_Reject,
954 /* 1373 */ // Label 5: @1373
955 /* 1373 */ GIM_Try, /*On fail goto*//*Label 53*/ GIMT_Encode4(1413), // Rule ID 36 //
956 /* 1378 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule21Enabled),
957 /* 1381 */ // MIs[0] dst
958 /* 1381 */ // No operand predicates
959 /* 1381 */ // MIs[0] zero
960 /* 1381 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
961 /* 1385 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
962 /* 1389 */ // MIs[1] Operand 1
963 /* 1389 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
964 /* 1400 */ // MIs[0] rhs
965 /* 1400 */ // No operand predicates
966 /* 1400 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
967 /* 1405 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
968 /* 1407 */ // Combiner Rule #21: binop_left_to_zero @ [__binop_left_to_zero_match_0[4]]
969 /* 1407 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
970 /* 1412 */ GIR_EraseRootFromParent_Done,
971 /* 1413 */ // Label 53: @1413
972 /* 1413 */ GIM_Reject,
973 /* 1414 */ // Label 6: @1414
974 /* 1414 */ GIM_Try, /*On fail goto*//*Label 54*/ GIMT_Encode4(1454), // Rule ID 37 //
975 /* 1419 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule21Enabled),
976 /* 1422 */ // MIs[0] dst
977 /* 1422 */ // No operand predicates
978 /* 1422 */ // MIs[0] zero
979 /* 1422 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
980 /* 1426 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
981 /* 1430 */ // MIs[1] Operand 1
982 /* 1430 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
983 /* 1441 */ // MIs[0] rhs
984 /* 1441 */ // No operand predicates
985 /* 1441 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
986 /* 1446 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
987 /* 1448 */ // Combiner Rule #21: binop_left_to_zero @ [__binop_left_to_zero_match_0[5]]
988 /* 1448 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
989 /* 1453 */ GIR_EraseRootFromParent_Done,
990 /* 1454 */ // Label 54: @1454
991 /* 1454 */ GIM_Reject,
992 /* 1455 */ // Label 7: @1455
993 /* 1455 */ GIM_Try, /*On fail goto*//*Label 55*/ GIMT_Encode4(1495), // Rule ID 38 //
994 /* 1460 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule21Enabled),
995 /* 1463 */ // MIs[0] dst
996 /* 1463 */ // No operand predicates
997 /* 1463 */ // MIs[0] zero
998 /* 1463 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
999 /* 1467 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1000 /* 1471 */ // MIs[1] Operand 1
1001 /* 1471 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1002 /* 1482 */ // MIs[0] rhs
1003 /* 1482 */ // No operand predicates
1004 /* 1482 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1005 /* 1487 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1006 /* 1489 */ // Combiner Rule #21: binop_left_to_zero @ [__binop_left_to_zero_match_0[6]]
1007 /* 1489 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1008 /* 1494 */ GIR_EraseRootFromParent_Done,
1009 /* 1495 */ // Label 55: @1495
1010 /* 1495 */ GIM_Reject,
1011 /* 1496 */ // Label 8: @1496
1012 /* 1496 */ GIM_Try, /*On fail goto*//*Label 56*/ GIMT_Encode4(1520), // Rule ID 28 //
1013 /* 1501 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule19Enabled),
1014 /* 1504 */ // MIs[0] dst
1015 /* 1504 */ // No operand predicates
1016 /* 1504 */ // MIs[0] src
1017 /* 1504 */ // No operand predicates
1018 /* 1504 */ // MIs[0] src
1019 /* 1504 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
1020 /* 1509 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1021 /* 1514 */ // Combiner Rule #19: binop_same_val @ [__binop_same_val_match_0[0]]
1022 /* 1514 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1023 /* 1519 */ GIR_EraseRootFromParent_Done,
1024 /* 1520 */ // Label 56: @1520
1025 /* 1520 */ GIM_Reject,
1026 /* 1521 */ // Label 9: @1521
1027 /* 1521 */ GIM_Try, /*On fail goto*//*Label 57*/ GIMT_Encode4(1545), // Rule ID 29 //
1028 /* 1526 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule19Enabled),
1029 /* 1529 */ // MIs[0] dst
1030 /* 1529 */ // No operand predicates
1031 /* 1529 */ // MIs[0] src
1032 /* 1529 */ // No operand predicates
1033 /* 1529 */ // MIs[0] src
1034 /* 1529 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
1035 /* 1534 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1036 /* 1539 */ // Combiner Rule #19: binop_same_val @ [__binop_same_val_match_0[1]]
1037 /* 1539 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1038 /* 1544 */ GIR_EraseRootFromParent_Done,
1039 /* 1545 */ // Label 57: @1545
1040 /* 1545 */ GIM_Try, /*On fail goto*//*Label 58*/ GIMT_Encode4(1568), // Rule ID 20 //
1041 /* 1550 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
1042 /* 1553 */ // MIs[0] dst
1043 /* 1553 */ // No operand predicates
1044 /* 1553 */ // MIs[0] lhs
1045 /* 1553 */ // No operand predicates
1046 /* 1553 */ // MIs[0] Operand 2
1047 /* 1553 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1048 /* 1557 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1049 /* 1562 */ // Combiner Rule #18: right_identity_zero @ [__right_identity_zero_match_0[2]]
1050 /* 1562 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1051 /* 1567 */ GIR_EraseRootFromParent_Done,
1052 /* 1568 */ // Label 58: @1568
1053 /* 1568 */ GIM_Try, /*On fail goto*//*Label 59*/ GIMT_Encode4(1579), // Rule ID 0 //
1054 /* 1573 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule0Enabled),
1055 /* 1576 */ // MIs[0] dst
1056 /* 1576 */ // No operand predicates
1057 /* 1576 */ // MIs[0] src1
1058 /* 1576 */ // No operand predicates
1059 /* 1576 */ // MIs[0] src2
1060 /* 1576 */ // No operand predicates
1061 /* 1576 */ // Combiner Rule #0: redundant_or
1062 /* 1576 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner0),
1063 /* 1579 */ // Label 59: @1579
1064 /* 1579 */ GIM_Reject,
1065 /* 1580 */ // Label 10: @1580
1066 /* 1580 */ GIM_Try, /*On fail goto*//*Label 60*/ GIMT_Encode4(1619), // Rule ID 31 //
1067 /* 1585 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule20Enabled),
1068 /* 1588 */ // MIs[0] dst
1069 /* 1588 */ // No operand predicates
1070 /* 1588 */ // MIs[0] x
1071 /* 1588 */ GIM_RecordRegType, /*MI*/0, /*Op*/1, /*TempTypeIdx*/255,
1072 /* 1592 */ // MIs[0] x
1073 /* 1592 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
1074 /* 1597 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/255,
1075 /* 1600 */ GIR_BuildConstant, /*TempRegID*/0, /*Val*/GIMT_Encode8(0),
1076 /* 1610 */ // Combiner Rule #20: same_val_zero @ [__same_val_zero_match_0[1]]
1077 /* 1610 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::COPY),
1078 /* 1613 */ GIR_RootToRootCopy, /*OpIdx*/0, // dst
1079 /* 1615 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
1080 /* 1618 */ GIR_EraseRootFromParent_Done,
1081 /* 1619 */ // Label 60: @1619
1082 /* 1619 */ GIM_Try, /*On fail goto*//*Label 61*/ GIMT_Encode4(1642), // Rule ID 21 //
1083 /* 1624 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
1084 /* 1627 */ // MIs[0] dst
1085 /* 1627 */ // No operand predicates
1086 /* 1627 */ // MIs[0] lhs
1087 /* 1627 */ // No operand predicates
1088 /* 1627 */ // MIs[0] Operand 2
1089 /* 1627 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1090 /* 1631 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1091 /* 1636 */ // Combiner Rule #18: right_identity_zero @ [__right_identity_zero_match_0[3]]
1092 /* 1636 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1093 /* 1641 */ GIR_EraseRootFromParent_Done,
1094 /* 1642 */ // Label 61: @1642
1095 /* 1642 */ GIM_Reject,
1096 /* 1643 */ // Label 11: @1643
1097 /* 1643 */ GIM_Try, /*On fail goto*//*Label 62*/ GIMT_Encode4(1654), // Rule ID 50 //
1098 /* 1648 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule30Enabled),
1099 /* 1651 */ // Combiner Rule #30: buildvector_identity_fold; wip_match_opcode 'G_BUILD_VECTOR'
1100 /* 1651 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner5),
1101 /* 1654 */ // Label 62: @1654
1102 /* 1654 */ GIM_Reject,
1103 /* 1655 */ // Label 12: @1655
1104 /* 1655 */ GIM_Try, /*On fail goto*//*Label 63*/ GIMT_Encode4(1666), // Rule ID 49 //
1105 /* 1660 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule30Enabled),
1106 /* 1663 */ // Combiner Rule #30: buildvector_identity_fold; wip_match_opcode 'G_BUILD_VECTOR_TRUNC'
1107 /* 1663 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner5),
1108 /* 1666 */ // Label 63: @1666
1109 /* 1666 */ GIM_Reject,
1110 /* 1667 */ // Label 13: @1667
1111 /* 1667 */ GIM_Try, /*On fail goto*//*Label 64*/ GIMT_Encode4(1688), // Rule ID 42 //
1112 /* 1672 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule24Enabled),
1113 /* 1675 */ // MIs[0] dst
1114 /* 1675 */ // No operand predicates
1115 /* 1675 */ // MIs[0] t
1116 /* 1675 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1117 /* 1679 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_INTTOPTR),
1118 /* 1683 */ // MIs[1] ptr
1119 /* 1683 */ // No operand predicates
1120 /* 1683 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1121 /* 1685 */ // Combiner Rule #24: i2p_to_p2i
1122 /* 1685 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner3),
1123 /* 1688 */ // Label 64: @1688
1124 /* 1688 */ GIM_Reject,
1125 /* 1689 */ // Label 14: @1689
1126 /* 1689 */ GIM_Try, /*On fail goto*//*Label 65*/ GIMT_Encode4(1722), // Rule ID 41 //
1127 /* 1694 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule23Enabled),
1128 /* 1697 */ // MIs[0] dst
1129 /* 1697 */ // No operand predicates
1130 /* 1697 */ // MIs[0] mid
1131 /* 1697 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1132 /* 1701 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_PTRTOINT),
1133 /* 1705 */ // MIs[1] x
1134 /* 1705 */ // No operand predicates
1135 /* 1705 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner1),
1136 /* 1709 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
1137 /* 1714 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1138 /* 1716 */ // Combiner Rule #23: p2i_to_i2p
1139 /* 1716 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
1140 /* 1721 */ GIR_EraseRootFromParent_Done,
1141 /* 1722 */ // Label 65: @1722
1142 /* 1722 */ GIM_Reject,
1143 /* 1723 */ // Label 15: @1723
1144 /* 1723 */ GIM_Try, /*On fail goto*//*Label 66*/ GIMT_Encode4(1755), // Rule ID 54 //
1145 /* 1728 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule34Enabled),
1146 /* 1731 */ // MIs[0] dst
1147 /* 1731 */ // No operand predicates
1148 /* 1731 */ // MIs[0] src1
1149 /* 1731 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1150 /* 1735 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BITCAST),
1151 /* 1739 */ // MIs[1] src0
1152 /* 1739 */ // No operand predicates
1153 /* 1739 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner3),
1154 /* 1743 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1155 /* 1745 */ // Combiner Rule #34: bitcast_bitcast_to_bitcast
1156 /* 1745 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::G_BITCAST),
1157 /* 1748 */ GIR_RootToRootCopy, /*OpIdx*/0, // dst
1158 /* 1750 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src0
1159 /* 1754 */ GIR_EraseRootFromParent_Done,
1160 /* 1755 */ // Label 66: @1755
1161 /* 1755 */ GIM_Try, /*On fail goto*//*Label 67*/ GIMT_Encode4(1776), // Rule ID 53 //
1162 /* 1760 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule33Enabled),
1163 /* 1763 */ // MIs[0] dst
1164 /* 1763 */ // No operand predicates
1165 /* 1763 */ // MIs[0] src1
1166 /* 1763 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1167 /* 1767 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BITCAST),
1168 /* 1771 */ // MIs[1] src0
1169 /* 1771 */ // No operand predicates
1170 /* 1771 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1171 /* 1773 */ // Combiner Rule #33: bitcast_bitcast_fold
1172 /* 1773 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner8),
1173 /* 1776 */ // Label 67: @1776
1174 /* 1776 */ GIM_Reject,
1175 /* 1777 */ // Label 16: @1777
1176 /* 1777 */ GIM_Try, /*On fail goto*//*Label 68*/ GIMT_Encode4(1798), // Rule ID 9 //
1177 /* 1782 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
1178 /* 1785 */ // MIs[0] dst
1179 /* 1785 */ // No operand predicates
1180 /* 1785 */ // MIs[0] src0
1181 /* 1785 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1182 /* 1789 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1183 /* 1793 */ // MIs[1] cst
1184 /* 1793 */ // No operand predicates
1185 /* 1793 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1186 /* 1795 */ // Combiner Rule #9: constant_fold_intrinsic_trunc
1187 /* 1795 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1188 /* 1798 */ // Label 68: @1798
1189 /* 1798 */ GIM_Reject,
1190 /* 1799 */ // Label 17: @1799
1191 /* 1799 */ GIM_Try, /*On fail goto*//*Label 69*/ GIMT_Encode4(1820), // Rule ID 10 //
1192 /* 1804 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule10Enabled),
1193 /* 1807 */ // MIs[0] dst
1194 /* 1807 */ // No operand predicates
1195 /* 1807 */ // MIs[0] src0
1196 /* 1807 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1197 /* 1811 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1198 /* 1815 */ // MIs[1] cst
1199 /* 1815 */ // No operand predicates
1200 /* 1815 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1201 /* 1817 */ // Combiner Rule #10: constant_fold_intrinsic_round
1202 /* 1817 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1203 /* 1820 */ // Label 69: @1820
1204 /* 1820 */ GIM_Reject,
1205 /* 1821 */ // Label 18: @1821
1206 /* 1821 */ GIM_Try, /*On fail goto*//*Label 70*/ GIMT_Encode4(1842), // Rule ID 11 //
1207 /* 1826 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule11Enabled),
1208 /* 1829 */ // MIs[0] dst
1209 /* 1829 */ // No operand predicates
1210 /* 1829 */ // MIs[0] src0
1211 /* 1829 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1212 /* 1833 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1213 /* 1837 */ // MIs[1] cst
1214 /* 1837 */ // No operand predicates
1215 /* 1837 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1216 /* 1839 */ // Combiner Rule #11: constant_fold_intrinsic_roundeven
1217 /* 1839 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1218 /* 1842 */ // Label 70: @1842
1219 /* 1842 */ GIM_Reject,
1220 /* 1843 */ // Label 19: @1843
1221 /* 1843 */ GIM_Try, /*On fail goto*//*Label 71*/ GIMT_Encode4(1854), // Rule ID 43 //
1222 /* 1848 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule25Enabled),
1223 /* 1851 */ // MIs[0] dst
1224 /* 1851 */ // No operand predicates
1225 /* 1851 */ // MIs[0] src
1226 /* 1851 */ // No operand predicates
1227 /* 1851 */ // Combiner Rule #25: anyext_trunc_fold
1228 /* 1851 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner4),
1229 /* 1854 */ // Label 71: @1854
1230 /* 1854 */ GIM_Reject,
1231 /* 1855 */ // Label 20: @1855
1232 /* 1855 */ GIM_Try, /*On fail goto*//*Label 72*/ GIMT_Encode4(1866), // Rule ID 51 //
1233 /* 1860 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule31Enabled),
1234 /* 1863 */ // MIs[0] dst
1235 /* 1863 */ // No operand predicates
1236 /* 1863 */ // MIs[0] src
1237 /* 1863 */ // No operand predicates
1238 /* 1863 */ // Combiner Rule #31: trunc_buildvector_fold
1239 /* 1863 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner6),
1240 /* 1866 */ // Label 72: @1866
1241 /* 1866 */ GIM_Try, /*On fail goto*//*Label 73*/ GIMT_Encode4(1877), // Rule ID 52 //
1242 /* 1871 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule32Enabled),
1243 /* 1874 */ // MIs[0] dst
1244 /* 1874 */ // No operand predicates
1245 /* 1874 */ // MIs[0] src
1246 /* 1874 */ // No operand predicates
1247 /* 1874 */ // Combiner Rule #32: trunc_lshr_buildvector_fold
1248 /* 1874 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner7),
1249 /* 1877 */ // Label 73: @1877
1250 /* 1877 */ GIM_Reject,
1251 /* 1878 */ // Label 21: @1878
1252 /* 1878 */ GIM_Try, /*On fail goto*//*Label 74*/ GIMT_Encode4(1918), // Rule ID 32 //
1253 /* 1883 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule21Enabled),
1254 /* 1886 */ // MIs[0] dst
1255 /* 1886 */ // No operand predicates
1256 /* 1886 */ // MIs[0] zero
1257 /* 1886 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1258 /* 1890 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1259 /* 1894 */ // MIs[1] Operand 1
1260 /* 1894 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1261 /* 1905 */ // MIs[0] rhs
1262 /* 1905 */ // No operand predicates
1263 /* 1905 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1264 /* 1910 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1265 /* 1912 */ // Combiner Rule #21: binop_left_to_zero @ [__binop_left_to_zero_match_0[0]]
1266 /* 1912 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1267 /* 1917 */ GIR_EraseRootFromParent_Done,
1268 /* 1918 */ // Label 74: @1918
1269 /* 1918 */ GIM_Try, /*On fail goto*//*Label 75*/ GIMT_Encode4(1941), // Rule ID 22 //
1270 /* 1923 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
1271 /* 1926 */ // MIs[0] dst
1272 /* 1926 */ // No operand predicates
1273 /* 1926 */ // MIs[0] lhs
1274 /* 1926 */ // No operand predicates
1275 /* 1926 */ // MIs[0] Operand 2
1276 /* 1926 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1277 /* 1930 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1278 /* 1935 */ // Combiner Rule #18: right_identity_zero @ [__right_identity_zero_match_0[4]]
1279 /* 1935 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1280 /* 1940 */ GIR_EraseRootFromParent_Done,
1281 /* 1941 */ // Label 75: @1941
1282 /* 1941 */ GIM_Reject,
1283 /* 1942 */ // Label 22: @1942
1284 /* 1942 */ GIM_Try, /*On fail goto*//*Label 76*/ GIMT_Encode4(1982), // Rule ID 33 //
1285 /* 1947 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule21Enabled),
1286 /* 1950 */ // MIs[0] dst
1287 /* 1950 */ // No operand predicates
1288 /* 1950 */ // MIs[0] zero
1289 /* 1950 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1290 /* 1954 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1291 /* 1958 */ // MIs[1] Operand 1
1292 /* 1958 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1293 /* 1969 */ // MIs[0] rhs
1294 /* 1969 */ // No operand predicates
1295 /* 1969 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1296 /* 1974 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1297 /* 1976 */ // Combiner Rule #21: binop_left_to_zero @ [__binop_left_to_zero_match_0[1]]
1298 /* 1976 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1299 /* 1981 */ GIR_EraseRootFromParent_Done,
1300 /* 1982 */ // Label 76: @1982
1301 /* 1982 */ GIM_Try, /*On fail goto*//*Label 77*/ GIMT_Encode4(2005), // Rule ID 24 //
1302 /* 1987 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
1303 /* 1990 */ // MIs[0] dst
1304 /* 1990 */ // No operand predicates
1305 /* 1990 */ // MIs[0] lhs
1306 /* 1990 */ // No operand predicates
1307 /* 1990 */ // MIs[0] Operand 2
1308 /* 1990 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1309 /* 1994 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1310 /* 1999 */ // Combiner Rule #18: right_identity_zero @ [__right_identity_zero_match_0[6]]
1311 /* 1999 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1312 /* 2004 */ GIR_EraseRootFromParent_Done,
1313 /* 2005 */ // Label 77: @2005
1314 /* 2005 */ GIM_Reject,
1315 /* 2006 */ // Label 23: @2006
1316 /* 2006 */ GIM_Try, /*On fail goto*//*Label 78*/ GIMT_Encode4(2046), // Rule ID 34 //
1317 /* 2011 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule21Enabled),
1318 /* 2014 */ // MIs[0] dst
1319 /* 2014 */ // No operand predicates
1320 /* 2014 */ // MIs[0] zero
1321 /* 2014 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1322 /* 2018 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
1323 /* 2022 */ // MIs[1] Operand 1
1324 /* 2022 */ GIM_CheckLiteralInt, /*MI*/1, /*Op*/1, GIMT_Encode8(0),
1325 /* 2033 */ // MIs[0] rhs
1326 /* 2033 */ // No operand predicates
1327 /* 2033 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1328 /* 2038 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1329 /* 2040 */ // Combiner Rule #21: binop_left_to_zero @ [__binop_left_to_zero_match_0[2]]
1330 /* 2040 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1331 /* 2045 */ GIR_EraseRootFromParent_Done,
1332 /* 2046 */ // Label 78: @2046
1333 /* 2046 */ GIM_Try, /*On fail goto*//*Label 79*/ GIMT_Encode4(2069), // Rule ID 23 //
1334 /* 2051 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
1335 /* 2054 */ // MIs[0] dst
1336 /* 2054 */ // No operand predicates
1337 /* 2054 */ // MIs[0] lhs
1338 /* 2054 */ // No operand predicates
1339 /* 2054 */ // MIs[0] Operand 2
1340 /* 2054 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1341 /* 2058 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1342 /* 2063 */ // Combiner Rule #18: right_identity_zero @ [__right_identity_zero_match_0[5]]
1343 /* 2063 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1344 /* 2068 */ GIR_EraseRootFromParent_Done,
1345 /* 2069 */ // Label 79: @2069
1346 /* 2069 */ GIM_Reject,
1347 /* 2070 */ // Label 24: @2070
1348 /* 2070 */ GIM_Try, /*On fail goto*//*Label 80*/ GIMT_Encode4(2093), // Rule ID 27 //
1349 /* 2075 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
1350 /* 2078 */ // MIs[0] dst
1351 /* 2078 */ // No operand predicates
1352 /* 2078 */ // MIs[0] lhs
1353 /* 2078 */ // No operand predicates
1354 /* 2078 */ // MIs[0] Operand 2
1355 /* 2078 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1356 /* 2082 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1357 /* 2087 */ // Combiner Rule #18: right_identity_zero @ [__right_identity_zero_match_0[9]]
1358 /* 2087 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1359 /* 2092 */ GIR_EraseRootFromParent_Done,
1360 /* 2093 */ // Label 80: @2093
1361 /* 2093 */ GIM_Reject,
1362 /* 2094 */ // Label 25: @2094
1363 /* 2094 */ GIM_Try, /*On fail goto*//*Label 81*/ GIMT_Encode4(2117), // Rule ID 26 //
1364 /* 2099 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
1365 /* 2102 */ // MIs[0] dst
1366 /* 2102 */ // No operand predicates
1367 /* 2102 */ // MIs[0] lhs
1368 /* 2102 */ // No operand predicates
1369 /* 2102 */ // MIs[0] Operand 2
1370 /* 2102 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1371 /* 2106 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1372 /* 2111 */ // Combiner Rule #18: right_identity_zero @ [__right_identity_zero_match_0[8]]
1373 /* 2111 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1374 /* 2116 */ GIR_EraseRootFromParent_Done,
1375 /* 2117 */ // Label 81: @2117
1376 /* 2117 */ GIM_Reject,
1377 /* 2118 */ // Label 26: @2118
1378 /* 2118 */ GIM_Try, /*On fail goto*//*Label 82*/ GIMT_Encode4(2142), // Rule ID 16 //
1379 /* 2123 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule16Enabled),
1380 /* 2126 */ // MIs[0] dst
1381 /* 2126 */ // No operand predicates
1382 /* 2126 */ // MIs[0] cond
1383 /* 2126 */ // No operand predicates
1384 /* 2126 */ // MIs[0] x
1385 /* 2126 */ // No operand predicates
1386 /* 2126 */ // MIs[0] x
1387 /* 2126 */ GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/3, /*OtherMI*/0, /*OtherOpIdx*/2,
1388 /* 2131 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
1389 /* 2136 */ // Combiner Rule #16: select_same_val_trivial
1390 /* 2136 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
1391 /* 2141 */ GIR_EraseRootFromParent_Done,
1392 /* 2142 */ // Label 82: @2142
1393 /* 2142 */ GIM_Try, /*On fail goto*//*Label 83*/ GIMT_Encode4(2165), // Rule ID 17 //
1394 /* 2147 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule17Enabled),
1395 /* 2150 */ // MIs[0] dst
1396 /* 2150 */ // No operand predicates
1397 /* 2150 */ // MIs[0] cond
1398 /* 2150 */ // No operand predicates
1399 /* 2150 */ // MIs[0] tval
1400 /* 2150 */ // No operand predicates
1401 /* 2150 */ // MIs[0] fval
1402 /* 2150 */ // No operand predicates
1403 /* 2150 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner0),
1404 /* 2154 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
1405 /* 2159 */ // Combiner Rule #17: select_same_val_equiv
1406 /* 2159 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
1407 /* 2164 */ GIR_EraseRootFromParent_Done,
1408 /* 2165 */ // Label 83: @2165
1409 /* 2165 */ GIM_Reject,
1410 /* 2166 */ // Label 27: @2166
1411 /* 2166 */ GIM_Try, /*On fail goto*//*Label 84*/ GIMT_Encode4(2189), // Rule ID 56 //
1412 /* 2171 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule36Enabled),
1413 /* 2174 */ // MIs[0] dst
1414 /* 2174 */ // No operand predicates
1415 /* 2174 */ // MIs[0] x
1416 /* 2174 */ // No operand predicates
1417 /* 2174 */ // MIs[0] y
1418 /* 2174 */ // No operand predicates
1419 /* 2174 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner4),
1420 /* 2178 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1421 /* 2183 */ // Combiner Rule #36: right_identity_neg_zero_fp
1422 /* 2183 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1423 /* 2188 */ GIR_EraseRootFromParent_Done,
1424 /* 2189 */ // Label 84: @2189
1425 /* 2189 */ GIM_Try, /*On fail goto*//*Label 85*/ GIMT_Encode4(2218), // Rule ID 57 //
1426 /* 2194 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule37Enabled),
1427 /* 2197 */ GIM_MIFlags, /*MI*/0, GIMT_Encode4(MachineInstr::FmNsz),
1428 /* 2203 */ // MIs[0] dst
1429 /* 2203 */ // No operand predicates
1430 /* 2203 */ // MIs[0] x
1431 /* 2203 */ // No operand predicates
1432 /* 2203 */ // MIs[0] y
1433 /* 2203 */ // No operand predicates
1434 /* 2203 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner5),
1435 /* 2207 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1436 /* 2212 */ // Combiner Rule #37: right_identity_neg_zero_fp_nsz
1437 /* 2212 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1438 /* 2217 */ GIR_EraseRootFromParent_Done,
1439 /* 2218 */ // Label 85: @2218
1440 /* 2218 */ GIM_Reject,
1441 /* 2219 */ // Label 28: @2219
1442 /* 2219 */ GIM_Try, /*On fail goto*//*Label 86*/ GIMT_Encode4(2242), // Rule ID 46 //
1443 /* 2224 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule28Enabled),
1444 /* 2227 */ // MIs[0] dst
1445 /* 2227 */ // No operand predicates
1446 /* 2227 */ // MIs[0] x
1447 /* 2227 */ // No operand predicates
1448 /* 2227 */ // MIs[0] y
1449 /* 2227 */ // No operand predicates
1450 /* 2227 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner2),
1451 /* 2231 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1452 /* 2236 */ // Combiner Rule #28: right_identity_one_fp
1453 /* 2236 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1454 /* 2241 */ GIR_EraseRootFromParent_Done,
1455 /* 2242 */ // Label 86: @2242
1456 /* 2242 */ GIM_Try, /*On fail goto*//*Label 87*/ GIMT_Encode4(2262), // Rule ID 58 //
1457 /* 2247 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule38Enabled),
1458 /* 2250 */ // MIs[0] dst
1459 /* 2250 */ // No operand predicates
1460 /* 2250 */ // MIs[0] x
1461 /* 2250 */ // No operand predicates
1462 /* 2250 */ // MIs[0] y
1463 /* 2250 */ // No operand predicates
1464 /* 2250 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner6),
1465 /* 2254 */ // Combiner Rule #38: right_identity_neg_one_fp
1466 /* 2254 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::G_FNEG),
1467 /* 2257 */ GIR_RootToRootCopy, /*OpIdx*/0, // dst
1468 /* 2259 */ GIR_RootToRootCopy, /*OpIdx*/1, // x
1469 /* 2261 */ GIR_EraseRootFromParent_Done,
1470 /* 2262 */ // Label 87: @2262
1471 /* 2262 */ GIM_Reject,
1472 /* 2263 */ // Label 29: @2263
1473 /* 2263 */ GIM_Try, /*On fail goto*//*Label 88*/ GIMT_Encode4(2284), // Rule ID 4 //
1474 /* 2268 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
1475 /* 2271 */ // MIs[0] dst
1476 /* 2271 */ // No operand predicates
1477 /* 2271 */ // MIs[0] src0
1478 /* 2271 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1479 /* 2275 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1480 /* 2279 */ // MIs[1] cst
1481 /* 2279 */ // No operand predicates
1482 /* 2279 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1483 /* 2281 */ // Combiner Rule #4: constant_fold_flog2
1484 /* 2281 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1485 /* 2284 */ // Label 88: @2284
1486 /* 2284 */ GIM_Reject,
1487 /* 2285 */ // Label 30: @2285
1488 /* 2285 */ GIM_Try, /*On fail goto*//*Label 89*/ GIMT_Encode4(2306), // Rule ID 1 //
1489 /* 2290 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),
1490 /* 2293 */ // MIs[0] dst
1491 /* 2293 */ // No operand predicates
1492 /* 2293 */ // MIs[0] src0
1493 /* 2293 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1494 /* 2297 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1495 /* 2301 */ // MIs[1] cst
1496 /* 2301 */ // No operand predicates
1497 /* 2301 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1498 /* 2303 */ // Combiner Rule #1: constant_fold_fneg
1499 /* 2303 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1500 /* 2306 */ // Label 89: @2306
1501 /* 2306 */ GIM_Try, /*On fail goto*//*Label 90*/ GIMT_Encode4(2335), // Rule ID 44 //
1502 /* 2311 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule26Enabled),
1503 /* 2314 */ // MIs[0] dst
1504 /* 2314 */ // No operand predicates
1505 /* 2314 */ // MIs[0] t
1506 /* 2314 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1507 /* 2318 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FNEG),
1508 /* 2322 */ // MIs[1] src
1509 /* 2322 */ // No operand predicates
1510 /* 2322 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
1511 /* 2327 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1512 /* 2329 */ // Combiner Rule #26: fneg_fneg_fold
1513 /* 2329 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
1514 /* 2334 */ GIR_EraseRootFromParent_Done,
1515 /* 2335 */ // Label 90: @2335
1516 /* 2335 */ GIM_Reject,
1517 /* 2336 */ // Label 31: @2336
1518 /* 2336 */ GIM_Try, /*On fail goto*//*Label 91*/ GIMT_Encode4(2357), // Rule ID 6 //
1519 /* 2341 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
1520 /* 2344 */ // MIs[0] dst
1521 /* 2344 */ // No operand predicates
1522 /* 2344 */ // MIs[0] src0
1523 /* 2344 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1524 /* 2348 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1525 /* 2352 */ // MIs[1] cst
1526 /* 2352 */ // No operand predicates
1527 /* 2352 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1528 /* 2354 */ // Combiner Rule #6: constant_fold_fpext
1529 /* 2354 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1530 /* 2357 */ // Label 91: @2357
1531 /* 2357 */ GIM_Reject,
1532 /* 2358 */ // Label 32: @2358
1533 /* 2358 */ GIM_Try, /*On fail goto*//*Label 92*/ GIMT_Encode4(2379), // Rule ID 5 //
1534 /* 2363 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule5Enabled),
1535 /* 2366 */ // MIs[0] dst
1536 /* 2366 */ // No operand predicates
1537 /* 2366 */ // MIs[0] src0
1538 /* 2366 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1539 /* 2370 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1540 /* 2374 */ // MIs[1] cst
1541 /* 2374 */ // No operand predicates
1542 /* 2374 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1543 /* 2376 */ // Combiner Rule #5: constant_fold_fptrunc
1544 /* 2376 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1545 /* 2379 */ // Label 92: @2379
1546 /* 2379 */ GIM_Try, /*On fail goto*//*Label 93*/ GIMT_Encode4(2400), // Rule ID 55 //
1547 /* 2384 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule35Enabled),
1548 /* 2387 */ // MIs[0] dst
1549 /* 2387 */ // No operand predicates
1550 /* 2387 */ // MIs[0] src1
1551 /* 2387 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1552 /* 2391 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FPEXT),
1553 /* 2395 */ // MIs[1] src0
1554 /* 2395 */ // No operand predicates
1555 /* 2395 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1556 /* 2397 */ // Combiner Rule #35: fptrunc_fpext_fold
1557 /* 2397 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner8),
1558 /* 2400 */ // Label 93: @2400
1559 /* 2400 */ GIM_Reject,
1560 /* 2401 */ // Label 33: @2401
1561 /* 2401 */ GIM_Try, /*On fail goto*//*Label 94*/ GIMT_Encode4(2416), // Rule ID 14 //
1562 /* 2406 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule14Enabled),
1563 /* 2409 */ // MIs[0] dst
1564 /* 2409 */ // No operand predicates
1565 /* 2409 */ // MIs[0] Operand 1
1566 /* 2409 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/1, 0,
1567 /* 2413 */ // Combiner Rule #14: itof_const_zero_fold_si
1568 /* 2413 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner2),
1569 /* 2416 */ // Label 94: @2416
1570 /* 2416 */ GIM_Reject,
1571 /* 2417 */ // Label 34: @2417
1572 /* 2417 */ GIM_Try, /*On fail goto*//*Label 95*/ GIMT_Encode4(2432), // Rule ID 15 //
1573 /* 2422 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule15Enabled),
1574 /* 2425 */ // MIs[0] dst
1575 /* 2425 */ // No operand predicates
1576 /* 2425 */ // MIs[0] Operand 1
1577 /* 2425 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/1, 0,
1578 /* 2429 */ // Combiner Rule #15: itof_const_zero_fold_ui
1579 /* 2429 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner2),
1580 /* 2432 */ // Label 95: @2432
1581 /* 2432 */ GIM_Reject,
1582 /* 2433 */ // Label 35: @2433
1583 /* 2433 */ GIM_Try, /*On fail goto*//*Label 96*/ GIMT_Encode4(2454), // Rule ID 2 //
1584 /* 2438 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
1585 /* 2441 */ // MIs[0] dst
1586 /* 2441 */ // No operand predicates
1587 /* 2441 */ // MIs[0] src0
1588 /* 2441 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1589 /* 2445 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1590 /* 2449 */ // MIs[1] cst
1591 /* 2449 */ // No operand predicates
1592 /* 2449 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1593 /* 2451 */ // Combiner Rule #2: constant_fold_fabs
1594 /* 2451 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1595 /* 2454 */ // Label 96: @2454
1596 /* 2454 */ GIM_Reject,
1597 /* 2455 */ // Label 36: @2455
1598 /* 2455 */ GIM_Try, /*On fail goto*//*Label 97*/ GIMT_Encode4(2478), // Rule ID 25 //
1599 /* 2460 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
1600 /* 2463 */ // MIs[0] dst
1601 /* 2463 */ // No operand predicates
1602 /* 2463 */ // MIs[0] lhs
1603 /* 2463 */ // No operand predicates
1604 /* 2463 */ // MIs[0] Operand 2
1605 /* 2463 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
1606 /* 2467 */ GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1607 /* 2472 */ // Combiner Rule #18: right_identity_zero @ [__right_identity_zero_match_0[7]]
1608 /* 2472 */ GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
1609 /* 2477 */ GIR_EraseRootFromParent_Done,
1610 /* 2478 */ // Label 97: @2478
1611 /* 2478 */ GIM_Reject,
1612 /* 2479 */ // Label 37: @2479
1613 /* 2479 */ GIM_Try, /*On fail goto*//*Label 98*/ GIMT_Encode4(2500), // Rule ID 7 //
1614 /* 2484 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule7Enabled),
1615 /* 2487 */ // MIs[0] dst
1616 /* 2487 */ // No operand predicates
1617 /* 2487 */ // MIs[0] src0
1618 /* 2487 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1619 /* 2491 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1620 /* 2495 */ // MIs[1] cst
1621 /* 2495 */ // No operand predicates
1622 /* 2495 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1623 /* 2497 */ // Combiner Rule #7: constant_fold_fceil
1624 /* 2497 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1625 /* 2500 */ // Label 98: @2500
1626 /* 2500 */ GIM_Reject,
1627 /* 2501 */ // Label 38: @2501
1628 /* 2501 */ GIM_Try, /*On fail goto*//*Label 99*/ GIMT_Encode4(2522), // Rule ID 3 //
1629 /* 2506 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule3Enabled),
1630 /* 2509 */ // MIs[0] dst
1631 /* 2509 */ // No operand predicates
1632 /* 2509 */ // MIs[0] src0
1633 /* 2509 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1634 /* 2513 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1635 /* 2517 */ // MIs[1] cst
1636 /* 2517 */ // No operand predicates
1637 /* 2517 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1638 /* 2519 */ // Combiner Rule #3: constant_fold_fsqrt
1639 /* 2519 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1640 /* 2522 */ // Label 99: @2522
1641 /* 2522 */ GIM_Reject,
1642 /* 2523 */ // Label 39: @2523
1643 /* 2523 */ GIM_Try, /*On fail goto*//*Label 100*/ GIMT_Encode4(2544), // Rule ID 8 //
1644 /* 2528 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule8Enabled),
1645 /* 2531 */ // MIs[0] dst
1646 /* 2531 */ // No operand predicates
1647 /* 2531 */ // MIs[0] src0
1648 /* 2531 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1649 /* 2535 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1650 /* 2539 */ // MIs[1] cst
1651 /* 2539 */ // No operand predicates
1652 /* 2539 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1653 /* 2541 */ // Combiner Rule #8: constant_fold_ffloor
1654 /* 2541 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1655 /* 2544 */ // Label 100: @2544
1656 /* 2544 */ GIM_Reject,
1657 /* 2545 */ // Label 40: @2545
1658 /* 2545 */ GIM_Try, /*On fail goto*//*Label 101*/ GIMT_Encode4(2566), // Rule ID 12 //
1659 /* 2550 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule12Enabled),
1660 /* 2553 */ // MIs[0] dst
1661 /* 2553 */ // No operand predicates
1662 /* 2553 */ // MIs[0] src0
1663 /* 2553 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1664 /* 2557 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1665 /* 2561 */ // MIs[1] cst
1666 /* 2561 */ // No operand predicates
1667 /* 2561 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1668 /* 2563 */ // Combiner Rule #12: constant_fold_frint
1669 /* 2563 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1670 /* 2566 */ // Label 101: @2566
1671 /* 2566 */ GIM_Reject,
1672 /* 2567 */ // Label 41: @2567
1673 /* 2567 */ GIM_Try, /*On fail goto*//*Label 102*/ GIMT_Encode4(2588), // Rule ID 13 //
1674 /* 2572 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule13Enabled),
1675 /* 2575 */ // MIs[0] dst
1676 /* 2575 */ // No operand predicates
1677 /* 2575 */ // MIs[0] src0
1678 /* 2575 */ GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1679 /* 2579 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCONSTANT),
1680 /* 2583 */ // MIs[1] cst
1681 /* 2583 */ // No operand predicates
1682 /* 2583 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1683 /* 2585 */ // Combiner Rule #13: constant_fold_fnearbyint
1684 /* 2585 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
1685 /* 2588 */ // Label 102: @2588
1686 /* 2588 */ GIM_Reject,
1687 /* 2589 */ // Label 42: @2589
1688 /* 2589 */ GIM_Reject,
1689 /* 2590 */ }; // Size: 2590 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