Coverage Report

Created: 2024-01-17 10:31

/src/build/lib/Target/AArch64/AArch64GenO0PreLegalizeGICombiner.inc
Line
Count
Source (jump to first uncovered line)
1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* AArch64O0PreLegalizerCombinerImpl 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 AArch64O0PreLegalizerCombinerImplRuleConfig {
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 9:  // 1 string to match.
37
0
    if (memcmp(RuleIdentifier.data()+0, "copy_prop", 9) != 0)
38
0
      break;
39
0
    return 0;  // "copy_prop"
40
0
  case 10:   // 1 string to match.
41
0
    if (memcmp(RuleIdentifier.data()+0, "mul_to_shl", 10) != 0)
42
0
      break;
43
0
    return 1;  // "mul_to_shl"
44
0
  case 12:   // 1 string to match.
45
0
    if (memcmp(RuleIdentifier.data()+0, "not_cmp_fold", 12) != 0)
46
0
      break;
47
0
    return 8;  // "not_cmp_fold"
48
0
  case 13:   // 1 string to match.
49
0
    if (memcmp(RuleIdentifier.data()+0, "load_and_mask", 13) != 0)
50
0
      break;
51
0
    return 7;  // "load_and_mask"
52
0
  case 14:   // 1 string to match.
53
0
    if (memcmp(RuleIdentifier.data()+0, "mul_by_neg_one", 14) != 0)
54
0
      break;
55
0
    return 3;  // "mul_by_neg_one"
56
0
  case 15:   // 2 strings to match.
57
0
    switch (RuleIdentifier[0]) {
58
0
    default: break;
59
0
    case 'e':  // 1 string to match.
60
0
      if (memcmp(RuleIdentifier.data()+1, "xtending_loads", 14) != 0)
61
0
        break;
62
0
      return 6;  // "extending_loads"
63
0
    case 'i':  // 1 string to match.
64
0
      if (memcmp(RuleIdentifier.data()+1, "dempotent_prop", 14) != 0)
65
0
        break;
66
0
      return 4;  // "idempotent_prop"
67
0
    }
68
0
    break;
69
0
  case 17:   // 1 string to match.
70
0
    if (memcmp(RuleIdentifier.data()+0, "add_p2i_to_ptradd", 17) != 0)
71
0
      break;
72
0
    return 2;  // "add_p2i_to_ptradd"
73
0
  case 19:   // 1 string to match.
74
0
    if (memcmp(RuleIdentifier.data()+0, "ptr_add_immed_chain", 19) != 0)
75
0
      break;
76
0
    return 5;  // "ptr_add_immed_chain"
77
0
  case 28:   // 1 string to match.
78
0
    if (memcmp(RuleIdentifier.data()+0, "opt_brcond_by_inverting_cond", 28) != 0)
79
0
      break;
80
0
    return 9;  // "opt_brcond_by_inverting_cond"
81
0
  }
82
0
#endif // ifndef NDEBUG
83
84
0
  return std::nullopt;
