/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 | | |