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
10const unsigned MAX_SUBTARGET_PREDICATES = 11;
11using PredicateBitset = llvm::Bitset<MAX_SUBTARGET_PREDICATES>;
12#endif // ifdef GET_GLOBALISEL_PREDICATE_BITSET
13
14#ifdef GET_GLOBALISEL_TEMPORARIES_DECL
15 mutable MatcherState State;
16 typedef ComplexRendererFns(BPFInstructionSelector::*ComplexMatcherMemFn)(MachineOperand &) const;
17 typedef void(BPFInstructionSelector::*CustomRendererFn)(MachineInstrBuilder &, const MachineInstr &, int) const;
18 const ExecInfoTy<PredicateBitset, ComplexMatcherMemFn, CustomRendererFn> ExecInfo;
19 static BPFInstructionSelector::ComplexMatcherMemFn ComplexPredicateFns[];
20 static BPFInstructionSelector::CustomRendererFn CustomRenderers[];
21 bool testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const override;
22 bool testImmPredicate_APInt(unsigned PredicateID, const APInt &Imm) const override;
23 bool testImmPredicate_APFloat(unsigned PredicateID, const APFloat &Imm) const override;
24 const uint8_t *getMatchTable() const override;
25 bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI, const MatcherState &State) const override;
26 bool testMOPredicate_MO(unsigned PredicateID, const MachineOperand &MO, const MatcherState &State) const override;
27 bool testSimplePredicate(unsigned PredicateID) const override;
28 bool runCustomAction(unsigned FnID, const MatcherState &State, NewMIVector &OutMIs) const override;
29#endif // ifdef GET_GLOBALISEL_TEMPORARIES_DECL
30
31#ifdef GET_GLOBALISEL_TEMPORARIES_INIT
32, State(0),
33ExecInfo(TypeObjects, NumTypeObjects, FeatureBitsets, ComplexPredicateFns, CustomRenderers)
34#endif // ifdef GET_GLOBALISEL_TEMPORARIES_INIT
35
36#ifdef GET_GLOBALISEL_IMPL
37// LLT Objects.
38enum {
39 GILLT_s32,
40 GILLT_s64,
41};
42const static size_t NumTypeObjects = 2;
43const static LLT TypeObjects[] = {
44 LLT::scalar(32),
45 LLT::scalar(64),
46};
47
48// Bits for subtarget features that participate in instruction matching.
49enum SubtargetFeatureBits : uint8_t {
50 Feature_BPFIsLittleEndianBit = 7,
51 Feature_BPFIsBigEndianBit = 8,
52 Feature_BPFHasALU32Bit = 5,
53 Feature_BPFNoALU32Bit = 2,
54 Feature_BPFHasLdsxBit = 4,
55 Feature_BPFHasMovsxBit = 1,
56 Feature_BPFHasBswapBit = 6,
57 Feature_BPFHasSdivSmodBit = 0,
58 Feature_BPFNoMovsxBit = 10,
59 Feature_BPFHasStoreImmBit = 3,
60 Feature_BPFHasLoadAcqStoreRelBit = 9,
61};
62
63PredicateBitset BPFInstructionSelector::
64computeAvailableModuleFeatures(const BPFSubtarget *Subtarget) const {
65 PredicateBitset Features{};
66 if (Subtarget->isLittleEndian())
67 Features.set(Feature_BPFIsLittleEndianBit);
68 if (!Subtarget->isLittleEndian())
69 Features.set(Feature_BPFIsBigEndianBit);
70 if (Subtarget->getHasAlu32())
71 Features.set(Feature_BPFHasALU32Bit);
72 if (!Subtarget->getHasAlu32())
73 Features.set(Feature_BPFNoALU32Bit);
74 if (Subtarget->hasLdsx())
75 Features.set(Feature_BPFHasLdsxBit);
76 if (Subtarget->hasMovsx())
77 Features.set(Feature_BPFHasMovsxBit);
78 if (Subtarget->hasBswap())
79 Features.set(Feature_BPFHasBswapBit);
80 if (Subtarget->hasSdivSmod())
81 Features.set(Feature_BPFHasSdivSmodBit);
82 if (!Subtarget->hasMovsx())
83 Features.set(Feature_BPFNoMovsxBit);
84 if (Subtarget->hasStoreImm())
85 Features.set(Feature_BPFHasStoreImmBit);
86 if (Subtarget->hasLoadAcqStoreRel())
87 Features.set(Feature_BPFHasLoadAcqStoreRelBit);
88 return Features;
89}
90
91void BPFInstructionSelector::setupGeneratedPerFunctionState(MachineFunction &MF) {
92 AvailableFunctionFeatures = computeAvailableFunctionFeatures((const BPFSubtarget *)&MF.getSubtarget(), &MF);
93}
94PredicateBitset BPFInstructionSelector::
95computeAvailableFunctionFeatures(const BPFSubtarget *Subtarget, const MachineFunction *MF) const {
96 PredicateBitset Features{};
97 return Features;
98}
99
100// Feature bitsets.
101enum {
102 GIFBS_Invalid,
103 GIFBS_BPFHasBswap,
104 GIFBS_BPFHasMovsx,
105 GIFBS_BPFHasSdivSmod,
106 GIFBS_BPFIsBigEndian,
107 GIFBS_BPFIsLittleEndian,
108 GIFBS_BPFNoMovsx,
109};
110constexpr static PredicateBitset FeatureBitsets[] {
111 {}, // GIFBS_Invalid
112 {Feature_BPFHasBswapBit, },
113 {Feature_BPFHasMovsxBit, },
114 {Feature_BPFHasSdivSmodBit, },
115 {Feature_BPFIsBigEndianBit, },
116 {Feature_BPFIsLittleEndianBit, },
117 {Feature_BPFNoMovsxBit, },
118};
119
120// ComplexPattern predicates.
121enum {
122 GICP_Invalid,
123};
124// See constructor for table contents
125
126BPFInstructionSelector::ComplexMatcherMemFn
127BPFInstructionSelector::ComplexPredicateFns[] = {
128 nullptr, // GICP_Invalid
129};
130
131// PatFrag predicates.
132bool BPFInstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI, const MatcherState &State) const {
133 const MachineFunction &MF = *MI.getParent()->getParent();
134 const MachineRegisterInfo &MRI = MF.getRegInfo();
135 const auto &Operands = State.RecordedOperands;
136 (void)Operands;
137 (void)MRI;
138 llvm_unreachable("Unknown predicate");
139 return false;
140}
141// PatFrag predicates.
142bool BPFInstructionSelector::testMOPredicate_MO(unsigned PredicateID, const MachineOperand & MO, const MatcherState &State) const {
143 const auto &Operands = State.RecordedOperands;
144 Register Reg = MO.getReg();
145 (void)Operands;
146 (void)Reg;
147 llvm_unreachable("Unknown predicate");
148 return false;
149}
150// PatFrag predicates.
151bool BPFInstructionSelector::testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const {
152 llvm_unreachable("Unknown predicate");
153 return false;
154}
155// PatFrag predicates.
156bool BPFInstructionSelector::testImmPredicate_APFloat(unsigned PredicateID, const APFloat & Imm) const {
157 llvm_unreachable("Unknown predicate");
158 return false;
159}
160// PatFrag predicates.
161bool BPFInstructionSelector::testImmPredicate_APInt(unsigned PredicateID, const APInt & Imm) const {
162 llvm_unreachable("Unknown predicate");
163 return false;
164}
165bool BPFInstructionSelector::testSimplePredicate(unsigned) const {
166 llvm_unreachable("BPFInstructionSelector does not support simple predicates!");
167 return false;
168}
169// Custom renderers.
170enum {
171 GICR_Invalid,
172};
173BPFInstructionSelector::CustomRendererFn
174BPFInstructionSelector::CustomRenderers[] = {
175 nullptr, // GICR_Invalid
176};
177
178bool BPFInstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const {
179 const PredicateBitset AvailableFeatures = getAvailableFeatures();
180 MachineIRBuilder B(I);
181 State.MIs.clear();
182 State.MIs.push_back(&I);
183
184 if (executeMatchTable(*this, State, ExecInfo, B, getMatchTable(), TII, MF->getRegInfo(), TRI, RBI, AvailableFeatures, &CoverageInfo)) {
185 return true;
186 }
187
188 return false;
189}
190
191bool BPFInstructionSelector::runCustomAction(unsigned, const MatcherState&, NewMIVector &) const {
192 llvm_unreachable("BPFInstructionSelector does not support custom C++ actions!");
193}
194#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
195#define GIMT_Encode2(Val) uint8_t(Val), uint8_t((uint16_t)Val >> 8)
196#define GIMT_Encode4(Val) uint8_t(Val), uint8_t((uint32_t)Val >> 8), uint8_t((uint32_t)Val >> 16), uint8_t((uint32_t)Val >> 24)
197#define GIMT_Encode8(Val) uint8_t(Val), uint8_t((uint64_t)Val >> 8), uint8_t((uint64_t)Val >> 16), uint8_t((uint64_t)Val >> 24), uint8_t((uint64_t)Val >> 32), uint8_t((uint64_t)Val >> 40), uint8_t((uint64_t)Val >> 48), uint8_t((uint64_t)Val >> 56)
198#else
199#define GIMT_Encode2(Val) uint8_t((uint16_t)Val >> 8), uint8_t(Val)
200#define GIMT_Encode4(Val) uint8_t((uint32_t)Val >> 24), uint8_t((uint32_t)Val >> 16), uint8_t((uint32_t)Val >> 8), uint8_t(Val)
201#define GIMT_Encode8(Val) uint8_t((uint64_t)Val >> 56), uint8_t((uint64_t)Val >> 48), uint8_t((uint64_t)Val >> 40), uint8_t((uint64_t)Val >> 32), uint8_t((uint64_t)Val >> 24), uint8_t((uint64_t)Val >> 16), uint8_t((uint64_t)Val >> 8), uint8_t(Val)
202#endif
203const uint8_t *BPFInstructionSelector::getMatchTable() const {
204 constexpr static uint8_t MatchTable0[] = {
205 /* 0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(53), GIMT_Encode2(250), /*)*//*default:*//*Label 22*/ GIMT_Encode4(2647),
206 /* 10 */ /*TargetOpcode::G_ADD*//*Label 0*/ GIMT_Encode4(798),
207 /* 14 */ /*TargetOpcode::G_SUB*//*Label 1*/ GIMT_Encode4(864),
208 /* 18 */ /*TargetOpcode::G_MUL*//*Label 2*/ GIMT_Encode4(978),
209 /* 22 */ /*TargetOpcode::G_SDIV*//*Label 3*/ GIMT_Encode4(1044),
210 /* 26 */ /*TargetOpcode::G_UDIV*//*Label 4*/ GIMT_Encode4(1116),
211 /* 30 */ /*TargetOpcode::G_SREM*//*Label 5*/ GIMT_Encode4(1182),
212 /* 34 */ /*TargetOpcode::G_UREM*//*Label 6*/ GIMT_Encode4(1254), GIMT_Encode4(0), GIMT_Encode4(0),
213 /* 46 */ /*TargetOpcode::G_AND*//*Label 7*/ GIMT_Encode4(1320),
214 /* 50 */ /*TargetOpcode::G_OR*//*Label 8*/ GIMT_Encode4(1446),
215 /* 54 */ /*TargetOpcode::G_XOR*//*Label 9*/ GIMT_Encode4(1512), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
216 /* 318 */ /*TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS*//*Label 10*/ GIMT_Encode4(1578), GIMT_Encode4(0), GIMT_Encode4(0),
217 /* 330 */ /*TargetOpcode::G_ANYEXT*//*Label 11*/ GIMT_Encode4(1642),
218 /* 334 */ /*TargetOpcode::G_TRUNC*//*Label 12*/ GIMT_Encode4(1705),
219 /* 338 */ /*TargetOpcode::G_CONSTANT*//*Label 13*/ GIMT_Encode4(1747), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
220 /* 354 */ /*TargetOpcode::G_SEXT*//*Label 14*/ GIMT_Encode4(1770),
221 /* 358 */ /*TargetOpcode::G_SEXT_INREG*//*Label 15*/ GIMT_Encode4(1886),
222 /* 362 */ /*TargetOpcode::G_ZEXT*//*Label 16*/ GIMT_Encode4(2082),
223 /* 366 */ /*TargetOpcode::G_SHL*//*Label 17*/ GIMT_Encode4(2109),
224 /* 370 */ /*TargetOpcode::G_LSHR*//*Label 18*/ GIMT_Encode4(2175),
225 /* 374 */ /*TargetOpcode::G_ASHR*//*Label 19*/ GIMT_Encode4(2499), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
226 /* 730 */ /*TargetOpcode::G_BR*//*Label 20*/ GIMT_Encode4(2565), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
227 /* 794 */ /*TargetOpcode::G_BSWAP*//*Label 21*/ GIMT_Encode4(2581),
228 /* 798 */ // Label 0: @798
229 /* 798 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 25*/ GIMT_Encode4(863),
230 /* 809 */ /*GILLT_s32*//*Label 23*/ GIMT_Encode4(817),
231 /* 813 */ /*GILLT_s64*//*Label 24*/ GIMT_Encode4(840),
232 /* 817 */ // Label 23: @817
233 /* 817 */ GIM_Try, /*On fail goto*//*Label 26*/ GIMT_Encode4(839), // Rule ID 46 //
234 /* 822 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
235 /* 825 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
236 /* 828 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
237 /* 832 */ // (add:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (ADD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
238 /* 832 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::ADD_rr_32),
239 /* 837 */ GIR_RootConstrainSelectedInstOperands,
240 /* 838 */ // GIR_Coverage, 46,
241 /* 838 */ GIR_Done,
242 /* 839 */ // Label 26: @839
243 /* 839 */ GIM_Reject,
244 /* 840 */ // Label 24: @840
245 /* 840 */ GIM_Try, /*On fail goto*//*Label 27*/ GIMT_Encode4(862), // Rule ID 44 //
246 /* 845 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
247 /* 848 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
248 /* 851 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
249 /* 855 */ // (add:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (ADD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
250 /* 855 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::ADD_rr),
251 /* 860 */ GIR_RootConstrainSelectedInstOperands,
252 /* 861 */ // GIR_Coverage, 44,
253 /* 861 */ GIR_Done,
254 /* 862 */ // Label 27: @862
255 /* 862 */ GIM_Reject,
256 /* 863 */ // Label 25: @863
257 /* 863 */ GIM_Reject,
258 /* 864 */ // Label 1: @864
259 /* 864 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 30*/ GIMT_Encode4(977),
260 /* 875 */ /*GILLT_s32*//*Label 28*/ GIMT_Encode4(883),
261 /* 879 */ /*GILLT_s64*//*Label 29*/ GIMT_Encode4(930),
262 /* 883 */ // Label 28: @883
263 /* 883 */ GIM_Try, /*On fail goto*//*Label 31*/ GIMT_Encode4(929),
264 /* 888 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
265 /* 891 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
266 /* 894 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
267 /* 898 */ GIM_Try, /*On fail goto*//*Label 32*/ GIMT_Encode4(916), // Rule ID 97 //
268 /* 903 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/1, 0,
269 /* 907 */ // (sub:{ *:[i32] } 0:{ *:[i32] }, i32:{ *:[i32] }:$src) => (NEG_32:{ *:[i32] } i32:{ *:[i32] }:$src)
270 /* 907 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::NEG_32),
271 /* 910 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
272 /* 912 */ GIR_RootToRootCopy, /*OpIdx*/2, // src
273 /* 914 */ GIR_RootConstrainSelectedInstOperands,
274 /* 915 */ // GIR_Coverage, 97,
275 /* 915 */ GIR_EraseRootFromParent_Done,
276 /* 916 */ // Label 32: @916
277 /* 916 */ GIM_Try, /*On fail goto*//*Label 33*/ GIMT_Encode4(928), // Rule ID 50 //
278 /* 921 */ // (sub:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SUB_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
279 /* 921 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SUB_rr_32),
280 /* 926 */ GIR_RootConstrainSelectedInstOperands,
281 /* 927 */ // GIR_Coverage, 50,
282 /* 927 */ GIR_Done,
283 /* 928 */ // Label 33: @928
284 /* 928 */ GIM_Reject,
285 /* 929 */ // Label 31: @929
286 /* 929 */ GIM_Reject,
287 /* 930 */ // Label 29: @930
288 /* 930 */ GIM_Try, /*On fail goto*//*Label 34*/ GIMT_Encode4(976),
289 /* 935 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
290 /* 938 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
291 /* 941 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
292 /* 945 */ GIM_Try, /*On fail goto*//*Label 35*/ GIMT_Encode4(963), // Rule ID 96 //
293 /* 950 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/1, 0,
294 /* 954 */ // (sub:{ *:[i64] } 0:{ *:[i64] }, i64:{ *:[i64] }:$src) => (NEG_64:{ *:[i64] } i64:{ *:[i64] }:$src)
295 /* 954 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::NEG_64),
296 /* 957 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
297 /* 959 */ GIR_RootToRootCopy, /*OpIdx*/2, // src
298 /* 961 */ GIR_RootConstrainSelectedInstOperands,
299 /* 962 */ // GIR_Coverage, 96,
300 /* 962 */ GIR_EraseRootFromParent_Done,
301 /* 963 */ // Label 35: @963
302 /* 963 */ GIM_Try, /*On fail goto*//*Label 36*/ GIMT_Encode4(975), // Rule ID 48 //
303 /* 968 */ // (sub:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SUB_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
304 /* 968 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SUB_rr),
305 /* 973 */ GIR_RootConstrainSelectedInstOperands,
306 /* 974 */ // GIR_Coverage, 48,
307 /* 974 */ GIR_Done,
308 /* 975 */ // Label 36: @975
309 /* 975 */ GIM_Reject,
310 /* 976 */ // Label 34: @976
311 /* 976 */ GIM_Reject,
312 /* 977 */ // Label 30: @977
313 /* 977 */ GIM_Reject,
314 /* 978 */ // Label 2: @978
315 /* 978 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 39*/ GIMT_Encode4(1043),
316 /* 989 */ /*GILLT_s32*//*Label 37*/ GIMT_Encode4(997),
317 /* 993 */ /*GILLT_s64*//*Label 38*/ GIMT_Encode4(1020),
318 /* 997 */ // Label 37: @997
319 /* 997 */ GIM_Try, /*On fail goto*//*Label 40*/ GIMT_Encode4(1019), // Rule ID 78 //
320 /* 1002 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
321 /* 1005 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
322 /* 1008 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
323 /* 1012 */ // (mul:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (MUL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
324 /* 1012 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MUL_rr_32),
325 /* 1017 */ GIR_RootConstrainSelectedInstOperands,
326 /* 1018 */ // GIR_Coverage, 78,
327 /* 1018 */ GIR_Done,
328 /* 1019 */ // Label 40: @1019
329 /* 1019 */ GIM_Reject,
330 /* 1020 */ // Label 38: @1020
331 /* 1020 */ GIM_Try, /*On fail goto*//*Label 41*/ GIMT_Encode4(1042), // Rule ID 76 //
332 /* 1025 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
333 /* 1028 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
334 /* 1031 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
335 /* 1035 */ // (mul:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (MUL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
336 /* 1035 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MUL_rr),
337 /* 1040 */ GIR_RootConstrainSelectedInstOperands,
338 /* 1041 */ // GIR_Coverage, 76,
339 /* 1041 */ GIR_Done,
340 /* 1042 */ // Label 41: @1042
341 /* 1042 */ GIM_Reject,
342 /* 1043 */ // Label 39: @1043
343 /* 1043 */ GIM_Reject,
344 /* 1044 */ // Label 3: @1044
345 /* 1044 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 44*/ GIMT_Encode4(1115),
346 /* 1055 */ /*GILLT_s32*//*Label 42*/ GIMT_Encode4(1063),
347 /* 1059 */ /*GILLT_s64*//*Label 43*/ GIMT_Encode4(1089),
348 /* 1063 */ // Label 42: @1063
349 /* 1063 */ GIM_Try, /*On fail goto*//*Label 45*/ GIMT_Encode4(1088), // Rule ID 90 //
350 /* 1068 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod),
351 /* 1071 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
352 /* 1074 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
353 /* 1077 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
354 /* 1081 */ // (sdiv:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SDIV_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
355 /* 1081 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SDIV_rr_32),
356 /* 1086 */ GIR_RootConstrainSelectedInstOperands,
357 /* 1087 */ // GIR_Coverage, 90,
358 /* 1087 */ GIR_Done,
359 /* 1088 */ // Label 45: @1088
360 /* 1088 */ GIM_Reject,
361 /* 1089 */ // Label 43: @1089
362 /* 1089 */ GIM_Try, /*On fail goto*//*Label 46*/ GIMT_Encode4(1114), // Rule ID 88 //
363 /* 1094 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod),
364 /* 1097 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
365 /* 1100 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
366 /* 1103 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
367 /* 1107 */ // (sdiv:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SDIV_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
368 /* 1107 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SDIV_rr),
369 /* 1112 */ GIR_RootConstrainSelectedInstOperands,
370 /* 1113 */ // GIR_Coverage, 88,
371 /* 1113 */ GIR_Done,
372 /* 1114 */ // Label 46: @1114
373 /* 1114 */ GIM_Reject,
374 /* 1115 */ // Label 44: @1115
375 /* 1115 */ GIM_Reject,
376 /* 1116 */ // Label 4: @1116
377 /* 1116 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 49*/ GIMT_Encode4(1181),
378 /* 1127 */ /*GILLT_s32*//*Label 47*/ GIMT_Encode4(1135),
379 /* 1131 */ /*GILLT_s64*//*Label 48*/ GIMT_Encode4(1158),
380 /* 1135 */ // Label 47: @1135
381 /* 1135 */ GIM_Try, /*On fail goto*//*Label 50*/ GIMT_Encode4(1157), // Rule ID 82 //
382 /* 1140 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
383 /* 1143 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
384 /* 1146 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
385 /* 1150 */ // (udiv:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (DIV_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
386 /* 1150 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::DIV_rr_32),
387 /* 1155 */ GIR_RootConstrainSelectedInstOperands,
388 /* 1156 */ // GIR_Coverage, 82,
389 /* 1156 */ GIR_Done,
390 /* 1157 */ // Label 50: @1157
391 /* 1157 */ GIM_Reject,
392 /* 1158 */ // Label 48: @1158
393 /* 1158 */ GIM_Try, /*On fail goto*//*Label 51*/ GIMT_Encode4(1180), // Rule ID 80 //
394 /* 1163 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
395 /* 1166 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
396 /* 1169 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
397 /* 1173 */ // (udiv:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (DIV_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
398 /* 1173 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::DIV_rr),
399 /* 1178 */ GIR_RootConstrainSelectedInstOperands,
400 /* 1179 */ // GIR_Coverage, 80,
401 /* 1179 */ GIR_Done,
402 /* 1180 */ // Label 51: @1180
403 /* 1180 */ GIM_Reject,
404 /* 1181 */ // Label 49: @1181
405 /* 1181 */ GIM_Reject,
406 /* 1182 */ // Label 5: @1182
407 /* 1182 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 54*/ GIMT_Encode4(1253),
408 /* 1193 */ /*GILLT_s32*//*Label 52*/ GIMT_Encode4(1201),
409 /* 1197 */ /*GILLT_s64*//*Label 53*/ GIMT_Encode4(1227),
410 /* 1201 */ // Label 52: @1201
411 /* 1201 */ GIM_Try, /*On fail goto*//*Label 55*/ GIMT_Encode4(1226), // Rule ID 94 //
412 /* 1206 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod),
413 /* 1209 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
414 /* 1212 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
415 /* 1215 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
416 /* 1219 */ // (srem:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SMOD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
417 /* 1219 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SMOD_rr_32),
418 /* 1224 */ GIR_RootConstrainSelectedInstOperands,
419 /* 1225 */ // GIR_Coverage, 94,
420 /* 1225 */ GIR_Done,
421 /* 1226 */ // Label 55: @1226
422 /* 1226 */ GIM_Reject,
423 /* 1227 */ // Label 53: @1227
424 /* 1227 */ GIM_Try, /*On fail goto*//*Label 56*/ GIMT_Encode4(1252), // Rule ID 92 //
425 /* 1232 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod),
426 /* 1235 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
427 /* 1238 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
428 /* 1241 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
429 /* 1245 */ // (srem:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SMOD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
430 /* 1245 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SMOD_rr),
431 /* 1250 */ GIR_RootConstrainSelectedInstOperands,
432 /* 1251 */ // GIR_Coverage, 92,
433 /* 1251 */ GIR_Done,
434 /* 1252 */ // Label 56: @1252
435 /* 1252 */ GIM_Reject,
436 /* 1253 */ // Label 54: @1253
437 /* 1253 */ GIM_Reject,
438 /* 1254 */ // Label 6: @1254
439 /* 1254 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 59*/ GIMT_Encode4(1319),
440 /* 1265 */ /*GILLT_s32*//*Label 57*/ GIMT_Encode4(1273),
441 /* 1269 */ /*GILLT_s64*//*Label 58*/ GIMT_Encode4(1296),
442 /* 1273 */ // Label 57: @1273
443 /* 1273 */ GIM_Try, /*On fail goto*//*Label 60*/ GIMT_Encode4(1295), // Rule ID 86 //
444 /* 1278 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
445 /* 1281 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
446 /* 1284 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
447 /* 1288 */ // (urem:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (MOD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
448 /* 1288 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOD_rr_32),
449 /* 1293 */ GIR_RootConstrainSelectedInstOperands,
450 /* 1294 */ // GIR_Coverage, 86,
451 /* 1294 */ GIR_Done,
452 /* 1295 */ // Label 60: @1295
453 /* 1295 */ GIM_Reject,
454 /* 1296 */ // Label 58: @1296
455 /* 1296 */ GIM_Try, /*On fail goto*//*Label 61*/ GIMT_Encode4(1318), // Rule ID 84 //
456 /* 1301 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
457 /* 1304 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
458 /* 1307 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
459 /* 1311 */ // (urem:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (MOD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
460 /* 1311 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOD_rr),
461 /* 1316 */ GIR_RootConstrainSelectedInstOperands,
462 /* 1317 */ // GIR_Coverage, 84,
463 /* 1317 */ GIR_Done,
464 /* 1318 */ // Label 61: @1318
465 /* 1318 */ GIM_Reject,
466 /* 1319 */ // Label 59: @1319
467 /* 1319 */ GIM_Reject,
468 /* 1320 */ // Label 7: @1320
469 /* 1320 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 64*/ GIMT_Encode4(1445),
470 /* 1331 */ /*GILLT_s32*//*Label 62*/ GIMT_Encode4(1339),
471 /* 1335 */ /*GILLT_s64*//*Label 63*/ GIMT_Encode4(1362),
472 /* 1339 */ // Label 62: @1339
473 /* 1339 */ GIM_Try, /*On fail goto*//*Label 65*/ GIMT_Encode4(1361), // Rule ID 58 //
474 /* 1344 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
475 /* 1347 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
476 /* 1350 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
477 /* 1354 */ // (and:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (AND_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
478 /* 1354 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::AND_rr_32),
479 /* 1359 */ GIR_RootConstrainSelectedInstOperands,
480 /* 1360 */ // GIR_Coverage, 58,
481 /* 1360 */ GIR_Done,
482 /* 1361 */ // Label 65: @1361
483 /* 1361 */ GIM_Reject,
484 /* 1362 */ // Label 63: @1362
485 /* 1362 */ GIM_Try, /*On fail goto*//*Label 66*/ GIMT_Encode4(1444),
486 /* 1367 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
487 /* 1370 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
488 /* 1373 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
489 /* 1377 */ GIM_Try, /*On fail goto*//*Label 67*/ GIMT_Encode4(1431), // Rule ID 171 //
490 /* 1382 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
491 /* 1386 */ GIM_CheckConstantInt, /*MI*/0, /*Op*/2, GIMT_Encode8(4294967295),
492 /* 1397 */ // (and:{ *:[i64] } GPR:{ *:[i64] }:$src, 4294967295:{ *:[i64] }) => (SRL_ri:{ *:[i64] } (SLL_ri:{ *:[i64] } GPR:{ *:[i64] }:$src, 32:{ *:[i64] }), 32:{ *:[i64] })
493 /* 1397 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
494 /* 1400 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::SLL_ri),
495 /* 1404 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define),
496 /* 1409 */ GIR_Copy, /*NewInsnID*/1, /*OldInsnID*/0, /*OpIdx*/1, // src
497 /* 1413 */ GIR_AddImm8, /*InsnID*/1, /*Imm*/32,
498 /* 1416 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
499 /* 1418 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::SRL_ri),
500 /* 1421 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
501 /* 1423 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
502 /* 1426 */ GIR_AddImm8, /*InsnID*/0, /*Imm*/32,
503 /* 1429 */ GIR_RootConstrainSelectedInstOperands,
504 /* 1430 */ // GIR_Coverage, 171,
505 /* 1430 */ GIR_EraseRootFromParent_Done,
506 /* 1431 */ // Label 67: @1431
507 /* 1431 */ GIM_Try, /*On fail goto*//*Label 68*/ GIMT_Encode4(1443), // Rule ID 56 //
508 /* 1436 */ // (and:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (AND_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
509 /* 1436 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::AND_rr),
510 /* 1441 */ GIR_RootConstrainSelectedInstOperands,
511 /* 1442 */ // GIR_Coverage, 56,
512 /* 1442 */ GIR_Done,
513 /* 1443 */ // Label 68: @1443
514 /* 1443 */ GIM_Reject,
515 /* 1444 */ // Label 66: @1444
516 /* 1444 */ GIM_Reject,
517 /* 1445 */ // Label 64: @1445
518 /* 1445 */ GIM_Reject,
519 /* 1446 */ // Label 8: @1446
520 /* 1446 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 71*/ GIMT_Encode4(1511),
521 /* 1457 */ /*GILLT_s32*//*Label 69*/ GIMT_Encode4(1465),
522 /* 1461 */ /*GILLT_s64*//*Label 70*/ GIMT_Encode4(1488),
523 /* 1465 */ // Label 69: @1465
524 /* 1465 */ GIM_Try, /*On fail goto*//*Label 72*/ GIMT_Encode4(1487), // Rule ID 54 //
525 /* 1470 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
526 /* 1473 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
527 /* 1476 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
528 /* 1480 */ // (or:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (OR_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
529 /* 1480 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::OR_rr_32),
530 /* 1485 */ GIR_RootConstrainSelectedInstOperands,
531 /* 1486 */ // GIR_Coverage, 54,
532 /* 1486 */ GIR_Done,
533 /* 1487 */ // Label 72: @1487
534 /* 1487 */ GIM_Reject,
535 /* 1488 */ // Label 70: @1488
536 /* 1488 */ GIM_Try, /*On fail goto*//*Label 73*/ GIMT_Encode4(1510), // Rule ID 52 //
537 /* 1493 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
538 /* 1496 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
539 /* 1499 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
540 /* 1503 */ // (or:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (OR_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
541 /* 1503 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::OR_rr),
542 /* 1508 */ GIR_RootConstrainSelectedInstOperands,
543 /* 1509 */ // GIR_Coverage, 52,
544 /* 1509 */ GIR_Done,
545 /* 1510 */ // Label 73: @1510
546 /* 1510 */ GIM_Reject,
547 /* 1511 */ // Label 71: @1511
548 /* 1511 */ GIM_Reject,
549 /* 1512 */ // Label 9: @1512
550 /* 1512 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 76*/ GIMT_Encode4(1577),
551 /* 1523 */ /*GILLT_s32*//*Label 74*/ GIMT_Encode4(1531),
552 /* 1527 */ /*GILLT_s64*//*Label 75*/ GIMT_Encode4(1554),
553 /* 1531 */ // Label 74: @1531
554 /* 1531 */ GIM_Try, /*On fail goto*//*Label 77*/ GIMT_Encode4(1553), // Rule ID 70 //
555 /* 1536 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
556 /* 1539 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
557 /* 1542 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
558 /* 1546 */ // (xor:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (XOR_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
559 /* 1546 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::XOR_rr_32),
560 /* 1551 */ GIR_RootConstrainSelectedInstOperands,
561 /* 1552 */ // GIR_Coverage, 70,
562 /* 1552 */ GIR_Done,
563 /* 1553 */ // Label 77: @1553
564 /* 1553 */ GIM_Reject,
565 /* 1554 */ // Label 75: @1554
566 /* 1554 */ GIM_Try, /*On fail goto*//*Label 78*/ GIMT_Encode4(1576), // Rule ID 68 //
567 /* 1559 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
568 /* 1562 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
569 /* 1565 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
570 /* 1569 */ // (xor:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (XOR_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
571 /* 1569 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::XOR_rr),
572 /* 1574 */ GIR_RootConstrainSelectedInstOperands,
573 /* 1575 */ // GIR_Coverage, 68,
574 /* 1575 */ GIR_Done,
575 /* 1576 */ // Label 78: @1576
576 /* 1576 */ GIM_Reject,
577 /* 1577 */ // Label 76: @1577
578 /* 1577 */ GIM_Reject,
579 /* 1578 */ // Label 10: @1578
580 /* 1578 */ GIM_Try, /*On fail goto*//*Label 79*/ GIMT_Encode4(1641), // Rule ID 107 //
581 /* 1583 */ GIM_CheckNumOperands, /*MI*/0, /*Expected*/4,
582 /* 1586 */ GIM_CheckIntrinsicID, /*MI*/0, /*Op*/1, GIMT_Encode2(Intrinsic::bpf_pseudo),
583 /* 1591 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
584 /* 1594 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
585 /* 1597 */ GIM_RootCheckType, /*Op*/3, /*Type*/GILLT_s64,
586 /* 1600 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
587 /* 1604 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
588 /* 1608 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT),
589 /* 1612 */ // MIs[1] Operand 1
590 /* 1612 */ // No operand predicates
591 /* 1612 */ GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/3, // MIs[2]
592 /* 1616 */ GIM_CheckOpcode, /*MI*/2, GIMT_Encode2(TargetOpcode::G_CONSTANT),
593 /* 1620 */ // MIs[2] Operand 1
594 /* 1620 */ // No operand predicates
595 /* 1620 */ GIM_CheckIsSafeToFold, /*NumInsns*/2,
596 /* 1622 */ // (intrinsic_w_chain:{ *:[i64] } 3962:{ *:[iPTR] }, (imm:{ *:[i64] }):$pseudo, (imm:{ *:[i64] }):$imm) => (LD_pseudo:{ *:[i64] } (imm:{ *:[i64] }):$pseudo, (imm:{ *:[i64] }):$imm)
597 /* 1622 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LD_pseudo),
598 /* 1625 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
599 /* 1627 */ GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // pseudo
600 /* 1630 */ GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
601 /* 1633 */ GIR_MergeMemOperands, /*InsnID*/0, /*NumInsns*/3, /*MergeInsnID's*/0, 1, 2,
602 /* 1639 */ GIR_RootConstrainSelectedInstOperands,
603 /* 1640 */ // GIR_Coverage, 107,
604 /* 1640 */ GIR_EraseRootFromParent_Done,
605 /* 1641 */ // Label 79: @1641
606 /* 1641 */ GIM_Reject,
607 /* 1642 */ // Label 11: @1642
608 /* 1642 */ GIM_Try, /*On fail goto*//*Label 80*/ GIMT_Encode4(1704), // Rule ID 238 //
609 /* 1647 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
610 /* 1650 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
611 /* 1653 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
612 /* 1657 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
613 /* 1661 */ // (anyext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (INSERT_SUBREG:{ *:[i64] } (IMPLICIT_DEF:{ *:[i64] }), GPR32:{ *:[i32] }:$src, sub_32:{ *:[i32] })
614 /* 1661 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
615 /* 1664 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(TargetOpcode::IMPLICIT_DEF),
616 /* 1668 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define),
617 /* 1673 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
618 /* 1675 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::INSERT_SUBREG),
619 /* 1678 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
620 /* 1680 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
621 /* 1683 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
622 /* 1685 */ GIR_AddImm8, /*InsnID*/0, /*Imm*/1,
623 /* 1688 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/0, GIMT_Encode2(BPF::GPRRegClassID),
624 /* 1693 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/1, GIMT_Encode2(BPF::GPRRegClassID),
625 /* 1698 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/2, GIMT_Encode2(BPF::GPR32RegClassID),
626 /* 1703 */ // GIR_Coverage, 238,
627 /* 1703 */ GIR_EraseRootFromParent_Done,
628 /* 1704 */ // Label 80: @1704
629 /* 1704 */ GIM_Reject,
630 /* 1705 */ // Label 12: @1705
631 /* 1705 */ GIM_Try, /*On fail goto*//*Label 81*/ GIMT_Encode4(1746), // Rule ID 237 //
632 /* 1710 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s32,
633 /* 1713 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
634 /* 1716 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
635 /* 1720 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
636 /* 1724 */ // (trunc:{ *:[i32] } GPR:{ *:[i64] }:$src) => (EXTRACT_SUBREG:{ *:[i32] } GPR:{ *:[i64] }:$src, sub_32:{ *:[i32] })
637 /* 1724 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::COPY),
638 /* 1727 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
639 /* 1729 */ GIR_CopySubReg, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, /*SubRegIdx*/GIMT_Encode2(1), // src
640 /* 1735 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/0, GIMT_Encode2(BPF::GPR32RegClassID),
641 /* 1740 */ GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/1, GIMT_Encode2(BPF::GPRRegClassID),
642 /* 1745 */ // GIR_Coverage, 237,
643 /* 1745 */ GIR_EraseRootFromParent_Done,
644 /* 1746 */ // Label 81: @1746
645 /* 1746 */ GIM_Reject,
646 /* 1747 */ // Label 13: @1747
647 /* 1747 */ GIM_Try, /*On fail goto*//*Label 82*/ GIMT_Encode4(1769), // Rule ID 98 //
648 /* 1752 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
649 /* 1755 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
650 /* 1759 */ // MIs[0] Operand 1
651 /* 1759 */ // No operand predicates
652 /* 1759 */ // (imm:{ *:[i64] }):$imm => (LD_imm64:{ *:[i64] } (imm:{ *:[i64] }):$imm)
653 /* 1759 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LD_imm64),
654 /* 1762 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
655 /* 1764 */ GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/0, // imm
656 /* 1767 */ GIR_RootConstrainSelectedInstOperands,
657 /* 1768 */ // GIR_Coverage, 98,
658 /* 1768 */ GIR_EraseRootFromParent_Done,
659 /* 1769 */ // Label 82: @1769
660 /* 1769 */ GIM_Reject,
661 /* 1770 */ // Label 14: @1770
662 /* 1770 */ GIM_Try, /*On fail goto*//*Label 83*/ GIMT_Encode4(1885),
663 /* 1775 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
664 /* 1778 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
665 /* 1781 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
666 /* 1785 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
667 /* 1789 */ GIM_Try, /*On fail goto*//*Label 84*/ GIMT_Encode4(1848), // Rule ID 234 //
668 /* 1794 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFNoMovsx),
669 /* 1797 */ // (sext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (SRA_ri:{ *:[i64] } (SLL_ri:{ *:[i64] } (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src), 32:{ *:[i64] }), 32:{ *:[i64] })
670 /* 1797 */ GIR_MakeTempReg, /*TempRegID*/1, /*TypeID*/GILLT_s64,
671 /* 1800 */ GIR_BuildMI, /*InsnID*/2, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64),
672 /* 1804 */ GIR_AddTempRegister, /*InsnID*/2, /*TempRegID*/1, /*TempRegFlags*/GIMT_Encode2(RegState::Define),
673 /* 1809 */ GIR_Copy, /*NewInsnID*/2, /*OldInsnID*/0, /*OpIdx*/1, // src
674 /* 1813 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/2,
675 /* 1815 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
676 /* 1818 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::SLL_ri),
677 /* 1822 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define),
678 /* 1827 */ GIR_AddSimpleTempRegister, /*InsnID*/1, /*TempRegID*/1,
679 /* 1830 */ GIR_AddImm8, /*InsnID*/1, /*Imm*/32,
680 /* 1833 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
681 /* 1835 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::SRA_ri),
682 /* 1838 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
683 /* 1840 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
684 /* 1843 */ GIR_AddImm8, /*InsnID*/0, /*Imm*/32,
685 /* 1846 */ GIR_RootConstrainSelectedInstOperands,
686 /* 1847 */ // GIR_Coverage, 234,
687 /* 1847 */ GIR_EraseRootFromParent_Done,
688 /* 1848 */ // Label 84: @1848
689 /* 1848 */ GIM_Try, /*On fail goto*//*Label 85*/ GIMT_Encode4(1884), // Rule ID 235 //
690 /* 1853 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
691 /* 1856 */ // (sext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (MOVSX_rr_32:{ *:[i64] } (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src))
692 /* 1856 */ GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64,
693 /* 1859 */ GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64),
694 /* 1863 */ GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define),
695 /* 1868 */ GIR_Copy, /*NewInsnID*/1, /*OldInsnID*/0, /*OpIdx*/1, // src
696 /* 1872 */ GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
697 /* 1874 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32),
698 /* 1877 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
699 /* 1879 */ GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0,
700 /* 1882 */ GIR_RootConstrainSelectedInstOperands,
701 /* 1883 */ // GIR_Coverage, 235,
702 /* 1883 */ GIR_EraseRootFromParent_Done,
703 /* 1884 */ // Label 85: @1884
704 /* 1884 */ GIM_Reject,
705 /* 1885 */ // Label 83: @1885
706 /* 1885 */ GIM_Reject,
707 /* 1886 */ // Label 15: @1886
708 /* 1886 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 88*/ GIMT_Encode4(2081),
709 /* 1897 */ /*GILLT_s32*//*Label 86*/ GIMT_Encode4(1905),
710 /* 1901 */ /*GILLT_s64*//*Label 87*/ GIMT_Encode4(1979),
711 /* 1905 */ // Label 86: @1905
712 /* 1905 */ GIM_Try, /*On fail goto*//*Label 89*/ GIMT_Encode4(1978),
713 /* 1910 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
714 /* 1913 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
715 /* 1917 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
716 /* 1921 */ GIM_Try, /*On fail goto*//*Label 90*/ GIMT_Encode4(1949), // Rule ID 104 //
717 /* 1926 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
718 /* 1929 */ // MIs[0] Operand 2
719 /* 1929 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(8),
720 /* 1940 */ // (sext_inreg:{ *:[i32] } GPR32:{ *:[i32] }:$src, i8:{ *:[Other] }) => (MOVSX_rr_32_8:{ *:[i32] } GPR32:{ *:[i32] }:$src)
721 /* 1940 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32_8),
722 /* 1943 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
723 /* 1945 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
724 /* 1947 */ GIR_RootConstrainSelectedInstOperands,
725 /* 1948 */ // GIR_Coverage, 104,
726 /* 1948 */ GIR_EraseRootFromParent_Done,
727 /* 1949 */ // Label 90: @1949
728 /* 1949 */ GIM_Try, /*On fail goto*//*Label 91*/ GIMT_Encode4(1977), // Rule ID 105 //
729 /* 1954 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
730 /* 1957 */ // MIs[0] Operand 2
731 /* 1957 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(16),
732 /* 1968 */ // (sext_inreg:{ *:[i32] } GPR32:{ *:[i32] }:$src, i16:{ *:[Other] }) => (MOVSX_rr_32_16:{ *:[i32] } GPR32:{ *:[i32] }:$src)
733 /* 1968 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32_16),
734 /* 1971 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
735 /* 1973 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
736 /* 1975 */ GIR_RootConstrainSelectedInstOperands,
737 /* 1976 */ // GIR_Coverage, 105,
738 /* 1976 */ GIR_EraseRootFromParent_Done,
739 /* 1977 */ // Label 91: @1977
740 /* 1977 */ GIM_Reject,
741 /* 1978 */ // Label 89: @1978
742 /* 1978 */ GIM_Reject,
743 /* 1979 */ // Label 87: @1979
744 /* 1979 */ GIM_Try, /*On fail goto*//*Label 92*/ GIMT_Encode4(2080),
745 /* 1984 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
746 /* 1987 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
747 /* 1991 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
748 /* 1995 */ GIM_Try, /*On fail goto*//*Label 93*/ GIMT_Encode4(2023), // Rule ID 101 //
749 /* 2000 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
750 /* 2003 */ // MIs[0] Operand 2
751 /* 2003 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(8),
752 /* 2014 */ // (sext_inreg:{ *:[i64] } GPR:{ *:[i64] }:$src, i8:{ *:[Other] }) => (MOVSX_rr_8:{ *:[i64] } GPR:{ *:[i64] }:$src)
753 /* 2014 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_8),
754 /* 2017 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
755 /* 2019 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
756 /* 2021 */ GIR_RootConstrainSelectedInstOperands,
757 /* 2022 */ // GIR_Coverage, 101,
758 /* 2022 */ GIR_EraseRootFromParent_Done,
759 /* 2023 */ // Label 93: @2023
760 /* 2023 */ GIM_Try, /*On fail goto*//*Label 94*/ GIMT_Encode4(2051), // Rule ID 102 //
761 /* 2028 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
762 /* 2031 */ // MIs[0] Operand 2
763 /* 2031 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(16),
764 /* 2042 */ // (sext_inreg:{ *:[i64] } GPR:{ *:[i64] }:$src, i16:{ *:[Other] }) => (MOVSX_rr_16:{ *:[i64] } GPR:{ *:[i64] }:$src)
765 /* 2042 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_16),
766 /* 2045 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
767 /* 2047 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
768 /* 2049 */ GIR_RootConstrainSelectedInstOperands,
769 /* 2050 */ // GIR_Coverage, 102,
770 /* 2050 */ GIR_EraseRootFromParent_Done,
771 /* 2051 */ // Label 94: @2051
772 /* 2051 */ GIM_Try, /*On fail goto*//*Label 95*/ GIMT_Encode4(2079), // Rule ID 103 //
773 /* 2056 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx),
774 /* 2059 */ // MIs[0] Operand 2
775 /* 2059 */ GIM_CheckLiteralInt, /*MI*/0, /*Op*/2, GIMT_Encode8(32),
776 /* 2070 */ // (sext_inreg:{ *:[i64] } GPR:{ *:[i64] }:$src, i32:{ *:[Other] }) => (MOVSX_rr_32:{ *:[i64] } GPR:{ *:[i64] }:$src)
777 /* 2070 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32),
778 /* 2073 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
779 /* 2075 */ GIR_RootToRootCopy, /*OpIdx*/1, // src
780 /* 2077 */ GIR_RootConstrainSelectedInstOperands,
781 /* 2078 */ // GIR_Coverage, 103,
782 /* 2078 */ GIR_EraseRootFromParent_Done,
783 /* 2079 */ // Label 95: @2079
784 /* 2079 */ GIM_Reject,
785 /* 2080 */ // Label 92: @2080
786 /* 2080 */ GIM_Reject,
787 /* 2081 */ // Label 88: @2081
788 /* 2081 */ GIM_Reject,
789 /* 2082 */ // Label 16: @2082
790 /* 2082 */ GIM_Try, /*On fail goto*//*Label 96*/ GIMT_Encode4(2108), // Rule ID 236 //
791 /* 2087 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
792 /* 2090 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
793 /* 2093 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
794 /* 2097 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
795 /* 2101 */ // (zext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src)
796 /* 2101 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64),
797 /* 2106 */ GIR_RootConstrainSelectedInstOperands,
798 /* 2107 */ // GIR_Coverage, 236,
799 /* 2107 */ GIR_Done,
800 /* 2108 */ // Label 96: @2108
801 /* 2108 */ GIM_Reject,
802 /* 2109 */ // Label 17: @2109
803 /* 2109 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 99*/ GIMT_Encode4(2174),
804 /* 2120 */ /*GILLT_s32*//*Label 97*/ GIMT_Encode4(2128),
805 /* 2124 */ /*GILLT_s64*//*Label 98*/ GIMT_Encode4(2151),
806 /* 2128 */ // Label 97: @2128
807 /* 2128 */ GIM_Try, /*On fail goto*//*Label 100*/ GIMT_Encode4(2150), // Rule ID 62 //
808 /* 2133 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
809 /* 2136 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
810 /* 2139 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
811 /* 2143 */ // (shl:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SLL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
812 /* 2143 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SLL_rr_32),
813 /* 2148 */ GIR_RootConstrainSelectedInstOperands,
814 /* 2149 */ // GIR_Coverage, 62,
815 /* 2149 */ GIR_Done,
816 /* 2150 */ // Label 100: @2150
817 /* 2150 */ GIM_Reject,
818 /* 2151 */ // Label 98: @2151
819 /* 2151 */ GIM_Try, /*On fail goto*//*Label 101*/ GIMT_Encode4(2173), // Rule ID 60 //
820 /* 2156 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
821 /* 2159 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
822 /* 2162 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
823 /* 2166 */ // (shl:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SLL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
824 /* 2166 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SLL_rr),
825 /* 2171 */ GIR_RootConstrainSelectedInstOperands,
826 /* 2172 */ // GIR_Coverage, 60,
827 /* 2172 */ GIR_Done,
828 /* 2173 */ // Label 101: @2173
829 /* 2173 */ GIM_Reject,
830 /* 2174 */ // Label 99: @2174
831 /* 2174 */ GIM_Reject,
832 /* 2175 */ // Label 18: @2175
833 /* 2175 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 104*/ GIMT_Encode4(2498),
834 /* 2186 */ /*GILLT_s32*//*Label 102*/ GIMT_Encode4(2194),
835 /* 2190 */ /*GILLT_s64*//*Label 103*/ GIMT_Encode4(2217),
836 /* 2194 */ // Label 102: @2194
837 /* 2194 */ GIM_Try, /*On fail goto*//*Label 105*/ GIMT_Encode4(2216), // Rule ID 66 //
838 /* 2199 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
839 /* 2202 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
840 /* 2205 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
841 /* 2209 */ // (srl:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SRL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
842 /* 2209 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRL_rr_32),
843 /* 2214 */ GIR_RootConstrainSelectedInstOperands,
844 /* 2215 */ // GIR_Coverage, 66,
845 /* 2215 */ GIR_Done,
846 /* 2216 */ // Label 105: @2216
847 /* 2216 */ GIM_Reject,
848 /* 2217 */ // Label 103: @2217
849 /* 2217 */ GIM_Try, /*On fail goto*//*Label 106*/ GIMT_Encode4(2497),
850 /* 2222 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
851 /* 2225 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
852 /* 2228 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
853 /* 2232 */ GIM_Try, /*On fail goto*//*Label 107*/ GIMT_Encode4(2274), // Rule ID 139 //
854 /* 2237 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasBswap),
855 /* 2240 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
856 /* 2244 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
857 /* 2248 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
858 /* 2252 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
859 /* 2257 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48,
860 /* 2261 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
861 /* 2263 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (BSWAP16:{ *:[i64] } GPR:{ *:[i64] }:$src)
862 /* 2263 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BSWAP16),
863 /* 2266 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
864 /* 2268 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
865 /* 2272 */ GIR_RootConstrainSelectedInstOperands,
866 /* 2273 */ // GIR_Coverage, 139,
867 /* 2273 */ GIR_EraseRootFromParent_Done,
868 /* 2274 */ // Label 107: @2274
869 /* 2274 */ GIM_Try, /*On fail goto*//*Label 108*/ GIMT_Encode4(2316), // Rule ID 140 //
870 /* 2279 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasBswap),
871 /* 2282 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
872 /* 2286 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
873 /* 2290 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
874 /* 2294 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
875 /* 2299 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32,
876 /* 2303 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
877 /* 2305 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (BSWAP32:{ *:[i64] } GPR:{ *:[i64] }:$src)
878 /* 2305 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BSWAP32),
879 /* 2308 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
880 /* 2310 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
881 /* 2314 */ GIR_RootConstrainSelectedInstOperands,
882 /* 2315 */ // GIR_Coverage, 140,
883 /* 2315 */ GIR_EraseRootFromParent_Done,
884 /* 2316 */ // Label 108: @2316
885 /* 2316 */ GIM_Try, /*On fail goto*//*Label 109*/ GIMT_Encode4(2358), // Rule ID 142 //
886 /* 2321 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsLittleEndian),
887 /* 2324 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
888 /* 2328 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
889 /* 2332 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
890 /* 2336 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
891 /* 2341 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48,
892 /* 2345 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
893 /* 2347 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (BE16:{ *:[i64] } GPR:{ *:[i64] }:$src)
894 /* 2347 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BE16),
895 /* 2350 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
896 /* 2352 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
897 /* 2356 */ GIR_RootConstrainSelectedInstOperands,
898 /* 2357 */ // GIR_Coverage, 142,
899 /* 2357 */ GIR_EraseRootFromParent_Done,
900 /* 2358 */ // Label 109: @2358
901 /* 2358 */ GIM_Try, /*On fail goto*//*Label 110*/ GIMT_Encode4(2400), // Rule ID 143 //
902 /* 2363 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsLittleEndian),
903 /* 2366 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
904 /* 2370 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
905 /* 2374 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
906 /* 2378 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
907 /* 2383 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32,
908 /* 2387 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
909 /* 2389 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (BE32:{ *:[i64] } GPR:{ *:[i64] }:$src)
910 /* 2389 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::BE32),
911 /* 2392 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
912 /* 2394 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
913 /* 2398 */ GIR_RootConstrainSelectedInstOperands,
914 /* 2399 */ // GIR_Coverage, 143,
915 /* 2399 */ GIR_EraseRootFromParent_Done,
916 /* 2400 */ // Label 110: @2400
917 /* 2400 */ GIM_Try, /*On fail goto*//*Label 111*/ GIMT_Encode4(2442), // Rule ID 145 //
918 /* 2405 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsBigEndian),
919 /* 2408 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
920 /* 2412 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
921 /* 2416 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
922 /* 2420 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
923 /* 2425 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48,
924 /* 2429 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
925 /* 2431 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (LE16:{ *:[i64] } GPR:{ *:[i64] }:$src)
926 /* 2431 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LE16),
927 /* 2434 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
928 /* 2436 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
929 /* 2440 */ GIR_RootConstrainSelectedInstOperands,
930 /* 2441 */ // GIR_Coverage, 145,
931 /* 2441 */ GIR_EraseRootFromParent_Done,
932 /* 2442 */ // Label 111: @2442
933 /* 2442 */ GIM_Try, /*On fail goto*//*Label 112*/ GIMT_Encode4(2484), // Rule ID 146 //
934 /* 2447 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsBigEndian),
935 /* 2450 */ GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
936 /* 2454 */ GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP),
937 /* 2458 */ GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64,
938 /* 2462 */ GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
939 /* 2467 */ GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32,
940 /* 2471 */ GIM_CheckIsSafeToFold, /*NumInsns*/1,
941 /* 2473 */ // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (LE32:{ *:[i64] } GPR:{ *:[i64] }:$src)
942 /* 2473 */ GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(BPF::LE32),
943 /* 2476 */ GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]
944 /* 2478 */ GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src
945 /* 2482 */ GIR_RootConstrainSelectedInstOperands,
946 /* 2483 */ // GIR_Coverage, 146,
947 /* 2483 */ GIR_EraseRootFromParent_Done,
948 /* 2484 */ // Label 112: @2484
949 /* 2484 */ GIM_Try, /*On fail goto*//*Label 113*/ GIMT_Encode4(2496), // Rule ID 64 //
950 /* 2489 */ // (srl:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SRL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
951 /* 2489 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRL_rr),
952 /* 2494 */ GIR_RootConstrainSelectedInstOperands,
953 /* 2495 */ // GIR_Coverage, 64,
954 /* 2495 */ GIR_Done,
955 /* 2496 */ // Label 113: @2496
956 /* 2496 */ GIM_Reject,
957 /* 2497 */ // Label 106: @2497
958 /* 2497 */ GIM_Reject,
959 /* 2498 */ // Label 104: @2498
960 /* 2498 */ GIM_Reject,
961 /* 2499 */ // Label 19: @2499
962 /* 2499 */ GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 116*/ GIMT_Encode4(2564),
963 /* 2510 */ /*GILLT_s32*//*Label 114*/ GIMT_Encode4(2518),
964 /* 2514 */ /*GILLT_s64*//*Label 115*/ GIMT_Encode4(2541),
965 /* 2518 */ // Label 114: @2518
966 /* 2518 */ GIM_Try, /*On fail goto*//*Label 117*/ GIMT_Encode4(2540), // Rule ID 74 //
967 /* 2523 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s32,
968 /* 2526 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,
969 /* 2529 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID),
970 /* 2533 */ // (sra:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SRA_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src)
971 /* 2533 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRA_rr_32),
972 /* 2538 */ GIR_RootConstrainSelectedInstOperands,
973 /* 2539 */ // GIR_Coverage, 74,
974 /* 2539 */ GIR_Done,
975 /* 2540 */ // Label 117: @2540
976 /* 2540 */ GIM_Reject,
977 /* 2541 */ // Label 115: @2541
978 /* 2541 */ GIM_Try, /*On fail goto*//*Label 118*/ GIMT_Encode4(2563), // Rule ID 72 //
979 /* 2546 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
980 /* 2549 */ GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s64,
981 /* 2552 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
982 /* 2556 */ // (sra:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SRA_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src)
983 /* 2556 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRA_rr),
984 /* 2561 */ GIR_RootConstrainSelectedInstOperands,
985 /* 2562 */ // GIR_Coverage, 72,
986 /* 2562 */ GIR_Done,
987 /* 2563 */ // Label 118: @2563
988 /* 2563 */ GIM_Reject,
989 /* 2564 */ // Label 116: @2564
990 /* 2564 */ GIM_Reject,
991 /* 2565 */ // Label 20: @2565
992 /* 2565 */ GIM_Try, /*On fail goto*//*Label 119*/ GIMT_Encode4(2580), // Rule ID 123 //
993 /* 2570 */ // MIs[0] BrDst
994 /* 2570 */ GIM_CheckIsMBB, /*MI*/0, /*Op*/0,
995 /* 2573 */ // (br (bb:{ *:[Other] }):$BrDst) => (JMP (bb:{ *:[Other] }):$BrDst)
996 /* 2573 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::JMP),
997 /* 2578 */ GIR_RootConstrainSelectedInstOperands,
998 /* 2579 */ // GIR_Coverage, 123,
999 /* 2579 */ GIR_Done,
1000 /* 2580 */ // Label 119: @2580
1001 /* 2580 */ GIM_Reject,
1002 /* 2581 */ // Label 21: @2581
1003 /* 2581 */ GIM_Try, /*On fail goto*//*Label 120*/ GIMT_Encode4(2646),
1004 /* 2586 */ GIM_RootCheckType, /*Op*/0, /*Type*/GILLT_s64,
1005 /* 2589 */ GIM_RootCheckType, /*Op*/1, /*Type*/GILLT_s64,
1006 /* 2592 */ GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
1007 /* 2596 */ GIM_RootCheckRegBankForClass, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID),
1008 /* 2600 */ GIM_Try, /*On fail goto*//*Label 121*/ GIMT_Encode4(2615), // Rule ID 141 //
1009 /* 2605 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasBswap),
1010 /* 2608 */ // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (BSWAP64:{ *:[i64] } GPR:{ *:[i64] }:$src)
1011 /* 2608 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BSWAP64),
1012 /* 2613 */ GIR_RootConstrainSelectedInstOperands,
1013 /* 2614 */ // GIR_Coverage, 141,
1014 /* 2614 */ GIR_Done,
1015 /* 2615 */ // Label 121: @2615
1016 /* 2615 */ GIM_Try, /*On fail goto*//*Label 122*/ GIMT_Encode4(2630), // Rule ID 144 //
1017 /* 2620 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsLittleEndian),
1018 /* 2623 */ // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (BE64:{ *:[i64] } GPR:{ *:[i64] }:$src)
1019 /* 2623 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BE64),
1020 /* 2628 */ GIR_RootConstrainSelectedInstOperands,
1021 /* 2629 */ // GIR_Coverage, 144,
1022 /* 2629 */ GIR_Done,
1023 /* 2630 */ // Label 122: @2630
1024 /* 2630 */ GIM_Try, /*On fail goto*//*Label 123*/ GIMT_Encode4(2645), // Rule ID 147 //
1025 /* 2635 */ GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsBigEndian),
1026 /* 2638 */ // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (LE64:{ *:[i64] } GPR:{ *:[i64] }:$src)
1027 /* 2638 */ GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::LE64),
1028 /* 2643 */ GIR_RootConstrainSelectedInstOperands,
1029 /* 2644 */ // GIR_Coverage, 147,
1030 /* 2644 */ GIR_Done,
1031 /* 2645 */ // Label 123: @2645
1032 /* 2645 */ GIM_Reject,
1033 /* 2646 */ // Label 120: @2646
1034 /* 2646 */ GIM_Reject,
1035 /* 2647 */ // Label 22: @2647
1036 /* 2647 */ GIM_Reject,
1037 /* 2648 */ }; // Size: 2648 bytes
1038 return MatchTable0;
1039}
1040#undef GIMT_Encode2
1041#undef GIMT_Encode4
1042#undef GIMT_Encode8
1043
1044#endif // ifdef GET_GLOBALISEL_IMPL
1045
1046#ifdef GET_GLOBALISEL_PREDICATES_DECL
1047PredicateBitset AvailableModuleFeatures;
1048mutable PredicateBitset AvailableFunctionFeatures;
1049PredicateBitset getAvailableFeatures() const {
1050 return AvailableModuleFeatures | AvailableFunctionFeatures;
1051}
1052PredicateBitset
1053computeAvailableModuleFeatures(const BPFSubtarget *Subtarget) const;
1054PredicateBitset
1055computeAvailableFunctionFeatures(const BPFSubtarget *Subtarget,
1056 const MachineFunction *MF) const;
1057void setupGeneratedPerFunctionState(MachineFunction &MF) override;
1058#endif // ifdef GET_GLOBALISEL_PREDICATES_DECL
1059#ifdef GET_GLOBALISEL_PREDICATES_INIT
1060AvailableModuleFeatures(computeAvailableModuleFeatures(&STI)),
1061AvailableFunctionFeatures()
1062#endif // ifdef GET_GLOBALISEL_PREDICATES_INIT
1063