85
0
}
86
0
static std::optional<std::pair<uint64_t, uint64_t>> getRuleRangeForIdentifier(StringRef RuleIdentifier) {
87
0
  std::pair<StringRef, StringRef> RangePair = RuleIdentifier.split('-');
88
0
  if (!RangePair.second.empty()) {
89
0
    const auto First = getRuleIdxForIdentifier(RangePair.first);
90
0
    const auto Last = getRuleIdxForIdentifier(RangePair.second);
91
0
    if (!First || !Last)
92
0
      return std::nullopt;
93
0
    if (First >= Last)
94
0
      report_fatal_error("Beginning of range should be before end of range");
95
0
    return {{*First, *Last + 1}};
96
0
  }
97
0
  if (RangePair.first == "*") {
98
0
    return {{0, 10}};
99
0
  }
100
0
  const auto I = getRuleIdxForIdentifier(RangePair.first);
101
0
  if (!I)
102
0
    return std::nullopt;
103
0
  return {{*I, *I + 1}};
104
0
}
105
106
0
bool AArch64O0PreLegalizerCombinerImplRuleConfig::setRuleEnabled(StringRef RuleIdentifier) {
107
0
  auto MaybeRange = getRuleRangeForIdentifier(RuleIdentifier);
108
0
  if (!MaybeRange)
109
0
    return false;
110
0
  for (auto I = MaybeRange->first; I < MaybeRange->second; ++I)
111
0
    DisabledRules.reset(I);
112
0
  return true;
113
0
}
114
115
0
bool AArch64O0PreLegalizerCombinerImplRuleConfig::setRuleDisabled(StringRef RuleIdentifier) {
116
0
  auto MaybeRange = getRuleRangeForIdentifier(RuleIdentifier);
117
0
  if (!MaybeRange)
118
0
    return false;
119
0
  for (auto I = MaybeRange->first; I < MaybeRange->second; ++I)
120
0
    DisabledRules.set(I);
121
0
  return true;
122
0
}
123
124
static std::vector<std::string> AArch64O0PreLegalizerCombinerOption;
125
static cl::list<std::string> AArch64O0PreLegalizerCombinerDisableOption(
126
    "aarch64o0prelegalizercombiner-disable-rule",
127
    cl::desc("Disable one or more combiner rules temporarily in the AArch64O0PreLegalizerCombiner pass"),
128
    cl::CommaSeparated,
129
    cl::Hidden,
130
    cl::cat(GICombinerOptionCategory),
131
0
    cl::callback([](const std::string &Str) {
132
0
      AArch64O0PreLegalizerCombinerOption.push_back(Str);
133
0
    }));
134
static cl::list<std::string> AArch64O0PreLegalizerCombinerOnlyEnableOption(
135
    "aarch64o0prelegalizercombiner-only-enable-rule",
136
    cl::desc("Disable all rules in the AArch64O0PreLegalizerCombiner pass then re-enable the specified ones"),
137
    cl::Hidden,
138
    cl::cat(GICombinerOptionCategory),
139
0
    cl::callback([](const std::string &CommaSeparatedArg) {
140
0
      StringRef Str = CommaSeparatedArg;
141
0
      AArch64O0PreLegalizerCombinerOption.push_back("*");
142
0
      do {
143
0
        auto X = Str.split(",");
144
0
        AArch64O0PreLegalizerCombinerOption.push_back(("!" + X.first).str());
145
0
        Str = X.second;
146
0
      } while (!Str.empty());
147
0
    }));
148
149
150
134k
bool AArch64O0PreLegalizerCombinerImplRuleConfig::isRuleEnabled(unsigned RuleID) const {
151
134k
    return  !DisabledRules.test(RuleID);
152
134k
}
153
381
bool AArch64O0PreLegalizerCombinerImplRuleConfig::parseCommandLineOption() {
154
381
  for (StringRef Identifier : AArch64O0PreLegalizerCombinerOption) {
155
0
    bool Enabled = Identifier.consume_front("!");
156
0
    if (Enabled && !setRuleEnabled(Identifier))
157
0
      return false;
158
0
    if (!Enabled && !setRuleDisabled(Identifier))
159
0
      return false;
160
0
  }
161
381
  return true;
162
381
}
163
164
#endif // ifdef GET_GICOMBINER_TYPES
165
166
#ifdef GET_GICOMBINER_TYPES
167
const unsigned MAX_SUBTARGET_PREDICATES = 0;
168
using PredicateBitset = llvm::Bitset<MAX_SUBTARGET_PREDICATES>;
169
#endif // ifdef GET_GICOMBINER_TYPES
170
171
#ifdef GET_GICOMBINER_CLASS_MEMBERS
172
PredicateBitset AvailableModuleFeatures;
173
mutable PredicateBitset AvailableFunctionFeatures;
174
375k
PredicateBitset getAvailableFeatures() const {
175
375k
  return AvailableModuleFeatures | AvailableFunctionFeatures;
176
375k
}
177
PredicateBitset
178
computeAvailableModuleFeatures(const AArch64Subtarget *Subtarget) const;
179
PredicateBitset
180
computeAvailableFunctionFeatures(const AArch64Subtarget *Subtarget,
181
                                 const MachineFunction *MF) const;
