Coverage Report

Created: 2024-01-17 10:31

/src/build/lib/Target/RISCV/RISCVGenPostLegalizeGICombiner.inc
Line
Count
Source (jump to first uncovered line)
1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* RISCVPostLegalizerCombinerImpl Combiner Match Table                        *|
4
|*                                                                            *|
5
|* Automatically generated file, do not edit!                                 *|
6
|*                                                                            *|
7
\*===----------------------------------------------------------------------===*/
8
9
#ifdef GET_GICOMBINER_DEPS
10
#include "llvm/ADT/SparseBitVector.h"
11
namespace llvm {
12
extern cl::OptionCategory GICombinerOptionCategory;
13
} // end namespace llvm
14
#endif // ifdef GET_GICOMBINER_DEPS
15
16
#ifdef GET_GICOMBINER_TYPES
17
struct RISCVPostLegalizerCombinerImplRuleConfig {
18
  SparseBitVector<> DisabledRules;
19
20
  bool isRuleEnabled(unsigned RuleID) const;
21
  bool parseCommandLineOption();
22
  bool setRuleEnabled(StringRef RuleIdentifier);
23
  bool setRuleDisabled(StringRef RuleIdentifier);
24
};
25
26
0
static std::optional<uint64_t> getRuleIdxForIdentifier(StringRef RuleIdentifier) {
27
0
  uint64_t I;
28
  // getAtInteger(...) returns false on success
29
0
  bool Parsed = !RuleIdentifier.getAsInteger(0, I);
30
0
  if (Parsed)
31
0
    return I;
32
33
0
#ifndef NDEBUG
34
0
  switch (RuleIdentifier.size()) {
35
0
  default: break;
36
0
  case 10:   // 2 strings to match.
37
0
    switch (RuleIdentifier[0]) {
38
0
    default: break;
39
0
    case 'i':  // 1 string to match.
40
0
      if (memcmp(RuleIdentifier.data()+1, "2p_to_p2i", 9) != 0)
41
0
        break;
42
0
      return 7;  // "i2p_to_p2i"
43
0
    case 'p':  // 1 string to match.
44
0
      if (memcmp(RuleIdentifier.data()+1, "2i_to_i2p", 9) != 0)
45
0
        break;
46
0
      return 6;  // "p2i_to_i2p"
47
0
    }
48
0
    break;
49
0
  case 11:   // 1 string to match.
50
0
    if (memcmp(RuleIdentifier.data()+0, "add_sub_reg", 11) != 0)
51
0
      break;
52
0
    return 12;  // "add_sub_reg"
53
0
  case 13:   // 1 string to match.
54
0
    if (memcmp(RuleIdentifier.data()+0, "redundant_and", 13) != 0)
55
0
      break;
56
0
    return 0;  // "redundant_and"
57
0
  case 14:   // 2 strings to match.
58
0
    switch (RuleIdentifier[0]) {
59
0
    default: break;
60
0
    case 'b':  // 1 string to match.
61
0
      if (memcmp(RuleIdentifier.data()+1, "inop_same_val", 13) != 0)
62
0
        break;
63
0
      return 3;  // "binop_same_val"
64
0
    case 'f':  // 1 string to match.
65
0
      if (memcmp(RuleIdentifier.data()+1, "neg_fneg_fold", 13) != 0)
66
0
        break;
67
0
      return 9;  // "fneg_fneg_fold"
68
0
    }
69
0
    break;
70
0
  case 15:   // 1 string to match.
71
0
    if (memcmp(RuleIdentifier.data()+0, "select_same_val", 15) != 0)
72
0
      break;
73
0
    return 1;  // "select_same_val"
74
0
  case 17:   // 1 string to match.
75
0
    if (memcmp(RuleIdentifier.data()+0, "anyext_trunc_fold", 17) != 0)
76
0
      break;
77
0
    return 8;  // "anyext_trunc_fold"
78
0
  case 18:   // 2 strings to match.
79
0
    switch (RuleIdentifier[0]) {
80
0
    default: break;
81
0
    case 'b':  // 1 string to match.
82
0
      if (memcmp(RuleIdentifier.data()+1, "inop_left_to_zero", 17) != 0)
83
0
        break;
84
0
      return 4;  // "binop_left_to_zero"
85
0
    case 'f':  // 1 string to match.
86
0
      if (memcmp(RuleIdentifier.data()+1, "ptrunc_fpext_fold", 17) != 0)
87
0
        break;
88
0
      return 17;  // "fptrunc_fpext_fold"
89
0
    }
90
0
    break;
91
0
  case 19:   // 2 strings to match.
92
0
    switch (RuleIdentifier[0]) {
93
0
    default: break;
94
0
    case 'b':  // 1 string to match.
95
0
      if (memcmp(RuleIdentifier.data()+1, "inop_right_to_zero", 18) != 0)
96
0
        break;
97
0
      return 5;  // "binop_right_to_zero"
98
0
    case 'r':  // 1 string to match.
99
0
      if (memcmp(RuleIdentifier.data()+1, "ight_identity_zero", 18) != 0)
100
0
        break;
101
0
      return 2;  // "right_identity_zero"
102
0
    }
103
0
    break;
104
0
  case 20:   // 1 string to match.
105
0
    if (memcmp(RuleIdentifier.data()+0, "bitcast_bitcast_fold", 20) != 0)
106
0
      break;
107
0
    return 16;  // "bitcast_bitcast_fold"
108
0
  case 21:   // 1 string to match.
109
0
    if (memcmp(RuleIdentifier.data()+0, "right_identity_one_fp", 21) != 0)
110
0
      break;
111
0
    return 11;  // "right_identity_one_fp"
112
0
  case 22:   // 2 strings to match.
113
0
    switch (RuleIdentifier[0]) {
114
0
    default: break;
115
0
    case 'r':  // 1 string to match.
116
0
      if (memcmp(RuleIdentifier.data()+1, "ight_identity_one_int", 21) != 0)
117
0
        break;
118
0
      return 10;  // "right_identity_one_int"
119
0
    case 't':  // 1 string to match.
120
0
      if (memcmp(RuleIdentifier.data()+1, "runc_buildvector_fold", 21) != 0)
121
0
        break;
122
0
      return 14;  // "trunc_buildvector_fold"
123
0
    }
124
0
    break;
125
0
  case 25:   // 1 string to match.
126
0
    if (memcmp(RuleIdentifier.data()+0, "buildvector_identity_fold", 25) != 0)
127
0
      break;
128
0
    return 13;  // "buildvector_identity_fold"
129
0
  case 26:   // 1 string to match.
130
0
    if (memcmp(RuleIdentifier.data()+0, "right_identity_neg_zero_fp", 26) != 0)
131
0
      break;
132
0
    return 18;  // "right_identity_neg_zero_fp"
133
0
  case 27:   // 1 string to match.
134
0
    if (memcmp(RuleIdentifier.data()+0, "trunc_lshr_buildvector_fold", 27) != 0)
135
0
      break;
136
0
    return 15;  // "trunc_lshr_buildvector_fold"
137
0
  }
138
0
#endif // ifndef NDEBUG
139
140
0
  return std::nullopt;
141
0
}
142
0
static std::optional<std::pair<uint64_t, uint64_t>> getRuleRangeForIdentifier(StringRef RuleIdentifier) {
143
0
  std::pair<StringRef, StringRef> RangePair = RuleIdentifier.split('-');
144
0
  if (!RangePair.second.empty()) {
145
0
    const auto First = getRuleIdxForIdentifier(RangePair.first);
146
0
    const auto Last = getRuleIdxForIdentifier(RangePair.second);
147
0
    if (!First || !Last)
148
0
      return std::nullopt;
149
0
    if (First >= Last)
150
0
      report_fatal_error("Beginning of range should be before end of range");
151
0
    return {{*First, *Last + 1}};
152
0
  }
153
0
  if (RangePair.first == "*") {
154
0
    return {{0, 19}};
155
0
  }
156
0
  const auto I = getRuleIdxForIdentifier(RangePair.first);
157
0
  if (!I)
158
0
    return std::nullopt;
159
0
  return {{*I, *I + 1}};
160
0
}
161
162
0
bool RISCVPostLegalizerCombinerImplRuleConfig::setRuleEnabled(StringRef RuleIdentifier) {
163
0
  auto MaybeRange = getRuleRangeForIdentifier(RuleIdentifier);
164
0
  if (!MaybeRange)
165
0
    return false;
166
0
  for (auto I = MaybeRange->first; I < MaybeRange->second; ++I)
167
0
    DisabledRules.reset(I);
168
0
  return true;
169
0
}
170
171
0
bool RISCVPostLegalizerCombinerImplRuleConfig::setRuleDisabled(StringRef RuleIdentifier) {
172
0
  auto MaybeRange = getRuleRangeForIdentifier(RuleIdentifier);
173
0
  if (!MaybeRange)
174
0
    return false;
175
0
  for (auto I = MaybeRange->first; I < MaybeRange->second; ++I)
176
0
    DisabledRules.set(I);
177
0
  return true;
178
0
}
179
180
static std::vector<std::string> RISCVPostLegalizerCombinerOption;
181
static cl::list<std::string> RISCVPostLegalizerCombinerDisableOption(
182
    "riscvpostlegalizercombiner-disable-rule",
183
    cl::desc("Disable one or more combiner rules temporarily in the RISCVPostLegalizerCombiner pass"),
184
    cl::CommaSeparated,
185
    cl::Hidden,
186
    cl::cat(GICombinerOptionCategory),
187
0
    cl::callback([](const std::string &Str) {
188
0
      RISCVPostLegalizerCombinerOption.push_back(Str);
189
0
    }));
