1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Global Instruction Selector for the BPF target *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* *|
7\*===----------------------------------------------------------------------===*/
8
9#ifdef GET_GLOBALISEL_PREDICATE_BITSET
10
11const unsigned MAX_SUBTARGET_PREDICATES = 12;
12using PredicateBitset = llvm::Bitset<MAX_SUBTARGET_PREDICATES>;
13
14#endif // GET_GLOBALISEL_PREDICATE_BITSET
15
16#ifdef GET_GLOBALISEL_TEMPORARIES_DECL
17
18 mutable MatcherState State;
19 typedef ComplexRendererFns(BPFInstructionSelector::*ComplexMatcherMemFn)(MachineOperand &) const;
20 typedef void(BPFInstructionSelector::*CustomRendererFn)(MachineInstrBuilder &, const MachineInstr &, int) const;
21 const ExecInfoTy<PredicateBitset, ComplexMatcherMemFn, CustomRendererFn> ExecInfo;
22 static BPFInstructionSelector::ComplexMatcherMemFn ComplexPredicateFns[];
23 static BPFInstructionSelector::CustomRendererFn CustomRenderers[];
24 bool testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const override;
25 bool testImmPredicate_APInt(unsigned PredicateID, const APInt &Imm) const override;
26 bool testImmPredicate_APFloat(unsigned PredicateID, const APFloat &Imm) const override;
27 const uint8_t *getMatchTable() const override;
28 bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI, const MatcherState &State) const override;
29 bool testMOPredicate_MO(unsigned PredicateID, const MachineOperand &MO, const MatcherState &State) const override;
30 bool testSimplePredicate(unsigned PredicateID) const override;
31 bool runCustomAction(unsigned FnID, const MatcherState &State, NewMIVector &OutMIs) const override;
32
33#endif // GET_GLOBALISEL_TEMPORARIES_DECL
34
35#ifdef GET_GLOBALISEL_TEMPORARIES_INIT
36
37, State(0),
38ExecInfo(TypeObjects, NumTypeObjects, FeatureBitsets, ComplexPredicateFns, CustomRenderers)
39
40#endif // GET_GLOBALISEL_TEMPORARIES_INIT
41
42#ifdef GET_GLOBALISEL_IMPL
43
44// LLT Objects.
45enum {
46 GILLT_s32,
47 GILLT_s64,
48};
49const static size_t NumTypeObjects = 2;
50const static LLT TypeObjects[] = {
51 LLT::scalar(32),
52 LLT::scalar(64),
53};
54
55// Bits for subtarget features that participate in instruction matching.
56enum SubtargetFeatureBits : uint8_t {
57 Feature_BPFIsLittleEndianBit = 8,
58 Feature_BPFIsBigEndianBit = 9,
59 Feature_BPFHasALU32Bit = 6,
60 Feature_BPFNoALU32Bit = 3,
61 Feature_BPFHasLdsxBit = 5,
62 Feature_BPFHasMovsxBit = 2,
63 Feature_BPFHasBswapBit = 7,
64 Feature_BPFHasSdivSmodBit = 1,
65 Feature_BPFNoMovsxBit = 11,
66 Feature_BPFHasStoreImmBit = 4,
67 Feature_BPFHasLoadAcqStoreRelBit = 10,
68 Feature_BPFHasGotoxBit = 0,
69};
70
71PredicateBitset BPFInstructionSelector::
72computeAvailableModuleFeatures(const BPFSubtarget *Subtarget) const {
73 PredicateBitset Features{};
74 if (Subtarget->isLittleEndian())
75 Features.set(Feature_BPFIsLittleEndianBit);
76 if (!Subtarget->isLittleEndian())
77 Features.set(Feature_BPFIsBigEndianBit);
78 if (Subtarget->getHasAlu32())
79 Features.set(Feature_BPFHasALU32Bit);
80 if (!Subtarget->getHasAlu32())
81 Features.set(Feature_BPFNoALU32Bit);
82 if (Subtarget->hasLdsx())
83 Features.set(Feature_BPFHasLdsxBit);
84 if (Subtarget->hasMovsx())
85 Features.set(Feature_BPFHasMovsxBit);
86 if (Subtarget->hasBswap())
87 Features.set(Feature_BPFHasBswapBit);
88 if (Subtarget->hasSdivSmod())
89 Features.set(Feature_BPFHasSdivSmodBit);
90 if (!Subtarget->hasMovsx())
91 Features.set(Feature_BPFNoMovsxBit);
92 if (Subtarget->hasStoreImm())
93 Features.set(Feature_BPFHasStoreImmBit);
94 if (Subtarget->hasLoadAcqStoreRel())
95 Features.set(Feature_BPFHasLoadAcqStoreRelBit);
96 if (Subtarget->hasGotox())
97 Features.set(Feature_BPFHasGotoxBit);
98 return Features;
99}
100
101void BPFInstructionSelector::setupGeneratedPerFunctionState(MachineFunction &MF) {
102 AvailableFunctionFeatures = computeAvailableFunctionFeatures((const BPFSubtarget *)&MF.getSubtarget(), &MF);
103}
104PredicateBitset BPFInstructionSelector::
105computeAvailableFunctionFeatures(const BPFSubtarget *Subtarget, const MachineFunction *MF) const {
106 PredicateBitset Features{};
107 return Features;
108}
109
110// Feature bitsets.
111enum {
112 GIFBS_Invalid,
113 GIFBS_BPFHasBswap,
114 GIFBS_BPFHasGotox,
115 GIFBS_BPFHasMovsx,
116 GIFBS_BPFHasSdivSmod,
117 GIFBS_BPFIsBigEndian,
118 GIFBS_BPFIsLittleEndian,
119 GIFBS_BPFNoMovsx,
120};
121constexpr static PredicateBitset FeatureBitsets[] {
122 {}, // GIFBS_Invalid
123 {Feature_BPFHasBswapBit, },
124 {Feature_BPFHasGotoxBit, },
125 {Feature_BPFHasMovsxBit, },
126 {Feature_BPFHasSdivSmodBit, },
127 {Feature_BPFIsBigEndianBit, },
128 {Feature_BPFIsLittleEndianBit, },
129 {Feature_BPFNoMovsxBit, },
130};
131
132// ComplexPattern predicates.
133enum {
134 GICP_Invalid,
135};
136// See constructor for table contents
137
138BPFInstructionSelector::ComplexMatcherMemFn
139BPFInstructionSelector::ComplexPredicateFns[] = {
140 nullptr, // GICP_Invalid
141};
142
143// PatFrag predicates.
144enum {
145 GICXXPred_MI_Predicate_fadd_contract = GICXXPred_Invalid + 1,
146 GICXXPred_MI_Predicate_ffloor_nnan,
147 GICXXPred_MI_Predicate_fmul_contract,
148 GICXXPred_MI_Predicate_fsub_contract,
149 GICXXPred_MI_Predicate_or_disjoint,
150};
151bool BPFInstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI, const MatcherState &State) const {
152 const MachineFunction &MF = *MI.getParent()->getParent();
153 const MachineRegisterInfo &MRI = MF.getRegInfo();
154 const auto &Operands = State.RecordedOperands;
155 (void)Operands;
156 (void)MRI;
157 switch (PredicateID) {
158 case GICXXPred_MI_Predicate_fadd_contract: {
159
160 return MI.getFlag(MachineInstr::FmContract);
161
162 }
163 case GICXXPred_MI_Predicate_ffloor_nnan: {
164
165 return MI.getFlag(MachineInstr::FmNoNans);
166
167 }
168 case GICXXPred_MI_Predicate_fmul_contract: {
169
170 return MI.getFlag(MachineInstr::FmContract);
171
172 }
173 case GICXXPred_MI_Predicate_fsub_contract: {
174
175 return MI.getFlag(MachineInstr::FmContract);
176
177 }
178 case GICXXPred_MI_Predicate_or_disjoint: {
179
180 return MI.getFlag(MachineInstr::Disjoint);
181
182 }
183 }
184 llvm_unreachable("Unknown predicate");
185 return false;
186}
187// PatFrag predicates.
188bool BPFInstructionSelector::testMOPredicate_MO(unsigned PredicateID, const MachineOperand & MO, const MatcherState &State) const {
189 const auto &Operands = State.RecordedOperands;
190 Register Reg = MO.getReg();
191 (void)Operands;
192 (void)Reg;
193 llvm_unreachable("Unknown predicate");
194 return false;
195}
196// PatFrag predicates.
197enum {
198 GICXXPred_I64_Predicate_FPNoSaturation = GICXXPred_Invalid + 1,
199 GICXXPred_I64_Predicate_Float8E4M3FN,
200 GICXXPred_I64_Predicate_Float8E5M2,
201 GICXXPred_I64_Predicate_NearestTiesToEven,
202};
203bool BPFInstructionSelector::testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const {
204 switch (PredicateID) {
205 case GICXXPred_I64_Predicate_FPNoSaturation: {
206 return Imm == 0;
207 }
208 case GICXXPred_I64_Predicate_Float8E4M3FN: {
209 return Imm == APFloatBase::S_Float8E4M3FN;
210 }
211 case GICXXPred_I64_Predicate_Float8E5M2: {
212 return Imm == APFloatBase::S_Float8E5M2;
213 }
214 case GICXXPred_I64_Predicate_NearestTiesToEven: {
215 return Imm == static_cast<int>(RoundingMode::NearestTiesToEven);
216 }
217 }
218 llvm_unreachable("Unknown predicate");
219 return false;
220}
221// PatFrag predicates.
222bool BPFInstructionSelector::testImmPredicate_APFloat(unsigned PredicateID, const APFloat & Imm) const {
223 llvm_unreachable("Unknown predicate");
224 return false;
225}
226// PatFrag predicates.
227bool BPFInstructionSelector::testImmPredicate_APInt(unsigned PredicateID, const APInt & Imm) const {
228 llvm_unreachable("Unknown predicate");
229 return false;
230}
231bool BPFInstructionSelector::testSimplePredicate(unsigned) const {
232 llvm_unreachable("BPFInstructionSelector does not support simple predicates!");
233 return false;
234}
235// Custom renderers.
236enum {
237 GICR_Invalid,
238 GICR_renderFrameIndex,
239};
240BPFInstructionSelector::CustomRendererFn
241BPFInstructionSelector::CustomRenderers[] = {
242 nullptr, // GICR_Invalid
243 &BPFInstructionSelector::renderFrameIndex,
244};
245
246bool BPFInstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const {
247 const PredicateBitset AvailableFeatures = getAvailableFeatures();
248 MachineIRBuilder B(I);
249 State.MIs.clear();
250 State.MIs.push_back(&I);
251
252 if (executeMatchTable(*this, State, ExecInfo, B, getMatchTable(), TII, MF->getRegInfo(), TRI, RBI, AvailableFeatures, &CoverageInfo)) {
253 return true;
254 }
255
256 return false;
257}
258
259bool BPFInstructionSelector::runCustomAction(unsigned, const MatcherState&, NewMIVector &) const {
260 llvm_unreachable("BPFInstructionSelector does not support custom C++ actions!");
261}
262#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
263#define GIMT_Encode2(Val) uint8_t(Val), uint8_t((Val) >> 8)
264#define GIMT_Encode4(Val) uint8_t(Val), uint8_t((Val) >> 8), uint8_t((Val) >> 16), uint8_t((Val) >> 24)
265#define GIMT_Encode8(Val) uint8_t(Val), uint8_t((Val) >> 8), uint8_t((Val) >> 16), uint8_t((Val) >> 24), uint8_t(uint64_t(Val) >> 32), uint8_t(uint64_t(Val) >> 40), uint8_t(uint64_t(Val) >> 48), uint8_t(uint64_t(Val) >> 56)
266#else
267#define GIMT_Encode2(Val) uint8_t((Val) >> 8), uint8_t(Val)
268#define GIMT_Encode4(Val) uint8_t((Val) >> 24), uint8_t((Val) >> 16), uint8_t((Val) >> 8), uint8_t(Val)
269#define GIMT_Encode8(Val) uint8_t(uint64_t(Val) >> 56), uint8_t(uint64_t(Val) >> 48), uint8_t(uint64_t(Val) >> 40), uint8_t(uint64_t(Val) >> 32), uint8_t((Val) >> 24), uint8_t((Val) >> 16), uint8_t((Val) >> 8), uint8_t(Val)
270#endif
271const uint8_t *BPFInstructionSelector::getMatchTable() const {
272 constexpr static uint8_t MatchTable0[] = {
273 /* 0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(55), GIMT_Encode2(267), /*)*//*default:*//*Label 23*/ GIMT_Encode4(2706),
274 /* 10 */ /*TargetOpcode::G_ADD*//*Label 0*/ GIMT_Encode4(858),
275 /* 14 */ /*TargetOpcode::G_SUB*//*Label 1*/ GIMT_Encode4(924),
276 /* 18 */ /*TargetOpcode::G_MUL*//*Label 2*/ GIMT_Encode4(1038),
277 /* 22 */ /*TargetOpcode::G_SDIV*//*Label 3*/ GIMT_Encode4(1104),
278 /* 26 */ /*TargetOpcode::G_UDIV*//*Label 4*/ GIMT_Encode4(1174),
279 /* 30 */ /*TargetOpcode::G_SREM*//*Label 5*/ GIMT_Encode4(1240),
280 /* 34 */ /*TargetOpcode::G_UREM*//*Label 6*/ GIMT_Encode4(1310), GIMT_Encode4(0), GIMT_Encode4(0),
281 /* 46 */ /*TargetOpcode::G_AND*//*Label 7*/ GIMT_Encode4(1376),
282 /* 50 */ /*TargetOpcode::G_OR*//*Label 8*/ GIMT_Encode4(1502),
283 /* 54 */ /*TargetOpcode::G_XOR*//*Label 9*/ GIMT_Encode4(1568), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
284 /* 338 */ /*TargetOpcode::G_BRINDIRECT*//*Label 10*/ GIMT_Encode4(1634), GIMT_Encode4(0), GIMT_Encode4(0),
285 /* 350 */ /*TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS*//*Label 11*/ GIMT_Encode4(1653), GIMT_Encode4(0), GIMT_Encode4(0),
286 /* 362 */ /*TargetOpcode::G_ANYEXT*//*Label 12*/ GIMT_Encode4(1717),
287 /* 366 */ /*TargetOpcode::G_TRUNC*//*Label 13*/ GIMT_Encode4(1780), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
288 /* 382 */ /*TargetOpcode::G_CONSTANT*//*Label 14*/ GIMT_Encode4(1822), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
289 /* 398 */ /*TargetOpcode::G_SEXT*//*Label 15*/ GIMT_Encode4(1845),
290 /* 402 */ /*TargetOpcode::G_SEXT_INREG*//*Label 16*/ GIMT_Encode4(1959),
291 /* 406 */ /*TargetOpcode::G_ZEXT*//*Label 17*/ GIMT_Encode4(2150),
292 /* 410 */ /*TargetOpcode::G_SHL*//*Label 18*/ GIMT_Encode4(2177),
293 /* 414 */ /*TargetOpcode::G_LSHR*//*Label 19*/ GIMT_Encode4(2243),
294 /* 418 */ /*TargetOpcode::G_ASHR*//*Label 20*/ GIMT_Encode4(2561), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
295 /* 786 */ /*TargetOpcode::G_BR*//*Label 21*/ GIMT_Encode4(2627), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
296 /* 854 */ /*TargetOpcode::G_BSWAP*//*Label 22*/ GIMT_Encode4(2643),
297 /* 858 */ // Label 0: @858
298 /* 858 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 26*/ GIMT_Encode4(923),
299 /* 869 */ /*GILLT_s32*//*Label 24*/ GIMT_Encode4(877),
300 /* 873 */ /*GILLT_s64*//*Label 25*/ GIMT_Encode4(900),
301 /* 877 */ // Label 24: @877
302 /* 877 */ GIM_Try, /*On fail goto*//*Label 27*/ GIMT_Encode4(899), // Rule ID 47 //
303 /* 882 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
304 /* 885 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
305 /* 888 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
306 /* 892 */ // (add:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (ADD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
307 /* 892 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::ADD_rr_32),
308 /* 897 */ GIR_RootConstrainSelectedInstOperands,
309 /* 898 */ // GIR_Coverage, 47,
310 /* 898 */ GIR_Done,
311 /* 899 */ // Label 27: @899
312 /* 899 */ GIM_Reject,
313 /* 900 */ // Label 25: @900
314 /* 900 */ GIM_Try, /*On fail goto*//*Label 28*/ GIMT_Encode4(922), // Rule ID 45 //
315 /* 905 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
316 /* 908 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
317 /* 911 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
318 /* 915 */ // (add:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (ADD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
319 /* 915 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::ADD_rr),
320 /* 920 */ GIR_RootConstrainSelectedInstOperands,
321 /* 921 */ // GIR_Coverage, 45,
322 /* 921 */ GIR_Done,
323 /* 922 */ // Label 28: @922
324 /* 922 */ GIM_Reject,
325 /* 923 */ // Label 26: @923
326 /* 923 */ GIM_Reject,
327 /* 924 */ // Label 1: @924
328 /* 924 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 31*/ GIMT_Encode4(1037),
329 /* 935 */ /*GILLT_s32*//*Label 29*/ GIMT_Encode4(943),
330 /* 939 */ /*GILLT_s64*//*Label 30*/ GIMT_Encode4(990),
331 /* 943 */ // Label 29: @943
332 /* 943 */ GIM_Try, /*On fail goto*//*Label 32*/ GIMT_Encode4(989),
333 /* 948 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
334 /* 951 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
335 /* 954 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
336 /* 958 */ GIM_Try, /*On fail goto*//*Label 33*/ GIMT_Encode4(976), // Rule ID 98 //
337 /* 963 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/1, 0,
338 /* 967 */ // (sub:{ *:[i32] } 0:{ *:[i32] }, i32:{ *:[i32] }:$src) => (NEG_32:{ *:[i32] } i32:{ *:[i32] }:$src)
339 /* 967 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::NEG_32),
340 /* 970 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
341 /* 972 */ GIR_RootToRootCopy, /*OpIdx*/2, // src
342 /* 974 */ GIR_RootConstrainSelectedInstOperands,
343 /* 975 */ // GIR_Coverage, 98,
344 /* 975 */ GIR_EraseRootFromParent_Done,
345 /* 976 */ // Label 33: @976
346 /* 976 */ GIM_Try, /*On fail goto*//*Label 34*/ GIMT_Encode4(988), // Rule ID 51 //
347 /* 981 */ // (sub:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SUB_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
348 /* 981 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SUB_rr_32),
349 /* 986 */ GIR_RootConstrainSelectedInstOperands,
350 /* 987 */ // GIR_Coverage, 51,
351 /* 987 */ GIR_Done,
352 /* 988 */ // Label 34: @988
353 /* 988 */ GIM_Reject,
354 /* 989 */ // Label 32: @989
355 /* 989 */ GIM_Reject,
356 /* 990 */ // Label 30: @990
357 /* 990 */ GIM_Try, /*On fail goto*//*Label 35*/ GIMT_Encode4(1036),
358 /* 995 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
359 /* 998 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
360 /* 1001 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
361 /* 1005 */ GIM_Try, /*On fail goto*//*Label 36*/ GIMT_Encode4(1023), // Rule ID 97 //
362 /* 1010 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/1, 0,
363 /* 1014 */ // (sub:{ *:[i64] } 0:{ *:[i64] }, i64:{ *:[i64] }:$src) => (NEG_64:{ *:[i64] } i64:{ *:[i64] }:$src)
364 /* 1014 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::NEG_64),
365 /* 1017 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
366 /* 1019 */ GIR_RootToRootCopy, /*OpIdx*/2, // src
367 /* 1021 */ GIR_RootConstrainSelectedInstOperands,
368 /* 1022 */ // GIR_Coverage, 97,
369 /* 1022 */ GIR_EraseRootFromParent_Done,
370 /* 1023 */ // Label 36: @1023
371 /* 1023 */ GIM_Try, /*On fail goto*//*Label 37*/ GIMT_Encode4(1035), // Rule ID 49 //
372 /* 1028 */ // (sub:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SUB_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
373 /* 1028 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SUB_rr),
374 /* 1033 */ GIR_RootConstrainSelectedInstOperands,
375 /* 1034 */ // GIR_Coverage, 49,
376 /* 1034 */ GIR_Done,
377 /* 1035 */ // Label 37: @1035
378 /* 1035 */ GIM_Reject,
379 /* 1036 */ // Label 35: @1036
380 /* 1036 */ GIM_Reject,
381 /* 1037 */ // Label 31: @1037
382 /* 1037 */ GIM_Reject,
383 /* 1038 */ // Label 2: @1038
384 /* 1038 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 40*/ GIMT_Encode4(1103),
385 /* 1049 */ /*GILLT_s32*//*Label 38*/ GIMT_Encode4(1057),
386 /* 1053 */ /*GILLT_s64*//*Label 39*/ GIMT_Encode4(1080),
387 /* 1057 */ // Label 38: @1057
388 /* 1057 */ GIM_Try, /*On fail goto*//*Label 41*/ GIMT_Encode4(1079), // Rule ID 79 //
389 /* 1062 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
390 /* 1065 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
391 /* 1068 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
392 /* 1072 */ // (mul:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (MUL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
393 /* 1072 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MUL_rr_32),
394 /* 1077 */ GIR_RootConstrainSelectedInstOperands,
395 /* 1078 */ // GIR_Coverage, 79,
396 /* 1078 */ GIR_Done,
397 /* 1079 */ // Label 41: @1079
398 /* 1079 */ GIM_Reject,
399 /* 1080 */ // Label 39: @1080
400 /* 1080 */ GIM_Try, /*On fail goto*//*Label 42*/ GIMT_Encode4(1102), // Rule ID 77 //
401 /* 1085 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
402 /* 1088 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
403 /* 1091 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
404 /* 1095 */ // (mul:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (MUL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
405 /* 1095 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MUL_rr),
406 /* 1100 */ GIR_RootConstrainSelectedInstOperands,
407 /* 1101 */ // GIR_Coverage, 77,
408 /* 1101 */ GIR_Done,
409 /* 1102 */ // Label 42: @1102
410 /* 1102 */ GIM_Reject,
411 /* 1103 */ // Label 40: @1103
412 /* 1103 */ GIM_Reject,
413 /* 1104 */ // Label 3: @1104
414 /* 1104 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 45*/ GIMT_Encode4(1173),
415 /* 1115 */ /*GILLT_s32*//*Label 43*/ GIMT_Encode4(1123),
416 /* 1119 */ /*GILLT_s64*//*Label 44*/ GIMT_Encode4(1148),
417 /* 1123 */ // Label 43: @1123
418 /* 1123 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 46*/ GIMT_Encode4(1147), GIMT_Encode2(GIFBS_BPFHasSdivSmod), // Rule ID 91 //
419 /* 1130 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
420 /* 1133 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
421 /* 1136 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
422 /* 1140 */ // (sdiv:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SDIV_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
423 /* 1140 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SDIV_rr_32),
424 /* 1145 */ GIR_RootConstrainSelectedInstOperands,
425 /* 1146 */ // GIR_Coverage, 91,
426 /* 1146 */ GIR_Done,
427 /* 1147 */ // Label 46: @1147
428 /* 1147 */ GIM_Reject,
429 /* 1148 */ // Label 44: @1148
430 /* 1148 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 47*/ GIMT_Encode4(1172), GIMT_Encode2(GIFBS_BPFHasSdivSmod), // Rule ID 89 //
431 /* 1155 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
432 /* 1158 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
433 /* 1161 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
434 /* 1165 */ // (sdiv:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SDIV_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
435 /* 1165 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SDIV_rr),
436 /* 1170 */ GIR_RootConstrainSelectedInstOperands,
437 /* 1171 */ // GIR_Coverage, 89,
438 /* 1171 */ GIR_Done,
439 /* 1172 */ // Label 47: @1172
440 /* 1172 */ GIM_Reject,
441 /* 1173 */ // Label 45: @1173
442 /* 1173 */ GIM_Reject,
443 /* 1174 */ // Label 4: @1174
444 /* 1174 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 50*/ GIMT_Encode4(1239),
445 /* 1185 */ /*GILLT_s32*//*Label 48*/ GIMT_Encode4(1193),
446 /* 1189 */ /*GILLT_s64*//*Label 49*/ GIMT_Encode4(1216),
447 /* 1193 */ // Label 48: @1193
448 /* 1193 */ GIM_Try, /*On fail goto*//*Label 51*/ GIMT_Encode4(1215), // Rule ID 83 //
449 /* 1198 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
450 /* 1201 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
451 /* 1204 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
452 /* 1208 */ // (udiv:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (DIV_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
453 /* 1208 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::DIV_rr_32),
454 /* 1213 */ GIR_RootConstrainSelectedInstOperands,
455 /* 1214 */ // GIR_Coverage, 83,
456 /* 1214 */ GIR_Done,
457 /* 1215 */ // Label 51: @1215
458 /* 1215 */ GIM_Reject,
459 /* 1216 */ // Label 49: @1216
460 /* 1216 */ GIM_Try, /*On fail goto*//*Label 52*/ GIMT_Encode4(1238), // Rule ID 81 //
461 /* 1221 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
462 /* 1224 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
463 /* 1227 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
464 /* 1231 */ // (udiv:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (DIV_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
465 /* 1231 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::DIV_rr),
466 /* 1236 */ GIR_RootConstrainSelectedInstOperands,
467 /* 1237 */ // GIR_Coverage, 81,
468 /* 1237 */ GIR_Done,
469 /* 1238 */ // Label 52: @1238
470 /* 1238 */ GIM_Reject,
471 /* 1239 */ // Label 50: @1239
472 /* 1239 */ GIM_Reject,
473 /* 1240 */ // Label 5: @1240
474 /* 1240 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 55*/ GIMT_Encode4(1309),
475 /* 1251 */ /*GILLT_s32*//*Label 53*/ GIMT_Encode4(1259),
476 /* 1255 */ /*GILLT_s64*//*Label 54*/ GIMT_Encode4(1284),
477 /* 1259 */ // Label 53: @1259
478 /* 1259 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 56*/ GIMT_Encode4(1283), GIMT_Encode2(GIFBS_BPFHasSdivSmod), // Rule ID 95 //
479 /* 1266 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
480 /* 1269 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
481 /* 1272 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
482 /* 1276 */ // (srem:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SMOD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
483 /* 1276 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SMOD_rr_32),
484 /* 1281 */ GIR_RootConstrainSelectedInstOperands,
485 /* 1282 */ // GIR_Coverage, 95,
486 /* 1282 */ GIR_Done,
487 /* 1283 */ // Label 56: @1283
488 /* 1283 */ GIM_Reject,
489 /* 1284 */ // Label 54: @1284
490 /* 1284 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 57*/ GIMT_Encode4(1308), GIMT_Encode2(GIFBS_BPFHasSdivSmod), // Rule ID 93 //
491 /* 1291 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
492 /* 1294 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
493 /* 1297 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
494 /* 1301 */ // (srem:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SMOD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
495 /* 1301 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SMOD_rr),
496 /* 1306 */ GIR_RootConstrainSelectedInstOperands,
497 /* 1307 */ // GIR_Coverage, 93,
498 /* 1307 */ GIR_Done,
499 /* 1308 */ // Label 57: @1308
500 /* 1308 */ GIM_Reject,
501 /* 1309 */ // Label 55: @1309
502 /* 1309 */ GIM_Reject,
503 /* 1310 */ // Label 6: @1310
504 /* 1310 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 60*/ GIMT_Encode4(1375),
505 /* 1321 */ /*GILLT_s32*//*Label 58*/ GIMT_Encode4(1329),
506 /* 1325 */ /*GILLT_s64*//*Label 59*/ GIMT_Encode4(1352),
507 /* 1329 */ // Label 58: @1329
508 /* 1329 */ GIM_Try, /*On fail goto*//*Label 61*/ GIMT_Encode4(1351), // Rule ID 87 //
509 /* 1334 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
510 /* 1337 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
511 /* 1340 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
512 /* 1344 */ // (urem:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (MOD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
513 /* 1344 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOD_rr_32),
514 /* 1349 */ GIR_RootConstrainSelectedInstOperands,
515 /* 1350 */ // GIR_Coverage, 87,
516 /* 1350 */ GIR_Done,
517 /* 1351 */ // Label 61: @1351
518 /* 1351 */ GIM_Reject,
519 /* 1352 */ // Label 59: @1352
520 /* 1352 */ GIM_Try, /*On fail goto*//*Label 62*/ GIMT_Encode4(1374), // Rule ID 85 //
521 /* 1357 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
522 /* 1360 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
523 /* 1363 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
524 /* 1367 */ // (urem:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (MOD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
525 /* 1367 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOD_rr),
526 /* 1372 */ GIR_RootConstrainSelectedInstOperands,
527 /* 1373 */ // GIR_Coverage, 85,
528 /* 1373 */ GIR_Done,
529 /* 1374 */ // Label 62: @1374
530 /* 1374 */ GIM_Reject,
531 /* 1375 */ // Label 60: @1375
532 /* 1375 */ GIM_Reject,
533 /* 1376 */ // Label 7: @1376
534 /* 1376 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 65*/ GIMT_Encode4(1501),
535 /* 1387 */ /*GILLT_s32*//*Label 63*/ GIMT_Encode4(1395),
536 /* 1391 */ /*GILLT_s64*//*Label 64*/ GIMT_Encode4(1418),
537 /* 1395 */ // Label 63: @1395
538 /* 1395 */ GIM_Try, /*On fail goto*//*Label 66*/ GIMT_Encode4(1417), // Rule ID 59 //
539 /* 1400 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
540 /* 1403 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
541 /* 1406 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
542 /* 1410 */ // (and:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (AND_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
543 /* 1410 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::AND_rr_32),
544 /* 1415 */ GIR_RootConstrainSelectedInstOperands,
545 /* 1416 */ // GIR_Coverage, 59,
546 /* 1416 */ GIR_Done,
547 /* 1417 */ // Label 66: @1417
548 /* 1417 */ GIM_Reject,
549 /* 1418 */ // Label 64: @1418
550 /* 1418 */ GIM_Try, /*On fail goto*//*Label 67*/ GIMT_Encode4(1500),
551 /* 1423 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
552 /* 1426 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
553 /* 1429 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
554 /* 1433 */ GIM_Try, /*On fail goto*//*Label 68*/ GIMT_Encode4(1487), // Rule ID 172 //
555 /* 1438 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
556 /* 1442 */ GIM_CheckConstantInt, /*MI*/0, /*Op*/2, GIMT_Encode8(4294967295),
557 /* 1453 */ // (and:{ *:[i64] } GPR:{ *:[i64] }:$src, 4294967295:{ *:[i64] }) => (SRL_ri:{ *:[i64] } (SLL_ri:{ *:[i64] } GPR:{ *:[i64] }:$src, 32:{ *:[i64] }), 32:{ *:[i64] })
558 /* 1453 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
559 /* 1456 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::SLL_ri),
560 /* 1460 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(static_cast<uint16_t>(RegState::Define)),
561 /* 1465 */ GIR_Copy, /*NewInsnID*/1, /*OldInsnID*/0, /*OpIdx*/1, // src
562 /* 1469 */ GIR_AddImm8, /*InsnID*/1, /*Imm*/32,
563 /* 1472 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
564 /* 1474 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::SRL_ri),
565 /* 1477 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
566 /* 1479 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
567 /* 1482 */ GIR_AddImm8, /*InsnID*/0, /*Imm*/32,
568 /* 1485 */ GIR_RootConstrainSelectedInstOperands,
569 /* 1486 */ // GIR_Coverage, 172,
570 /* 1486 */ GIR_EraseRootFromParent_Done,
571 /* 1487 */ // Label 68: @1487
572 /* 1487 */ GIM_Try, /*On fail goto*//*Label 69*/ GIMT_Encode4(1499), // Rule ID 57 //
573 /* 1492 */ // (and:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (AND_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
574 /* 1492 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::AND_rr),
575 /* 1497 */ GIR_RootConstrainSelectedInstOperands,
576 /* 1498 */ // GIR_Coverage, 57,
577 /* 1498 */ GIR_Done,
578 /* 1499 */ // Label 69: @1499
579 /* 1499 */ GIM_Reject,
580 /* 1500 */ // Label 67: @1500
581 /* 1500 */ GIM_Reject,
582 /* 1501 */ // Label 65: @1501
583 /* 1501 */ GIM_Reject,
584 /* 1502 */ // Label 8: @1502
585 /* 1502 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 72*/ GIMT_Encode4(1567),
586 /* 1513 */ /*GILLT_s32*//*Label 70*/ GIMT_Encode4(1521),
587 /* 1517 */ /*GILLT_s64*//*Label 71*/ GIMT_Encode4(1544),
588 /* 1521 */ // Label 70: @1521
589 /* 1521 */ GIM_Try, /*On fail goto*//*Label 73*/ GIMT_Encode4(1543), // Rule ID 55 //
590 /* 1526 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
591 /* 1529 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
592 /* 1532 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
593 /* 1536 */ // (or:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (OR_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
594 /* 1536 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::OR_rr_32),
595 /* 1541 */ GIR_RootConstrainSelectedInstOperands,
596 /* 1542 */ // GIR_Coverage, 55,
597 /* 1542 */ GIR_Done,
598 /* 1543 */ // Label 73: @1543
599 /* 1543 */ GIM_Reject,
600 /* 1544 */ // Label 71: @1544
601 /* 1544 */ GIM_Try, /*On fail goto*//*Label 74*/ GIMT_Encode4(1566), // Rule ID 53 //
602 /* 1549 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
603 /* 1552 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
604 /* 1555 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
605 /* 1559 */ // (or:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (OR_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
606 /* 1559 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::OR_rr),
607 /* 1564 */ GIR_RootConstrainSelectedInstOperands,
608 /* 1565 */ // GIR_Coverage, 53,
609 /* 1565 */ GIR_Done,
610 /* 1566 */ // Label 74: @1566
611 /* 1566 */ GIM_Reject,
612 /* 1567 */ // Label 72: @1567
613 /* 1567 */ GIM_Reject,
614 /* 1568 */ // Label 9: @1568
615 /* 1568 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 77*/ GIMT_Encode4(1633),
616 /* 1579 */ /*GILLT_s32*//*Label 75*/ GIMT_Encode4(1587),
617 /* 1583 */ /*GILLT_s64*//*Label 76*/ GIMT_Encode4(1610),
618 /* 1587 */ // Label 75: @1587
619 /* 1587 */ GIM_Try, /*On fail goto*//*Label 78*/ GIMT_Encode4(1609), // Rule ID 71 //
620 /* 1592 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
621 /* 1595 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
622 /* 1598 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
623 /* 1602 */ // (xor:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (XOR_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
624 /* 1602 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::XOR_rr_32),
625 /* 1607 */ GIR_RootConstrainSelectedInstOperands,
626 /* 1608 */ // GIR_Coverage, 71,
627 /* 1608 */ GIR_Done,
628 /* 1609 */ // Label 78: @1609
629 /* 1609 */ GIM_Reject,
630 /* 1610 */ // Label 76: @1610
631 /* 1610 */ GIM_Try, /*On fail goto*//*Label 79*/ GIMT_Encode4(1632), // Rule ID 69 //
632 /* 1615 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
633 /* 1618 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
634 /* 1621 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
635 /* 1625 */ // (xor:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (XOR_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
636 /* 1625 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::XOR_rr),
637 /* 1630 */ GIR_RootConstrainSelectedInstOperands,
638 /* 1631 */ // GIR_Coverage, 69,
639 /* 1631 */ GIR_Done,
640 /* 1632 */ // Label 79: @1632
641 /* 1632 */ GIM_Reject,
642 /* 1633 */ // Label 77: @1633
643 /* 1633 */ GIM_Reject,
644 /* 1634 */ // Label 10: @1634
645 /* 1634 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 80*/ GIMT_Encode4(1652), GIMT_Encode2(GIFBS_BPFHasGotox), // Rule ID 44 //
646 /* 1641 */ // MIs[0] dst
647 /* 1641 */ GIM_CheckPointerToAny, /*MI*/0, /*Op*/0, /*SizeInBits*/64,
648 /* 1645 */ // (brind i64:{ *:[i64] }:$dst) => (JX i64:{ *:[i64] }:$dst)
649 /* 1645 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::JX),
650 /* 1650 */ GIR_RootConstrainSelectedInstOperands,
651 /* 1651 */ // GIR_Coverage, 44,
652 /* 1651 */ GIR_Done,
653 /* 1652 */ // Label 80: @1652
654 /* 1652 */ GIM_Reject,
655 /* 1653 */ // Label 11: @1653
656 /* 1653 */ GIM_Try, /*On fail goto*//*Label 81*/ GIMT_Encode4(1716), // Rule ID 108 //
657 /* 1658 */ GIM_CheckNumOperands, /*MI*/0, /*Expected*/4,
658 /* 1661 */ GIM_CheckIntrinsicID, /*MI*/0, /*Op*/1, GIMT_Encode2(Intrinsic::bpf_pseudo),
659 /* 1666 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
660 /* 1669 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
661 /* 1672 */ GIM_RootCheckType, /*Op*/3, /*Type*/GILLT_s64,
662 /* 1675 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
663 /* 1679 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
664 /* 1683 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
665 /* 1687 */ // MIs[1] Operand 1
666 /* 1687 */ // No operand predicates
667 /* 1687 */ GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/3, // MIs[2]
668 /* 1691 */ GIM_CheckOpcode, /*MI*/2, GIMT_Encode2(TargetOpcode::G_CONSTANT),
669 /* 1695 */ // MIs[2] Operand 1
670 /* 1695 */ // No operand predicates
671 /* 1695 */ GIM_CheckIsSafeToFold, /*NumInsns*/2,
672 /* 1697 */ // (intrinsic_w_chain:{ *:[i64] } 4215:{ *:[iPTR] }, (imm:{ *:[i64] }):$pseudo, (imm:{ *:[i64] }):$imm) => (LD_pseudo:{ *:[i64] } (imm:{ *:[i64] }):$pseudo, (imm:{ *:[i64] }):$imm)
673 /* 1697 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LD_pseudo),
674 /* 1700 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
675 /* 1702 */ GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // pseudo
676 /* 1705 */ GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
677 /* 1708 */ GIR_MergeMemOperands, /*InsnID*/0, /*NumInsns*/3, /*MergeInsnID's*/0, 1, 2,
678 /* 1714 */ GIR_RootConstrainSelectedInstOperands,
679 /* 1715 */ // GIR_Coverage, 108,
680 /* 1715 */ GIR_EraseRootFromParent_Done,
681 /* 1716 */ // Label 81: @1716
682 /* 1716 */ GIM_Reject,
683 /* 1717 */ // Label 12: @1717
684 /* 1717 */ GIM_Try, /*On fail goto*//*Label 82*/ GIMT_Encode4(1779), // Rule ID 239 //
685 /* 1722 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
686 /* 1725 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
687 /* 1728 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
688 /* 1732 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
689 /* 1736 */ // (anyext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (INSERT_SUBREG:{ *:[i64] } (IMPLICIT_DEF:{ *:[i64] }), GPR32:{ *:[i32] }:$src, sub_32:{ *:[i32] })
690 /* 1736 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
691 /* 1739 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(TargetOpcode::IMPLICIT_DEF),
692 /* 1743 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(static_cast<uint16_t>(RegState::Define)),
693 /* 1748 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
694 /* 1750 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::INSERT_SUBREG),
695 /* 1753 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
696 /* 1755 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
697 /* 1758 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
698 /* 1760 */ GIR_AddImm8, /*InsnID*/0, /*Imm*/1,
699 /* 1763 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/0, GIMT_Encode2(BPF::GPRRegClassID),
700 /* 1768 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/1, GIMT_Encode2(BPF::GPRRegClassID),
701 /* 1773 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/2, GIMT_Encode2(BPF::GPR32RegClassID),
702 /* 1778 */ // GIR_Coverage, 239,
703 /* 1778 */ GIR_EraseRootFromParent_Done,
704 /* 1779 */ // Label 82: @1779
705 /* 1779 */ GIM_Reject,
706 /* 1780 */ // Label 13: @1780
707 /* 1780 */ GIM_Try, /*On fail goto*//*Label 83*/ GIMT_Encode4(1821), // Rule ID 238 //
708 /* 1785 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s32,
709 /* 1788 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
710 /* 1791 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
711 /* 1795 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
712 /* 1799 */ // (trunc:{ *:[i32] } GPR:{ *:[i64] }:$src) => (EXTRACT_SUBREG:{ *:[i32] } GPR:{ *:[i64] }:$src, sub_32:{ *:[i32] })
713 /* 1799 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::COPY),
714 /* 1802 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
715 /* 1804 */ GIR_CopySubReg, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, /*SubRegIdx*/GIMT_Encode2(1), // src
716 /* 1810 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/0, GIMT_Encode2(BPF::GPR32RegClassID),
717 /* 1815 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/1, GIMT_Encode2(BPF::GPRRegClassID),
718 /* 1820 */ // GIR_Coverage, 238,
719 /* 1820 */ GIR_EraseRootFromParent_Done,
720 /* 1821 */ // Label 83: @1821
721 /* 1821 */ GIM_Reject,
722 /* 1822 */ // Label 14: @1822
723 /* 1822 */ GIM_Try, /*On fail goto*//*Label 84*/ GIMT_Encode4(1844), // Rule ID 99 //
724 /* 1827 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
725 /* 1830 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
726 /* 1834 */ // MIs[0] Operand 1
727 /* 1834 */ // No operand predicates
728 /* 1834 */ // (imm:{ *:[i64] }):$imm => (LD_imm64:{ *:[i64] } (imm:{ *:[i64] }):$imm)
729 /* 1834 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LD_imm64),
730 /* 1837 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
731 /* 1839 */ GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/0, // imm
732 /* 1842 */ GIR_RootConstrainSelectedInstOperands,
733 /* 1843 */ // GIR_Coverage, 99,
734 /* 1843 */ GIR_EraseRootFromParent_Done,
735 /* 1844 */ // Label 84: @1844
736 /* 1844 */ GIM_Reject,
737 /* 1845 */ // Label 15: @1845
738 /* 1845 */ GIM_Try, /*On fail goto*//*Label 85*/ GIMT_Encode4(1958),
739 /* 1850 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
740 /* 1853 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
741 /* 1856 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
742 /* 1860 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
743 /* 1864 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 86*/ GIMT_Encode4(1922), GIMT_Encode2(GIFBS_BPFNoMovsx), // Rule ID 235 //
744 /* 1871 */ // (sext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (SRA_ri:{ *:[i64] } (SLL_ri:{ *:[i64] } (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src), 32:{ *:[i64] }), 32:{ *:[i64] })
745 /* 1871 */ GIR_MakeTempReg, /*TempRegID*/1, /*TypeID*/GILLT_s64,
746 /* 1874 */ GIR_BuildMI, /*InsnID*/2, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64),
747 /* 1878 */ GIR_AddTempRegister, /*InsnID*/2, /*TempRegID*/1, /*TempRegFlags*/GIMT_Encode2(static_cast<uint16_t>(RegState::Define)),
748 /* 1883 */ GIR_Copy, /*NewInsnID*/2, /*OldInsnID*/0, /*OpIdx*/1, // src
749 /* 1887 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/2,
750 /* 1889 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
751 /* 1892 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::SLL_ri),
752 /* 1896 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(static_cast<uint16_t>(RegState::Define)),
753 /* 1901 */ GIR_AddSimpleTempRegister, /*InsnID*/1, /*TempRegID*/1,
754 /* 1904 */ GIR_AddImm8, /*InsnID*/1, /*Imm*/32,
755 /* 1907 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
756 /* 1909 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::SRA_ri),
757 /* 1912 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
758 /* 1914 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
759 /* 1917 */ GIR_AddImm8, /*InsnID*/0, /*Imm*/32,
760 /* 1920 */ GIR_RootConstrainSelectedInstOperands,
761 /* 1921 */ // GIR_Coverage, 235,
762 /* 1921 */ GIR_EraseRootFromParent_Done,
763 /* 1922 */ // Label 86: @1922
764 /* 1922 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 87*/ GIMT_Encode4(1957), GIMT_Encode2(GIFBS_BPFHasMovsx), // Rule ID 236 //
765 /* 1929 */ // (sext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (MOVSX_rr_32:{ *:[i64] } (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src))
766 /* 1929 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
767 /* 1932 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64),
768 /* 1936 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(static_cast<uint16_t>(RegState::Define)),
769 /* 1941 */ GIR_Copy, /*NewInsnID*/1, /*OldInsnID*/0, /*OpIdx*/1, // src
770 /* 1945 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
771 /* 1947 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32),
772 /* 1950 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
773 /* 1952 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
774 /* 1955 */ GIR_RootConstrainSelectedInstOperands,
775 /* 1956 */ // GIR_Coverage, 236,
776 /* 1956 */ GIR_EraseRootFromParent_Done,
777 /* 1957 */ // Label 87: @1957
778 /* 1957 */ GIM_Reject,
779 /* 1958 */ // Label 85: @1958
780 /* 1958 */ GIM_Reject,
781 /* 1959 */ // Label 16: @1959
782 /* 1959 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 90*/ GIMT_Encode4(2149),
783 /* 1970 */ /*GILLT_s32*//*Label 88*/ GIMT_Encode4(1978),
784 /* 1974 */ /*GILLT_s64*//*Label 89*/ GIMT_Encode4(2050),
785 /* 1978 */ // Label 88: @1978
786 /* 1978 */ GIM_Try, /*On fail goto*//*Label 91*/ GIMT_Encode4(2049),
787 /* 1983 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
788 /* 1986 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
789 /* 1990 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
790 /* 1994 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 92*/ GIMT_Encode4(2021), GIMT_Encode2(GIFBS_BPFHasMovsx), // Rule ID 105 //
791 /* 2001 */ // MIs[0] Operand 2
792 /* 2001 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(8),
793 /* 2012 */ // (sext_inreg:{ *:[i32] } GPR32:{ *:[i32] }:$src, i8:{ *:[Other] }) => (MOVSX_rr_32_8:{ *:[i32] } GPR32:{ *:[i32] }:$src)
794 /* 2012 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32_8),
795 /* 2015 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
796 /* 2017 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
797 /* 2019 */ GIR_RootConstrainSelectedInstOperands,
798 /* 2020 */ // GIR_Coverage, 105,
799 /* 2020 */ GIR_EraseRootFromParent_Done,
800 /* 2021 */ // Label 92: @2021
801 /* 2021 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 93*/ GIMT_Encode4(2048), GIMT_Encode2(GIFBS_BPFHasMovsx), // Rule ID 106 //
802 /* 2028 */ // MIs[0] Operand 2
803 /* 2028 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(16),
804 /* 2039 */ // (sext_inreg:{ *:[i32] } GPR32:{ *:[i32] }:$src, i16:{ *:[Other] }) => (MOVSX_rr_32_16:{ *:[i32] } GPR32:{ *:[i32] }:$src)
805 /* 2039 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32_16),
806 /* 2042 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
807 /* 2044 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
808 /* 2046 */ GIR_RootConstrainSelectedInstOperands,
809 /* 2047 */ // GIR_Coverage, 106,
810 /* 2047 */ GIR_EraseRootFromParent_Done,
811 /* 2048 */ // Label 93: @2048
812 /* 2048 */ GIM_Reject,
813 /* 2049 */ // Label 91: @2049
814 /* 2049 */ GIM_Reject,
815 /* 2050 */ // Label 89: @2050
816 /* 2050 */ GIM_Try, /*On fail goto*//*Label 94*/ GIMT_Encode4(2148),
817 /* 2055 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
818 /* 2058 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
819 /* 2062 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
820 /* 2066 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 95*/ GIMT_Encode4(2093), GIMT_Encode2(GIFBS_BPFHasMovsx), // Rule ID 102 //
821 /* 2073 */ // MIs[0] Operand 2
822 /* 2073 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(8),
823 /* 2084 */ // (sext_inreg:{ *:[i64] } GPR:{ *:[i64] }:$src, i8:{ *:[Other] }) => (MOVSX_rr_8:{ *:[i64] } GPR:{ *:[i64] }:$src)
824 /* 2084 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_8),
825 /* 2087 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
826 /* 2089 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
827 /* 2091 */ GIR_RootConstrainSelectedInstOperands,
828 /* 2092 */ // GIR_Coverage, 102,
829 /* 2092 */ GIR_EraseRootFromParent_Done,
830 /* 2093 */ // Label 95: @2093
831 /* 2093 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 96*/ GIMT_Encode4(2120), GIMT_Encode2(GIFBS_BPFHasMovsx), // Rule ID 103 //
832 /* 2100 */ // MIs[0] Operand 2
833 /* 2100 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(16),
834 /* 2111 */ // (sext_inreg:{ *:[i64] } GPR:{ *:[i64] }:$src, i16:{ *:[Other] }) => (MOVSX_rr_16:{ *:[i64] } GPR:{ *:[i64] }:$src)
835 /* 2111 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_16),
836 /* 2114 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
837 /* 2116 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
838 /* 2118 */ GIR_RootConstrainSelectedInstOperands,
839 /* 2119 */ // GIR_Coverage, 103,
840 /* 2119 */ GIR_EraseRootFromParent_Done,
841 /* 2120 */ // Label 96: @2120
842 /* 2120 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 97*/ GIMT_Encode4(2147), GIMT_Encode2(GIFBS_BPFHasMovsx), // Rule ID 104 //
843 /* 2127 */ // MIs[0] Operand 2
844 /* 2127 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(32),
845 /* 2138 */ // (sext_inreg:{ *:[i64] } GPR:{ *:[i64] }:$src, i32:{ *:[Other] }) => (MOVSX_rr_32:{ *:[i64] } GPR:{ *:[i64] }:$src)
846 /* 2138 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32),
847 /* 2141 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
848 /* 2143 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
849 /* 2145 */ GIR_RootConstrainSelectedInstOperands,
850 /* 2146 */ // GIR_Coverage, 104,
851 /* 2146 */ GIR_EraseRootFromParent_Done,
852 /* 2147 */ // Label 97: @2147
853 /* 2147 */ GIM_Reject,
854 /* 2148 */ // Label 94: @2148
855 /* 2148 */ GIM_Reject,
856 /* 2149 */ // Label 90: @2149
857 /* 2149 */ GIM_Reject,
858 /* 2150 */ // Label 17: @2150
859 /* 2150 */ GIM_Try, /*On fail goto*//*Label 98*/ GIMT_Encode4(2176), // Rule ID 237 //
860 /* 2155 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
861 /* 2158 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
862 /* 2161 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
863 /* 2165 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
864 /* 2169 */ // (zext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src)
865 /* 2169 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64),
866 /* 2174 */ GIR_RootConstrainSelectedInstOperands,
867 /* 2175 */ // GIR_Coverage, 237,
868 /* 2175 */ GIR_Done,
869 /* 2176 */ // Label 98: @2176
870 /* 2176 */ GIM_Reject,
871 /* 2177 */ // Label 18: @2177
872 /* 2177 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 101*/ GIMT_Encode4(2242),
873 /* 2188 */ /*GILLT_s32*//*Label 99*/ GIMT_Encode4(2196),
874 /* 2192 */ /*GILLT_s64*//*Label 100*/ GIMT_Encode4(2219),
875 /* 2196 */ // Label 99: @2196
876 /* 2196 */ GIM_Try, /*On fail goto*//*Label 102*/ GIMT_Encode4(2218), // Rule ID 63 //
877 /* 2201 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
878 /* 2204 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
879 /* 2207 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
880 /* 2211 */ // (shl:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SLL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
881 /* 2211 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SLL_rr_32),
882 /* 2216 */ GIR_RootConstrainSelectedInstOperands,
883 /* 2217 */ // GIR_Coverage, 63,
884 /* 2217 */ GIR_Done,
885 /* 2218 */ // Label 102: @2218
886 /* 2218 */ GIM_Reject,
887 /* 2219 */ // Label 100: @2219
888 /* 2219 */ GIM_Try, /*On fail goto*//*Label 103*/ GIMT_Encode4(2241), // Rule ID 61 //
889 /* 2224 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
890 /* 2227 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
891 /* 2230 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
892 /* 2234 */ // (shl:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SLL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
893 /* 2234 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SLL_rr),
894 /* 2239 */ GIR_RootConstrainSelectedInstOperands,
895 /* 2240 */ // GIR_Coverage, 61,
896 /* 2240 */ GIR_Done,
897 /* 2241 */ // Label 103: @2241
898 /* 2241 */ GIM_Reject,
899 /* 2242 */ // Label 101: @2242
900 /* 2242 */ GIM_Reject,
901 /* 2243 */ // Label 19: @2243
902 /* 2243 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 106*/ GIMT_Encode4(2560),
903 /* 2254 */ /*GILLT_s32*//*Label 104*/ GIMT_Encode4(2262),
904 /* 2258 */ /*GILLT_s64*//*Label 105*/ GIMT_Encode4(2285),
905 /* 2262 */ // Label 104: @2262
906 /* 2262 */ GIM_Try, /*On fail goto*//*Label 107*/ GIMT_Encode4(2284), // Rule ID 67 //
907 /* 2267 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
908 /* 2270 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
909 /* 2273 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
910 /* 2277 */ // (srl:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SRL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
911 /* 2277 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRL_rr_32),
912 /* 2282 */ GIR_RootConstrainSelectedInstOperands,
913 /* 2283 */ // GIR_Coverage, 67,
914 /* 2283 */ GIR_Done,
915 /* 2284 */ // Label 107: @2284
916 /* 2284 */ GIM_Reject,
917 /* 2285 */ // Label 105: @2285
918 /* 2285 */ GIM_Try, /*On fail goto*//*Label 108*/ GIMT_Encode4(2559),
919 /* 2290 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
920 /* 2293 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
921 /* 2296 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
922 /* 2300 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 109*/ GIMT_Encode4(2341), GIMT_Encode2(GIFBS_BPFHasBswap), // Rule ID 140 //
923 /* 2307 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
924 /* 2311 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
925 /* 2315 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
926 /* 2319 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
927 /* 2324 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48,
928 /* 2328 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
929 /* 2330 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (BSWAP16:{ *:[i64] } GPR:{ *:[i64] }:$src)
930 /* 2330 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BSWAP16),
931 /* 2333 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
932 /* 2335 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
933 /* 2339 */ GIR_RootConstrainSelectedInstOperands,
934 /* 2340 */ // GIR_Coverage, 140,
935 /* 2340 */ GIR_EraseRootFromParent_Done,
936 /* 2341 */ // Label 109: @2341
937 /* 2341 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 110*/ GIMT_Encode4(2382), GIMT_Encode2(GIFBS_BPFHasBswap), // Rule ID 141 //
938 /* 2348 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
939 /* 2352 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
940 /* 2356 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
941 /* 2360 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
942 /* 2365 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32,
943 /* 2369 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
944 /* 2371 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (BSWAP32:{ *:[i64] } GPR:{ *:[i64] }:$src)
945 /* 2371 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BSWAP32),
946 /* 2374 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
947 /* 2376 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
948 /* 2380 */ GIR_RootConstrainSelectedInstOperands,
949 /* 2381 */ // GIR_Coverage, 141,
950 /* 2381 */ GIR_EraseRootFromParent_Done,
951 /* 2382 */ // Label 110: @2382
952 /* 2382 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 111*/ GIMT_Encode4(2423), GIMT_Encode2(GIFBS_BPFIsLittleEndian), // Rule ID 143 //
953 /* 2389 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
954 /* 2393 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
955 /* 2397 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
956 /* 2401 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
957 /* 2406 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48,
958 /* 2410 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
959 /* 2412 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (BE16:{ *:[i64] } GPR:{ *:[i64] }:$src)
960 /* 2412 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BE16),
961 /* 2415 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
962 /* 2417 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
963 /* 2421 */ GIR_RootConstrainSelectedInstOperands,
964 /* 2422 */ // GIR_Coverage, 143,
965 /* 2422 */ GIR_EraseRootFromParent_Done,
966 /* 2423 */ // Label 111: @2423
967 /* 2423 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 112*/ GIMT_Encode4(2464), GIMT_Encode2(GIFBS_BPFIsLittleEndian), // Rule ID 144 //
968 /* 2430 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
969 /* 2434 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
970 /* 2438 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
971 /* 2442 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
972 /* 2447 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32,
973 /* 2451 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
974 /* 2453 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (BE32:{ *:[i64] } GPR:{ *:[i64] }:$src)
975 /* 2453 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BE32),
976 /* 2456 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
977 /* 2458 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
978 /* 2462 */ GIR_RootConstrainSelectedInstOperands,
979 /* 2463 */ // GIR_Coverage, 144,
980 /* 2463 */ GIR_EraseRootFromParent_Done,
981 /* 2464 */ // Label 112: @2464
982 /* 2464 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 113*/ GIMT_Encode4(2505), GIMT_Encode2(GIFBS_BPFIsBigEndian), // Rule ID 146 //
983 /* 2471 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
984 /* 2475 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
985 /* 2479 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
986 /* 2483 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
987 /* 2488 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48,
988 /* 2492 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
989 /* 2494 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (LE16:{ *:[i64] } GPR:{ *:[i64] }:$src)
990 /* 2494 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LE16),
991 /* 2497 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
992 /* 2499 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
993 /* 2503 */ GIR_RootConstrainSelectedInstOperands,
994 /* 2504 */ // GIR_Coverage, 146,
995 /* 2504 */ GIR_EraseRootFromParent_Done,
996 /* 2505 */ // Label 113: @2505
997 /* 2505 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 114*/ GIMT_Encode4(2546), GIMT_Encode2(GIFBS_BPFIsBigEndian), // Rule ID 147 //
998 /* 2512 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
999 /* 2516 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
1000 /* 2520 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
1001 /* 2524 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
1002 /* 2529 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32,
1003 /* 2533 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
1004 /* 2535 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (LE32:{ *:[i64] } GPR:{ *:[i64] }:$src)
1005 /* 2535 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LE32),
1006 /* 2538 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
1007 /* 2540 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
1008 /* 2544 */ GIR_RootConstrainSelectedInstOperands,
1009 /* 2545 */ // GIR_Coverage, 147,
1010 /* 2545 */ GIR_EraseRootFromParent_Done,
1011 /* 2546 */ // Label 114: @2546
1012 /* 2546 */ GIM_Try, /*On fail goto*//*Label 115*/ GIMT_Encode4(2558), // Rule ID 65 //
1013 /* 2551 */ // (srl:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SRL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
1014 /* 2551 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRL_rr),
1015 /* 2556 */ GIR_RootConstrainSelectedInstOperands,
1016 /* 2557 */ // GIR_Coverage, 65,
1017 /* 2557 */ GIR_Done,
1018 /* 2558 */ // Label 115: @2558
1019 /* 2558 */ GIM_Reject,
1020 /* 2559 */ // Label 108: @2559
1021 /* 2559 */ GIM_Reject,
1022 /* 2560 */ // Label 106: @2560
1023 /* 2560 */ GIM_Reject,
1024 /* 2561 */ // Label 20: @2561
1025 /* 2561 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 118*/ GIMT_Encode4(2626),
1026 /* 2572 */ /*GILLT_s32*//*Label 116*/ GIMT_Encode4(2580),
1027 /* 2576 */ /*GILLT_s64*//*Label 117*/ GIMT_Encode4(2603),
1028 /* 2580 */ // Label 116: @2580
1029 /* 2580 */ GIM_Try, /*On fail goto*//*Label 119*/ GIMT_Encode4(2602), // Rule ID 75 //
1030 /* 2585 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
1031 /* 2588 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
1032 /* 2591 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
1033 /* 2595 */ // (sra:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SRA_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
1034 /* 2595 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRA_rr_32),
1035 /* 2600 */ GIR_RootConstrainSelectedInstOperands,
1036 /* 2601 */ // GIR_Coverage, 75,
1037 /* 2601 */ GIR_Done,
1038 /* 2602 */ // Label 119: @2602
1039 /* 2602 */ GIM_Reject,
1040 /* 2603 */ // Label 117: @2603
1041 /* 2603 */ GIM_Try, /*On fail goto*//*Label 120*/ GIMT_Encode4(2625), // Rule ID 73 //
1042 /* 2608 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
1043 /* 2611 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
1044 /* 2614 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
1045 /* 2618 */ // (sra:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SRA_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
1046 /* 2618 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRA_rr),
1047 /* 2623 */ GIR_RootConstrainSelectedInstOperands,
1048 /* 2624 */ // GIR_Coverage, 73,
1049 /* 2624 */ GIR_Done,
1050 /* 2625 */ // Label 120: @2625
1051 /* 2625 */ GIM_Reject,
1052 /* 2626 */ // Label 118: @2626
1053 /* 2626 */ GIM_Reject,
1054 /* 2627 */ // Label 21: @2627
1055 /* 2627 */ GIM_Try, /*On fail goto*//*Label 121*/ GIMT_Encode4(2642), // Rule ID 124 //
1056 /* 2632 */ // MIs[0] BrDst
1057 /* 2632 */ GIM_CheckIsMBB, /*MI*/0, /*Op*/0,
1058 /* 2635 */ // (br (bb:{ *:[Other] }):$BrDst) => (JMP (bb:{ *:[Other] }):$BrDst)
1059 /* 2635 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::JMP),
1060 /* 2640 */ GIR_RootConstrainSelectedInstOperands,
1061 /* 2641 */ // GIR_Coverage, 124,
1062 /* 2641 */ GIR_Done,
1063 /* 2642 */ // Label 121: @2642
1064 /* 2642 */ GIM_Reject,
1065 /* 2643 */ // Label 22: @2643
1066 /* 2643 */ GIM_Try, /*On fail goto*//*Label 122*/ GIMT_Encode4(2705),
1067 /* 2648 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
1068 /* 2651 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
1069 /* 2654 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
1070 /* 2658 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
1071 /* 2662 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 123*/ GIMT_Encode4(2676), GIMT_Encode2(GIFBS_BPFHasBswap), // Rule ID 142 //
1072 /* 2669 */ // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (BSWAP64:{ *:[i64] } GPR:{ *:[i64] }:$src)
1073 /* 2669 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BSWAP64),
1074 /* 2674 */ GIR_RootConstrainSelectedInstOperands,
1075 /* 2675 */ // GIR_Coverage, 142,
1076 /* 2675 */ GIR_Done,
1077 /* 2676 */ // Label 123: @2676
1078 /* 2676 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 124*/ GIMT_Encode4(2690), GIMT_Encode2(GIFBS_BPFIsLittleEndian), // Rule ID 145 //
1079 /* 2683 */ // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (BE64:{ *:[i64] } GPR:{ *:[i64] }:$src)
1080 /* 2683 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BE64),
1081 /* 2688 */ GIR_RootConstrainSelectedInstOperands,
1082 /* 2689 */ // GIR_Coverage, 145,
1083 /* 2689 */ GIR_Done,
1084 /* 2690 */ // Label 124: @2690
1085 /* 2690 */ GIM_Try_CheckFeatures, /*On fail goto*//*Label 125*/ GIMT_Encode4(2704), GIMT_Encode2(GIFBS_BPFIsBigEndian), // Rule ID 148 //
1086 /* 2697 */ // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (LE64:{ *:[i64] } GPR:{ *:[i64] }:$src)
1087 /* 2697 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::LE64),
1088 /* 2702 */ GIR_RootConstrainSelectedInstOperands,
1089 /* 2703 */ // GIR_Coverage, 148,
1090 /* 2703 */ GIR_Done,
1091 /* 2704 */ // Label 125: @2704
1092 /* 2704 */ GIM_Reject,
1093 /* 2705 */ // Label 122: @2705
1094 /* 2705 */ GIM_Reject,
1095 /* 2706 */ // Label 23: @2706
1096 /* 2706 */ GIM_Reject,
1097 /* 2707 */ }; // Size: 2707 bytes
1098 return MatchTable0;
1099}
1100#undef GIMT_Encode2
1101#undef GIMT_Encode4
1102#undef GIMT_Encode8
1103
1104
1105#endif // GET_GLOBALISEL_IMPL
1106
1107#ifdef GET_GLOBALISEL_PREDICATES_DECL
1108
1109PredicateBitset AvailableModuleFeatures;
1110mutable PredicateBitset AvailableFunctionFeatures;
1111PredicateBitset getAvailableFeatures() const {
1112 return AvailableModuleFeatures | AvailableFunctionFeatures;
1113}
1114PredicateBitset
1115computeAvailableModuleFeatures(const BPFSubtarget *Subtarget) const;
1116PredicateBitset
1117computeAvailableFunctionFeatures(const BPFSubtarget *Subtarget,
1118 const MachineFunction *MF) const;
1119void setupGeneratedPerFunctionState(MachineFunction &MF) override;
1120
1121#endif // GET_GLOBALISEL_PREDICATES_DECL
1122
1123#ifdef GET_GLOBALISEL_PREDICATES_INIT
1124
1125AvailableModuleFeatures(computeAvailableModuleFeatures(&STI)),
1126AvailableFunctionFeatures()
1127
1128#endif // GET_GLOBALISEL_PREDICATES_INIT
1129
1130