182
void setupGeneratedPerFunctionState(MachineFunction &MF) override;
183
#endif // ifdef GET_GICOMBINER_CLASS_MEMBERS
184
#ifdef GET_GICOMBINER_CLASS_MEMBERS
185
  mutable MatcherState State;
186
  typedef ComplexRendererFns(AArch64O0PreLegalizerCombinerImpl::*ComplexMatcherMemFn)(MachineOperand &) const;
187
  typedef void(AArch64O0PreLegalizerCombinerImpl::*CustomRendererFn)(MachineInstrBuilder &, const MachineInstr &, int) const;
188
  const ExecInfoTy<PredicateBitset, ComplexMatcherMemFn, CustomRendererFn> ExecInfo;
189
  static AArch64O0PreLegalizerCombinerImpl::ComplexMatcherMemFn ComplexPredicateFns[];
190
  static AArch64O0PreLegalizerCombinerImpl::CustomRendererFn CustomRenderers[];
191
  bool testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const override;
192
  bool testImmPredicate_APInt(unsigned PredicateID, const APInt &Imm) const override;
193
  bool testImmPredicate_APFloat(unsigned PredicateID, const APFloat &Imm) const override;
194
  const uint8_t *getMatchTable() const override;
195
  bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI, const MatcherState &State) const override;
196
  bool testSimplePredicate(unsigned PredicateID) const override;
197
  void runCustomAction(unsigned FnID, const MatcherState &State, NewMIVector &OutMIs) const override;
198
  struct MatchInfosTy {
199
    unsigned MDInfo0;
200
    std::pair<Register, bool> MDInfo1;
201
    MachineInstr * MDInfo6;
202
    std::function<void(MachineIRBuilder &)> MDInfo4;
203
    PreferredTuple MDInfo3;
204
    SmallVector<Register, 4> MDInfo5;
205
    PtrAddChain MDInfo2;
206
  };
207
  mutable MatchInfosTy MatchInfos;