190
static cl::list<std::string> RISCVPostLegalizerCombinerOnlyEnableOption(
191
    "riscvpostlegalizercombiner-only-enable-rule",
192
    cl::desc("Disable all rules in the RISCVPostLegalizerCombiner pass then re-enable the specified ones"),
193
    cl::Hidden,
194
    cl::cat(GICombinerOptionCategory),
195
0
    cl::callback([](const std::string &CommaSeparatedArg) {
196
0
      StringRef Str = CommaSeparatedArg;
197
0
      RISCVPostLegalizerCombinerOption.push_back("*");
198
0
      do {
199
0
        auto X = Str.split(",");
200
0
        RISCVPostLegalizerCombinerOption.push_back(("!" + X.first).str());
201
0
        Str = X.second;
202
0
      } while (!Str.empty());
203
0
    }));
204
205
206
0
bool RISCVPostLegalizerCombinerImplRuleConfig::isRuleEnabled(unsigned RuleID) const {
207
0
    return  !DisabledRules.test(RuleID);
208
0
}
209
0
bool RISCVPostLegalizerCombinerImplRuleConfig::parseCommandLineOption() {
210
0
  for (StringRef Identifier : RISCVPostLegalizerCombinerOption) {
211
0
    bool Enabled = Identifier.consume_front("!");
212
0
    if (Enabled && !setRuleEnabled(Identifier))
213
0
      return false;
214
0
    if (!Enabled && !setRuleDisabled(Identifier))
215
0
      return false;
216
0
  }
217
0
  return true;
218
0
}
219
220
#endif // ifdef GET_GICOMBINER_TYPES
221
222
#ifdef GET_GICOMBINER_TYPES
223
const unsigned MAX_SUBTARGET_PREDICATES = 0;
224
using PredicateBitset = llvm::Bitset<MAX_SUBTARGET_PREDICATES>;
225
#endif // ifdef GET_GICOMBINER_TYPES
226
227
#ifdef GET_GICOMBINER_CLASS_MEMBERS
228
PredicateBitset AvailableModuleFeatures;
229
mutable PredicateBitset AvailableFunctionFeatures;
230
0
PredicateBitset getAvailableFeatures() const {
231
0
  return AvailableModuleFeatures | AvailableFunctionFeatures;
232
0
}
233
PredicateBitset
234
computeAvailableModuleFeatures(const RISCVSubtarget *Subtarget) const;
235
PredicateBitset
236
computeAvailableFunctionFeatures(const RISCVSubtarget *Subtarget,
237
                                 const MachineFunction *MF) const;
238
void setupGeneratedPerFunctionState(MachineFunction &MF) override;
239
#endif // ifdef GET_GICOMBINER_CLASS_MEMBERS
240
#ifdef GET_GICOMBINER_CLASS_MEMBERS
241
  mutable MatcherState State;
