/src/build/lib/Target/BPF/BPFGenGlobalISel.inc
Line | Count | Source (jump to first uncovered line) |
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 | | const unsigned MAX_SUBTARGET_PREDICATES = 10; |
11 | | using 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 testSimplePredicate(unsigned PredicateID) const override; |
27 | | void runCustomAction(unsigned FnID, const MatcherState &State, NewMIVector &OutMIs) const override; |
28 | | #endif // ifdef GET_GLOBALISEL_TEMPORARIES_DECL |
29 | | |
30 | | #ifdef GET_GLOBALISEL_TEMPORARIES_INIT |
31 | | , State(0), |
32 | | ExecInfo(TypeObjects, NumTypeObjects, FeatureBitsets, ComplexPredicateFns, CustomRenderers) |
33 | | #endif // ifdef GET_GLOBALISEL_TEMPORARIES_INIT |
34 | | |
35 | | #ifdef GET_GLOBALISEL_IMPL |
36 | | // LLT Objects. |
37 | | enum { |
38 | | GILLT_s32, |
39 | | GILLT_s64, |
40 | | }; |
41 | | const static size_t NumTypeObjects = 2; |
42 | | const static LLT TypeObjects[] = { |
43 | | LLT::scalar(32), |
44 | | LLT::scalar(64), |
45 | | }; |
46 | | |
47 | | // Bits for subtarget features that participate in instruction matching. |
48 | | enum SubtargetFeatureBits : uint8_t { |
49 | | Feature_BPFIsLittleEndianBit = 7, |
50 | | Feature_BPFIsBigEndianBit = 8, |
51 | | Feature_BPFHasALU32Bit = 5, |
52 | | Feature_BPFNoALU32Bit = 2, |
53 | | Feature_BPFHasLdsxBit = 4, |
54 | | Feature_BPFHasMovsxBit = 1, |
55 | | Feature_BPFHasBswapBit = 6, |
56 | | Feature_BPFHasSdivSmodBit = 0, |
57 | | Feature_BPFNoMovsxBit = 9, |
58 | | Feature_BPFHasStoreImmBit = 3, |
59 | | }; |
60 | | |
61 | | PredicateBitset BPFInstructionSelector:: |
62 | 2 | computeAvailableModuleFeatures(const BPFSubtarget *Subtarget) const { |
63 | 2 | PredicateBitset Features; |
64 | 2 | if (Subtarget->isLittleEndian()) |
65 | 2 | Features.set(Feature_BPFIsLittleEndianBit); |
66 | 2 | if (!Subtarget->isLittleEndian()) |
67 | 0 | Features.set(Feature_BPFIsBigEndianBit); |
68 | 2 | if (Subtarget->getHasAlu32()) |
69 | 0 | Features.set(Feature_BPFHasALU32Bit); |
70 | 2 | if (!Subtarget->getHasAlu32()) |
71 | 2 | Features.set(Feature_BPFNoALU32Bit); |
72 | 2 | if (Subtarget->hasLdsx()) |
73 | 0 | Features.set(Feature_BPFHasLdsxBit); |
74 | 2 | if (Subtarget->hasMovsx()) |
75 | 0 | Features.set(Feature_BPFHasMovsxBit); |
76 | 2 | if (Subtarget->hasBswap()) |
77 | 0 | Features.set(Feature_BPFHasBswapBit); |
78 | 2 | if (Subtarget->hasSdivSmod()) |
79 | 0 | Features.set(Feature_BPFHasSdivSmodBit); |
80 | 2 | if (!Subtarget->hasMovsx()) |
81 | 2 | Features.set(Feature_BPFNoMovsxBit); |
82 | 2 | if (Subtarget->hasStoreImm()) |
83 | 0 | Features.set(Feature_BPFHasStoreImmBit); |
84 | 2 | return Features; |
85 | 2 | } |
86 | | |
87 | 0 | void BPFInstructionSelector::setupGeneratedPerFunctionState(MachineFunction &MF) { |
88 | 0 | AvailableFunctionFeatures = computeAvailableFunctionFeatures((const BPFSubtarget *)&MF.getSubtarget(), &MF); |
89 | 0 | } |
90 | | PredicateBitset BPFInstructionSelector:: |
91 | 0 | computeAvailableFunctionFeatures(const BPFSubtarget *Subtarget, const MachineFunction *MF) const { |
92 | 0 | PredicateBitset Features; |
93 | 0 | return Features; |
94 | 0 | } |
95 | | |
96 | | // Feature bitsets. |
97 | | enum { |
98 | | GIFBS_Invalid, |
99 | | GIFBS_BPFHasBswap, |
100 | | GIFBS_BPFHasMovsx, |
101 | | GIFBS_BPFHasSdivSmod, |
102 | | GIFBS_BPFIsBigEndian, |
103 | | GIFBS_BPFIsLittleEndian, |
104 | | GIFBS_BPFNoMovsx, |
105 | | }; |
106 | | constexpr static PredicateBitset FeatureBitsets[] { |
107 | | {}, // GIFBS_Invalid |
108 | | {Feature_BPFHasBswapBit, }, |
109 | | {Feature_BPFHasMovsxBit, }, |
110 | | {Feature_BPFHasSdivSmodBit, }, |
111 | | {Feature_BPFIsBigEndianBit, }, |
112 | | {Feature_BPFIsLittleEndianBit, }, |
113 | | {Feature_BPFNoMovsxBit, }, |
114 | | }; |
115 | | |
116 | | // ComplexPattern predicates. |
117 | | enum { |
118 | | GICP_Invalid, |
119 | | }; |
120 | | // See constructor for table contents |
121 | | |
122 | | BPFInstructionSelector::ComplexMatcherMemFn |
123 | | BPFInstructionSelector::ComplexPredicateFns[] = { |
124 | | nullptr, // GICP_Invalid |
125 | | }; |
126 | | |
127 | | // PatFrag predicates. |
128 | 0 | bool BPFInstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI, const MatcherState &State) const { |
129 | 0 | const MachineFunction &MF = *MI.getParent()->getParent(); |
130 | 0 | const MachineRegisterInfo &MRI = MF.getRegInfo(); |
131 | 0 | const auto &Operands = State.RecordedOperands; |
132 | 0 | (void)Operands; |
133 | 0 | (void)MRI; |
134 | 0 | llvm_unreachable("Unknown predicate"); |
135 | 0 | return false; |
136 | 0 | } |
137 | | // PatFrag predicates. |
138 | 0 | bool BPFInstructionSelector::testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const { |
139 | 0 | llvm_unreachable("Unknown predicate"); |
140 | 0 | return false; |
141 | 0 | } |
142 | | // PatFrag predicates. |
143 | 0 | bool BPFInstructionSelector::testImmPredicate_APFloat(unsigned PredicateID, const APFloat & Imm) const { |
144 | 0 | llvm_unreachable("Unknown predicate"); |
145 | 0 | return false; |
146 | 0 | } |
147 | | // PatFrag predicates. |
148 | 0 | bool BPFInstructionSelector::testImmPredicate_APInt(unsigned PredicateID, const APInt & Imm) const { |
149 | 0 | llvm_unreachable("Unknown predicate"); |
150 | 0 | return false; |
151 | 0 | } |
152 | 0 | bool BPFInstructionSelector::testSimplePredicate(unsigned) const { |
153 | 0 | llvm_unreachable("BPFInstructionSelector does not support simple predicates!"); |
154 | 0 | return false; |
155 | 0 | } |
156 | | // Custom renderers. |
157 | | enum { |
158 | | GICR_Invalid, |
159 | | }; |
160 | | BPFInstructionSelector::CustomRendererFn |
161 | | BPFInstructionSelector::CustomRenderers[] = { |
162 | | nullptr, // GICR_Invalid |
163 | | }; |
164 | | |
165 | 0 | bool BPFInstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const { |
166 | 0 | const PredicateBitset AvailableFeatures = getAvailableFeatures(); |
167 | 0 | MachineIRBuilder B(I); |
168 | 0 | State.MIs.clear(); |
169 | 0 | State.MIs.push_back(&I); |
170 | |
|
171 | 0 | if (executeMatchTable(*this, State, ExecInfo, B, getMatchTable(), TII, MF->getRegInfo(), TRI, RBI, AvailableFeatures, &CoverageInfo)) { |
172 | 0 | return true; |
173 | 0 | } |
174 | | |
175 | 0 | return false; |
176 | 0 | } |
177 | | |
178 | 0 | void BPFInstructionSelector::runCustomAction(unsigned, const MatcherState&, NewMIVector &) const { |
179 | 0 | llvm_unreachable("BPFInstructionSelector does not support custom C++ actions!"); |
180 | 0 | } |
181 | | #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ |
182 | 0 | #define GIMT_Encode2(Val) uint8_t(Val), uint8_t((uint16_t)Val >> 8) |
183 | 0 | #define GIMT_Encode4(Val) uint8_t(Val), uint8_t((uint32_t)Val >> 8), uint8_t((uint32_t)Val >> 16), uint8_t((uint32_t)Val >> 24) |
184 | 0 | #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) |
185 | | #else |
186 | | #define GIMT_Encode2(Val) uint8_t((uint16_t)Val >> 8), uint8_t(Val) |
187 | | #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) |
188 | | #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) |
189 | | #endif |
190 | 0 | const uint8_t *BPFInstructionSelector::getMatchTable() const { |
191 | 0 | constexpr static uint8_t MatchTable0[] = { |
192 | 0 | GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(47), GIMT_Encode2(223), /*)*//*default:*//*Label 21*/ GIMT_Encode4(2599), |
193 | 0 | /*TargetOpcode::G_ADD*//*Label 0*/ GIMT_Encode4(714), |
194 | 0 | /*TargetOpcode::G_SUB*//*Label 1*/ GIMT_Encode4(788), |
195 | 0 | /*TargetOpcode::G_MUL*//*Label 2*/ GIMT_Encode4(926), |
196 | 0 | /*TargetOpcode::G_SDIV*//*Label 3*/ GIMT_Encode4(1000), |
197 | 0 | /*TargetOpcode::G_UDIV*//*Label 4*/ GIMT_Encode4(1080), |
198 | 0 | /*TargetOpcode::G_SREM*//*Label 5*/ GIMT_Encode4(1154), |
199 | 0 | /*TargetOpcode::G_UREM*//*Label 6*/ GIMT_Encode4(1234), GIMT_Encode4(0), GIMT_Encode4(0), |
200 | 0 | /*TargetOpcode::G_AND*//*Label 7*/ GIMT_Encode4(1308), |
201 | 0 | /*TargetOpcode::G_OR*//*Label 8*/ GIMT_Encode4(1449), |
202 | 0 | /*TargetOpcode::G_XOR*//*Label 9*/ GIMT_Encode4(1523), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), |
203 | 0 | /*TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS*//*Label 10*/ GIMT_Encode4(1597), GIMT_Encode4(0), GIMT_Encode4(0), |
204 | 0 | /*TargetOpcode::G_ANYEXT*//*Label 11*/ GIMT_Encode4(1673), |
205 | 0 | /*TargetOpcode::G_TRUNC*//*Label 12*/ GIMT_Encode4(1747), |
206 | 0 | /*TargetOpcode::G_CONSTANT*//*Label 13*/ GIMT_Encode4(1798), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), |
207 | 0 | /*TargetOpcode::G_SEXT*//*Label 14*/ GIMT_Encode4(1829), GIMT_Encode4(0), |
208 | 0 | /*TargetOpcode::G_ZEXT*//*Label 15*/ GIMT_Encode4(1961), |
209 | 0 | /*TargetOpcode::G_SHL*//*Label 16*/ GIMT_Encode4(1993), |
210 | 0 | /*TargetOpcode::G_LSHR*//*Label 17*/ GIMT_Encode4(2067), |
211 | 0 | /*TargetOpcode::G_ASHR*//*Label 18*/ GIMT_Encode4(2435), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), |
212 | 0 | /*TargetOpcode::G_BR*//*Label 19*/ GIMT_Encode4(2509), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), |
213 | 0 | /*TargetOpcode::G_BSWAP*//*Label 20*/ GIMT_Encode4(2526), |
214 | | // Label 0: @714 |
215 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 24*/ GIMT_Encode4(787), |
216 | 0 | /*GILLT_s32*//*Label 22*/ GIMT_Encode4(733), |
217 | 0 | /*GILLT_s64*//*Label 23*/ GIMT_Encode4(760), |
218 | | // Label 22: @733 |
219 | 0 | GIM_Try, /*On fail goto*//*Label 25*/ GIMT_Encode4(759), // Rule ID 46 // |
220 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
221 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
222 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
223 | | // (add:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (ADD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
224 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::ADD_rr_32), |
225 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
226 | | // GIR_Coverage, 46, |
227 | 0 | GIR_Done, |
228 | | // Label 25: @759 |
229 | 0 | GIM_Reject, |
230 | | // Label 23: @760 |
231 | 0 | GIM_Try, /*On fail goto*//*Label 26*/ GIMT_Encode4(786), // Rule ID 44 // |
232 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
233 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
234 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
235 | | // (add:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (ADD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
236 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::ADD_rr), |
237 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
238 | | // GIR_Coverage, 44, |
239 | 0 | GIR_Done, |
240 | | // Label 26: @786 |
241 | 0 | GIM_Reject, |
242 | | // Label 24: @787 |
243 | 0 | GIM_Reject, |
244 | | // Label 1: @788 |
245 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 29*/ GIMT_Encode4(925), |
246 | 0 | /*GILLT_s32*//*Label 27*/ GIMT_Encode4(807), |
247 | 0 | /*GILLT_s64*//*Label 28*/ GIMT_Encode4(866), |
248 | | // Label 27: @807 |
249 | 0 | GIM_Try, /*On fail goto*//*Label 30*/ GIMT_Encode4(865), |
250 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
251 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
252 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
253 | 0 | GIM_Try, /*On fail goto*//*Label 31*/ GIMT_Encode4(851), // Rule ID 97 // |
254 | 0 | GIM_CheckConstantInt8, /*MI*/0, /*Op*/1, 0, |
255 | | // (sub:{ *:[i32] } 0:{ *:[i32] }, i32:{ *:[i32] }:$src) => (NEG_32:{ *:[i32] } i32:{ *:[i32] }:$src) |
256 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::NEG_32), |
257 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
258 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src |
259 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
260 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
261 | | // GIR_Coverage, 97, |
262 | 0 | GIR_Done, |
263 | | // Label 31: @851 |
264 | 0 | GIM_Try, /*On fail goto*//*Label 32*/ GIMT_Encode4(864), // Rule ID 50 // |
265 | | // (sub:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SUB_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
266 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SUB_rr_32), |
267 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
268 | | // GIR_Coverage, 50, |
269 | 0 | GIR_Done, |
270 | | // Label 32: @864 |
271 | 0 | GIM_Reject, |
272 | | // Label 30: @865 |
273 | 0 | GIM_Reject, |
274 | | // Label 28: @866 |
275 | 0 | GIM_Try, /*On fail goto*//*Label 33*/ GIMT_Encode4(924), |
276 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
277 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
278 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
279 | 0 | GIM_Try, /*On fail goto*//*Label 34*/ GIMT_Encode4(910), // Rule ID 96 // |
280 | 0 | GIM_CheckConstantInt8, /*MI*/0, /*Op*/1, 0, |
281 | | // (sub:{ *:[i64] } 0:{ *:[i64] }, i64:{ *:[i64] }:$src) => (NEG_64:{ *:[i64] } i64:{ *:[i64] }:$src) |
282 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::NEG_64), |
283 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
284 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src |
285 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
286 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
287 | | // GIR_Coverage, 96, |
288 | 0 | GIR_Done, |
289 | | // Label 34: @910 |
290 | 0 | GIM_Try, /*On fail goto*//*Label 35*/ GIMT_Encode4(923), // Rule ID 48 // |
291 | | // (sub:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SUB_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
292 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SUB_rr), |
293 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
294 | | // GIR_Coverage, 48, |
295 | 0 | GIR_Done, |
296 | | // Label 35: @923 |
297 | 0 | GIM_Reject, |
298 | | // Label 33: @924 |
299 | 0 | GIM_Reject, |
300 | | // Label 29: @925 |
301 | 0 | GIM_Reject, |
302 | | // Label 2: @926 |
303 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 38*/ GIMT_Encode4(999), |
304 | 0 | /*GILLT_s32*//*Label 36*/ GIMT_Encode4(945), |
305 | 0 | /*GILLT_s64*//*Label 37*/ GIMT_Encode4(972), |
306 | | // Label 36: @945 |
307 | 0 | GIM_Try, /*On fail goto*//*Label 39*/ GIMT_Encode4(971), // Rule ID 78 // |
308 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
309 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
310 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
311 | | // (mul:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (MUL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
312 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MUL_rr_32), |
313 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
314 | | // GIR_Coverage, 78, |
315 | 0 | GIR_Done, |
316 | | // Label 39: @971 |
317 | 0 | GIM_Reject, |
318 | | // Label 37: @972 |
319 | 0 | GIM_Try, /*On fail goto*//*Label 40*/ GIMT_Encode4(998), // Rule ID 76 // |
320 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
321 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
322 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
323 | | // (mul:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (MUL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
324 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MUL_rr), |
325 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
326 | | // GIR_Coverage, 76, |
327 | 0 | GIR_Done, |
328 | | // Label 40: @998 |
329 | 0 | GIM_Reject, |
330 | | // Label 38: @999 |
331 | 0 | GIM_Reject, |
332 | | // Label 3: @1000 |
333 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 43*/ GIMT_Encode4(1079), |
334 | 0 | /*GILLT_s32*//*Label 41*/ GIMT_Encode4(1019), |
335 | 0 | /*GILLT_s64*//*Label 42*/ GIMT_Encode4(1049), |
336 | | // Label 41: @1019 |
337 | 0 | GIM_Try, /*On fail goto*//*Label 44*/ GIMT_Encode4(1048), // Rule ID 90 // |
338 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod), |
339 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
340 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
341 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
342 | | // (sdiv:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SDIV_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
343 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SDIV_rr_32), |
344 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
345 | | // GIR_Coverage, 90, |
346 | 0 | GIR_Done, |
347 | | // Label 44: @1048 |
348 | 0 | GIM_Reject, |
349 | | // Label 42: @1049 |
350 | 0 | GIM_Try, /*On fail goto*//*Label 45*/ GIMT_Encode4(1078), // Rule ID 88 // |
351 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod), |
352 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
353 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
354 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
355 | | // (sdiv:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SDIV_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
356 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SDIV_rr), |
357 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
358 | | // GIR_Coverage, 88, |
359 | 0 | GIR_Done, |
360 | | // Label 45: @1078 |
361 | 0 | GIM_Reject, |
362 | | // Label 43: @1079 |
363 | 0 | GIM_Reject, |
364 | | // Label 4: @1080 |
365 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 48*/ GIMT_Encode4(1153), |
366 | 0 | /*GILLT_s32*//*Label 46*/ GIMT_Encode4(1099), |
367 | 0 | /*GILLT_s64*//*Label 47*/ GIMT_Encode4(1126), |
368 | | // Label 46: @1099 |
369 | 0 | GIM_Try, /*On fail goto*//*Label 49*/ GIMT_Encode4(1125), // Rule ID 82 // |
370 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
371 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
372 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
373 | | // (udiv:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (DIV_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
374 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::DIV_rr_32), |
375 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
376 | | // GIR_Coverage, 82, |
377 | 0 | GIR_Done, |
378 | | // Label 49: @1125 |
379 | 0 | GIM_Reject, |
380 | | // Label 47: @1126 |
381 | 0 | GIM_Try, /*On fail goto*//*Label 50*/ GIMT_Encode4(1152), // Rule ID 80 // |
382 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
383 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
384 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
385 | | // (udiv:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (DIV_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
386 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::DIV_rr), |
387 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
388 | | // GIR_Coverage, 80, |
389 | 0 | GIR_Done, |
390 | | // Label 50: @1152 |
391 | 0 | GIM_Reject, |
392 | | // Label 48: @1153 |
393 | 0 | GIM_Reject, |
394 | | // Label 5: @1154 |
395 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 53*/ GIMT_Encode4(1233), |
396 | 0 | /*GILLT_s32*//*Label 51*/ GIMT_Encode4(1173), |
397 | 0 | /*GILLT_s64*//*Label 52*/ GIMT_Encode4(1203), |
398 | | // Label 51: @1173 |
399 | 0 | GIM_Try, /*On fail goto*//*Label 54*/ GIMT_Encode4(1202), // Rule ID 94 // |
400 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod), |
401 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
402 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
403 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
404 | | // (srem:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SMOD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
405 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SMOD_rr_32), |
406 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
407 | | // GIR_Coverage, 94, |
408 | 0 | GIR_Done, |
409 | | // Label 54: @1202 |
410 | 0 | GIM_Reject, |
411 | | // Label 52: @1203 |
412 | 0 | GIM_Try, /*On fail goto*//*Label 55*/ GIMT_Encode4(1232), // Rule ID 92 // |
413 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasSdivSmod), |
414 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
415 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
416 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
417 | | // (srem:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SMOD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
418 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SMOD_rr), |
419 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
420 | | // GIR_Coverage, 92, |
421 | 0 | GIR_Done, |
422 | | // Label 55: @1232 |
423 | 0 | GIM_Reject, |
424 | | // Label 53: @1233 |
425 | 0 | GIM_Reject, |
426 | | // Label 6: @1234 |
427 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 58*/ GIMT_Encode4(1307), |
428 | 0 | /*GILLT_s32*//*Label 56*/ GIMT_Encode4(1253), |
429 | 0 | /*GILLT_s64*//*Label 57*/ GIMT_Encode4(1280), |
430 | | // Label 56: @1253 |
431 | 0 | GIM_Try, /*On fail goto*//*Label 59*/ GIMT_Encode4(1279), // Rule ID 86 // |
432 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
433 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
434 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
435 | | // (urem:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (MOD_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
436 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOD_rr_32), |
437 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
438 | | // GIR_Coverage, 86, |
439 | 0 | GIR_Done, |
440 | | // Label 59: @1279 |
441 | 0 | GIM_Reject, |
442 | | // Label 57: @1280 |
443 | 0 | GIM_Try, /*On fail goto*//*Label 60*/ GIMT_Encode4(1306), // Rule ID 84 // |
444 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
445 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
446 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
447 | | // (urem:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (MOD_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
448 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOD_rr), |
449 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
450 | | // GIR_Coverage, 84, |
451 | 0 | GIR_Done, |
452 | | // Label 60: @1306 |
453 | 0 | GIM_Reject, |
454 | | // Label 58: @1307 |
455 | 0 | GIM_Reject, |
456 | | // Label 7: @1308 |
457 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 63*/ GIMT_Encode4(1448), |
458 | 0 | /*GILLT_s32*//*Label 61*/ GIMT_Encode4(1327), |
459 | 0 | /*GILLT_s64*//*Label 62*/ GIMT_Encode4(1354), |
460 | | // Label 61: @1327 |
461 | 0 | GIM_Try, /*On fail goto*//*Label 64*/ GIMT_Encode4(1353), // Rule ID 58 // |
462 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
463 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
464 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
465 | | // (and:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (AND_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
466 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::AND_rr_32), |
467 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
468 | | // GIR_Coverage, 58, |
469 | 0 | GIR_Done, |
470 | | // Label 64: @1353 |
471 | 0 | GIM_Reject, |
472 | | // Label 62: @1354 |
473 | 0 | GIM_Try, /*On fail goto*//*Label 65*/ GIMT_Encode4(1447), |
474 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
475 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
476 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
477 | 0 | GIM_Try, /*On fail goto*//*Label 66*/ GIMT_Encode4(1433), // Rule ID 174 // |
478 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
479 | 0 | GIM_CheckConstantInt, /*MI*/0, /*Op*/2, GIMT_Encode8(4294967295), |
480 | | // (and:{ *:[i64] } GPR:{ *:[i64] }:$src, 4294967295:{ *:[i64] }) => (SRL_ri:{ *:[i64] } (SLL_ri:{ *:[i64] } GPR:{ *:[i64] }:$src, 32:{ *:[i64] }), 32:{ *:[i64] }) |
481 | 0 | GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64, |
482 | 0 | GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::SLL_ri), |
483 | 0 | GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define), |
484 | 0 | GIR_Copy, /*NewInsnID*/1, /*OldInsnID*/0, /*OpIdx*/1, // src |
485 | 0 | GIR_AddImm8, /*InsnID*/1, /*Imm*/32, |
486 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/1, |
487 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRL_ri), |
488 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
489 | 0 | GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0, |
490 | 0 | GIR_AddImm8, /*InsnID*/0, /*Imm*/32, |
491 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
492 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
493 | | // GIR_Coverage, 174, |
494 | 0 | GIR_Done, |
495 | | // Label 66: @1433 |
496 | 0 | GIM_Try, /*On fail goto*//*Label 67*/ GIMT_Encode4(1446), // Rule ID 56 // |
497 | | // (and:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (AND_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
498 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::AND_rr), |
499 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
500 | | // GIR_Coverage, 56, |
501 | 0 | GIR_Done, |
502 | | // Label 67: @1446 |
503 | 0 | GIM_Reject, |
504 | | // Label 65: @1447 |
505 | 0 | GIM_Reject, |
506 | | // Label 63: @1448 |
507 | 0 | GIM_Reject, |
508 | | // Label 8: @1449 |
509 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 70*/ GIMT_Encode4(1522), |
510 | 0 | /*GILLT_s32*//*Label 68*/ GIMT_Encode4(1468), |
511 | 0 | /*GILLT_s64*//*Label 69*/ GIMT_Encode4(1495), |
512 | | // Label 68: @1468 |
513 | 0 | GIM_Try, /*On fail goto*//*Label 71*/ GIMT_Encode4(1494), // Rule ID 54 // |
514 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
515 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
516 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
517 | | // (or:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (OR_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
518 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::OR_rr_32), |
519 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
520 | | // GIR_Coverage, 54, |
521 | 0 | GIR_Done, |
522 | | // Label 71: @1494 |
523 | 0 | GIM_Reject, |
524 | | // Label 69: @1495 |
525 | 0 | GIM_Try, /*On fail goto*//*Label 72*/ GIMT_Encode4(1521), // Rule ID 52 // |
526 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
527 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
528 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
529 | | // (or:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (OR_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
530 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::OR_rr), |
531 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
532 | | // GIR_Coverage, 52, |
533 | 0 | GIR_Done, |
534 | | // Label 72: @1521 |
535 | 0 | GIM_Reject, |
536 | | // Label 70: @1522 |
537 | 0 | GIM_Reject, |
538 | | // Label 9: @1523 |
539 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 75*/ GIMT_Encode4(1596), |
540 | 0 | /*GILLT_s32*//*Label 73*/ GIMT_Encode4(1542), |
541 | 0 | /*GILLT_s64*//*Label 74*/ GIMT_Encode4(1569), |
542 | | // Label 73: @1542 |
543 | 0 | GIM_Try, /*On fail goto*//*Label 76*/ GIMT_Encode4(1568), // Rule ID 70 // |
544 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
545 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
546 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
547 | | // (xor:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (XOR_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
548 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::XOR_rr_32), |
549 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
550 | | // GIR_Coverage, 70, |
551 | 0 | GIR_Done, |
552 | | // Label 76: @1568 |
553 | 0 | GIM_Reject, |
554 | | // Label 74: @1569 |
555 | 0 | GIM_Try, /*On fail goto*//*Label 77*/ GIMT_Encode4(1595), // Rule ID 68 // |
556 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
557 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
558 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
559 | | // (xor:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (XOR_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
560 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::XOR_rr), |
561 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
562 | | // GIR_Coverage, 68, |
563 | 0 | GIR_Done, |
564 | | // Label 77: @1595 |
565 | 0 | GIM_Reject, |
566 | | // Label 75: @1596 |
567 | 0 | GIM_Reject, |
568 | | // Label 10: @1597 |
569 | 0 | GIM_Try, /*On fail goto*//*Label 78*/ GIMT_Encode4(1672), // Rule ID 107 // |
570 | 0 | GIM_CheckNumOperands, /*MI*/0, /*Expected*/4, |
571 | 0 | GIM_CheckIntrinsicID, /*MI*/0, /*Op*/1, GIMT_Encode2(Intrinsic::bpf_pseudo), |
572 | 0 | GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s64, |
573 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
574 | 0 | GIM_CheckType, /*MI*/0, /*Op*/3, /*Type*/GILLT_s64, |
575 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
576 | 0 | GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1] |
577 | 0 | GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_CONSTANT), |
578 | | // MIs[1] Operand 1 |
579 | | // No operand predicates |
580 | 0 | GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/3, // MIs[2] |
581 | 0 | GIM_CheckOpcode, /*MI*/2, GIMT_Encode2(TargetOpcode::G_CONSTANT), |
582 | | // MIs[2] Operand 1 |
583 | | // No operand predicates |
584 | 0 | GIM_CheckIsSafeToFold, /*InsnID*/1, |
585 | 0 | GIM_CheckIsSafeToFold, /*InsnID*/2, |
586 | | // (intrinsic_w_chain:{ *:[i64] } 3279:{ *:[iPTR] }, (imm:{ *:[i64] }):$pseudo, (imm:{ *:[i64] }):$imm) => (LD_pseudo:{ *:[i64] } (imm:{ *:[i64] }):$pseudo, (imm:{ *:[i64] }):$imm) |
587 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::LD_pseudo), |
588 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
589 | 0 | GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // pseudo |
590 | 0 | GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm |
591 | 0 | GIR_MergeMemOperands, /*InsnID*/0, /*NumInsns*/3, /*MergeInsnID's*/0, 1, 2, |
592 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
593 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
594 | | // GIR_Coverage, 107, |
595 | 0 | GIR_Done, |
596 | | // Label 78: @1672 |
597 | 0 | GIM_Reject, |
598 | | // Label 11: @1673 |
599 | 0 | GIM_Try, /*On fail goto*//*Label 79*/ GIMT_Encode4(1746), // Rule ID 188 // |
600 | 0 | GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s64, |
601 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
602 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
603 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
604 | | // (anyext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (INSERT_SUBREG:{ *:[i64] } (IMPLICIT_DEF:{ *:[i64] }), GPR32:{ *:[i32] }:$src, sub_32:{ *:[i32] }) |
605 | 0 | GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64, |
606 | 0 | GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(TargetOpcode::IMPLICIT_DEF), |
607 | 0 | GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define), |
608 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/1, |
609 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(TargetOpcode::INSERT_SUBREG), |
610 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
611 | 0 | GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0, |
612 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src |
613 | 0 | GIR_AddImm8, /*InsnID*/0, /*Imm*/1, |
614 | 0 | GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/0, GIMT_Encode2(BPF::GPRRegClassID), |
615 | 0 | GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/1, GIMT_Encode2(BPF::GPRRegClassID), |
616 | 0 | GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/2, GIMT_Encode2(BPF::GPR32RegClassID), |
617 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
618 | | // GIR_Coverage, 188, |
619 | 0 | GIR_Done, |
620 | | // Label 79: @1746 |
621 | 0 | GIM_Reject, |
622 | | // Label 12: @1747 |
623 | 0 | GIM_Try, /*On fail goto*//*Label 80*/ GIMT_Encode4(1797), // Rule ID 187 // |
624 | 0 | GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s32, |
625 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
626 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
627 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
628 | | // (trunc:{ *:[i32] } GPR:{ *:[i64] }:$src) => (EXTRACT_SUBREG:{ *:[i32] } GPR:{ *:[i64] }:$src, sub_32:{ *:[i32] }) |
629 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(TargetOpcode::COPY), |
630 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
631 | 0 | GIR_CopySubReg, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, /*SubRegIdx*/GIMT_Encode2(1), // src |
632 | 0 | GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/0, GIMT_Encode2(BPF::GPR32RegClassID), |
633 | 0 | GIR_ConstrainOperandRC, /*InsnID*/0, /*Op*/1, GIMT_Encode2(BPF::GPRRegClassID), |
634 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
635 | | // GIR_Coverage, 187, |
636 | 0 | GIR_Done, |
637 | | // Label 80: @1797 |
638 | 0 | GIM_Reject, |
639 | | // Label 13: @1798 |
640 | 0 | GIM_Try, /*On fail goto*//*Label 81*/ GIMT_Encode4(1828), // Rule ID 98 // |
641 | 0 | GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s64, |
642 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
643 | | // MIs[0] Operand 1 |
644 | | // No operand predicates |
645 | | // (imm:{ *:[i64] }):$imm => (LD_imm64:{ *:[i64] } (imm:{ *:[i64] }):$imm) |
646 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::LD_imm64), |
647 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
648 | 0 | GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/0, // imm |
649 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
650 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
651 | | // GIR_Coverage, 98, |
652 | 0 | GIR_Done, |
653 | | // Label 81: @1828 |
654 | 0 | GIM_Reject, |
655 | | // Label 14: @1829 |
656 | 0 | GIM_Try, /*On fail goto*//*Label 82*/ GIMT_Encode4(1960), |
657 | 0 | GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s64, |
658 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
659 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
660 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
661 | 0 | GIM_Try, /*On fail goto*//*Label 83*/ GIMT_Encode4(1917), // Rule ID 184 // |
662 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFNoMovsx), |
663 | | // (sext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (SRA_ri:{ *:[i64] } (SLL_ri:{ *:[i64] } (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src), 32:{ *:[i64] }), 32:{ *:[i64] }) |
664 | 0 | GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64, |
665 | 0 | GIR_MakeTempReg, /*TempRegID*/1, /*TypeID*/GILLT_s64, |
666 | 0 | GIR_BuildMI, /*InsnID*/2, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64), |
667 | 0 | GIR_AddTempRegister, /*InsnID*/2, /*TempRegID*/1, /*TempRegFlags*/GIMT_Encode2(RegState::Define), |
668 | 0 | GIR_Copy, /*NewInsnID*/2, /*OldInsnID*/0, /*OpIdx*/1, // src |
669 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/2, |
670 | 0 | GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::SLL_ri), |
671 | 0 | GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define), |
672 | 0 | GIR_AddSimpleTempRegister, /*InsnID*/1, /*TempRegID*/1, |
673 | 0 | GIR_AddImm8, /*InsnID*/1, /*Imm*/32, |
674 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/1, |
675 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRA_ri), |
676 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
677 | 0 | GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0, |
678 | 0 | GIR_AddImm8, /*InsnID*/0, /*Imm*/32, |
679 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
680 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
681 | | // GIR_Coverage, 184, |
682 | 0 | GIR_Done, |
683 | | // Label 83: @1917 |
684 | 0 | GIM_Try, /*On fail goto*//*Label 84*/ GIMT_Encode4(1959), // Rule ID 185 // |
685 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasMovsx), |
686 | | // (sext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (MOVSX_rr_32:{ *:[i64] } (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src)) |
687 | 0 | GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s64, |
688 | 0 | GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64), |
689 | 0 | GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define), |
690 | 0 | GIR_Copy, /*NewInsnID*/1, /*OldInsnID*/0, /*OpIdx*/1, // src |
691 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/1, |
692 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOVSX_rr_32), |
693 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
694 | 0 | GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0, |
695 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
696 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
697 | | // GIR_Coverage, 185, |
698 | 0 | GIR_Done, |
699 | | // Label 84: @1959 |
700 | 0 | GIM_Reject, |
701 | | // Label 82: @1960 |
702 | 0 | GIM_Reject, |
703 | | // Label 15: @1961 |
704 | 0 | GIM_Try, /*On fail goto*//*Label 85*/ GIMT_Encode4(1992), // Rule ID 186 // |
705 | 0 | GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s64, |
706 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
707 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
708 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
709 | | // (zext:{ *:[i64] } GPR32:{ *:[i32] }:$src) => (MOV_32_64:{ *:[i64] } GPR32:{ *:[i32] }:$src) |
710 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::MOV_32_64), |
711 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
712 | | // GIR_Coverage, 186, |
713 | 0 | GIR_Done, |
714 | | // Label 85: @1992 |
715 | 0 | GIM_Reject, |
716 | | // Label 16: @1993 |
717 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 88*/ GIMT_Encode4(2066), |
718 | 0 | /*GILLT_s32*//*Label 86*/ GIMT_Encode4(2012), |
719 | 0 | /*GILLT_s64*//*Label 87*/ GIMT_Encode4(2039), |
720 | | // Label 86: @2012 |
721 | 0 | GIM_Try, /*On fail goto*//*Label 89*/ GIMT_Encode4(2038), // Rule ID 62 // |
722 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
723 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
724 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
725 | | // (shl:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SLL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
726 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SLL_rr_32), |
727 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
728 | | // GIR_Coverage, 62, |
729 | 0 | GIR_Done, |
730 | | // Label 89: @2038 |
731 | 0 | GIM_Reject, |
732 | | // Label 87: @2039 |
733 | 0 | GIM_Try, /*On fail goto*//*Label 90*/ GIMT_Encode4(2065), // Rule ID 60 // |
734 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
735 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
736 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
737 | | // (shl:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SLL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
738 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SLL_rr), |
739 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
740 | | // GIR_Coverage, 60, |
741 | 0 | GIR_Done, |
742 | | // Label 90: @2065 |
743 | 0 | GIM_Reject, |
744 | | // Label 88: @2066 |
745 | 0 | GIM_Reject, |
746 | | // Label 17: @2067 |
747 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 93*/ GIMT_Encode4(2434), |
748 | 0 | /*GILLT_s32*//*Label 91*/ GIMT_Encode4(2086), |
749 | 0 | /*GILLT_s64*//*Label 92*/ GIMT_Encode4(2113), |
750 | | // Label 91: @2086 |
751 | 0 | GIM_Try, /*On fail goto*//*Label 94*/ GIMT_Encode4(2112), // Rule ID 66 // |
752 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
753 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
754 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
755 | | // (srl:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SRL_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
756 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRL_rr_32), |
757 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
758 | | // GIR_Coverage, 66, |
759 | 0 | GIR_Done, |
760 | | // Label 94: @2112 |
761 | 0 | GIM_Reject, |
762 | | // Label 92: @2113 |
763 | 0 | GIM_Try, /*On fail goto*//*Label 95*/ GIMT_Encode4(2433), |
764 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
765 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
766 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
767 | 0 | GIM_Try, /*On fail goto*//*Label 96*/ GIMT_Encode4(2179), // Rule ID 148 // |
768 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasBswap), |
769 | 0 | GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1] |
770 | 0 | GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP), |
771 | 0 | GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64, |
772 | 0 | GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
773 | 0 | GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48, |
774 | 0 | GIM_CheckIsSafeToFold, /*InsnID*/1, |
775 | | // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (BSWAP16:{ *:[i64] } GPR:{ *:[i64] }:$src) |
776 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BSWAP16), |
777 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
778 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src |
779 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
780 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
781 | | // GIR_Coverage, 148, |
782 | 0 | GIR_Done, |
783 | | // Label 96: @2179 |
784 | 0 | GIM_Try, /*On fail goto*//*Label 97*/ GIMT_Encode4(2227), // Rule ID 149 // |
785 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasBswap), |
786 | 0 | GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1] |
787 | 0 | GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP), |
788 | 0 | GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64, |
789 | 0 | GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
790 | 0 | GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32, |
791 | 0 | GIM_CheckIsSafeToFold, /*InsnID*/1, |
792 | | // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (BSWAP32:{ *:[i64] } GPR:{ *:[i64] }:$src) |
793 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BSWAP32), |
794 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
795 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src |
796 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
797 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
798 | | // GIR_Coverage, 149, |
799 | 0 | GIR_Done, |
800 | | // Label 97: @2227 |
801 | 0 | GIM_Try, /*On fail goto*//*Label 98*/ GIMT_Encode4(2275), // Rule ID 151 // |
802 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsLittleEndian), |
803 | 0 | GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1] |
804 | 0 | GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP), |
805 | 0 | GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64, |
806 | 0 | GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
807 | 0 | GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48, |
808 | 0 | GIM_CheckIsSafeToFold, /*InsnID*/1, |
809 | | // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (BE16:{ *:[i64] } GPR:{ *:[i64] }:$src) |
810 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BE16), |
811 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
812 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src |
813 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
814 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
815 | | // GIR_Coverage, 151, |
816 | 0 | GIR_Done, |
817 | | // Label 98: @2275 |
818 | 0 | GIM_Try, /*On fail goto*//*Label 99*/ GIMT_Encode4(2323), // Rule ID 152 // |
819 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsLittleEndian), |
820 | 0 | GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1] |
821 | 0 | GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP), |
822 | 0 | GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64, |
823 | 0 | GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
824 | 0 | GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32, |
825 | 0 | GIM_CheckIsSafeToFold, /*InsnID*/1, |
826 | | // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (BE32:{ *:[i64] } GPR:{ *:[i64] }:$src) |
827 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BE32), |
828 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
829 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src |
830 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
831 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
832 | | // GIR_Coverage, 152, |
833 | 0 | GIR_Done, |
834 | | // Label 99: @2323 |
835 | 0 | GIM_Try, /*On fail goto*//*Label 100*/ GIMT_Encode4(2371), // Rule ID 154 // |
836 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsBigEndian), |
837 | 0 | GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1] |
838 | 0 | GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP), |
839 | 0 | GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64, |
840 | 0 | GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
841 | 0 | GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 48, |
842 | 0 | GIM_CheckIsSafeToFold, /*InsnID*/1, |
843 | | // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 48:{ *:[i64] }) => (LE16:{ *:[i64] } GPR:{ *:[i64] }:$src) |
844 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::LE16), |
845 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
846 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src |
847 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
848 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
849 | | // GIR_Coverage, 154, |
850 | 0 | GIR_Done, |
851 | | // Label 100: @2371 |
852 | 0 | GIM_Try, /*On fail goto*//*Label 101*/ GIMT_Encode4(2419), // Rule ID 155 // |
853 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsBigEndian), |
854 | 0 | GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1] |
855 | 0 | GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_BSWAP), |
856 | 0 | GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s64, |
857 | 0 | GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
858 | 0 | GIM_CheckConstantInt8, /*MI*/0, /*Op*/2, 32, |
859 | 0 | GIM_CheckIsSafeToFold, /*InsnID*/1, |
860 | | // (srl:{ *:[i64] } (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src), 32:{ *:[i64] }) => (LE32:{ *:[i64] } GPR:{ *:[i64] }:$src) |
861 | 0 | GIR_BuildMI, /*InsnID*/0, /*Opcode*/GIMT_Encode2(BPF::LE32), |
862 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // DstI[dst] |
863 | 0 | GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // src |
864 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
865 | 0 | GIR_EraseFromParent, /*InsnID*/0, |
866 | | // GIR_Coverage, 155, |
867 | 0 | GIR_Done, |
868 | | // Label 101: @2419 |
869 | 0 | GIM_Try, /*On fail goto*//*Label 102*/ GIMT_Encode4(2432), // Rule ID 64 // |
870 | | // (srl:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SRL_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
871 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRL_rr), |
872 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
873 | | // GIR_Coverage, 64, |
874 | 0 | GIR_Done, |
875 | | // Label 102: @2432 |
876 | 0 | GIM_Reject, |
877 | | // Label 95: @2433 |
878 | 0 | GIM_Reject, |
879 | | // Label 93: @2434 |
880 | 0 | GIM_Reject, |
881 | | // Label 18: @2435 |
882 | 0 | GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/GIMT_Encode2(0), GIMT_Encode2(2), /*)*//*default:*//*Label 105*/ GIMT_Encode4(2508), |
883 | 0 | /*GILLT_s32*//*Label 103*/ GIMT_Encode4(2454), |
884 | 0 | /*GILLT_s64*//*Label 104*/ GIMT_Encode4(2481), |
885 | | // Label 103: @2454 |
886 | 0 | GIM_Try, /*On fail goto*//*Label 106*/ GIMT_Encode4(2480), // Rule ID 74 // |
887 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32, |
888 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32, |
889 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPR32RegClassID), |
890 | | // (sra:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) => (SRA_rr_32:{ *:[i32] } i32:{ *:[i32] }:$src2, i32:{ *:[i32] }:$src) |
891 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRA_rr_32), |
892 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
893 | | // GIR_Coverage, 74, |
894 | 0 | GIR_Done, |
895 | | // Label 106: @2480 |
896 | 0 | GIM_Reject, |
897 | | // Label 104: @2481 |
898 | 0 | GIM_Try, /*On fail goto*//*Label 107*/ GIMT_Encode4(2507), // Rule ID 72 // |
899 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
900 | 0 | GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64, |
901 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
902 | | // (sra:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) => (SRA_rr:{ *:[i64] } i64:{ *:[i64] }:$src2, i64:{ *:[i64] }:$src) |
903 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::SRA_rr), |
904 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
905 | | // GIR_Coverage, 72, |
906 | 0 | GIR_Done, |
907 | | // Label 107: @2507 |
908 | 0 | GIM_Reject, |
909 | | // Label 105: @2508 |
910 | 0 | GIM_Reject, |
911 | | // Label 19: @2509 |
912 | 0 | GIM_Try, /*On fail goto*//*Label 108*/ GIMT_Encode4(2525), // Rule ID 123 // |
913 | | // MIs[0] BrDst |
914 | 0 | GIM_CheckIsMBB, /*MI*/0, /*Op*/0, |
915 | | // (br (bb:{ *:[Other] }):$BrDst) => (JMP (bb:{ *:[Other] }):$BrDst) |
916 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::JMP), |
917 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
918 | | // GIR_Coverage, 123, |
919 | 0 | GIR_Done, |
920 | | // Label 108: @2525 |
921 | 0 | GIM_Reject, |
922 | | // Label 20: @2526 |
923 | 0 | GIM_Try, /*On fail goto*//*Label 109*/ GIMT_Encode4(2598), |
924 | 0 | GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s64, |
925 | 0 | GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64, |
926 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
927 | 0 | GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/GIMT_Encode2(BPF::GPRRegClassID), |
928 | 0 | GIM_Try, /*On fail goto*//*Label 110*/ GIMT_Encode4(2565), // Rule ID 150 // |
929 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFHasBswap), |
930 | | // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (BSWAP64:{ *:[i64] } GPR:{ *:[i64] }:$src) |
931 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BSWAP64), |
932 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
933 | | // GIR_Coverage, 150, |
934 | 0 | GIR_Done, |
935 | | // Label 110: @2565 |
936 | 0 | GIM_Try, /*On fail goto*//*Label 111*/ GIMT_Encode4(2581), // Rule ID 153 // |
937 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsLittleEndian), |
938 | | // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (BE64:{ *:[i64] } GPR:{ *:[i64] }:$src) |
939 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::BE64), |
940 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
941 | | // GIR_Coverage, 153, |
942 | 0 | GIR_Done, |
943 | | // Label 111: @2581 |
944 | 0 | GIM_Try, /*On fail goto*//*Label 112*/ GIMT_Encode4(2597), // Rule ID 156 // |
945 | 0 | GIM_CheckFeatures, GIMT_Encode2(GIFBS_BPFIsBigEndian), |
946 | | // (bswap:{ *:[i64] } GPR:{ *:[i64] }:$src) => (LE64:{ *:[i64] } GPR:{ *:[i64] }:$src) |
947 | 0 | GIR_MutateOpcode, /*InsnID*/0, /*RecycleInsnID*/0, /*Opcode*/GIMT_Encode2(BPF::LE64), |
948 | 0 | GIR_ConstrainSelectedInstOperands, /*InsnID*/0, |
949 | | // GIR_Coverage, 156, |
950 | 0 | GIR_Done, |
951 | | // Label 112: @2597 |
952 | 0 | GIM_Reject, |
953 | | // Label 109: @2598 |
954 | 0 | GIM_Reject, |
955 | | // Label 21: @2599 |
956 | 0 | GIM_Reject, |
957 | 0 | }; // Size: 2600 bytes |
958 | 0 | return MatchTable0; |
959 | 0 | } |
960 | | #undef GIMT_Encode2 |
961 | | #undef GIMT_Encode4 |
962 | | #undef GIMT_Encode8 |
963 | | |
964 | | #endif // ifdef GET_GLOBALISEL_IMPL |
965 | | |
966 | | #ifdef GET_GLOBALISEL_PREDICATES_DECL |
967 | | PredicateBitset AvailableModuleFeatures; |
968 | | mutable PredicateBitset AvailableFunctionFeatures; |
969 | 0 | PredicateBitset getAvailableFeatures() const { |
970 | 0 | return AvailableModuleFeatures | AvailableFunctionFeatures; |
971 | 0 | } |
972 | | PredicateBitset |
973 | | computeAvailableModuleFeatures(const BPFSubtarget *Subtarget) const; |
974 | | PredicateBitset |
975 | | computeAvailableFunctionFeatures(const BPFSubtarget *Subtarget, |
976 | | const MachineFunction *MF) const; |
977 | | void setupGeneratedPerFunctionState(MachineFunction &MF) override; |
978 | | #endif // ifdef GET_GLOBALISEL_PREDICATES_DECL |
979 | | #ifdef GET_GLOBALISEL_PREDICATES_INIT |
980 | | AvailableModuleFeatures(computeAvailableModuleFeatures(&STI)), |
981 | | AvailableFunctionFeatures() |
982 | | #endif // ifdef GET_GLOBALISEL_PREDICATES_INIT |