208
209
#endif // ifdef GET_GICOMBINER_CLASS_MEMBERS
210
211
#ifdef GET_GICOMBINER_IMPL
212
// LLT Objects.
213
enum {
214
  GILLT_s1,
215
};
216
const static size_t NumTypeObjects = 1;
217
const static LLT TypeObjects[] = {
218
  LLT::scalar(1),
219
};
220
221
// Bits for subtarget features that participate in instruction matching.
222
enum SubtargetFeatureBits : uint8_t {
223
};
224
225
PredicateBitset AArch64O0PreLegalizerCombinerImpl::
226
14.8k
computeAvailableModuleFeatures(const AArch64Subtarget *Subtarget) const {
227
14.8k
  PredicateBitset Features;
228
14.8k
  return Features;
229
14.8k
}
230
231
14.8k
void AArch64O0PreLegalizerCombinerImpl::setupGeneratedPerFunctionState(MachineFunction &MF) {
232
14.8k
  AvailableFunctionFeatures = computeAvailableFunctionFeatures((const AArch64Subtarget *)&MF.getSubtarget(), &MF);
233
14.8k
}
234
PredicateBitset AArch64O0PreLegalizerCombinerImpl::
235
14.8k
computeAvailableFunctionFeatures(const AArch64Subtarget *Subtarget, const MachineFunction *MF) const {
236
14.8k
  PredicateBitset Features;
237
14.8k
  return Features;
238
14.8k
}
239
240
// Feature bitsets.
241
enum {
242
  GIFBS_Invalid,
243
};
244
constexpr static PredicateBitset FeatureBitsets[] {
245
  {}, // GIFBS_Invalid
246
};
247
248
// ComplexPattern predicates.
249
enum {
250
  GICP_Invalid,
251
};
252
// See constructor for table contents
253
254
AArch64O0PreLegalizerCombinerImpl::ComplexMatcherMemFn
255
AArch64O0PreLegalizerCombinerImpl::ComplexPredicateFns[] = {
256
  nullptr, // GICP_Invalid
257
};
258
259
enum {
260
  GICXXPred_MI_Predicate_GICombiner0 = GICXXPred_Invalid + 1,
261
  GICXXPred_MI_Predicate_GICombiner1,
262
  GICXXPred_MI_Predicate_GICombiner2,
263
  GICXXPred_MI_Predicate_GICombiner3,
264
  GICXXPred_MI_Predicate_GICombiner4,
265
  GICXXPred_MI_Predicate_GICombiner5,
266
  GICXXPred_MI_Predicate_GICombiner6,
267
  GICXXPred_MI_Predicate_GICombiner7,
268
};
269
127k
bool AArch64O0PreLegalizerCombinerImpl::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI, const MatcherState &State) const {
270
127k
  switch (PredicateID) {
271
42.6k
  case GICXXPred_MI_Predicate_GICombiner0: {
272
42.6k
    return Helper.matchCombineCopy(*State.MIs[0]);
273
0
  }
274
6.26k
  case GICXXPred_MI_Predicate_GICombiner1: {
275
6.26k
    return Helper.matchCombineMulToShl(*State.MIs[0], MatchInfos.MDInfo0);
276
0
  }
277
4.88k
  case GICXXPred_MI_Predicate_GICombiner2: {
278
4.88k
    return Helper.matchCombineAddP2IToPtrAdd(*State.MIs[0], MatchInfos.MDInfo1);
279
0
  }
280
36.4k
  case GICXXPred_MI_Predicate_GICombiner3: {
281
36.4k
    return Helper.matchPtrAddImmedChain(*State.MIs[0], MatchInfos.MDInfo2);
282
0
  }
283
15.5k
  case GICXXPred_MI_Predicate_GICombiner4: {
284
15.5k
    return Helper.matchCombineExtendingLoads(*State.MIs[0], MatchInfos.MDInfo3);
285
0
  }
286
4.51k
  case GICXXPred_MI_Predicate_GICombiner5: {
287
4.51k
    return Helper.matchCombineLoadWithAndMask(*State.MIs[0], MatchInfos.MDInfo4);
288
0
  }
289
4.22k
  case GICXXPred_MI_Predicate_GICombiner6: {
290
4.22k
    return Helper.matchNotCmp(*State.MIs[0], MatchInfos.MDInfo5);
291
0
  }
292
13.0k
  case GICXXPred_MI_Predicate_GICombiner7: {
293
13.0k
    return Helper.matchOptBrCondByInvertingCond(*State.MIs[0], MatchInfos.MDInfo6);
294
0
  }
295
127k
  }
296
0
  llvm_unreachable("Unknown predicate");
297
0
  return false;
298
127k
}
299
0
bool AArch64O0PreLegalizerCombinerImpl::testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const {
300
0
  llvm_unreachable("Unknown predicate");
301
0
  return false;
302
0
}
303
0
bool AArch64O0PreLegalizerCombinerImpl::testImmPredicate_APFloat(unsigned PredicateID, const APFloat & Imm) const {
304
0
  llvm_unreachable("Unknown predicate");
305
0
  return false;
306
0
}
307
0
bool AArch64O0PreLegalizerCombinerImpl::testImmPredicate_APInt(unsigned PredicateID, const APInt & Imm) const {
308
0
  llvm_unreachable("Unknown predicate");
309
0
  return false;
310
0
}
311
enum {
312
  GICXXPred_Simple_IsRule0Enabled = GICXXPred_Invalid + 1,
313
  GICXXPred_Simple_IsRule1Enabled,
314
  GICXXPred_Simple_IsRule2Enabled,
315
  GICXXPred_Simple_IsRule3Enabled,
316
  GICXXPred_Simple_IsRule4Enabled,
317
  GICXXPred_Simple_IsRule5Enabled,
318
  GICXXPred_Simple_IsRule6Enabled,
319
  GICXXPred_Simple_IsRule7Enabled,
320
  GICXXPred_Simple_IsRule8Enabled,
321
  GICXXPred_Simple_IsRule9Enabled,
322
};
323
324
134k
bool AArch64O0PreLegalizerCombinerImpl::testSimplePredicate(unsigned Predicate) const {
325
134k
    return RuleConfig.isRuleEnabled(Predicate - GICXXPred_Invalid - 1);
326
134k
}
327
// Custom renderers.
328
enum {
329
  GICR_Invalid,
330
};
331
AArch64O0PreLegalizerCombinerImpl::CustomRendererFn
332
AArch64O0PreLegalizerCombinerImpl::CustomRenderers[] = {
333
  nullptr, // GICR_Invalid
334
};
335
336
375k
bool AArch64O0PreLegalizerCombinerImpl::tryCombineAllImpl(MachineInstr &I) const {
337
375k
  const TargetSubtargetInfo &ST = MF.getSubtarget();
338
375k
  const PredicateBitset AvailableFeatures = getAvailableFeatures();
339
375k
  B.setInstrAndDebugLoc(I);
340
375k
  State.MIs.clear();
341
375k
  State.MIs.push_back(&I);
342
375k
  MatchInfos = MatchInfosTy();
343
344
375k
  if (executeMatchTable(*this, State, ExecInfo, B, getMatchTable(), *ST.getInstrInfo(), MRI, *MRI.getTargetRegisterInfo(), *ST.getRegBankInfo(), AvailableFeatures, /*CoverageInfo*/ nullptr)) {
345
16.4k
    return true;
346
16.4k
  }
347
348
358k
  return false;
349
375k
}
350
351
enum {
352
  GICXXCustomAction_CombineApplyGICombiner0 = GICXXCustomAction_Invalid + 1,
353
  GICXXCustomAction_CombineApplyGICombiner1,
354
  GICXXCustomAction_CombineApplyGICombiner2,
355
  GICXXCustomAction_CombineApplyGICombiner3,
356
  GICXXCustomAction_CombineApplyGICombiner4,
357
  GICXXCustomAction_CombineApplyGICombiner5,
358
  GICXXCustomAction_CombineApplyGICombiner6,
359
  GICXXCustomAction_CombineApplyGICombiner7,
360
};
361
16.4k
void AArch64O0PreLegalizerCombinerImpl::runCustomAction(unsigned ApplyID, const MatcherState &State, NewMIVector &OutMIs) const {
362
16.4k
  switch(ApplyID) {
363
6.41k
  case GICXXCustomAction_CombineApplyGICombiner0:{
364
6.41k
    Helper.applyCombineCopy(*State.MIs[0]);
365
6.41k
    return;
366
0
  }
367
5.12k
  case GICXXCustomAction_CombineApplyGICombiner1:{
368
5.12k
    Helper.applyCombineMulToShl(*State.MIs[0], MatchInfos.MDInfo0);
369
5.12k
    return;
370
0
  }
371
0
  case GICXXCustomAction_CombineApplyGICombiner2:{
372
0
    Helper.applyCombineAddP2IToPtrAdd(*State.MIs[0], MatchInfos.MDInfo1);
373
0
    return;
374
0
  }
375
428
  case GICXXCustomAction_CombineApplyGICombiner3:{
376
428
    Helper.applyPtrAddImmedChain(*State.MIs[0], MatchInfos.MDInfo2);
377
428
    return;
378
0
  }
379
622
  case GICXXCustomAction_CombineApplyGICombiner4:{
380
622
    Helper.applyCombineExtendingLoads(*State.MIs[0], MatchInfos.MDInfo3);
381
622
    return;
382
0
  }
383
0
  case GICXXCustomAction_CombineApplyGICombiner5:{
384
0
    Helper.applyBuildFn(*State.MIs[0], MatchInfos.MDInfo4);
385
0
    return;
386
0
  }
387
1.40k
  case GICXXCustomAction_CombineApplyGICombiner6:{
388
1.40k
    Helper.applyNotCmp(*State.MIs[0], MatchInfos.MDInfo5);
389
1.40k
    return;
390
0
  }
391
2.45k
  case GICXXCustomAction_CombineApplyGICombiner7:{
392
2.45k
    Helper.applyOptBrCondByInvertingCond(*State.MIs[0], MatchInfos.MDInfo6);
393
2.45k
    return;
394
0
  }
395
16.4k
}
396
0
  llvm_unreachable("Unknown Apply Action");
397
0
}
398
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
399
15.0M
#define GIMT_Encode2(Val) uint8_t(Val), uint8_t((uint16_t)Val >> 8)
400
78.4M
#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)
401
375k
#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)
402
#else
403
#define GIMT_Encode2(Val) uint8_t((uint16_t)Val >> 8), uint8_t(Val)
404
#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)
405
#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)
406
#endif
407
375k
const uint8_t *AArch64O0PreLegalizerCombinerImpl::getMatchTable() const {
408
375k
  constexpr static uint8_t MatchTable0[] = {
409
375k
    GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(19), GIMT_Encode2(213), /*)*//*default:*//*Label 13*/ GIMT_Encode4(1099),
410
375k
    /*TargetOpcode::COPY*//*Label 0*/ GIMT_Encode4(786), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
411
375k
    /*TargetOpcode::G_ADD*//*Label 1*/ GIMT_Encode4(803), GIMT_Encode4(0),
412
375k
    /*TargetOpcode::G_MUL*//*Label 2*/ GIMT_Encode4(820), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
413
375k
    /*TargetOpcode::G_AND*//*Label 3*/ GIMT_Encode4(884), GIMT_Encode4(0),
414
375k
    /*TargetOpcode::G_XOR*//*Label 4*/ GIMT_Encode4(901), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
415
375k
    /*TargetOpcode::G_FREEZE*//*Label 5*/ GIMT_Encode4(918), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
416
375k
    /*TargetOpcode::G_LOAD*//*Label 6*/ GIMT_Encode4(950),
417
375k
    /*TargetOpcode::G_SEXTLOAD*//*Label 7*/ GIMT_Encode4(967),
418
375k
    /*TargetOpcode::G_ZEXTLOAD*//*Label 8*/ GIMT_Encode4(984), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
419
375k
    /*TargetOpcode::G_FABS*//*Label 9*/ GIMT_Encode4(1001), GIMT_Encode4(0), GIMT_Encode4(0),
420
375k
    /*TargetOpcode::G_FCANONICALIZE*//*Label 10*/ GIMT_Encode4(1033), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
421
375k
    /*TargetOpcode::G_PTR_ADD*//*Label 11*/ GIMT_Encode4(1065), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
422
375k
    /*TargetOpcode::G_BR*//*Label 12*/ GIMT_Encode4(1082),
423
    // Label 0: @786
424
375k
    GIM_Try, /*On fail goto*//*Label 14*/ GIMT_Encode4(802), // Rule ID 0 //
425
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule0Enabled),
426
      // MIs[0] d
427
      // No operand predicates
428
      // MIs[0] s
429
      // No operand predicates
430
375k
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner0),
431
      // Combiner Rule #0: copy_prop