242
  typedef ComplexRendererFns(RISCVPostLegalizerCombinerImpl::*ComplexMatcherMemFn)(MachineOperand &) const;
243
  typedef void(RISCVPostLegalizerCombinerImpl::*CustomRendererFn)(MachineInstrBuilder &, const MachineInstr &, int) const;
244
  const ExecInfoTy<PredicateBitset, ComplexMatcherMemFn, CustomRendererFn> ExecInfo;
245
  static RISCVPostLegalizerCombinerImpl::ComplexMatcherMemFn ComplexPredicateFns[];
246
  static RISCVPostLegalizerCombinerImpl::CustomRendererFn CustomRenderers[];
247
  bool testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const override;
248
  bool testImmPredicate_APInt(unsigned PredicateID, const APInt &Imm) const override;
249
  bool testImmPredicate_APFloat(unsigned PredicateID, const APFloat &Imm) const override;
250
  const uint8_t *getMatchTable() const override;
251
  bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI, const MatcherState &State) const override;
252
  bool testSimplePredicate(unsigned PredicateID) const override;
253
  void runCustomAction(unsigned FnID, const MatcherState &State, NewMIVector &OutMIs) const override;
254
  struct MatchInfosTy {
255
    Register MDInfo0;
256
  };
257
  mutable MatchInfosTy MatchInfos;
