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