432
375k
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner0),
433
375k
      GIR_Done,
434
    // Label 14: @802
435
375k
    GIM_Reject,
436
    // Label 1: @803
437
375k
    GIM_Try, /*On fail goto*//*Label 15*/ GIMT_Encode4(819), // Rule ID 2 //
438
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
439
375k
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner2),
440
      // Combiner Rule #2: add_p2i_to_ptradd; wip_match_opcode 'G_ADD'
441
375k
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner2),
442
375k
      GIR_Done,
443
    // Label 15: @819
444
375k
    GIM_Reject,
445
    // Label 2: @820
446
375k
    GIM_Try, /*On fail goto*//*Label 16*/ GIMT_Encode4(867), // Rule ID 3 //
447
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule3Enabled),
448
      // MIs[0] dst
449
375k
      GIM_RecordRegType, /*MI*/0, /*Op*/0, /*TempTypeIdx*/uint8_t(-1),
450
      // MIs[0] x
451
      // No operand predicates
452
      // MIs[0] Operand 2
453
375k
      GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, uint8_t(-1),
454
375k
      GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/uint8_t(-1),
455
375k
      GIR_BuildConstant, /*TempRegID*/0, /*Val*/GIMT_Encode8(0),
456
      // Combiner Rule #3: mul_by_neg_one