258
259
#endif // ifdef GET_GICOMBINER_CLASS_MEMBERS
260
261
#ifdef GET_GICOMBINER_IMPL
262
// LLT Objects.
263
enum {
264
  GILLT_s1,
265
};
266
const static size_t NumTypeObjects = 1;
267
const static LLT TypeObjects[] = {
268
  LLT::scalar(1),
269
};
270
271
// Bits for subtarget features that participate in instruction matching.
272
enum SubtargetFeatureBits : uint8_t {
273
};
274
275
PredicateBitset RISCVPostLegalizerCombinerImpl::
276
0
computeAvailableModuleFeatures(const RISCVSubtarget *Subtarget) const {
277
0
  PredicateBitset Features;
278
0
  return Features;
279
0
}
280
281
0
void RISCVPostLegalizerCombinerImpl::setupGeneratedPerFunctionState(MachineFunction &MF) {
282
0
  AvailableFunctionFeatures = computeAvailableFunctionFeatures((const RISCVSubtarget *)&MF.getSubtarget(), &MF);
283
0
}
284
PredicateBitset RISCVPostLegalizerCombinerImpl::
285
0
computeAvailableFunctionFeatures(const RISCVSubtarget *Subtarget, const MachineFunction *MF) const {
286
0
  PredicateBitset Features;
287
0
  return Features;
288
0
}
289
290
// Feature bitsets.
291
enum {
292
  GIFBS_Invalid,
293
};
294
constexpr static PredicateBitset FeatureBitsets[] {
295
  {}, // GIFBS_Invalid
296
};
297
298
// ComplexPattern predicates.
299
enum {
300
  GICP_Invalid,
301
};
302
// See constructor for table contents
303
304
RISCVPostLegalizerCombinerImpl::ComplexMatcherMemFn
305
RISCVPostLegalizerCombinerImpl::ComplexPredicateFns[] = {
306
  nullptr, // GICP_Invalid
307
};
308
309
enum {
310
  GICXXPred_MI_Predicate_GICombiner0 = GICXXPred_Invalid + 1,
311
  GICXXPred_MI_Predicate_GICombiner1,
312
  GICXXPred_MI_Predicate_GICombiner2,
313
  GICXXPred_MI_Predicate_GICombiner3,
314
  GICXXPred_MI_Predicate_GICombiner4,
315
  GICXXPred_MI_Predicate_GICombiner5,
316
  GICXXPred_MI_Predicate_GICombiner6,
317
  GICXXPred_MI_Predicate_GICombiner7,
318
  GICXXPred_MI_Predicate_GICombiner8,
319
  GICXXPred_MI_Predicate_GICombiner9,
320
  GICXXPred_MI_Predicate_GICombiner10,
321
  GICXXPred_MI_Predicate_GICombiner11,
322
};
323
0
bool RISCVPostLegalizerCombinerImpl::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI, const MatcherState &State) const {
324
0
  switch (PredicateID) {
325
0
  case GICXXPred_MI_Predicate_GICombiner0: {
326
0
    return Helper.matchRedundantAnd(*State.MIs[0], MatchInfos.MDInfo0);
327
0
  }
328
0
  case GICXXPred_MI_Predicate_GICombiner1: {
329
0
    return Helper.matchSelectSameVal(*State.MIs[0]);
330
0
  }
331
0
  case GICXXPred_MI_Predicate_GICombiner2: {
332
0
    return Helper.matchOperandIsZero(*State.MIs[0], 1);
333
0
  }
334
0
  case GICXXPred_MI_Predicate_GICombiner3: {
335
0
    return Helper.matchCombineI2PToP2I(*State.MIs[0], MatchInfos.MDInfo0);
336
0
  }
337
0
  case GICXXPred_MI_Predicate_GICombiner4: {
338
0
    MatchInfos.MDInfo0 = State.MIs[1]->getOperand(1).getReg(); return true;
339
0
    llvm_unreachable("GICombiner4 should have returned");
340
0
  }
341
0
  case GICXXPred_MI_Predicate_GICombiner5: {
342
0
    return Helper.matchCombineAnyExtTrunc(*State.MIs[0], MatchInfos.MDInfo0);
343
0
  }
344
0
  case GICXXPred_MI_Predicate_GICombiner6: {
345
0
    return Helper.matchConstantFPOp(State.MIs[0]->getOperand(2), 1.0);
346
0
  }
347
0
  case GICXXPred_MI_Predicate_GICombiner7: {
348
0
    return Helper.matchBuildVectorIdentityFold(*State.MIs[0], MatchInfos.MDInfo0);
349
0
  }
350
0
  case GICXXPred_MI_Predicate_GICombiner8: {
351
0
    return Helper.matchTruncBuildVectorFold(*State.MIs[0], MatchInfos.MDInfo0);
352
0
  }
353
0
  case GICXXPred_MI_Predicate_GICombiner9: {
354
0
    return Helper.matchTruncLshrBuildVectorFold(*State.MIs[0], MatchInfos.MDInfo0);
355
0
  }
356
0
  case GICXXPred_MI_Predicate_GICombiner10: {
357
0
    return MRI.getType(State.MIs[1]->getOperand(1).getReg()) == MRI.getType(State.MIs[0]->getOperand(0).getReg());
358
0
  }
359
0
  case GICXXPred_MI_Predicate_GICombiner11: {
360
0
    return Helper.matchConstantFPOp(State.MIs[0]->getOperand(2), -0.0);
361
0
  }
362
0
  }
363
0
  llvm_unreachable("Unknown predicate");
364
0
  return false;
365
0
}
366
0
bool RISCVPostLegalizerCombinerImpl::testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const {
367
0
  llvm_unreachable("Unknown predicate");
368
0
  return false;
369
0
}
370
0
bool RISCVPostLegalizerCombinerImpl::testImmPredicate_APFloat(unsigned PredicateID, const APFloat & Imm) const {
371
0
  llvm_unreachable("Unknown predicate");
372
0
  return false;
373
0
}
374
0
bool RISCVPostLegalizerCombinerImpl::testImmPredicate_APInt(unsigned PredicateID, const APInt & Imm) const {
375
0
  llvm_unreachable("Unknown predicate");
376
0
  return false;
377
0
}
378
enum {
379
  GICXXPred_Simple_IsRule0Enabled = GICXXPred_Invalid + 1,
380
  GICXXPred_Simple_IsRule1Enabled,
381
  GICXXPred_Simple_IsRule2Enabled,
382
  GICXXPred_Simple_IsRule3Enabled,
383
  GICXXPred_Simple_IsRule4Enabled,
384
  GICXXPred_Simple_IsRule5Enabled,
385
  GICXXPred_Simple_IsRule6Enabled,
386
  GICXXPred_Simple_IsRule7Enabled,
387
  GICXXPred_Simple_IsRule8Enabled,
388
  GICXXPred_Simple_IsRule9Enabled,
389
  GICXXPred_Simple_IsRule10Enabled,
390
  GICXXPred_Simple_IsRule11Enabled,
391
  GICXXPred_Simple_IsRule12Enabled,
392
  GICXXPred_Simple_IsRule13Enabled,
393
  GICXXPred_Simple_IsRule14Enabled,
394
  GICXXPred_Simple_IsRule15Enabled,
395
  GICXXPred_Simple_IsRule16Enabled,
396
  GICXXPred_Simple_IsRule17Enabled,
397
  GICXXPred_Simple_IsRule18Enabled,
398
};
399
400
0
bool RISCVPostLegalizerCombinerImpl::testSimplePredicate(unsigned Predicate) const {
401
0
    return RuleConfig.isRuleEnabled(Predicate - GICXXPred_Invalid - 1);
402
0
}
403
// Custom renderers.
404
enum {
405
  GICR_Invalid,
406
};
407
RISCVPostLegalizerCombinerImpl::CustomRendererFn
408
RISCVPostLegalizerCombinerImpl::CustomRenderers[] = {
409
  nullptr, // GICR_Invalid
410
};
411
412
0
bool RISCVPostLegalizerCombinerImpl::tryCombineAll(MachineInstr &I) const {
413
0
  const TargetSubtargetInfo &ST = MF.getSubtarget();
414
0
  const PredicateBitset AvailableFeatures = getAvailableFeatures();
415
0
  B.setInstrAndDebugLoc(I);
416
0
  State.MIs.clear();
417
0
  State.MIs.push_back(&I);
418
0
  MatchInfos = MatchInfosTy();
419
420
0
  if (executeMatchTable(*this, State, ExecInfo, B, getMatchTable(), *ST.getInstrInfo(), MRI, *MRI.getTargetRegisterInfo(), *ST.getRegBankInfo(), AvailableFeatures, /*CoverageInfo*/ nullptr)) {
421
0
    return true;
422
0
  }
423
424
0
  return false;
425
0
}
426
427
enum {
428
  GICXXCustomAction_CombineApplyGICombiner0 = GICXXCustomAction_Invalid + 1,
429
  GICXXCustomAction_CombineApplyGICombiner1,
430
  GICXXCustomAction_CombineApplyGICombiner2,
431
  GICXXCustomAction_CombineApplyGICombiner3,
432
  GICXXCustomAction_CombineApplyGICombiner4,
433
  GICXXCustomAction_CombineApplyGICombiner5,
434
};
435
0
void RISCVPostLegalizerCombinerImpl::runCustomAction(unsigned ApplyID, const MatcherState &State, NewMIVector &OutMIs) const {
436
0
  switch(ApplyID) {
437
0
  case GICXXCustomAction_CombineApplyGICombiner0:{
438
0
    Helper.replaceSingleDefInstWithReg(*State.MIs[0], MatchInfos.MDInfo0);
439
0
    return;
440
0
  }
441
0
  case GICXXCustomAction_CombineApplyGICombiner1:{
442
0
    Helper.replaceSingleDefInstWithOperand(*State.MIs[0], 2);
443
0
    return;
444
0
  }
445
0
  case GICXXCustomAction_CombineApplyGICombiner2:{
446
0
    Helper.replaceSingleDefInstWithOperand(*State.MIs[0], 1);
447
0
    return;
448
0
  }
449
0
  case GICXXCustomAction_CombineApplyGICombiner3:{
450
0
    Helper.applyCombineI2PToP2I(*State.MIs[0], MatchInfos.MDInfo0);
451
0
    return;
452
0
  }
453
0
  case GICXXCustomAction_CombineApplyGICombiner4:{
454
0
    Helper.applyCombineP2IToI2P(*State.MIs[0], MatchInfos.MDInfo0);
455
0
    return;
456
0
  }
457
0
  case GICXXCustomAction_CombineApplyGICombiner5:{
458
0
    Helper.replaceSingleDefInstWithReg(*State.MIs[0], State.MIs[1]->getOperand(1).getReg());
459
0
    return;
460
0
  }
461
0
}
462
0
  llvm_unreachable("Unknown Apply Action");
463
0
}
464
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
465
0
#define GIMT_Encode2(Val) uint8_t(Val), uint8_t((uint16_t)Val >> 8)
466
0
#define GIMT_Encode4(Val) uint8_t(Val), uint8_t((uint32_t)Val >> 8), uint8_t((uint32_t)Val >> 16), uint8_t((uint32_t)Val >> 24)
467
#define GIMT_Encode8(Val) uint8_t(Val), uint8_t((uint64_t)Val >> 8), uint8_t((uint64_t)Val >> 16), uint8_t((uint64_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)
468
#else
469
#define GIMT_Encode2(Val) uint8_t((uint16_t)Val >> 8), uint8_t(Val)
470
#define GIMT_Encode4(Val) uint8_t((uint32_t)Val >> 24), uint8_t((uint32_t)Val >> 16), uint8_t((uint32_t)Val >> 8), uint8_t(Val)
471
#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((uint64_t)Val >> 24), uint8_t((uint64_t)Val >> 16), uint8_t((uint64_t)Val >> 8), uint8_t(Val)
472
#endif
473
0
const uint8_t *RISCVPostLegalizerCombinerImpl::getMatchTable() const {
474
0
  constexpr static uint8_t MatchTable0[] = {
475
0
    GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(47), GIMT_Encode2(204), /*)*//*default:*//*Label 28*/ GIMT_Encode4(1441),
476
0
    /*TargetOpcode::G_ADD*//*Label 0*/ GIMT_Encode4(638),
477
0
    /*TargetOpcode::G_SUB*//*Label 1*/ GIMT_Encode4(736),
478
0
    /*TargetOpcode::G_MUL*//*Label 2*/ GIMT_Encode4(762),
479
0
    /*TargetOpcode::G_SDIV*//*Label 3*/ GIMT_Encode4(813),
480
0
    /*TargetOpcode::G_UDIV*//*Label 4*/ GIMT_Encode4(830),
481
0
    /*TargetOpcode::G_SREM*//*Label 5*/ GIMT_Encode4(847),
482
0
    /*TargetOpcode::G_UREM*//*Label 6*/ GIMT_Encode4(864), GIMT_Encode4(0), GIMT_Encode4(0),
483
0
    /*TargetOpcode::G_AND*//*Label 7*/ GIMT_Encode4(881),
484
0
    /*TargetOpcode::G_OR*//*Label 8*/ GIMT_Encode4(924),
485
0
    /*TargetOpcode::G_XOR*//*Label 9*/ GIMT_Encode4(976), GIMT_Encode4(0), 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
0
    /*TargetOpcode::G_BUILD_VECTOR*//*Label 10*/ GIMT_Encode4(1002),
487
0
    /*TargetOpcode::G_BUILD_VECTOR_TRUNC*//*Label 11*/ GIMT_Encode4(1019), GIMT_Encode4(0),
488
0
    /*TargetOpcode::G_PTRTOINT*//*Label 12*/ GIMT_Encode4(1036),
489
0
    /*TargetOpcode::G_INTTOPTR*//*Label 13*/ GIMT_Encode4(1063),
490
0
    /*TargetOpcode::G_BITCAST*//*Label 14*/ GIMT_Encode4(1080), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), 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
0
    /*TargetOpcode::G_ANYEXT*//*Label 15*/ GIMT_Encode4(1107),
492
0
    /*TargetOpcode::G_TRUNC*//*Label 16*/ GIMT_Encode4(1124), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
493
0
    /*TargetOpcode::G_SHL*//*Label 17*/ GIMT_Encode4(1157),
494
0
    /*TargetOpcode::G_LSHR*//*Label 18*/ GIMT_Encode4(1183),
495
0
    /*TargetOpcode::G_ASHR*//*Label 19*/ GIMT_Encode4(1209), GIMT_Encode4(0), GIMT_Encode4(0),
496
0
    /*TargetOpcode::G_ROTR*//*Label 20*/ GIMT_Encode4(1235),
497
0
    /*TargetOpcode::G_ROTL*//*Label 21*/ GIMT_Encode4(1261), GIMT_Encode4(0), GIMT_Encode4(0),
498
0
    /*TargetOpcode::G_SELECT*//*Label 22*/ GIMT_Encode4(1287), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
499
0
    /*TargetOpcode::G_FADD*//*Label 23*/ GIMT_Encode4(1304), GIMT_Encode4(0),
500
0
    /*TargetOpcode::G_FMUL*//*Label 24*/ GIMT_Encode4(1330), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
501
0
    /*TargetOpcode::G_FNEG*//*Label 25*/ GIMT_Encode4(1356), GIMT_Encode4(0),
502
0
    /*TargetOpcode::G_FPTRUNC*//*Label 26*/ GIMT_Encode4(1388), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
503
0
    /*TargetOpcode::G_PTR_ADD*//*Label 27*/ GIMT_Encode4(1415),
504
    // Label 0: @638
505
0
    GIM_Try, /*On fail goto*//*Label 29*/ GIMT_Encode4(674), // Rule ID 26 //
506
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule12Enabled),
507
      // MIs[0] dst
