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_BPFHasMovsx,
115 GIFBS_BPFHasSdivSmod,
116 GIFBS_BPFIsBigEndian,
117 GIFBS_BPFIsLittleEndian,
118 GIFBS_BPFNoMovsx,
119};
120constexpr static PredicateBitset FeatureBitsets[] {
121 {}, // GIFBS_Invalid
122 {Feature_BPFHasBswapBit, },
123 {Feature_BPFHasMovsxBit, },
124 {Feature_BPFHasSdivSmodBit, },
125 {Feature_BPFIsBigEndianBit, },
126 {Feature_BPFIsLittleEndianBit, },
127 {Feature_BPFNoMovsxBit, },
128};
129
130// ComplexPattern predicates.
131enum {
132 GICP_Invalid,
133};
134// See constructor for table contents
135
136BPFInstructionSelector::ComplexMatcherMemFn
137BPFInstructionSelector::ComplexPredicateFns[] = {
138 nullptr, // GICP_Invalid
139};
140
141// PatFrag predicates.
142enum {
143 GICXXPred_MI_Predicate_ffloor_nnan = GICXXPred_Invalid + 1,
144 GICXXPred_MI_Predicate_or_disjoint,
145};
146bool BPFInstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI, const MatcherState &State) const {
147 const MachineFunction &MF = *MI.getParent()->getParent();
148 const MachineRegisterInfo &MRI = MF.getRegInfo();
149 const auto &Operands = State.RecordedOperands;
150 (void)Operands;
151 (void)MRI;
152 switch (PredicateID) {
153 case GICXXPred_MI_Predicate_ffloor_nnan: {
154
155 return MI.getFlag(MachineInstr::FmNoNans);
156
157 }
158 case GICXXPred_MI_Predicate_or_disjoint: {
159
160 return MI.getFlag(MachineInstr::Disjoint);
161
162 }
163 }
164 llvm_unreachable("Unknown predicate");
165 return false;
166}
167// PatFrag predicates.
168bool BPFInstructionSelector::testMOPredicate_MO(unsigned PredicateID, const MachineOperand & MO, const MatcherState &State) const {
169 const auto &Operands = State.RecordedOperands;
170 Register Reg = MO.getReg();
171 (void)Operands;
172 (void)Reg;
173 llvm_unreachable("Unknown predicate");
174 return false;
175}
176// PatFrag predicates.
177bool BPFInstructionSelector::testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const {
178 llvm_unreachable("Unknown predicate");
179 return false;
180}
181// PatFrag predicates.
182bool BPFInstructionSelector::testImmPredicate_APFloat(unsigned PredicateID, const APFloat & Imm) const {
183 llvm_unreachable("Unknown predicate");
184 return false;
185}
186// PatFrag predicates.
187bool BPFInstructionSelector::testImmPredicate_APInt(unsigned PredicateID, const APInt & Imm) const {
188 llvm_unreachable("Unknown predicate");
189 return false;
190}
191bool BPFInstructionSelector::testSimplePredicate(unsigned) const {
192 llvm_unreachable("BPFInstructionSelector does not support simple predicates!");
193 return false;
194}
195// Custom renderers.
196enum {
197 GICR_Invalid,
198};
199BPFInstructionSelector::CustomRendererFn
200BPFInstructionSelector::CustomRenderers[] = {
201 nullptr, // GICR_Invalid
202};
203
204bool BPFInstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const {
205 const PredicateBitset AvailableFeatures = getAvailableFeatures();
206 MachineIRBuilder B(I);
207 State.MIs.clear();
208 State.MIs.push_back(&I);
209
210 if (executeMatchTable(*this, State, ExecInfo, B, getMatchTable(), TII, MF->getRegInfo(), TRI, RBI, AvailableFeatures, &CoverageInfo)) {
211 return true;
212 }
213
214 return false;
215}
216
217bool BPFInstructionSelector::runCustomAction(unsigned, const MatcherState&, NewMIVector &) const {
218 llvm_unreachable("BPFInstructionSelector does not support custom C++ actions!");
219}
220#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
221#define GIMT_Encode2(Val) uint8_t(Val), uint8_t((Val) >> 8)
222#define GIMT_Encode4(Val) uint8_t(Val), uint8_t((Val) >> 8), uint8_t((Val) >> 16), uint8_t((Val) >> 24)
223#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)
224#else
225#define GIMT_Encode2(Val) uint8_t((Val) >> 8), uint8_t(Val)
226#define GIMT_Encode4(Val) uint8_t((Val) >> 24), uint8_t((Val) >> 16), uint8_t((Val) >> 8), uint8_t(Val)
227#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)
228#endif
229const uint8_t *BPFInstructionSelector::getMatchTable() const {
230 constexpr static uint8_t MatchTable0[] = {
231 /* 0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(55), GIMT_Encode2(263), /*)*//*default:*//*Label 22*/ GIMT_Encode4(2691),
232 /* 10 */ /*TargetOpcode::G_ADD*//*Label 0*/ GIMT_Encode4(842),
233 /* 14 */ /*TargetOpcode::G_SUB*//*Label 1*/ GIMT_Encode4(908),
234 /* 18 */ /*TargetOpcode::G_MUL*//*Label 2*/ GIMT_Encode4(1022),
235 /* 22 */ /*TargetOpcode::G_SDIV*//*Label 3*/ GIMT_Encode4(1088),
236 /* 26 */ /*TargetOpcode::G_UDIV*//*Label 4*/ GIMT_Encode4(1160),
237 /* 30 */ /*TargetOpcode::G_SREM*//*Label 5*/ GIMT_Encode4(1226),
238 /* 34 */ /*TargetOpcode::G_UREM*//*Label 6*/ GIMT_Encode4(1298), GIMT_Encode4(0), GIMT_Encode4(0),
239 /* 46 */ /*TargetOpcode::G_AND*//*Label 7*/ GIMT_Encode4(1364),
240 /* 50 */ /*TargetOpcode::G_OR*//*Label 8*/ GIMT_Encode4(1490),
241 /* 54 */ /*TargetOpcode::G_XOR*//*Label 9*/ GIMT_Encode4(1556), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
242 /* 334 */ /*TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS*//*Label 10*/ GIMT_Encode4(1622), GIMT_Encode4(0), GIMT_Encode4(0),
243 /* 346 */ /*TargetOpcode::G_ANYEXT*//*Label 11*/ GIMT_Encode4(1686),
244 /* 350 */ /*TargetOpcode::G_TRUNC*//*Label 12*/ GIMT_Encode4(1749), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
245 /* 366 */ /*TargetOpcode::G_CONSTANT*//*Label 13*/ GIMT_Encode4(1791), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
246 /* 382 */ /*TargetOpcode::G_SEXT*//*Label 14*/ GIMT_Encode4(1814),
247 /* 386 */ /*TargetOpcode::G_SEXT_INREG*//*Label 15*/ GIMT_Encode4(1930),
248 /* 390 */ /*TargetOpcode::G_ZEXT*//*Label 16*/ GIMT_Encode4(2126),
249 /* 394 */ /*TargetOpcode::G_SHL*//*Label 17*/ GIMT_Encode4(2153),
250 /* 398 */ /*TargetOpcode::G_LSHR*//*Label 18*/ GIMT_Encode4(2219),
251 /* 402 */ /*TargetOpcode::G_ASHR*//*Label 19*/ GIMT_Encode4(2543), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
252 /* 770 */ /*TargetOpcode::G_BR*//*Label 20*/ GIMT_Encode4(2609), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
253 /* 838 */ /*TargetOpcode::G_BSWAP*//*Label 21*/ GIMT_Encode4(2625),
254 /* 842 */ // Label 0: @842
255 /* 842 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 25*/ GIMT_Encode4(907),
256 /* 853 */ /*GILLT_s32*//*Label 23*/ GIMT_Encode4(861),
257 /* 857 */ /*GILLT_s64*//*Label 24*/ GIMT_Encode4(884),
258 /* 861 */ // Label 23: @861
259 /* 861 */ GIM_Try, /*On fail goto*//*Label 26*/ GIMT_Encode4(883), // Rule ID 47 //
260 /* 866 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
261 /* 869 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
262 /* 872 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
263 /* 876 */ // (add:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (ADD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
264 /* 876 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::ADD_rr_32),
265 /* 881 */ GIR_RootConstrainSelectedInstOperands,
266 /* 882 */ // GIR_Coverage, 47,
267 /* 882 */ GIR_Done,
268 /* 883 */ // Label 26: @883
269 /* 883 */ GIM_Reject,
270 /* 884 */ // Label 24: @884
271 /* 884 */ GIM_Try, /*On fail goto*//*Label 27*/ GIMT_Encode4(906), // Rule ID 45 //
272 /* 889 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
273 /* 892 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
274 /* 895 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
275 /* 899 */ // (add:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (ADD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
276 /* 899 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::ADD_rr),
277 /* 904 */ GIR_RootConstrainSelectedInstOperands,
278 /* 905 */ // GIR_Coverage, 45,
279 /* 905 */ GIR_Done,
280 /* 906 */ // Label 27: @906
281 /* 906 */ GIM_Reject,
282 /* 907 */ // Label 25: @907
283 /* 907 */ GIM_Reject,
284 /* 908 */ // Label 1: @908
285 /* 908 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 30*/ GIMT_Encode4(1021),
286 /* 919 */ /*GILLT_s32*//*Label 28*/ GIMT_Encode4(927),
287 /* 923 */ /*GILLT_s64*//*Label 29*/ GIMT_Encode4(974),
288 /* 927 */ // Label 28: @927
289 /* 927 */ GIM_Try, /*On fail goto*//*Label 31*/ GIMT_Encode4(973),
290 /* 932 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
291 /* 935 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
292 /* 938 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
293 /* 942 */ GIM_Try, /*On fail goto*//*Label 32*/ GIMT_Encode4(960), // Rule ID 98 //
294 /* 947 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/1, 0,
295 /* 951 */ // (sub:{ *:[i32] } 0:{ *:[i32] }, i32:{ *:[i32] }:$src) => (NEG_32:{ *:[i32] } i32:{ *:[i32] }:$src)
296 /* 951 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::NEG_32),
297 /* 954 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
298 /* 956 */ GIR_RootToRootCopy, /*OpIdx*/2, // src
299 /* 958 */ GIR_RootConstrainSelectedInstOperands,
300 /* 959 */ // GIR_Coverage, 98,
301 /* 959 */ GIR_EraseRootFromParent_Done,
302 /* 960 */ // Label 32: @960
303 /* 960 */ GIM_Try, /*On fail goto*//*Label 33*/ GIMT_Encode4(972), // Rule ID 51 //
304 /* 965 */ // (sub:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SUB_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
305 /* 965 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SUB_rr_32),
306 /* 970 */ GIR_RootConstrainSelectedInstOperands,
307 /* 971 */ // GIR_Coverage, 51,
308 /* 971 */ GIR_Done,
309 /* 972 */ // Label 33: @972
310 /* 972 */ GIM_Reject,
311 /* 973 */ // Label 31: @973
312 /* 973 */ GIM_Reject,
313 /* 974 */ // Label 29: @974
314 /* 974 */ GIM_Try, /*On fail goto*//*Label 34*/ GIMT_Encode4(1020),
315 /* 979 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
316 /* 982 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
317 /* 985 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
318 /* 989 */ GIM_Try, /*On fail goto*//*Label 35*/ GIMT_Encode4(1007), // Rule ID 97 //
319 /* 994 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/1, 0,
320 /* 998 */ // (sub:{ *:[i64] } 0:{ *:[i64] }, i64:{ *:[i64] }:$src) => (NEG_64:{ *:[i64] } i64:{ *:[i64] }:$src)
321 /* 998 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::NEG_64),
322 /* 1001 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
323 /* 1003 */ GIR_RootToRootCopy, /*OpIdx*/2, // src
324 /* 1005 */ GIR_RootConstrainSelectedInstOperands,
325 /* 1006 */ // GIR_Coverage, 97,
326 /* 1006 */ GIR_EraseRootFromParent_Done,
327 /* 1007 */ // Label 35: @1007
328 /* 1007 */ GIM_Try, /*On fail goto*//*Label 36*/ GIMT_Encode4(1019), // Rule ID 49 //
329 /* 1012 */ // (sub:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SUB_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
330 /* 1012 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SUB_rr),
331 /* 1017 */ GIR_RootConstrainSelectedInstOperands,
332 /* 1018 */ // GIR_Coverage, 49,
333 /* 1018 */ GIR_Done,
334 /* 1019 */ // Label 36: @1019
335 /* 1019 */ GIM_Reject,
336 /* 1020 */ // Label 34: @1020
337 /* 1020 */ GIM_Reject,
338 /* 1021 */ // Label 30: @1021
339 /* 1021 */ GIM_Reject,
340 /* 1022 */ // Label 2: @1022
341 /* 1022 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 39*/ GIMT_Encode4(1087),
342 /* 1033 */ /*GILLT_s32*//*Label 37*/ GIMT_Encode4(1041),
343 /* 1037 */ /*GILLT_s64*//*Label 38*/ GIMT_Encode4(1064),
344 /* 1041 */ // Label 37: @1041
345 /* 1041 */ GIM_Try, /*On fail goto*//*Label 40*/ GIMT_Encode4(1063), // Rule ID 79 //
346 /* 1046 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
347 /* 1049 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
348 /* 1052 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
349 /* 1056 */ // (mul:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (MUL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
350 /* 1056 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MUL_rr_32),
351 /* 1061 */ GIR_RootConstrainSelectedInstOperands,
352 /* 1062 */ // GIR_Coverage, 79,
353 /* 1062 */ GIR_Done,
354 /* 1063 */ // Label 40: @1063
355 /* 1063 */ GIM_Reject,
356 /* 1064 */ // Label 38: @1064
357 /* 1064 */ GIM_Try, /*On fail goto*//*Label 41*/ GIMT_Encode4(1086), // Rule ID 77 //
358 /* 1069 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
359 /* 1072 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
360 /* 1075 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
361 /* 1079 */ // (mul:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (MUL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
362 /* 1079 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MUL_rr),
363 /* 1084 */ GIR_RootConstrainSelectedInstOperands,
364 /* 1085 */ // GIR_Coverage, 77,
365 /* 1085 */ GIR_Done,
366 /* 1086 */ // Label 41: @1086
367 /* 1086 */ GIM_Reject,
368 /* 1087 */ // Label 39: @1087
369 /* 1087 */ GIM_Reject,
370 /* 1088 */ // Label 3: @1088
371 /* 1088 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 44*/ GIMT_Encode4(1159),
372 /* 1099 */ /*GILLT_s32*//*Label 42*/ GIMT_Encode4(1107),
373 /* 1103 */ /*GILLT_s64*//*Label 43*/ GIMT_Encode4(1133),
374 /* 1107 */ // Label 42: @1107
375 /* 1107 */ GIM_Try, /*On fail goto*//*Label 45*/ GIMT_Encode4(1132), // Rule ID 91 //
376 /* 1112 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod),
377 /* 1115 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
378 /* 1118 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
379 /* 1121 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
380 /* 1125 */ // (sdiv:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SDIV_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
381 /* 1125 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SDIV_rr_32),
382 /* 1130 */ GIR_RootConstrainSelectedInstOperands,
383 /* 1131 */ // GIR_Coverage, 91,
384 /* 1131 */ GIR_Done,
385 /* 1132 */ // Label 45: @1132
386 /* 1132 */ GIM_Reject,
387 /* 1133 */ // Label 43: @1133
388 /* 1133 */ GIM_Try, /*On fail goto*//*Label 46*/ GIMT_Encode4(1158), // Rule ID 89 //
389 /* 1138 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod),
390 /* 1141 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
391 /* 1144 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
392 /* 1147 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
393 /* 1151 */ // (sdiv:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SDIV_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
394 /* 1151 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SDIV_rr),
395 /* 1156 */ GIR_RootConstrainSelectedInstOperands,
396 /* 1157 */ // GIR_Coverage, 89,
397 /* 1157 */ GIR_Done,
398 /* 1158 */ // Label 46: @1158
399 /* 1158 */ GIM_Reject,
400 /* 1159 */ // Label 44: @1159
401 /* 1159 */ GIM_Reject,
402 /* 1160 */ // Label 4: @1160
403 /* 1160 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 49*/ GIMT_Encode4(1225),
404 /* 1171 */ /*GILLT_s32*//*Label 47*/ GIMT_Encode4(1179),
405 /* 1175 */ /*GILLT_s64*//*Label 48*/ GIMT_Encode4(1202),
406 /* 1179 */ // Label 47: @1179
407 /* 1179 */ GIM_Try, /*On fail goto*//*Label 50*/ GIMT_Encode4(1201), // Rule ID 83 //
408 /* 1184 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
409 /* 1187 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
410 /* 1190 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
411 /* 1194 */ // (udiv:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (DIV_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
412 /* 1194 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::DIV_rr_32),
413 /* 1199 */ GIR_RootConstrainSelectedInstOperands,
414 /* 1200 */ // GIR_Coverage, 83,
415 /* 1200 */ GIR_Done,
416 /* 1201 */ // Label 50: @1201
417 /* 1201 */ GIM_Reject,
418 /* 1202 */ // Label 48: @1202
419 /* 1202 */ GIM_Try, /*On fail goto*//*Label 51*/ GIMT_Encode4(1224), // Rule ID 81 //
420 /* 1207 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
421 /* 1210 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
422 /* 1213 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
423 /* 1217 */ // (udiv:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (DIV_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
424 /* 1217 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::DIV_rr),
425 /* 1222 */ GIR_RootConstrainSelectedInstOperands,
426 /* 1223 */ // GIR_Coverage, 81,
427 /* 1223 */ GIR_Done,
428 /* 1224 */ // Label 51: @1224
429 /* 1224 */ GIM_Reject,
430 /* 1225 */ // Label 49: @1225
431 /* 1225 */ GIM_Reject,
432 /* 1226 */ // Label 5: @1226
433 /* 1226 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 54*/ GIMT_Encode4(1297),
434 /* 1237 */ /*GILLT_s32*//*Label 52*/ GIMT_Encode4(1245),
435 /* 1241 */ /*GILLT_s64*//*Label 53*/ GIMT_Encode4(1271),
436 /* 1245 */ // Label 52: @1245
437 /* 1245 */ GIM_Try, /*On fail goto*//*Label 55*/ GIMT_Encode4(1270), // Rule ID 95 //
438 /* 1250 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod),
439 /* 1253 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
440 /* 1256 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
441 /* 1259 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
442 /* 1263 */ // (srem:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SMOD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
443 /* 1263 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SMOD_rr_32),
444 /* 1268 */ GIR_RootConstrainSelectedInstOperands,
445 /* 1269 */ // GIR_Coverage, 95,
446 /* 1269 */ GIR_Done,
447 /* 1270 */ // Label 55: @1270
448 /* 1270 */ GIM_Reject,
449 /* 1271 */ // Label 53: @1271
450 /* 1271 */ GIM_Try, /*On fail goto*//*Label 56*/ GIMT_Encode4(1296), // Rule ID 93 //
451 /* 1276 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod),
452 /* 1279 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
453 /* 1282 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
454 /* 1285 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
455 /* 1289 */ // (srem:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SMOD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
456 /* 1289 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SMOD_rr),
457 /* 1294 */ GIR_RootConstrainSelectedInstOperands,
458 /* 1295 */ // GIR_Coverage, 93,
459 /* 1295 */ GIR_Done,
460 /* 1296 */ // Label 56: @1296
461 /* 1296 */ GIM_Reject,
462 /* 1297 */ // Label 54: @1297
463 /* 1297 */ GIM_Reject,
464 /* 1298 */ // Label 6: @1298
465 /* 1298 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 59*/ GIMT_Encode4(1363),
466 /* 1309 */ /*GILLT_s32*//*Label 57*/ GIMT_Encode4(1317),
467 /* 1313 */ /*GILLT_s64*//*Label 58*/ GIMT_Encode4(1340),
468 /* 1317 */ // Label 57: @1317
469 /* 1317 */ GIM_Try, /*On fail goto*//*Label 60*/ GIMT_Encode4(1339), // Rule ID 87 //
470 /* 1322 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
471 /* 1325 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
472 /* 1328 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
473 /* 1332 */ // (urem:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (MOD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
474 /* 1332 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOD_rr_32),
475 /* 1337 */ GIR_RootConstrainSelectedInstOperands,
476 /* 1338 */ // GIR_Coverage, 87,
477 /* 1338 */ GIR_Done,
478 /* 1339 */ // Label 60: @1339
479 /* 1339 */ GIM_Reject,
480 /* 1340 */ // Label 58: @1340
481 /* 1340 */ GIM_Try, /*On fail goto*//*Label 61*/ GIMT_Encode4(1362), // Rule ID 85 //
482 /* 1345 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
483 /* 1348 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
484 /* 1351 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
485 /* 1355 */ // (urem:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (MOD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
486 /* 1355 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOD_rr),
487 /* 1360 */ GIR_RootConstrainSelectedInstOperands,
488 /* 1361 */ // GIR_Coverage, 85,
489 /* 1361 */ GIR_Done,
490 /* 1362 */ // Label 61: @1362
491 /* 1362 */ GIM_Reject,
492 /* 1363 */ // Label 59: @1363
493 /* 1363 */ GIM_Reject,
494 /* 1364 */ // Label 7: @1364
495 /* 1364 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 64*/ GIMT_Encode4(1489),
496 /* 1375 */ /*GILLT_s32*//*Label 62*/ GIMT_Encode4(1383),
497 /* 1379 */ /*GILLT_s64*//*Label 63*/ GIMT_Encode4(1406),
498 /* 1383 */ // Label 62: @1383
499 /* 1383 */ GIM_Try, /*On fail goto*//*Label 65*/ GIMT_Encode4(1405), // Rule ID 59 //
500 /* 1388 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
501 /* 1391 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
502 /* 1394 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
503 /* 1398 */ // (and:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (AND_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
504 /* 1398 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::AND_rr_32),
505 /* 1403 */ GIR_RootConstrainSelectedInstOperands,
506 /* 1404 */ // GIR_Coverage, 59,
507 /* 1404 */ GIR_Done,
508 /* 1405 */ // Label 65: @1405
509 /* 1405 */ GIM_Reject,
510 /* 1406 */ // Label 63: @1406
511 /* 1406 */ GIM_Try, /*On fail goto*//*Label 66*/ GIMT_Encode4(1488),
512 /* 1411 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
513 /* 1414 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
514 /* 1417 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
515 /* 1421 */ GIM_Try, /*On fail goto*//*Label 67*/ GIMT_Encode4(1475), // Rule ID 172 //
516 /* 1426 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
517 /* 1430 */ GIM_CheckConstantInt, /*MI*/0, /*Op*/2, GIMT_Encode8(4294967295),
518 /* 1441 */ // (and:{ *:[i64] } GPR:{ *:[i64] }:$src, 4294967295:{ *:[i64] }) => (SRL_ri:{ *:[i64] } (SLL_ri:{ *:[i64] } GPR:{ *:[i64] }:$src, 32:{ *:[i64] }), 32:{ *:[i64] })
519 /* 1441 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
520 /* 1444 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::SLL_ri),
521 /* 1448 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(static_cast<uint16_t>(RegState::Define)),
522 /* 1453 */ GIR_Copy, /*NewInsnID*/1, /*OldInsnID*/0, /*OpIdx*/1, // src
523 /* 1457 */ GIR_AddImm8, /*InsnID*/1, /*Imm*/32,
524 /* 1460 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
525 /* 1462 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::SRL_ri),
526 /* 1465 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
527 /* 1467 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
528 /* 1470 */ GIR_AddImm8, /*InsnID*/0, /*Imm*/32,
529 /* 1473 */ GIR_RootConstrainSelectedInstOperands,
530 /* 1474 */ // GIR_Coverage, 172,
531 /* 1474 */ GIR_EraseRootFromParent_Done,
532 /* 1475 */ // Label 67: @1475
533 /* 1475 */ GIM_Try, /*On fail goto*//*Label 68*/ GIMT_Encode4(1487), // Rule ID 57 //
534 /* 1480 */ // (and:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (AND_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
535 /* 1480 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::AND_rr),
536 /* 1485 */ GIR_RootConstrainSelectedInstOperands,
537 /* 1486 */ // GIR_Coverage, 57,
538 /* 1486 */ GIR_Done,
539 /* 1487 */ // Label 68: @1487
540 /* 1487 */ GIM_Reject,
541 /* 1488 */ // Label 66: @1488
542 /* 1488 */ GIM_Reject,
543 /* 1489 */ // Label 64: @1489
544 /* 1489 */ GIM_Reject,
545 /* 1490 */ // Label 8: @1490
546 /* 1490 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 71*/ GIMT_Encode4(1555),
547 /* 1501 */ /*GILLT_s32*//*Label 69*/ GIMT_Encode4(1509),
548 /* 1505 */ /*GILLT_s64*//*Label 70*/ GIMT_Encode4(1532),
549 /* 1509 */ // Label 69: @1509
550 /* 1509 */ GIM_Try, /*On fail goto*//*Label 72*/ GIMT_Encode4(1531), // Rule ID 55 //
551 /* 1514 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
552 /* 1517 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
553 /* 1520 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
554 /* 1524 */ // (or:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (OR_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
555 /* 1524 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::OR_rr_32),
556 /* 1529 */ GIR_RootConstrainSelectedInstOperands,
557 /* 1530 */ // GIR_Coverage, 55,
558 /* 1530 */ GIR_Done,
559 /* 1531 */ // Label 72: @1531
560 /* 1531 */ GIM_Reject,
561 /* 1532 */ // Label 70: @1532
562 /* 1532 */ GIM_Try, /*On fail goto*//*Label 73*/ GIMT_Encode4(1554), // Rule ID 53 //
563 /* 1537 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
564 /* 1540 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
565 /* 1543 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
566 /* 1547 */ // (or:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (OR_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
567 /* 1547 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::OR_rr),
568 /* 1552 */ GIR_RootConstrainSelectedInstOperands,
569 /* 1553 */ // GIR_Coverage, 53,
570 /* 1553 */ GIR_Done,
571 /* 1554 */ // Label 73: @1554
572 /* 1554 */ GIM_Reject,
573 /* 1555 */ // Label 71: @1555
574 /* 1555 */ GIM_Reject,
575 /* 1556 */ // Label 9: @1556
576 /* 1556 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 76*/ GIMT_Encode4(1621),
577 /* 1567 */ /*GILLT_s32*//*Label 74*/ GIMT_Encode4(1575),
578 /* 1571 */ /*GILLT_s64*//*Label 75*/ GIMT_Encode4(1598),
579 /* 1575 */ // Label 74: @1575
580 /* 1575 */ GIM_Try, /*On fail goto*//*Label 77*/ GIMT_Encode4(1597), // Rule ID 71 //
581 /* 1580 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
582 /* 1583 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
583 /* 1586 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
584 /* 1590 */ // (xor:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (XOR_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
585 /* 1590 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::XOR_rr_32),
586 /* 1595 */ GIR_RootConstrainSelectedInstOperands,
587 /* 1596 */ // GIR_Coverage, 71,
588 /* 1596 */ GIR_Done,
589 /* 1597 */ // Label 77: @1597
590 /* 1597 */ GIM_Reject,
591 /* 1598 */ // Label 75: @1598
592 /* 1598 */ GIM_Try, /*On fail goto*//*Label 78*/ GIMT_Encode4(1620), // Rule ID 69 //
593 /* 1603 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
594 /* 1606 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
595 /* 1609 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
596 /* 1613 */ // (xor:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (XOR_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
597 /* 1613 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::XOR_rr),
598 /* 1618 */ GIR_RootConstrainSelectedInstOperands,
599 /* 1619 */ // GIR_Coverage, 69,
600 /* 1619 */ GIR_Done,
601 /* 1620 */ // Label 78: @1620
602 /* 1620 */ GIM_Reject,
603 /* 1621 */ // Label 76: @1621
604 /* 1621 */ GIM_Reject,
605 /* 1622 */ // Label 10: @1622
606 /* 1622 */ GIM_Try, /*On fail goto*//*Label 79*/ GIMT_Encode4(1685), // Rule ID 108 //
607 /* 1627 */ GIM_CheckNumOperands, /*MI*/0, /*Expected*/4,
608 /* 1630 */ GIM_CheckIntrinsicID, /*MI*/0, /*Op*/1, GIMT_Encode2(Intrinsic::bpf_pseudo),
609 /* 1635 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
610 /* 1638 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
611 /* 1641 */ GIM_RootCheckType, /*Op*/3, /*Type*/GILLT_s64,
612 /* 1644 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
613 /* 1648 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
614 /* 1652 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
615 /* 1656 */ // MIs[1] Operand 1
616 /* 1656 */ // No operand predicates
617 /* 1656 */ GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/3, // MIs[2]
618 /* 1660 */ GIM_CheckOpcode, /*MI*/2, GIMT_Encode2(TargetOpcode::G_CONSTANT),
619 /* 1664 */ // MIs[2] Operand 1
620 /* 1664 */ // No operand predicates
621 /* 1664 */ GIM_CheckIsSafeToFold, /*NumInsns*/2,
622 /* 1666 */ // (intrinsic_w_chain:{ *:[i64] } 4211:{ *:[iPTR] }, (imm:{ *:[i64] }):$pseudo, (imm:{ *:[i64] }):$imm) => (LD_pseudo:{ *:[i64] } (imm:{ *:[i64] }):$pseudo, (imm:{ *:[i64] }):$imm)
623 /* 1666 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LD_pseudo),
624 /* 1669 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
625 /* 1671 */ GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // pseudo
626 /* 1674 */ GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
627 /* 1677 */ GIR_MergeMemOperands, /*InsnID*/0, /*NumInsns*/3, /*MergeInsnID's*/0, 1, 2,
628 /* 1683 */ GIR_RootConstrainSelectedInstOperands,
629 /* 1684 */ // GIR_Coverage, 108,
630 /* 1684 */ GIR_EraseRootFromParent_Done,
631 /* 1685 */ // Label 79: @1685
632 /* 1685 */ GIM_Reject,
633 /* 1686 */ // Label 11: @1686
634 /* 1686 */ GIM_Try, /*On fail goto*//*Label 80*/ GIMT_Encode4(1748), // Rule ID 239 //
635 /* 1691 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
636 /* 1694 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
637 /* 1697 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
638 /* 1701 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
639 /* 1705 */ // (anyext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (INSERT_SUBREG:{ *:[i64] } (IMPLICIT_DEF:{ *:[i64] }), GPR32:{ *:[i32] }:$src, sub_32:{ *:[i32] })
640 /* 1705 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
641 /* 1708 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(TargetOpcode::IMPLICIT_DEF),
642 /* 1712 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(static_cast<uint16_t>(RegState::Define)),
643 /* 1717 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
644 /* 1719 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::INSERT_SUBREG),
645 /* 1722 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
646 /* 1724 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
647 /* 1727 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
648 /* 1729 */ GIR_AddImm8, /*InsnID*/0, /*Imm*/1,
649 /* 1732 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/0, GIMT_Encode2(BPF::GPRRegClassID),
650 /* 1737 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/1, GIMT_Encode2(BPF::GPRRegClassID),
651 /* 1742 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/2, GIMT_Encode2(BPF::GPR32RegClassID),
652 /* 1747 */ // GIR_Coverage, 239,
653 /* 1747 */ GIR_EraseRootFromParent_Done,
654 /* 1748 */ // Label 80: @1748
655 /* 1748 */ GIM_Reject,
656 /* 1749 */ // Label 12: @1749
657 /* 1749 */ GIM_Try, /*On fail goto*//*Label 81*/ GIMT_Encode4(1790), // Rule ID 238 //
658 /* 1754 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s32,
659 /* 1757 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
660 /* 1760 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
661 /* 1764 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
662 /* 1768 */ // (trunc:{ *:[i32] } GPR:{ *:[i64] }:$src) => (EXTRACT_SUBREG:{ *:[i32] } GPR:{ *:[i64] }:$src, sub_32:{ *:[i32] })
663 /* 1768 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::COPY),
664 /* 1771 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
665 /* 1773 */ GIR_CopySubReg, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, /*SubRegIdx*/GIMT_Encode2(1), // src
666 /* 1779 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/0, GIMT_Encode2(BPF::GPR32RegClassID),
667 /* 1784 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/1, GIMT_Encode2(BPF::GPRRegClassID),
668 /* 1789 */ // GIR_Coverage, 238,
669 /* 1789 */ GIR_EraseRootFromParent_Done,
670 /* 1790 */ // Label 81: @1790
671 /* 1790 */ GIM_Reject,
672 /* 1791 */ // Label 13: @1791
673 /* 1791 */ GIM_Try, /*On fail goto*//*Label 82*/ GIMT_Encode4(1813), // Rule ID 99 //
674 /* 1796 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
675 /* 1799 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
676 /* 1803 */ // MIs[0] Operand 1
677 /* 1803 */ // No operand predicates
678 /* 1803 */ // (imm:{ *:[i64] }):$imm => (LD_imm64:{ *:[i64] } (imm:{ *:[i64] }):$imm)
679 /* 1803 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LD_imm64),
680 /* 1806 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
681 /* 1808 */ GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/0, // imm
682 /* 1811 */ GIR_RootConstrainSelectedInstOperands,
683 /* 1812 */ // GIR_Coverage, 99,
684 /* 1812 */ GIR_EraseRootFromParent_Done,
685 /* 1813 */ // Label 82: @1813
686 /* 1813 */ GIM_Reject,
687 /* 1814 */ // Label 14: @1814
688 /* 1814 */ GIM_Try, /*On fail goto*//*Label 83*/ GIMT_Encode4(1929),
689 /* 1819 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
690 /* 1822 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
691 /* 1825 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
692 /* 1829 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
693 /* 1833 */ GIM_Try, /*On fail goto*//*Label 84*/ GIMT_Encode4(1892), // Rule ID 235 //
694 /* 1838 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFNoMovsx),
695 /* 1841 */ // (sext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (SRA_ri:{ *:[i64] } (SLL_ri:{ *:[i64] } (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src), 32:{ *:[i64] }), 32:{ *:[i64] })
696 /* 1841 */ GIR_MakeTempReg, /*TempRegID*/1, /*TypeID*/GILLT_s64,
697 /* 1844 */ GIR_BuildMI, /*InsnID*/2, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64),
698 /* 1848 */ GIR_AddTempRegister, /*InsnID*/2, /*TempRegID*/1, /*TempRegFlags*/GIMT_Encode2(static_cast<uint16_t>(RegState::Define)),
699 /* 1853 */ GIR_Copy, /*NewInsnID*/2, /*OldInsnID*/0, /*OpIdx*/1, // src
700 /* 1857 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/2,
701 /* 1859 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
702 /* 1862 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::SLL_ri),
703 /* 1866 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(static_cast<uint16_t>(RegState::Define)),
704 /* 1871 */ GIR_AddSimpleTempRegister, /*InsnID*/1, /*TempRegID*/1,
705 /* 1874 */ GIR_AddImm8, /*InsnID*/1, /*Imm*/32,
706 /* 1877 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
707 /* 1879 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::SRA_ri),
708 /* 1882 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
709 /* 1884 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
710 /* 1887 */ GIR_AddImm8, /*InsnID*/0, /*Imm*/32,
711 /* 1890 */ GIR_RootConstrainSelectedInstOperands,
712 /* 1891 */ // GIR_Coverage, 235,
713 /* 1891 */ GIR_EraseRootFromParent_Done,
714 /* 1892 */ // Label 84: @1892
715 /* 1892 */ GIM_Try, /*On fail goto*//*Label 85*/ GIMT_Encode4(1928), // Rule ID 236 //
716 /* 1897 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
717 /* 1900 */ // (sext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (MOVSX_rr_32:{ *:[i64] } (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src))
718 /* 1900 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
719 /* 1903 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64),
720 /* 1907 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(static_cast<uint16_t>(RegState::Define)),
721 /* 1912 */ GIR_Copy, /*NewInsnID*/1, /*OldInsnID*/0, /*OpIdx*/1, // src
722 /* 1916 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
723 /* 1918 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32),
724 /* 1921 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
725 /* 1923 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
726 /* 1926 */ GIR_RootConstrainSelectedInstOperands,
727 /* 1927 */ // GIR_Coverage, 236,
728 /* 1927 */ GIR_EraseRootFromParent_Done,
729 /* 1928 */ // Label 85: @1928
730 /* 1928 */ GIM_Reject,
731 /* 1929 */ // Label 83: @1929
732 /* 1929 */ GIM_Reject,
733 /* 1930 */ // Label 15: @1930
734 /* 1930 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 88*/ GIMT_Encode4(2125),
735 /* 1941 */ /*GILLT_s32*//*Label 86*/ GIMT_Encode4(1949),
736 /* 1945 */ /*GILLT_s64*//*Label 87*/ GIMT_Encode4(2023),
737 /* 1949 */ // Label 86: @1949
738 /* 1949 */ GIM_Try, /*On fail goto*//*Label 89*/ GIMT_Encode4(2022),
739 /* 1954 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
740 /* 1957 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
741 /* 1961 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
742 /* 1965 */ GIM_Try, /*On fail goto*//*Label 90*/ GIMT_Encode4(1993), // Rule ID 105 //
743 /* 1970 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
744 /* 1973 */ // MIs[0] Operand 2
745 /* 1973 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(8),
746 /* 1984 */ // (sext_inreg:{ *:[i32] } GPR32:{ *:[i32] }:$src, i8:{ *:[Other] }) => (MOVSX_rr_32_8:{ *:[i32] } GPR32:{ *:[i32] }:$src)
747 /* 1984 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32_8),
748 /* 1987 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
749 /* 1989 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
750 /* 1991 */ GIR_RootConstrainSelectedInstOperands,
751 /* 1992 */ // GIR_Coverage, 105,
752 /* 1992 */ GIR_EraseRootFromParent_Done,
753 /* 1993 */ // Label 90: @1993
754 /* 1993 */ GIM_Try, /*On fail goto*//*Label 91*/ GIMT_Encode4(2021), // Rule ID 106 //
755 /* 1998 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
756 /* 2001 */ // MIs[0] Operand 2
757 /* 2001 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(16),
758 /* 2012 */ // (sext_inreg:{ *:[i32] } GPR32:{ *:[i32] }:$src, i16:{ *:[Other] }) => (MOVSX_rr_32_16:{ *:[i32] } GPR32:{ *:[i32] }:$src)
759 /* 2012 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32_16),
760 /* 2015 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
761 /* 2017 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
762 /* 2019 */ GIR_RootConstrainSelectedInstOperands,
763 /* 2020 */ // GIR_Coverage, 106,
764 /* 2020 */ GIR_EraseRootFromParent_Done,
765 /* 2021 */ // Label 91: @2021
766 /* 2021 */ GIM_Reject,
767 /* 2022 */ // Label 89: @2022
768 /* 2022 */ GIM_Reject,
769 /* 2023 */ // Label 87: @2023
770 /* 2023 */ GIM_Try, /*On fail goto*//*Label 92*/ GIMT_Encode4(2124),
771 /* 2028 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
772 /* 2031 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
773 /* 2035 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
774 /* 2039 */ GIM_Try, /*On fail goto*//*Label 93*/ GIMT_Encode4(2067), // Rule ID 102 //
775 /* 2044 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
776 /* 2047 */ // MIs[0] Operand 2
777 /* 2047 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(8),
778 /* 2058 */ // (sext_inreg:{ *:[i64] } GPR:{ *:[i64] }:$src, i8:{ *:[Other] }) => (MOVSX_rr_8:{ *:[i64] } GPR:{ *:[i64] }:$src)
779 /* 2058 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_8),
780 /* 2061 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
781 /* 2063 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
782 /* 2065 */ GIR_RootConstrainSelectedInstOperands,
783 /* 2066 */ // GIR_Coverage, 102,
784 /* 2066 */ GIR_EraseRootFromParent_Done,
785 /* 2067 */ // Label 93: @2067
786 /* 2067 */ GIM_Try, /*On fail goto*//*Label 94*/ GIMT_Encode4(2095), // Rule ID 103 //
787 /* 2072 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
788 /* 2075 */ // MIs[0] Operand 2
789 /* 2075 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(16),
790 /* 2086 */ // (sext_inreg:{ *:[i64] } GPR:{ *:[i64] }:$src, i16:{ *:[Other] }) => (MOVSX_rr_16:{ *:[i64] } GPR:{ *:[i64] }:$src)
791 /* 2086 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_16),
792 /* 2089 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
793 /* 2091 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
794 /* 2093 */ GIR_RootConstrainSelectedInstOperands,
795 /* 2094 */ // GIR_Coverage, 103,
796 /* 2094 */ GIR_EraseRootFromParent_Done,
797 /* 2095 */ // Label 94: @2095
798 /* 2095 */ GIM_Try, /*On fail goto*//*Label 95*/ GIMT_Encode4(2123), // Rule ID 104 //
799 /* 2100 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
800 /* 2103 */ // MIs[0] Operand 2
801 /* 2103 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(32),
802 /* 2114 */ // (sext_inreg:{ *:[i64] } GPR:{ *:[i64] }:$src, i32:{ *:[Other] }) => (MOVSX_rr_32:{ *:[i64] } GPR:{ *:[i64] }:$src)
803 /* 2114 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32),
804 /* 2117 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
805 /* 2119 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
806 /* 2121 */ GIR_RootConstrainSelectedInstOperands,
807 /* 2122 */ // GIR_Coverage, 104,
808 /* 2122 */ GIR_EraseRootFromParent_Done,
809 /* 2123 */ // Label 95: @2123
810 /* 2123 */ GIM_Reject,
811 /* 2124 */ // Label 92: @2124
812 /* 2124 */ GIM_Reject,
813 /* 2125 */ // Label 88: @2125
814 /* 2125 */ GIM_Reject,
815 /* 2126 */ // Label 16: @2126
816 /* 2126 */ GIM_Try, /*On fail goto*//*Label 96*/ GIMT_Encode4(2152), // Rule ID 237 //
817 /* 2131 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
818 /* 2134 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
819 /* 2137 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
820 /* 2141 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
821 /* 2145 */ // (zext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src)
822 /* 2145 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64),
823 /* 2150 */ GIR_RootConstrainSelectedInstOperands,
824 /* 2151 */ // GIR_Coverage, 237,
825 /* 2151 */ GIR_Done,
826 /* 2152 */ // Label 96: @2152
827 /* 2152 */ GIM_Reject,
828 /* 2153 */ // Label 17: @2153
829 /* 2153 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 99*/ GIMT_Encode4(2218),
830 /* 2164 */ /*GILLT_s32*//*Label 97*/ GIMT_Encode4(2172),
831 /* 2168 */ /*GILLT_s64*//*Label 98*/ GIMT_Encode4(2195),
832 /* 2172 */ // Label 97: @2172
833 /* 2172 */ GIM_Try, /*On fail goto*//*Label 100*/ GIMT_Encode4(2194), // Rule ID 63 //
834 /* 2177 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
835 /* 2180 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
836 /* 2183 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
837 /* 2187 */ // (shl:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SLL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
838 /* 2187 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SLL_rr_32),
839 /* 2192 */ GIR_RootConstrainSelectedInstOperands,
840 /* 2193 */ // GIR_Coverage, 63,
841 /* 2193 */ GIR_Done,
842 /* 2194 */ // Label 100: @2194
843 /* 2194 */ GIM_Reject,
844 /* 2195 */ // Label 98: @2195
845 /* 2195 */ GIM_Try, /*On fail goto*//*Label 101*/ GIMT_Encode4(2217), // Rule ID 61 //
846 /* 2200 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
847 /* 2203 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
848 /* 2206 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
849 /* 2210 */ // (shl:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SLL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
850 /* 2210 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SLL_rr),
851 /* 2215 */ GIR_RootConstrainSelectedInstOperands,
852 /* 2216 */ // GIR_Coverage, 61,
853 /* 2216 */ GIR_Done,
854 /* 2217 */ // Label 101: @2217
855 /* 2217 */ GIM_Reject,
856 /* 2218 */ // Label 99: @2218
857 /* 2218 */ GIM_Reject,
858 /* 2219 */ // Label 18: @2219
859 /* 2219 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 104*/ GIMT_Encode4(2542),
860 /* 2230 */ /*GILLT_s32*//*Label 102*/ GIMT_Encode4(2238),
861 /* 2234 */ /*GILLT_s64*//*Label 103*/ GIMT_Encode4(2261),
862 /* 2238 */ // Label 102: @2238
863 /* 2238 */ GIM_Try, /*On fail goto*//*Label 105*/ GIMT_Encode4(2260), // Rule ID 67 //
864 /* 2243 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
865 /* 2246 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
866 /* 2249 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
867 /* 2253 */ // (srl:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SRL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
868 /* 2253 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRL_rr_32),
869 /* 2258 */ GIR_RootConstrainSelectedInstOperands,
870 /* 2259 */ // GIR_Coverage, 67,
871 /* 2259 */ GIR_Done,
872 /* 2260 */ // Label 105: @2260
873 /* 2260 */ GIM_Reject,
874 /* 2261 */ // Label 103: @2261
875 /* 2261 */ GIM_Try, /*On fail goto*//*Label 106*/ GIMT_Encode4(2541),
876 /* 2266 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
877 /* 2269 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
878 /* 2272 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
879 /* 2276 */ GIM_Try, /*On fail goto*//*Label 107*/ GIMT_Encode4(2318), // Rule ID 140 //
880 /* 2281 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasBswap),
881 /* 2284 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
882 /* 2288 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
883 /* 2292 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
884 /* 2296 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
885 /* 2301 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48,
886 /* 2305 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
887 /* 2307 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (BSWAP16:{ *:[i64] } GPR:{ *:[i64] }:$src)
888 /* 2307 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BSWAP16),
889 /* 2310 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
890 /* 2312 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
891 /* 2316 */ GIR_RootConstrainSelectedInstOperands,
892 /* 2317 */ // GIR_Coverage, 140,
893 /* 2317 */ GIR_EraseRootFromParent_Done,
894 /* 2318 */ // Label 107: @2318
895 /* 2318 */ GIM_Try, /*On fail goto*//*Label 108*/ GIMT_Encode4(2360), // Rule ID 141 //
896 /* 2323 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasBswap),
897 /* 2326 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
898 /* 2330 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
899 /* 2334 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
900 /* 2338 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
901 /* 2343 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32,
902 /* 2347 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
903 /* 2349 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (BSWAP32:{ *:[i64] } GPR:{ *:[i64] }:$src)
904 /* 2349 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BSWAP32),
905 /* 2352 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
906 /* 2354 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
907 /* 2358 */ GIR_RootConstrainSelectedInstOperands,
908 /* 2359 */ // GIR_Coverage, 141,
909 /* 2359 */ GIR_EraseRootFromParent_Done,
910 /* 2360 */ // Label 108: @2360
911 /* 2360 */ GIM_Try, /*On fail goto*//*Label 109*/ GIMT_Encode4(2402), // Rule ID 143 //
912 /* 2365 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsLittleEndian),
913 /* 2368 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
914 /* 2372 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
915 /* 2376 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
916 /* 2380 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
917 /* 2385 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48,
918 /* 2389 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
919 /* 2391 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (BE16:{ *:[i64] } GPR:{ *:[i64] }:$src)
920 /* 2391 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BE16),
921 /* 2394 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
922 /* 2396 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
923 /* 2400 */ GIR_RootConstrainSelectedInstOperands,
924 /* 2401 */ // GIR_Coverage, 143,
925 /* 2401 */ GIR_EraseRootFromParent_Done,
926 /* 2402 */ // Label 109: @2402
927 /* 2402 */ GIM_Try, /*On fail goto*//*Label 110*/ GIMT_Encode4(2444), // Rule ID 144 //
928 /* 2407 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsLittleEndian),
929 /* 2410 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
930 /* 2414 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
931 /* 2418 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
932 /* 2422 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
933 /* 2427 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32,
934 /* 2431 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
935 /* 2433 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (BE32:{ *:[i64] } GPR:{ *:[i64] }:$src)
936 /* 2433 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BE32),
937 /* 2436 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
938 /* 2438 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
939 /* 2442 */ GIR_RootConstrainSelectedInstOperands,
940 /* 2443 */ // GIR_Coverage, 144,
941 /* 2443 */ GIR_EraseRootFromParent_Done,
942 /* 2444 */ // Label 110: @2444
943 /* 2444 */ GIM_Try, /*On fail goto*//*Label 111*/ GIMT_Encode4(2486), // Rule ID 146 //
944 /* 2449 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsBigEndian),
945 /* 2452 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
946 /* 2456 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
947 /* 2460 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
948 /* 2464 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
949 /* 2469 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48,
950 /* 2473 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
951 /* 2475 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (LE16:{ *:[i64] } GPR:{ *:[i64] }:$src)
952 /* 2475 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LE16),
953 /* 2478 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
954 /* 2480 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
955 /* 2484 */ GIR_RootConstrainSelectedInstOperands,
956 /* 2485 */ // GIR_Coverage, 146,
957 /* 2485 */ GIR_EraseRootFromParent_Done,
958 /* 2486 */ // Label 111: @2486
959 /* 2486 */ GIM_Try, /*On fail goto*//*Label 112*/ GIMT_Encode4(2528), // Rule ID 147 //
960 /* 2491 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsBigEndian),
961 /* 2494 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
962 /* 2498 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
963 /* 2502 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
964 /* 2506 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
965 /* 2511 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32,
966 /* 2515 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
967 /* 2517 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (LE32:{ *:[i64] } GPR:{ *:[i64] }:$src)
968 /* 2517 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LE32),
969 /* 2520 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
970 /* 2522 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
971 /* 2526 */ GIR_RootConstrainSelectedInstOperands,
972 /* 2527 */ // GIR_Coverage, 147,
973 /* 2527 */ GIR_EraseRootFromParent_Done,
974 /* 2528 */ // Label 112: @2528
975 /* 2528 */ GIM_Try, /*On fail goto*//*Label 113*/ GIMT_Encode4(2540), // Rule ID 65 //
976 /* 2533 */ // (srl:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SRL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
977 /* 2533 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRL_rr),
978 /* 2538 */ GIR_RootConstrainSelectedInstOperands,
979 /* 2539 */ // GIR_Coverage, 65,
980 /* 2539 */ GIR_Done,
981 /* 2540 */ // Label 113: @2540
982 /* 2540 */ GIM_Reject,
983 /* 2541 */ // Label 106: @2541
984 /* 2541 */ GIM_Reject,
985 /* 2542 */ // Label 104: @2542
986 /* 2542 */ GIM_Reject,
987 /* 2543 */ // Label 19: @2543
988 /* 2543 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 116*/ GIMT_Encode4(2608),
989 /* 2554 */ /*GILLT_s32*//*Label 114*/ GIMT_Encode4(2562),
990 /* 2558 */ /*GILLT_s64*//*Label 115*/ GIMT_Encode4(2585),
991 /* 2562 */ // Label 114: @2562
992 /* 2562 */ GIM_Try, /*On fail goto*//*Label 117*/ GIMT_Encode4(2584), // Rule ID 75 //
993 /* 2567 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
994 /* 2570 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
995 /* 2573 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
996 /* 2577 */ // (sra:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SRA_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
997 /* 2577 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRA_rr_32),
998 /* 2582 */ GIR_RootConstrainSelectedInstOperands,
999 /* 2583 */ // GIR_Coverage, 75,
1000 /* 2583 */ GIR_Done,
1001 /* 2584 */ // Label 117: @2584
1002 /* 2584 */ GIM_Reject,
1003 /* 2585 */ // Label 115: @2585
1004 /* 2585 */ GIM_Try, /*On fail goto*//*Label 118*/ GIMT_Encode4(2607), // Rule ID 73 //
1005 /* 2590 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
1006 /* 2593 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
1007 /* 2596 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
1008 /* 2600 */ // (sra:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SRA_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
1009 /* 2600 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRA_rr),
1010 /* 2605 */ GIR_RootConstrainSelectedInstOperands,
1011 /* 2606 */ // GIR_Coverage, 73,
1012 /* 2606 */ GIR_Done,
1013 /* 2607 */ // Label 118: @2607
1014 /* 2607 */ GIM_Reject,
1015 /* 2608 */ // Label 116: @2608
1016 /* 2608 */ GIM_Reject,
1017 /* 2609 */ // Label 20: @2609
1018 /* 2609 */ GIM_Try, /*On fail goto*//*Label 119*/ GIMT_Encode4(2624), // Rule ID 124 //
1019 /* 2614 */ // MIs[0] BrDst
1020 /* 2614 */ GIM_CheckIsMBB, /*MI*/0, /*Op*/0,
1021 /* 2617 */ // (br (bb:{ *:[Other] }):$BrDst) => (JMP (bb:{ *:[Other] }):$BrDst)
1022 /* 2617 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::JMP),
1023 /* 2622 */ GIR_RootConstrainSelectedInstOperands,
1024 /* 2623 */ // GIR_Coverage, 124,
1025 /* 2623 */ GIR_Done,
1026 /* 2624 */ // Label 119: @2624
1027 /* 2624 */ GIM_Reject,
1028 /* 2625 */ // Label 21: @2625
1029 /* 2625 */ GIM_Try, /*On fail goto*//*Label 120*/ GIMT_Encode4(2690),
1030 /* 2630 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
1031 /* 2633 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
1032 /* 2636 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
1033 /* 2640 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
1034 /* 2644 */ GIM_Try, /*On fail goto*//*Label 121*/ GIMT_Encode4(2659), // Rule ID 142 //
1035 /* 2649 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasBswap),
1036 /* 2652 */ // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (BSWAP64:{ *:[i64] } GPR:{ *:[i64] }:$src)
1037 /* 2652 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BSWAP64),
1038 /* 2657 */ GIR_RootConstrainSelectedInstOperands,
1039 /* 2658 */ // GIR_Coverage, 142,
1040 /* 2658 */ GIR_Done,
1041 /* 2659 */ // Label 121: @2659
1042 /* 2659 */ GIM_Try, /*On fail goto*//*Label 122*/ GIMT_Encode4(2674), // Rule ID 145 //
1043 /* 2664 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsLittleEndian),
1044 /* 2667 */ // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (BE64:{ *:[i64] } GPR:{ *:[i64] }:$src)
1045 /* 2667 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BE64),
1046 /* 2672 */ GIR_RootConstrainSelectedInstOperands,
1047 /* 2673 */ // GIR_Coverage, 145,
1048 /* 2673 */ GIR_Done,
1049 /* 2674 */ // Label 122: @2674
1050 /* 2674 */ GIM_Try, /*On fail goto*//*Label 123*/ GIMT_Encode4(2689), // Rule ID 148 //
1051 /* 2679 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsBigEndian),
1052 /* 2682 */ // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (LE64:{ *:[i64] } GPR:{ *:[i64] }:$src)
1053 /* 2682 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::LE64),
1054 /* 2687 */ GIR_RootConstrainSelectedInstOperands,
1055 /* 2688 */ // GIR_Coverage, 148,
1056 /* 2688 */ GIR_Done,
1057 /* 2689 */ // Label 123: @2689
1058 /* 2689 */ GIM_Reject,
1059 /* 2690 */ // Label 120: @2690
1060 /* 2690 */ GIM_Reject,
1061 /* 2691 */ // Label 22: @2691
1062 /* 2691 */ GIM_Reject,
1063 /* 2692 */ }; // Size: 2692 bytes
1064 return MatchTable0;
1065}
1066#undef GIMT_Encode2
1067#undef GIMT_Encode4
1068#undef GIMT_Encode8
1069
1070
1071#endif // GET_GLOBALISEL_IMPL
1072
1073#ifdef GET_GLOBALISEL_PREDICATES_DECL
1074
1075PredicateBitset AvailableModuleFeatures;
1076mutable PredicateBitset AvailableFunctionFeatures;
1077PredicateBitset getAvailableFeatures() const {
1078 return AvailableModuleFeatures | AvailableFunctionFeatures;
1079}
1080PredicateBitset
1081computeAvailableModuleFeatures(const BPFSubtarget *Subtarget) const;
1082PredicateBitset
1083computeAvailableFunctionFeatures(const BPFSubtarget *Subtarget,
1084 const MachineFunction *MF) const;
1085void setupGeneratedPerFunctionState(MachineFunction &MF) override;
1086
1087#endif // GET_GLOBALISEL_PREDICATES_DECL
1088
1089#ifdef GET_GLOBALISEL_PREDICATES_INIT
1090
1091AvailableModuleFeatures(computeAvailableModuleFeatures(&STI)),
1092AvailableFunctionFeatures()
1093
1094#endif // GET_GLOBALISEL_PREDICATES_INIT
1095
1096