457
375k
      GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(TargetOpcode::G_SUB),
458
375k
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // dst
459
375k
      GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
460
375k
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // x
461
375k
      GIR_EraseFromParent, /*InsnID*/0,
462
375k
      GIR_Done,
463
    // Label 16: @867
464
375k
    GIM_Try, /*On fail goto*//*Label 17*/ GIMT_Encode4(883), // Rule ID 1 //
465
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),
466
      // MIs[0] d
467
      // No operand predicates
468
      // MIs[0] op1
469
      // No operand predicates
470
      // MIs[0] op2
471
      // No operand predicates
472
375k
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner1),
473
      // Combiner Rule #1: mul_to_shl
474
375k
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner1),
475
375k
      GIR_Done,
476
    // Label 17: @883
477
375k
    GIM_Reject,
478
    // Label 3: @884
479
375k
    GIM_Try, /*On fail goto*//*Label 18*/ GIMT_Encode4(900), // Rule ID 11 //
480
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule7Enabled),
481
375k
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner5),
482
      // Combiner Rule #7: load_and_mask; wip_match_opcode 'G_AND'
483
375k
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner5),
484
375k
      GIR_Done,
485
    // Label 18: @900
486
375k
    GIM_Reject,
487
    // Label 4: @901
488
375k
    GIM_Try, /*On fail goto*//*Label 19*/ GIMT_Encode4(917), // Rule ID 12 //