508
      // No operand predicates
509
      // MIs[0] __add_sub_reg_match_0.tmp
510
0
      GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
511
0
      GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_SUB),
512
      // MIs[1] src
513
      // No operand predicates
514
      // MIs[1] __add_sub_reg_match_0.x
515
      // No operand predicates
516
      // MIs[0] __add_sub_reg_match_0.x
517
0
      GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/1, /*OtherOpIdx*/2,
518
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
519
0
      GIM_CheckIsSafeToFold, /*InsnID*/1,
520
      // Combiner Rule #12: add_sub_reg @ [__add_sub_reg_match_0[1]]
521
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
522
0
      GIR_EraseFromParent, /*InsnID*/0,
523
0
      GIR_Done,
524
    // Label 29: @674
525
0
    GIM_Try, /*On fail goto*//*Label 30*/ GIMT_Encode4(710), // Rule ID 25 //
526
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule12Enabled),
527
      // MIs[0] dst
528
      // No operand predicates
529
      // MIs[0] __add_sub_reg_match_0.x
530
      // No operand predicates
531
      // MIs[0] __add_sub_reg_match_0.tmp
532
0
      GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
533
0
      GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_SUB),
534
      // MIs[1] src
535
      // No operand predicates
536
      // MIs[1] __add_sub_reg_match_0.x
537
0
      GIM_CheckIsSameOperandIgnoreCopies, /*MI*/1, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
538
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
539
0
      GIM_CheckIsSafeToFold, /*InsnID*/1,
540
      // Combiner Rule #12: add_sub_reg @ [__add_sub_reg_match_0[0]]
541
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
542
0
      GIR_EraseFromParent, /*InsnID*/0,
543
0
      GIR_Done,
544
    // Label 30: @710
545
0
    GIM_Try, /*On fail goto*//*Label 31*/ GIMT_Encode4(735), // Rule ID 3 //
546
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
547
      // MIs[0] dst
548
      // No operand predicates
549
      // MIs[0] lhs
550
      // No operand predicates
551
      // MIs[0] Operand 2
552
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
553
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
554
      // Combiner Rule #2: right_identity_zero @ [__right_identity_zero_match_0[1]]
555
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
556
0
      GIR_EraseFromParent, /*InsnID*/0,
557
0
      GIR_Done,
558
    // Label 31: @735
559
0
    GIM_Reject,
560
    // Label 1: @736
561
0
    GIM_Try, /*On fail goto*//*Label 32*/ GIMT_Encode4(761), // Rule ID 2 //
562
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
563
      // MIs[0] dst
564
      // No operand predicates
565
      // MIs[0] lhs
566
      // No operand predicates
567
      // MIs[0] Operand 2
568
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
569
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
570
      // Combiner Rule #2: right_identity_zero @ [__right_identity_zero_match_0[0]]
571
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
572
0
      GIR_EraseFromParent, /*InsnID*/0,
573
0
      GIR_Done,
574
    // Label 32: @761
575
0
    GIM_Reject,
576
    // Label 2: @762
577
0
    GIM_Try, /*On fail goto*//*Label 33*/ GIMT_Encode4(787), // Rule ID 18 //
578
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule5Enabled),
579
      // MIs[0] dst
580
      // No operand predicates
581
      // MIs[0] lhs
582
      // No operand predicates
583
      // MIs[0] zero
584
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
585
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
586
      // Combiner Rule #5: binop_right_to_zero
587
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/2,
588
0
      GIR_EraseFromParent, /*InsnID*/0,
589
0
      GIR_Done,
590
    // Label 33: @787
591
0
    GIM_Try, /*On fail goto*//*Label 34*/ GIMT_Encode4(812), // Rule ID 23 //
592
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule10Enabled),
593
      // MIs[0] dst
594
      // No operand predicates
595
      // MIs[0] x
596
      // No operand predicates
597
      // MIs[0] Operand 2
598
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 1,
599
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
600
      // Combiner Rule #10: right_identity_one_int
601
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
602
0
      GIR_EraseFromParent, /*InsnID*/0,
603
0
      GIR_Done,
604
    // Label 34: @812
605
0
    GIM_Reject,
606
    // Label 3: @813
607
0
    GIM_Try, /*On fail goto*//*Label 35*/ GIMT_Encode4(829), // Rule ID 14 //
608
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
609
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner2),
610
      // Combiner Rule #4: binop_left_to_zero; wip_match_opcode 'G_SDIV'
611
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner2),
612
0
      GIR_Done,
613
    // Label 35: @829
614
0
    GIM_Reject,
615
    // Label 4: @830
616
0
    GIM_Try, /*On fail goto*//*Label 36*/ GIMT_Encode4(846), // Rule ID 15 //
617
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
618
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner2),
619
      // Combiner Rule #4: binop_left_to_zero; wip_match_opcode 'G_UDIV'
620
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner2),
621
0
      GIR_Done,
622
    // Label 36: @846
623
0
    GIM_Reject,
624
    // Label 5: @847
625
0
    GIM_Try, /*On fail goto*//*Label 37*/ GIMT_Encode4(863), // Rule ID 16 //
626
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
627
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner2),
628
      // Combiner Rule #4: binop_left_to_zero; wip_match_opcode 'G_SREM'
629
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner2),
630
0
      GIR_Done,
631
    // Label 37: @863
632
0
    GIM_Reject,
633
    // Label 6: @864
634
0
    GIM_Try, /*On fail goto*//*Label 38*/ GIMT_Encode4(880), // Rule ID 17 //
635
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
636
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner2),
637
      // Combiner Rule #4: binop_left_to_zero; wip_match_opcode 'G_UREM'
638
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner2),
639
0
      GIR_Done,
640
    // Label 38: @880
641
0
    GIM_Reject,
642
    // Label 7: @881
643
0
    GIM_Try, /*On fail goto*//*Label 39*/ GIMT_Encode4(897), // Rule ID 0 //
644
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule0Enabled),
645
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner0),
646
      // Combiner Rule #0: redundant_and; wip_match_opcode 'G_AND'
647
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner0),
648
0
      GIR_Done,
649
    // Label 39: @897
650
0
    GIM_Try, /*On fail goto*//*Label 40*/ GIMT_Encode4(923), // Rule ID 12 //
651
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule3Enabled),
652
      // MIs[0] dst
653
      // No operand predicates
654
      // MIs[0] src
655
      // No operand predicates
656
      // MIs[0] src
657
0
      GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
658
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
659
      // Combiner Rule #3: binop_same_val @ [__binop_same_val_match_0[0]]
660
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
661
0
      GIR_EraseFromParent, /*InsnID*/0,
662
0
      GIR_Done,
663
    // Label 40: @923
664
0
    GIM_Reject,
665
    // Label 8: @924
666
0
    GIM_Try, /*On fail goto*//*Label 41*/ GIMT_Encode4(950), // Rule ID 13 //
667
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule3Enabled),
668
      // MIs[0] dst
669
      // No operand predicates
670
      // MIs[0] src
671
      // No operand predicates
672
      // MIs[0] src
673
0
      GIM_CheckIsSameOperandIgnoreCopies, /*MI*/0, /*OpIdx*/2, /*OtherMI*/0, /*OtherOpIdx*/1,
674
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
675
      // Combiner Rule #3: binop_same_val @ [__binop_same_val_match_0[1]]
676
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
677
0
      GIR_EraseFromParent, /*InsnID*/0,
678
0
      GIR_Done,
679
    // Label 41: @950
680
0
    GIM_Try, /*On fail goto*//*Label 42*/ GIMT_Encode4(975), // Rule ID 4 //
681
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
682
      // MIs[0] dst
683
      // No operand predicates
684
      // MIs[0] lhs
685
      // No operand predicates
686
      // MIs[0] Operand 2
687
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
688
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
689
      // Combiner Rule #2: right_identity_zero @ [__right_identity_zero_match_0[2]]