489
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule8Enabled),
490
375k
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner6),
491
      // Combiner Rule #8: not_cmp_fold; wip_match_opcode 'G_XOR'
492
375k
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner6),
493
375k
      GIR_Done,
494
    // Label 19: @917
495
375k
    GIM_Reject,
496
    // Label 5: @918
497
375k
    GIM_Try, /*On fail goto*//*Label 20*/ GIMT_Encode4(949), // Rule ID 4 //
498
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
499
      // MIs[0] dst
500
      // No operand predicates
501
      // MIs[0] src
502
375k
      GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
503
375k
      GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FREEZE),
504
      // MIs[1] __idempotent_prop_match_0.x
505
      // No operand predicates
506
375k
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
507
375k
      GIM_CheckIsSafeToFold, /*InsnID*/1,
508
      // Combiner Rule #4: idempotent_prop @ [__idempotent_prop_match_0[0]]
509
375k
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
510
375k
      GIR_EraseFromParent, /*InsnID*/0,
511
375k
      GIR_Done,
512
    // Label 20: @949
513
375k
    GIM_Reject,
514
    // Label 6: @950
515
375k
    GIM_Try, /*On fail goto*//*Label 21*/ GIMT_Encode4(966), // Rule ID 8 //
516
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
517
375k
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner4),
518
      // Combiner Rule #6: extending_loads; wip_match_opcode 'G_LOAD'
519
375k
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner4),
520
375k
      GIR_Done,
521
    // Label 21: @966
522
375k
    GIM_Reject,
523
    // Label 7: @967
524
375k
    GIM_Try, /*On fail goto*//*Label 22*/ GIMT_Encode4(983), // Rule ID 9 //
525
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
526
375k
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner4),
527
      // Combiner Rule #6: extending_loads; wip_match_opcode 'G_SEXTLOAD'
528
375k
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner4),
529
375k
      GIR_Done,
530
    // Label 22: @983
531
375k
    GIM_Reject,
532
    // Label 8: @984
533
375k
    GIM_Try, /*On fail goto*//*Label 23*/ GIMT_Encode4(1000), // Rule ID 10 //