690
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
691
0
      GIR_EraseFromParent, /*InsnID*/0,
692
0
      GIR_Done,
693
    // Label 42: @975
694
0
    GIM_Reject,
695
    // Label 9: @976
696
0
    GIM_Try, /*On fail goto*//*Label 43*/ GIMT_Encode4(1001), // Rule ID 5 //
697
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
698
      // MIs[0] dst
699
      // No operand predicates
700
      // MIs[0] lhs
701
      // No operand predicates
702
      // MIs[0] Operand 2
703
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
704
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
705
      // Combiner Rule #2: right_identity_zero @ [__right_identity_zero_match_0[3]]
706
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
707
0
      GIR_EraseFromParent, /*InsnID*/0,
708
0
      GIR_Done,
709
    // Label 43: @1001
710
0
    GIM_Reject,
711
    // Label 10: @1002
712
0
    GIM_Try, /*On fail goto*//*Label 44*/ GIMT_Encode4(1018), // Rule ID 28 //
713
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule13Enabled),
714
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner7),
715
      // Combiner Rule #13: buildvector_identity_fold; wip_match_opcode 'G_BUILD_VECTOR'
716
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner0),
717
0
      GIR_Done,
718
    // Label 44: @1018
719
0
    GIM_Reject,
720
    // Label 11: @1019
721
0
    GIM_Try, /*On fail goto*//*Label 45*/ GIMT_Encode4(1035), // Rule ID 27 //
722
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule13Enabled),
723
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner7),
724
      // Combiner Rule #13: buildvector_identity_fold; wip_match_opcode 'G_BUILD_VECTOR_TRUNC'
725
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner0),
726
0
      GIR_Done,
727
    // Label 45: @1035
728
0
    GIM_Reject,
729
    // Label 12: @1036
730
0
    GIM_Try, /*On fail goto*//*Label 46*/ GIMT_Encode4(1062), // Rule ID 20 //
731
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule7Enabled),
732
      // MIs[0] dst
733
      // No operand predicates
734
      // MIs[0] t
735
0
      GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
736
0
      GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_INTTOPTR),
737
      // MIs[1] ptr
738
      // No operand predicates
739
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner4),
740
0
      GIM_CheckIsSafeToFold, /*InsnID*/1,
741
      // Combiner Rule #7: i2p_to_p2i
742
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner4),
743
0
      GIR_Done,
744
    // Label 46: @1062
745
0
    GIM_Reject,
746
    // Label 13: @1063
747
0
    GIM_Try, /*On fail goto*//*Label 47*/ GIMT_Encode4(1079), // Rule ID 19 //
748
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
749
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner3),
750
      // Combiner Rule #6: p2i_to_i2p; wip_match_opcode 'G_INTTOPTR'
751
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner3),
752
0
      GIR_Done,
753
    // Label 47: @1079
754
0
    GIM_Reject,
755
    // Label 14: @1080
756
0
    GIM_Try, /*On fail goto*//*Label 48*/ GIMT_Encode4(1106), // Rule ID 31 //
757
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule16Enabled),
758
      // MIs[0] dst
759
      // No operand predicates
760
      // MIs[0] src1
761
0
      GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
762
0
      GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BITCAST),
763
      // MIs[1] src0
764
      // No operand predicates
765
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner10),
766
0
      GIM_CheckIsSafeToFold, /*InsnID*/1,
767
      // Combiner Rule #16: bitcast_bitcast_fold
768
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner5),
769
0
      GIR_Done,
770
    // Label 48: @1106
771
0
    GIM_Reject,
772
    // Label 15: @1107
773
0
    GIM_Try, /*On fail goto*//*Label 49*/ GIMT_Encode4(1123), // Rule ID 21 //
774
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule8Enabled),
775
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner5),
776
      // Combiner Rule #8: anyext_trunc_fold; wip_match_opcode 'G_ANYEXT'
777
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner0),
778
0
      GIR_Done,
779
    // Label 49: @1123
780
0
    GIM_Reject,
781
    // Label 16: @1124
782
0
    GIM_Try, /*On fail goto*//*Label 50*/ GIMT_Encode4(1140), // Rule ID 29 //
783
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule14Enabled),
784
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner8),
785
      // Combiner Rule #14: trunc_buildvector_fold; wip_match_opcode 'G_TRUNC'
786
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner0),
787
0
      GIR_Done,
788
    // Label 50: @1140
789
0
    GIM_Try, /*On fail goto*//*Label 51*/ GIMT_Encode4(1156), // Rule ID 30 //
790
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule15Enabled),
791
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner9),
792
      // Combiner Rule #15: trunc_lshr_buildvector_fold; wip_match_opcode 'G_TRUNC'
793
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner0),
794
0
      GIR_Done,
795
    // Label 51: @1156
796
0
    GIM_Reject,
797
    // Label 17: @1157
798
0
    GIM_Try, /*On fail goto*//*Label 52*/ GIMT_Encode4(1182), // Rule ID 6 //
799
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
800
      // MIs[0] dst
801
      // No operand predicates
802
      // MIs[0] lhs
803
      // No operand predicates
804
      // MIs[0] Operand 2
805
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
806
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
807
      // Combiner Rule #2: right_identity_zero @ [__right_identity_zero_match_0[4]]
808
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
809
0
      GIR_EraseFromParent, /*InsnID*/0,
810
0
      GIR_Done,
811
    // Label 52: @1182
812
0
    GIM_Reject,
813
    // Label 18: @1183
814
0
    GIM_Try, /*On fail goto*//*Label 53*/ GIMT_Encode4(1208), // Rule ID 8 //
815
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
816
      // MIs[0] dst
817
      // No operand predicates
818
      // MIs[0] lhs
819
      // No operand predicates
820
      // MIs[0] Operand 2
821
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
822
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
823
      // Combiner Rule #2: right_identity_zero @ [__right_identity_zero_match_0[6]]
824
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
825
0
      GIR_EraseFromParent, /*InsnID*/0,
826
0
      GIR_Done,
827
    // Label 53: @1208
828
0
    GIM_Reject,
829
    // Label 19: @1209
830
0
    GIM_Try, /*On fail goto*//*Label 54*/ GIMT_Encode4(1234), // Rule ID 7 //
831
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
832
      // MIs[0] dst
833
      // No operand predicates
834
      // MIs[0] lhs
835
      // No operand predicates
836
      // MIs[0] Operand 2
837
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
838
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
839
      // Combiner Rule #2: right_identity_zero @ [__right_identity_zero_match_0[5]]
840
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
841
0
      GIR_EraseFromParent, /*InsnID*/0,
842
0
      GIR_Done,
843
    // Label 54: @1234
844
0
    GIM_Reject,
845
    // Label 20: @1235
846
0
    GIM_Try, /*On fail goto*//*Label 55*/ GIMT_Encode4(1260), // Rule ID 11 //
847
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
848
      // MIs[0] dst
849
      // No operand predicates
850
      // MIs[0] lhs
851
      // No operand predicates
852
      // MIs[0] Operand 2
853
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
854
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
855
      // Combiner Rule #2: right_identity_zero @ [__right_identity_zero_match_0[9]]
856
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
857
0
      GIR_EraseFromParent, /*InsnID*/0,
858
0
      GIR_Done,
859
    // Label 55: @1260
860
0
    GIM_Reject,
861
    // Label 21: @1261
862
0
    GIM_Try, /*On fail goto*//*Label 56*/ GIMT_Encode4(1286), // Rule ID 10 //
863
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
864
      // MIs[0] dst
865
      // No operand predicates
866
      // MIs[0] lhs
867
      // No operand predicates
868
      // MIs[0] Operand 2
869
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
870
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
871
      // Combiner Rule #2: right_identity_zero @ [__right_identity_zero_match_0[8]]
872
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
873
0
      GIR_EraseFromParent, /*InsnID*/0,
874
0
      GIR_Done,
875
    // Label 56: @1286
876
0
    GIM_Reject,
877
    // Label 22: @1287
878
0
    GIM_Try, /*On fail goto*//*Label 57*/ GIMT_Encode4(1303), // Rule ID 1 //
879
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),
880
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner1),
881
      // Combiner Rule #1: select_same_val; wip_match_opcode 'G_SELECT'
882
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner1),
883
0
      GIR_Done,
884
    // Label 57: @1303
885
0
    GIM_Reject,
886
    // Label 23: @1304
887
0
    GIM_Try, /*On fail goto*//*Label 58*/ GIMT_Encode4(1329), // Rule ID 33 //
888
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule18Enabled),
889
      // MIs[0] dst
890
      // No operand predicates
891
      // MIs[0] x
892
      // No operand predicates
893
      // MIs[0] y
894
      // No operand predicates
895
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner11),
896
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
897
      // Combiner Rule #18: right_identity_neg_zero_fp
898
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
899
0
      GIR_EraseFromParent, /*InsnID*/0,
900
0
      GIR_Done,
901
    // Label 58: @1329
902
0
    GIM_Reject,
903
    // Label 24: @1330
904
0
    GIM_Try, /*On fail goto*//*Label 59*/ GIMT_Encode4(1355), // Rule ID 24 //
905
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule11Enabled),
906
      // MIs[0] dst
907
      // No operand predicates
908
      // MIs[0] x
909
      // No operand predicates
910
      // MIs[0] y
911
      // No operand predicates
912
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner6),
913
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
914
      // Combiner Rule #11: right_identity_one_fp
915
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
916
0
      GIR_EraseFromParent, /*InsnID*/0,
917
0
      GIR_Done,
918
    // Label 59: @1355
919
0
    GIM_Reject,
920
    // Label 25: @1356
921
0
    GIM_Try, /*On fail goto*//*Label 60*/ GIMT_Encode4(1387), // Rule ID 22 //
922
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
923
      // MIs[0] dst
924
      // No operand predicates
925
      // MIs[0] t
926
0
      GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
927
0
      GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FNEG),
928
      // MIs[1] src
929
      // No operand predicates
930
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
931
0
      GIM_CheckIsSafeToFold, /*InsnID*/1,
932
      // Combiner Rule #9: fneg_fneg_fold
933
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/1, /*NewOpIdx*/1,
934
0
      GIR_EraseFromParent, /*InsnID*/0,
935
0
      GIR_Done,
936
    // Label 60: @1387
937
0
    GIM_Reject,
938
    // Label 26: @1388
939
0
    GIM_Try, /*On fail goto*//*Label 61*/ GIMT_Encode4(1414), // Rule ID 32 //
940
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule17Enabled),
941
      // MIs[0] dst
942
      // No operand predicates
943
      // MIs[0] src1
944
0
      GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
945
0
      GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FPEXT),
946
      // MIs[1] src0
947
      // No operand predicates
948
0
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner10),
949
0
      GIM_CheckIsSafeToFold, /*InsnID*/1,
950
      // Combiner Rule #17: fptrunc_fpext_fold
951
0
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner5),
952
0
      GIR_Done,
953
    // Label 61: @1414
954
0
    GIM_Reject,
955
    // Label 27: @1415
956
0
    GIM_Try, /*On fail goto*//*Label 62*/ GIMT_Encode4(1440), // Rule ID 9 //
957
0
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
958
      // MIs[0] dst
959
      // No operand predicates
960
      // MIs[0] lhs
961
      // No operand predicates
962
      // MIs[0] Operand 2
963
0
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 0,
964
0
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
965
      // Combiner Rule #2: right_identity_zero @ [__right_identity_zero_match_0[7]]
966
0
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
967
0
      GIR_EraseFromParent, /*InsnID*/0,
968
0
      GIR_Done,
969
    // Label 62: @1440
970
0
    GIM_Reject,
971
    // Label 28: @1441
972
0
    GIM_Reject,
973
0
    }; // Size: 1442 bytes
974
0
  return MatchTable0;
975
0
}
976
#undef GIMT_Encode2
977
#undef GIMT_Encode4
978
#undef GIMT_Encode8
979
980
#endif // ifdef GET_GICOMBINER_IMPL
981
982
#ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
983
AvailableModuleFeatures(computeAvailableModuleFeatures(&STI)),
984
AvailableFunctionFeatures()
985
#endif // ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
986
#ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
987
, State(0),
988
ExecInfo(TypeObjects, NumTypeObjects, FeatureBitsets, ComplexPredicateFns, CustomRenderers)
989
#endif // ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
990