534
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule6Enabled),
535
375k
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner4),
536
      // Combiner Rule #6: extending_loads; wip_match_opcode 'G_ZEXTLOAD'
537
375k
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner4),
538
375k
      GIR_Done,
539
    // Label 23: @1000
540
375k
    GIM_Reject,
541
    // Label 9: @1001
542
375k
    GIM_Try, /*On fail goto*//*Label 24*/ GIMT_Encode4(1032), // Rule ID 5 //
543
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
544
      // MIs[0] dst
545
      // No operand predicates
546
      // MIs[0] src
547
375k
      GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
548
375k
      GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FABS),
549
      // MIs[1] __idempotent_prop_match_0.x
550
      // No operand predicates
551
375k
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
552
375k
      GIM_CheckIsSafeToFold, /*InsnID*/1,
553
      // Combiner Rule #4: idempotent_prop @ [__idempotent_prop_match_0[1]]
554
375k
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
555
375k
      GIR_EraseFromParent, /*InsnID*/0,
556
375k
      GIR_Done,
557
    // Label 24: @1032
558
375k
    GIM_Reject,
559
    // Label 10: @1033
560
375k
    GIM_Try, /*On fail goto*//*Label 25*/ GIMT_Encode4(1064), // Rule ID 6 //
561
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
562
      // MIs[0] dst
563
      // No operand predicates
564
      // MIs[0] src
565
375k
      GIM_RecordInsnIgnoreCopies, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
566
375k
      GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FCANONICALIZE),
567
      // MIs[1] __idempotent_prop_match_0.x
568
      // No operand predicates
569
375k
      GIM_CheckCanReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
570
375k
      GIM_CheckIsSafeToFold, /*InsnID*/1,
571
      // Combiner Rule #4: idempotent_prop @ [__idempotent_prop_match_0[2]]
572
375k
      GIR_ReplaceReg, /*OldInsnID*/0, /*OldOpIdx*/0, /*NewInsnId*/0, /*NewOpIdx*/1,
573
375k
      GIR_EraseFromParent, /*InsnID*/0,
574
375k
      GIR_Done,
575
    // Label 25: @1064
576
375k
    GIM_Reject,
577
    // Label 11: @1065
578
375k
    GIM_Try, /*On fail goto*//*Label 26*/ GIMT_Encode4(1081), // Rule ID 7 //
579
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule5Enabled),
580
375k
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner3),
581
      // Combiner Rule #5: ptr_add_immed_chain; wip_match_opcode 'G_PTR_ADD'
582
375k
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner3),
583
375k
      GIR_Done,
584
    // Label 26: @1081
585
375k
    GIM_Reject,
586
    // Label 12: @1082
587
375k
    GIM_Try, /*On fail goto*//*Label 27*/ GIMT_Encode4(1098), // Rule ID 13 //
588
375k
      GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule9Enabled),
589
375k
      GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner7),
590
      // Combiner Rule #9: opt_brcond_by_inverting_cond; wip_match_opcode 'G_BR'
591
375k
      GIR_CustomAction, GIMT_Encode2(GICXXCustomAction_CombineApplyGICombiner7),
592
375k
      GIR_Done,
593
    // Label 27: @1098
594
375k
    GIM_Reject,
595
    // Label 13: @1099
596
375k
    GIM_Reject,
597
375k
    }; // Size: 1100 bytes
598
375k
  return MatchTable0;
599
375k
}
600
#undef GIMT_Encode2
601
#undef GIMT_Encode4
602
#undef GIMT_Encode8
603
604
#endif // ifdef GET_GICOMBINER_IMPL
605
606
#ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
607
AvailableModuleFeatures(computeAvailableModuleFeatures(&STI)),
608
AvailableFunctionFeatures()
609
#endif // ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
610
#ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
611
, State(0),
612
ExecInfo(TypeObjects, NumTypeObjects, FeatureBitsets, ComplexPredicateFns, CustomRenderers)
613
#endif // ifdef GET_GICOMBINER_CONSTRUCTOR_INITS
614