Coverage Report

Created: 2018-09-25 17:16

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/clang-build/lib/Target/ARM/ARMGenGlobalISel.inc
Line
Count
Source (jump to first uncovered line)
1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* Global Instruction Selector for the ARM target                             *|
4
|*                                                                            *|
5
|* Automatically generated file, do not edit!                                 *|
6
|*                                                                            *|
7
\*===----------------------------------------------------------------------===*/
8
9
#ifdef GET_GLOBALISEL_PREDICATE_BITSET
10
const unsigned MAX_SUBTARGET_PREDICATES = 64;
11
using PredicateBitset = llvm::PredicateBitsetImpl<MAX_SUBTARGET_PREDICATES>;
12
#endif // ifdef GET_GLOBALISEL_PREDICATE_BITSET
13
14
#ifdef GET_GLOBALISEL_TEMPORARIES_DECL
15
  mutable MatcherState State;
16
  typedef ComplexRendererFns(ARMInstructionSelector::*ComplexMatcherMemFn)(MachineOperand &) const;
17
  typedef void(ARMInstructionSelector::*CustomRendererFn)(MachineInstrBuilder &, const MachineInstr&) const;
18
  const ISelInfoTy<PredicateBitset, ComplexMatcherMemFn, CustomRendererFn> ISelInfo;
19
  static ARMInstructionSelector::ComplexMatcherMemFn ComplexPredicateFns[];
20
  static ARMInstructionSelector::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 int64_t *getMatchTable() const override;
25
  bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI) const override;
26
#endif // ifdef GET_GLOBALISEL_TEMPORARIES_DECL
27
28
#ifdef GET_GLOBALISEL_TEMPORARIES_INIT
29
, State(0),
30
ISelInfo(TypeObjects, NumTypeObjects, FeatureBitsets, ComplexPredicateFns, CustomRenderers)
31
#endif // ifdef GET_GLOBALISEL_TEMPORARIES_INIT
32
33
#ifdef GET_GLOBALISEL_IMPL
34
// Bits for subtarget features that participate in instruction matching.
35
enum SubtargetFeatureBits : uint8_t {
36
  Feature_NoHonorSignDependentRoundingBit = 57,
37
  Feature_HasV4TBit = 6,
38
  Feature_NoV4TBit = 7,
39
  Feature_HasV5TBit = 8,
40
  Feature_HasV5TEBit = 12,
41
  Feature_HasV6Bit = 0,
42
  Feature_NoV6Bit = 10,
43
  Feature_HasV6MBit = 29,
44
  Feature_HasV8MBaselineBit = 33,
45
  Feature_HasV6T2Bit = 9,
46
  Feature_HasV6KBit = 19,
47
  Feature_HasV7Bit = 3,
48
  Feature_HasV8Bit = 15,
49
  Feature_PreV8Bit = 20,
50
  Feature_HasV8_1aBit = 59,
51
  Feature_NoVFPBit = 23,
52
  Feature_HasVFP2Bit = 22,
53
  Feature_HasVFP3Bit = 47,
54
  Feature_HasVFP4Bit = 45,
55
  Feature_HasDPVFPBit = 39,
56
  Feature_HasFPARMv8Bit = 41,
57
  Feature_HasNEONBit = 48,
58
  Feature_HasCryptoBit = 49,
59
  Feature_HasDotProdBit = 50,
60
  Feature_HasCRCBit = 14,
61
  Feature_HasFP16Bit = 54,
62
  Feature_HasFullFP16Bit = 38,
63
  Feature_HasDivideInThumbBit = 35,
64
  Feature_HasDivideInARMBit = 13,
65
  Feature_HasDSPBit = 34,
66
  Feature_HasDBBit = 16,
67
  Feature_HasV7ClrexBit = 18,
68
  Feature_HasAcquireReleaseBit = 17,
69
  Feature_HasMPBit = 2,
70
  Feature_HasZCZBit = 51,
71
  Feature_UseNEONForFPBit = 62,
72
  Feature_DontUseNEONForFPBit = 40,
73
  Feature_IsThumbBit = 27,
74
  Feature_IsThumb1OnlyBit = 28,
75
  Feature_IsThumb2Bit = 32,
76
  Feature_IsNotMClassBit = 36,
77
  Feature_IsARMBit = 1,
78
  Feature_IsWindowsBit = 30,
79
  Feature_IsNotWindowsBit = 31,
80
  Feature_IsReadTPHardBit = 55,
81
  Feature_IsReadTPSoftBit = 21,
82
  Feature_UseNaClTrapBit = 4,
83
  Feature_DontUseNaClTrapBit = 5,
84
  Feature_UseMovtBit = 37,
85
  Feature_DontUseMovtBit = 24,
86
  Feature_UseMovtInPicBit = 25,
87
  Feature_DontUseMovtInPicBit = 26,
88
  Feature_UseFPVMLxBit = 44,
89
  Feature_UseMulOpsBit = 11,
90
  Feature_UseFusedMACBit = 46,
91
  Feature_DontUseFusedMACBit = 43,
92
  Feature_HasFastVGETLNi32Bit = 52,
93
  Feature_HasSlowVGETLNi32Bit = 60,
94
  Feature_HasFastVDUP32Bit = 53,
95
  Feature_HasSlowVDUP32Bit = 61,
96
  Feature_UseVMOVSRBit = 42,
97
  Feature_DontUseVMOVSRBit = 63,
98
  Feature_IsLEBit = 56,
99
  Feature_IsBEBit = 58,
100
};
101
102
PredicateBitset ARMInstructionSelector::
103
6.77k
computeAvailableModuleFeatures(const ARMSubtarget *Subtarget) const {
104
6.77k
  PredicateBitset Features;
105
6.77k
  if (!TM.Options.HonorSignDependentRoundingFPMath())
106
6.70k
    Features[Feature_NoHonorSignDependentRoundingBit] = 1;
107
6.77k
  if (Subtarget->hasV4TOps())
108
5.72k
    Features[Feature_HasV4TBit] = 1;
109
6.77k
  if (!Subtarget->hasV4TOps())
110
1.05k
    Features[Feature_NoV4TBit] = 1;
111
6.77k
  if (Subtarget->hasV5TOps())
112
5.48k
    Features[Feature_HasV5TBit] = 1;
113
6.77k
  if (Subtarget->hasV5TEOps())
114
5.45k
    Features[Feature_HasV5TEBit] = 1;
115
6.77k
  if (Subtarget->hasV6Ops())
116
5.41k
    Features[Feature_HasV6Bit] = 1;
117
6.77k
  if (!Subtarget->hasV6Ops())
118
1.36k
    Features[Feature_NoV6Bit] = 1;
119
6.77k
  if (Subtarget->hasV6MOps())
120
5.15k
    Features[Feature_HasV6MBit] = 1;
121
6.77k
  if (Subtarget->hasV8MBaselineOps())
122
4.77k
    Features[Feature_HasV8MBaselineBit] = 1;
123
6.77k
  if (Subtarget->hasV6T2Ops())
124
4.72k
    Features[Feature_HasV6T2Bit] = 1;
125
6.77k
  if (Subtarget->hasV6KOps())
126
4.75k
    Features[Feature_HasV6KBit] = 1;
127
6.77k
  if (Subtarget->hasV7Ops())
128
4.49k
    Features[Feature_HasV7Bit] = 1;
129
6.77k
  if (Subtarget->hasV8Ops())
130
337
    Features[Feature_HasV8Bit] = 1;
131
6.77k
  if (!Subtarget->hasV8Ops())
132
6.44k
    Features[Feature_PreV8Bit] = 1;
133
6.77k
  if (Subtarget->hasV8_1aOps())
134
34
    Features[Feature_HasV8_1aBit] = 1;
135
6.77k
  if (!Subtarget->hasVFP2())
136
2.62k
    Features[Feature_NoVFPBit] = 1;
137
6.77k
  if (Subtarget->hasVFP2())
138
4.15k
    Features[Feature_HasVFP2Bit] = 1;
139
6.77k
  if (Subtarget->hasVFP3())
140
3.99k
    Features[Feature_HasVFP3Bit] = 1;
141
6.77k
  if (Subtarget->hasVFP4())
142
1.55k
    Features[Feature_HasVFP4Bit] = 1;
143
6.77k
  if (!Subtarget->isFPOnlySP())
144
6.47k
    Features[Feature_HasDPVFPBit] = 1;
145
6.77k
  if (Subtarget->hasFPARMv8())
146
463
    Features[Feature_HasFPARMv8Bit] = 1;
147
6.77k
  if (Subtarget->hasNEON())
148
3.55k
    Features[Feature_HasNEONBit] = 1;
149
6.77k
  if (Subtarget->hasCrypto())
150
292
    Features[Feature_HasCryptoBit] = 1;
151
6.77k
  if (Subtarget->hasDotProd())
152
2
    Features[Feature_HasDotProdBit] = 1;
153
6.77k
  if (Subtarget->hasCRC())
154
318
    Features[Feature_HasCRCBit] = 1;
155
6.77k
  if (Subtarget->hasFP16())
156
1.72k
    Features[Feature_HasFP16Bit] = 1;
157
6.77k
  if (Subtarget->hasFullFP16())
158
47
    Features[Feature_HasFullFP16Bit] = 1;
159
6.77k
  if (Subtarget->hasDivideInThumbMode())
160
2.12k
    Features[Feature_HasDivideInThumbBit] = 1;
161
6.77k
  if (Subtarget->hasDivideInARMMode())
162
1.21k
    Features[Feature_HasDivideInARMBit] = 1;
163
6.77k
  if (Subtarget->hasDSP())
164
4.48k
    Features[Feature_HasDSPBit] = 1;
165
6.77k
  if (Subtarget->hasDataBarrier())
166
4.85k
    Features[Feature_HasDBBit] = 1;
167
6.77k
  if (Subtarget->hasV7Clrex())
168
4.53k
    Features[Feature_HasV7ClrexBit] = 1;
169
6.77k
  if (Subtarget->hasAcquireRelease())
170
495
    Features[Feature_HasAcquireReleaseBit] = 1;
171
6.77k
  if (Subtarget->hasMPExtension())
172
1.30k
    Features[Feature_HasMPBit] = 1;
173
6.77k
  if (Subtarget->hasZeroCycleZeroing())
174
43
    Features[Feature_HasZCZBit] = 1;
175
6.77k
  if (Subtarget->useNEONForSinglePrecisionFP())
176
508
    Features[Feature_UseNEONForFPBit] = 1;
177
6.77k
  if (!Subtarget->useNEONForSinglePrecisionFP())
178
6.27k
    Features[Feature_DontUseNEONForFPBit] = 1;
179
6.77k
  if (Subtarget->isThumb())
180
3.79k
    Features[Feature_IsThumbBit] = 1;
181
6.77k
  if (Subtarget->isThumb1Only())
182
665
    Features[Feature_IsThumb1OnlyBit] = 1;
183
6.77k
  if (Subtarget->isThumb2())
184
3.12k
    Features[Feature_IsThumb2Bit] = 1;
185
6.77k
  if (!Subtarget->isMClass())
186
5.48k
    Features[Feature_IsNotMClassBit] = 1;
187
6.77k
  if (!Subtarget->isThumb())
188
2.98k
    Features[Feature_IsARMBit] = 1;
189
6.77k
  if (Subtarget->isTargetWindows())
190
84
    Features[Feature_IsWindowsBit] = 1;
191
6.77k
  if (!Subtarget->isTargetWindows())
192
6.69k
    Features[Feature_IsNotWindowsBit] = 1;
193
6.77k
  if (Subtarget->isReadTPHard())
194
2
    Features[Feature_IsReadTPHardBit] = 1;
195
6.77k
  if (!Subtarget->isReadTPHard())
196
6.77k
    Features[Feature_IsReadTPSoftBit] = 1;
197
6.77k
  if (Subtarget->useNaClTrap())
198
14
    Features[Feature_UseNaClTrapBit] = 1;
199
6.77k
  if (!Subtarget->useNaClTrap())
200
6.76k
    Features[Feature_DontUseNaClTrapBit] = 1;
201
6.77k
  if (Subtarget->useMulOps())
202
6.77k
    Features[Feature_UseMulOpsBit] = 1;
203
6.77k
  if ((TM.Options.AllowFPOpFusion == FPOpFusion::Fast &&  
Subtarget->hasVFP4()96
) &&
!Subtarget->isTargetDarwin()48
)
204
48
    Features[Feature_UseFusedMACBit] = 1;
205
6.77k
  if (!(TM.Options.AllowFPOpFusion == FPOpFusion::Fast && 
Subtarget->hasVFP4()96
) ||
Subtarget->isTargetDarwin()48
)
206
6.73k
    Features[Feature_DontUseFusedMACBit] = 1;
207
6.77k
  if (!Subtarget->hasSlowVGETLNi32())
208
6.39k
    Features[Feature_HasFastVGETLNi32Bit] = 1;
209
6.77k
  if (Subtarget->hasSlowVGETLNi32())
210
384
    Features[Feature_HasSlowVGETLNi32Bit] = 1;
211
6.77k
  if (!Subtarget->hasSlowVDUP32())
212
6.39k
    Features[Feature_HasFastVDUP32Bit] = 1;
213
6.77k
  if (Subtarget->hasSlowVDUP32())
214
384
    Features[Feature_HasSlowVDUP32Bit] = 1;
215
6.77k
  if (Subtarget->preferVMOVSR() ||
!Subtarget->useNEONForSinglePrecisionFP()6.67k
)
216
6.27k
    Features[Feature_UseVMOVSRBit] = 1;
217
6.77k
  if (!Subtarget->preferVMOVSR() &&
Subtarget->useNEONForSinglePrecisionFP()6.67k
)
218
500
    Features[Feature_DontUseVMOVSRBit] = 1;
219
6.77k
  return Features;
220
6.77k
}
221
222
PredicateBitset ARMInstructionSelector::
223
706
computeAvailableFunctionFeatures(const ARMSubtarget *Subtarget, const MachineFunction *MF) const {
224
706
  PredicateBitset Features;
225
706
  if (Subtarget->useMovt(*MF))
226
266
    Features[Feature_UseMovtBit] = 1;
227
706
  if (!Subtarget->useMovt(*MF))
228
440
    Features[Feature_DontUseMovtBit] = 1;
229
706
  if (Subtarget->useMovt(*MF) && 
Subtarget->allowPositionIndependentMovt()266
)
230
56
    Features[Feature_UseMovtInPicBit] = 1;
231
706
  if (!Subtarget->useMovt(*MF) || 
!Subtarget->allowPositionIndependentMovt()266
)
232
650
    Features[Feature_DontUseMovtInPicBit] = 1;
233
706
  if (Subtarget->useFPVMLx() || 
MF->getFunction().optForMinSize()0
)
234
706
    Features[Feature_UseFPVMLxBit] = 1;
235
706
  if (MF->getDataLayout().isLittleEndian())
236
706
    Features[Feature_IsLEBit] = 1;
237
706
  if (MF->getDataLayout().isBigEndian())
238
0
    Features[Feature_IsBEBit] = 1;
239
706
  return Features;
240
706
}
241
242
// LLT Objects.
243
enum {
244
  GILLT_s16,
245
  GILLT_s32,
246
  GILLT_s64,
247
  GILLT_v2s32,
248
  GILLT_v2s64,
249
  GILLT_v4s16,
250
  GILLT_v4s32,
251
  GILLT_v8s8,
252
  GILLT_v8s16,
253
  GILLT_v16s8,
254
};
255
const static size_t NumTypeObjects = 10;
256
const static LLT TypeObjects[] = {
257
  LLT::scalar(16),
258
  LLT::scalar(32),
259
  LLT::scalar(64),
260
  LLT::vector(2, 32),
261
  LLT::vector(2, 64),
262
  LLT::vector(4, 16),
263
  LLT::vector(4, 32),
264
  LLT::vector(8, 8),
265
  LLT::vector(8, 16),
266
  LLT::vector(16, 8),
267
};
268
269
// Feature bitsets.
270
enum {
271
  GIFBS_Invalid,
272
  GIFBS_HasDotProd,
273
  GIFBS_HasFPARMv8,
274
  GIFBS_HasFullFP16,
275
  GIFBS_HasNEON,
276
  GIFBS_HasVFP2,
277
  GIFBS_HasVFP4,
278
  GIFBS_IsARM,
279
  GIFBS_IsBE,
280
  GIFBS_IsLE,
281
  GIFBS_IsThumb,
282
  GIFBS_IsThumb2,
283
  GIFBS_NoHonorSignDependentRounding,
284
  GIFBS_DontUseNEONForFP_HasVFP2,
285
  GIFBS_HasCrypto_HasV8,
286
  GIFBS_HasDB_IsARM,
287
  GIFBS_HasDB_IsThumb,
288
  GIFBS_HasDPVFP_HasFPARMv8,
289
  GIFBS_HasDPVFP_HasVFP2,
290
  GIFBS_HasDPVFP_HasVFP4,
291
  GIFBS_HasDPVFP_NoHonorSignDependentRounding,
292
  GIFBS_HasDSP_IsThumb2,
293
  GIFBS_HasDivideInARM_IsARM,
294
  GIFBS_HasFP16_HasNEON,
295
  GIFBS_HasFullFP16_HasNEON,
296
  GIFBS_HasNEON_HasV8,
297
  GIFBS_HasNEON_HasV8_1a,
298
  GIFBS_HasV5T_IsARM,
299
  GIFBS_HasV5TE_IsARM,
300
  GIFBS_HasV6_IsARM,
301
  GIFBS_HasV6K_IsARM,
302
  GIFBS_HasV6M_IsThumb,
303
  GIFBS_HasV6T2_IsARM,
304
  GIFBS_HasV6T2_IsThumb2,
305
  GIFBS_HasV7_IsARM,
306
  GIFBS_HasV7Clrex_IsThumb,
307
  GIFBS_HasV8MBaseline_IsThumb,
308
  GIFBS_HasVFP2_UseVMOVSR,
309
  GIFBS_IsARM_NoV6,
310
  GIFBS_IsARM_PreV8,
311
  GIFBS_IsThumb_IsThumb1Only,
312
  GIFBS_IsThumb_IsWindows,
313
  GIFBS_IsThumb_UseMovt,
314
  GIFBS_IsThumb2_PreV8,
315
  GIFBS_IsThumb2_UseMulOps,
316
  GIFBS_HasCRC_HasV8_IsARM,
317
  GIFBS_HasCRC_HasV8_IsThumb2,
318
  GIFBS_HasDSP_IsThumb2_UseMulOps,
319
  GIFBS_HasDivideInThumb_HasV8MBaseline_IsThumb,
320
  GIFBS_HasFullFP16_HasNEON_HasV8,
321
  GIFBS_HasFullFP16_HasNEON_UseFusedMAC,
322
  GIFBS_HasV5TE_IsARM_UseMulOps,
323
  GIFBS_HasV6_IsARM_UseMulOps,
324
  GIFBS_HasV6_IsThumb_IsThumb1Only,
325
  GIFBS_HasV6T2_IsARM_UseMulOps,
326
  GIFBS_IsARM_NoV6_UseMulOps,
327
  GIFBS_DontUseFusedMAC_HasFullFP16_HasNEON_UseFPVMLx,
328
};
329
const static PredicateBitset FeatureBitsets[] {
330
  {}, // GIFBS_Invalid
331
  {Feature_HasDotProdBit, },
332
  {Feature_HasFPARMv8Bit, },
333
  {Feature_HasFullFP16Bit, },
334
  {Feature_HasNEONBit, },
335
  {Feature_HasVFP2Bit, },
336
  {Feature_HasVFP4Bit, },
337
  {Feature_IsARMBit, },
338
  {Feature_IsBEBit, },
339
  {Feature_IsLEBit, },
340
  {Feature_IsThumbBit, },
341
  {Feature_IsThumb2Bit, },
342
  {Feature_NoHonorSignDependentRoundingBit, },
343
  {Feature_DontUseNEONForFPBit, Feature_HasVFP2Bit, },
344
  {Feature_HasCryptoBit, Feature_HasV8Bit, },
345
  {Feature_HasDBBit, Feature_IsARMBit, },
346
  {Feature_HasDBBit, Feature_IsThumbBit, },
347
  {Feature_HasDPVFPBit, Feature_HasFPARMv8Bit, },
348
  {Feature_HasDPVFPBit, Feature_HasVFP2Bit, },
349
  {Feature_HasDPVFPBit, Feature_HasVFP4Bit, },
350
  {Feature_HasDPVFPBit, Feature_NoHonorSignDependentRoundingBit, },
351
  {Feature_HasDSPBit, Feature_IsThumb2Bit, },
352
  {Feature_HasDivideInARMBit, Feature_IsARMBit, },
353
  {Feature_HasFP16Bit, Feature_HasNEONBit, },
354
  {Feature_HasFullFP16Bit, Feature_HasNEONBit, },
355
  {Feature_HasNEONBit, Feature_HasV8Bit, },
356
  {Feature_HasNEONBit, Feature_HasV8_1aBit, },
357
  {Feature_HasV5TBit, Feature_IsARMBit, },
358
  {Feature_HasV5TEBit, Feature_IsARMBit, },
359
  {Feature_HasV6Bit, Feature_IsARMBit, },
360
  {Feature_HasV6KBit, Feature_IsARMBit, },
361
  {Feature_HasV6MBit, Feature_IsThumbBit, },
362
  {Feature_HasV6T2Bit, Feature_IsARMBit, },
363
  {Feature_HasV6T2Bit, Feature_IsThumb2Bit, },
364
  {Feature_HasV7Bit, Feature_IsARMBit, },
365
  {Feature_HasV7ClrexBit, Feature_IsThumbBit, },
366
  {Feature_HasV8MBaselineBit, Feature_IsThumbBit, },
367
  {Feature_HasVFP2Bit, Feature_UseVMOVSRBit, },
368
  {Feature_IsARMBit, Feature_NoV6Bit, },
369
  {Feature_IsARMBit, Feature_PreV8Bit, },
370
  {Feature_IsThumbBit, Feature_IsThumb1OnlyBit, },
371
  {Feature_IsThumbBit, Feature_IsWindowsBit, },
372
  {Feature_IsThumbBit, Feature_UseMovtBit, },
373
  {Feature_IsThumb2Bit, Feature_PreV8Bit, },
374
  {Feature_IsThumb2Bit, Feature_UseMulOpsBit, },
375
  {Feature_HasCRCBit, Feature_HasV8Bit, Feature_IsARMBit, },
376
  {Feature_HasCRCBit, Feature_HasV8Bit, Feature_IsThumb2Bit, },
377
  {Feature_HasDSPBit, Feature_IsThumb2Bit, Feature_UseMulOpsBit, },
378
  {Feature_HasDivideInThumbBit, Feature_HasV8MBaselineBit, Feature_IsThumbBit, },
379
  {Feature_HasFullFP16Bit, Feature_HasNEONBit, Feature_HasV8Bit, },
380
  {Feature_HasFullFP16Bit, Feature_HasNEONBit, Feature_UseFusedMACBit, },
381
  {Feature_HasV5TEBit, Feature_IsARMBit, Feature_UseMulOpsBit, },
382
  {Feature_HasV6Bit, Feature_IsARMBit, Feature_UseMulOpsBit, },
383
  {Feature_HasV6Bit, Feature_IsThumbBit, Feature_IsThumb1OnlyBit, },
384
  {Feature_HasV6T2Bit, Feature_IsARMBit, Feature_UseMulOpsBit, },
385
  {Feature_IsARMBit, Feature_NoV6Bit, Feature_UseMulOpsBit, },
386
  {Feature_DontUseFusedMACBit, Feature_HasFullFP16Bit, Feature_HasNEONBit, Feature_UseFPVMLxBit, },
387
};
388
389
// ComplexPattern predicates.
390
enum {
391
  GICP_Invalid,
392
};
393
// See constructor for table contents
394
395
// PatFrag predicates.
396
enum {
397
  GIPFP_I64_Predicate_VectorIndex16 = GIPFP_I64_Invalid + 1,
398
  GIPFP_I64_Predicate_VectorIndex32,
399
  GIPFP_I64_Predicate_VectorIndex64,
400
  GIPFP_I64_Predicate_VectorIndex8,
401
  GIPFP_I64_Predicate_imm0_15,
402
  GIPFP_I64_Predicate_imm0_239,
403
  GIPFP_I64_Predicate_imm0_255,
404
  GIPFP_I64_Predicate_imm0_31,
405
  GIPFP_I64_Predicate_imm0_32,
406
  GIPFP_I64_Predicate_imm0_4095,
407
  GIPFP_I64_Predicate_imm0_63,
408
  GIPFP_I64_Predicate_imm0_65535,
409
  GIPFP_I64_Predicate_imm0_65535_neg,
410
  GIPFP_I64_Predicate_imm0_7,
411
  GIPFP_I64_Predicate_imm16,
412
  GIPFP_I64_Predicate_imm16_31,
413
  GIPFP_I64_Predicate_imm1_15,
414
  GIPFP_I64_Predicate_imm1_16,
415
  GIPFP_I64_Predicate_imm1_31,
416
  GIPFP_I64_Predicate_imm1_7,
417
  GIPFP_I64_Predicate_imm24b,
418
  GIPFP_I64_Predicate_imm256_510,
419
  GIPFP_I64_Predicate_imm32,
420
  GIPFP_I64_Predicate_imm8,
421
  GIPFP_I64_Predicate_imm8_255,
422
  GIPFP_I64_Predicate_imm8_or_16,
423
  GIPFP_I64_Predicate_mod_imm,
424
  GIPFP_I64_Predicate_pkh_asr_amt,
425
  GIPFP_I64_Predicate_pkh_lsl_amt,
426
  GIPFP_I64_Predicate_shr_imm16,
427
  GIPFP_I64_Predicate_shr_imm32,
428
  GIPFP_I64_Predicate_shr_imm64,
429
  GIPFP_I64_Predicate_shr_imm8,
430
  GIPFP_I64_Predicate_t2_so_imm,
431
  GIPFP_I64_Predicate_t2_so_imm_neg,
432
};
433
71
bool ARMInstructionSelector::testImmPredicate_I64(unsigned PredicateID, int64_t Imm) const {
434
71
  switch (PredicateID) {
435
71
  case GIPFP_I64_Predicate_VectorIndex16: {
436
0
    
437
0
  return ((uint64_t)Imm) < 4;
438
71
439
71
    
llvm_unreachable0
("ImmediateCode should have returned");
440
71
    
return false0
;
441
71
  }
442
71
  case GIPFP_I64_Predicate_VectorIndex32: {
443
0
    
444
0
  return ((uint64_t)Imm) < 2;
445
71
446
71
    
llvm_unreachable0
("ImmediateCode should have returned");
447
71
    
return false0
;
448
71
  }
449
71
  case GIPFP_I64_Predicate_VectorIndex64: {
450
0
    
451
0
  return ((uint64_t)Imm) < 1;
452
71
453
71
    
llvm_unreachable0
("ImmediateCode should have returned");
454
71
    
return false0
;
455
71
  }
456
71
  case GIPFP_I64_Predicate_VectorIndex8: {
457
0
    
458
0
  return ((uint64_t)Imm) < 8;
459
71
460
71
    
llvm_unreachable0
("ImmediateCode should have returned");
461
71
    
return false0
;
462
71
  }
463
71
  case GIPFP_I64_Predicate_imm0_15: {
464
0
    
465
0
  return Imm >= 0 && Imm < 16;
466
71
467
71
    
llvm_unreachable0
("ImmediateCode should have returned");
468
71
    
return false0
;
469
71
  }
470
71
  case GIPFP_I64_Predicate_imm0_239: {
471
0
     return Imm >= 0 && Imm < 240; 
472
71
    
llvm_unreachable0
("ImmediateCode should have returned");
473
71
    
return false0
;
474
71
  }
475
71
  case GIPFP_I64_Predicate_imm0_255: {
476
0
     return Imm >= 0 && Imm < 256; 
477
71
    
llvm_unreachable0
("ImmediateCode should have returned");
478
71
    
return false0
;
479
71
  }
480
71
  case GIPFP_I64_Predicate_imm0_31: {
481
0
    
482
0
  return Imm >= 0 && Imm < 32;
483
71
484
71
    
llvm_unreachable0
("ImmediateCode should have returned");
485
71
    
return false0
;
486
71
  }
487
71
  case GIPFP_I64_Predicate_imm0_32: {
488
0
    
489
0
  return Imm >= 0 && Imm < 33;
490
71
491
71
    
llvm_unreachable0
("ImmediateCode should have returned");
492
71
    
return false0
;
493
71
  }
494
71
  case GIPFP_I64_Predicate_imm0_4095: {
495
0
    
496
0
  return Imm >= 0 && Imm < 4096;
497
71
498
71
    
llvm_unreachable0
("ImmediateCode should have returned");
499
71
    
return false0
;
500
71
  }
501
71
  case GIPFP_I64_Predicate_imm0_63: {
502
0
    
503
0
  return Imm >= 0 && Imm < 64;
504
71
505
71
    
llvm_unreachable0
("ImmediateCode should have returned");
506
71
    
return false0
;
507
71
  }
508
71
  case GIPFP_I64_Predicate_imm0_65535: {
509
1
    
510
1
  return Imm >= 0 && Imm < 65536;
511
71
512
71
    
llvm_unreachable0
("ImmediateCode should have returned");
513
71
    
return false0
;
514
71
  }
515
71
  case GIPFP_I64_Predicate_imm0_65535_neg: {
516
0
    
517
0
  return -Imm >= 0 && -Imm < 65536;
518
71
519
71
    
llvm_unreachable0
("ImmediateCode should have returned");
520
71
    
return false0
;
521
71
  }
522
71
  case GIPFP_I64_Predicate_imm0_7: {
523
0
    
524
0
  return Imm >= 0 && Imm < 8;
525
71
526
71
    
llvm_unreachable0
("ImmediateCode should have returned");
527
71
    
return false0
;
528
71
  }
529
71
  case GIPFP_I64_Predicate_imm16: {
530
1
     return Imm == 16; 
531
71
    
llvm_unreachable0
("ImmediateCode should have returned");
532
71
    
return false0
;
533
71
  }
534
71
  case GIPFP_I64_Predicate_imm16_31: {
535
2
    
536
2
  return (int32_t)Imm >= 16 && (int32_t)Imm < 32;
537
71
538
71
    
llvm_unreachable0
("ImmediateCode should have returned");
539
71
    
return false0
;
540
71
  }
541
71
  case GIPFP_I64_Predicate_imm1_15: {
542
1
     return Imm > 0 && Imm < 16; 
543
71
    
llvm_unreachable0
("ImmediateCode should have returned");
544
71
    
return false0
;
545
71
  }
546
71
  case GIPFP_I64_Predicate_imm1_16: {
547
0
    
548
0
    return Imm > 0 && Imm <= 16;
549
71
  
550
71
    
llvm_unreachable0
("ImmediateCode should have returned");
551
71
    
return false0
;
552
71
  }
553
71
  case GIPFP_I64_Predicate_imm1_31: {
554
0
     return Imm > 0 && Imm < 32; 
555
71
    
llvm_unreachable0
("ImmediateCode should have returned");
556
71
    
return false0
;
557
71
  }
558
71
  case GIPFP_I64_Predicate_imm1_7: {
559
0
     return Imm > 0 && Imm < 8; 
560
71
    
llvm_unreachable0
("ImmediateCode should have returned");
561
71
    
return false0
;
562
71
  }
563
71
  case GIPFP_I64_Predicate_imm24b: {
564
0
    
565
0
  return Imm >= 0 && Imm <= 0xffffff;
566
71
567
71
    
llvm_unreachable0
("ImmediateCode should have returned");
568
71
    
return false0
;
569
71
  }
570
71
  case GIPFP_I64_Predicate_imm256_510: {
571
0
    
572
0
  return Imm >= 256 && Imm < 511;
573
71
574
71
    
llvm_unreachable0
("ImmediateCode should have returned");
575
71
    
return false0
;
576
71
  }
577
71
  case GIPFP_I64_Predicate_imm32: {
578
0
     return Imm == 32; 
579
71
    
llvm_unreachable0
("ImmediateCode should have returned");
580
71
    
return false0
;
581
71
  }
582
71
  case GIPFP_I64_Predicate_imm8: {
583
0
     return Imm == 8; 
584
71
    
llvm_unreachable0
("ImmediateCode should have returned");
585
71
    
return false0
;
586
71
  }
587
71
  case GIPFP_I64_Predicate_imm8_255: {
588
0
    
589
0
  return Imm >= 8 && Imm < 256;
590
71
591
71
    
llvm_unreachable0
("ImmediateCode should have returned");
592
71
    
return false0
;
593
71
  }
594
71
  case GIPFP_I64_Predicate_imm8_or_16: {
595
0
     return Imm == 8 || Imm == 16;
596
71
    
llvm_unreachable0
("ImmediateCode should have returned");
597
71
    
return false0
;
598
71
  }
599
71
  case GIPFP_I64_Predicate_mod_imm: {
600
63
    
601
63
    return ARM_AM::getSOImmVal(Imm) != -1;
602
71
  
603
71
    
llvm_unreachable0
("ImmediateCode should have returned");
604
71
    
return false0
;
605
71
  }
606
71
  case GIPFP_I64_Predicate_pkh_asr_amt: {
607
0
     return Imm > 0 && Imm <= 32; 
608
71
    
llvm_unreachable0
("ImmediateCode should have returned");
609
71
    
return false0
;
610
71
  }
611
71
  case GIPFP_I64_Predicate_pkh_lsl_amt: {
612
3
     return Imm >= 0 && Imm < 32; 
613
71
    
llvm_unreachable0
("ImmediateCode should have returned");
614
71
    
return false0
;
615
71
  }
616
71
  case GIPFP_I64_Predicate_shr_imm16: {
617
0
     return Imm > 0 && Imm <= 16; 
618
71
    
llvm_unreachable0
("ImmediateCode should have returned");
619
71
    
return false0
;
620
71
  }
621
71
  case GIPFP_I64_Predicate_shr_imm32: {
622
0
     return Imm > 0 && Imm <= 32; 
623
71
    
llvm_unreachable0
("ImmediateCode should have returned");
624
71
    
return false0
;
625
71
  }
626
71
  case GIPFP_I64_Predicate_shr_imm64: {
627
0
     return Imm > 0 && Imm <= 64; 
628
71
    
llvm_unreachable0
("ImmediateCode should have returned");
629
71
    
return false0
;
630
71
  }
631
71
  case GIPFP_I64_Predicate_shr_imm8: {
632
0
     return Imm > 0 && Imm <= 8; 
633
71
    
llvm_unreachable0
("ImmediateCode should have returned");
634
71
    
return false0
;
635
71
  }
636
71
  case GIPFP_I64_Predicate_t2_so_imm: {
637
0
    
638
0
    return ARM_AM::getT2SOImmVal(Imm) != -1;
639
71
  
640
71
    
llvm_unreachable0
("ImmediateCode should have returned");
641
71
    
return false0
;
642
71
  }
643
71
  case GIPFP_I64_Predicate_t2_so_imm_neg: {
644
0
    
645
0
  return Imm && ARM_AM::getT2SOImmVal(-(uint32_t)Imm) != -1;
646
71
647
71
    
llvm_unreachable0
("ImmediateCode should have returned");
648
71
    
return false0
;
649
0
  }
650
0
  }
651
0
  llvm_unreachable("Unknown predicate");
652
0
  return false;
653
0
}
654
0
bool ARMInstructionSelector::testImmPredicate_APFloat(unsigned PredicateID, const APFloat & Imm) const {
655
0
  llvm_unreachable("Unknown predicate");
656
0
  return false;
657
0
}
658
0
bool ARMInstructionSelector::testImmPredicate_APInt(unsigned PredicateID, const APInt & Imm) const {
659
0
  llvm_unreachable("Unknown predicate");
660
0
  return false;
661
0
}
662
// PatFrag predicates.
663
enum {
664
  GIPFP_MI_Predicate_bf_inv_mask_imm = GIPFP_MI_Invalid + 1,
665
};
666
0
bool ARMInstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI) const {
667
0
  const MachineFunction &MF = *MI.getParent()->getParent();
668
0
  const MachineRegisterInfo &MRI = MF.getRegInfo();
669
0
  (void)MRI;
670
0
  switch (PredicateID) {
671
0
  case GIPFP_MI_Predicate_bf_inv_mask_imm: {
672
0
    
673
0
    // There's better methods of implementing this check. IntImmLeaf<> would be
674
0
    // equivalent and have less boilerplate but we need a test for C++
675
0
    // predicates and this one causes new rules to be imported into GlobalISel
676
0
    // without requiring additional features first.
677
0
    const auto &MO = MI.getOperand(1);
678
0
    if (!MO.isCImm())
679
0
      return false;
680
0
    return ARM::isBitFieldInvertedMask(MO.getCImm()->getZExtValue());
681
0
  
682
0
    llvm_unreachable("GISelPredicateCode should have returned");
683
0
    return false;
684
0
  }
685
0
  }
686
0
  llvm_unreachable("Unknown predicate");
687
0
  return false;
688
0
}
689
690
ARMInstructionSelector::ComplexMatcherMemFn
691
ARMInstructionSelector::ComplexPredicateFns[] = {
692
  nullptr, // GICP_Invalid
693
};
694
695
// Custom renderers.
696
enum {
697
  GICR_Invalid,
698
};
699
ARMInstructionSelector::CustomRendererFn
700
ARMInstructionSelector::CustomRenderers[] = {
701
  nullptr, // GICP_Invalid
702
};
703
704
706
bool ARMInstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const {
705
706
  MachineFunction &MF = *I.getParent()->getParent();
706
706
  MachineRegisterInfo &MRI = MF.getRegInfo();
707
706
  // FIXME: This should be computed on a per-function basis rather than per-insn.
708
706
  AvailableFunctionFeatures = computeAvailableFunctionFeatures(&STI, &MF);
709
706
  const PredicateBitset AvailableFeatures = getAvailableFeatures();
710
706
  NewMIVector OutMIs;
711
706
  State.MIs.clear();
712
706
  State.MIs.push_back(&I);
713
706
714
706
  if (executeMatchTable(*this, OutMIs, State, ISelInfo, getMatchTable(), TII, MRI, TRI, RBI, AvailableFeatures, CoverageInfo)) {
715
233
    return true;
716
233
  }
717
473
718
473
  return false;
719
473
}
720
721
706
const int64_t *ARMInstructionSelector::getMatchTable() const {
722
706
  constexpr static int64_t MatchTable0[] = {
723
706
    GIM_SwitchOpcode, /*MI*/0, /*[*/34, 135, /*)*//*default:*//*Label 35*/ 61588,
724
706
    /*TargetOpcode::G_ADD*//*Label 0*/ 106,
725
706
    /*TargetOpcode::G_SUB*//*Label 1*/ 6657,
726
706
    /*TargetOpcode::G_MUL*//*Label 2*/ 8647,
727
706
    /*TargetOpcode::G_SDIV*//*Label 3*/ 9281,
728
706
    /*TargetOpcode::G_UDIV*//*Label 4*/ 9381, 0, 0,
729
706
    /*TargetOpcode::G_AND*//*Label 5*/ 9481,
730
706
    /*TargetOpcode::G_OR*//*Label 6*/ 11194,
731
706
    /*TargetOpcode::G_XOR*//*Label 7*/ 15377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
732
706
    /*TargetOpcode::G_BITCAST*//*Label 8*/ 15876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
733
706
    /*TargetOpcode::G_INTRINSIC*//*Label 9*/ 20264,
734
706
    /*TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS*//*Label 10*/ 49635,
735
706
    /*TargetOpcode::G_ANYEXT*//*Label 11*/ 53964,
736
706
    /*TargetOpcode::G_TRUNC*//*Label 12*/ 54087,
737
706
    /*TargetOpcode::G_CONSTANT*//*Label 13*/ 54216, 0, 0, 0,
738
706
    /*TargetOpcode::G_SEXT*//*Label 14*/ 54381,
739
706
    /*TargetOpcode::G_ZEXT*//*Label 15*/ 54510,
740
706
    /*TargetOpcode::G_SHL*//*Label 16*/ 55020,
741
706
    /*TargetOpcode::G_LSHR*//*Label 17*/ 55125,
742
706
    /*TargetOpcode::G_ASHR*//*Label 18*/ 55183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
743
706
    /*TargetOpcode::G_FADD*//*Label 19*/ 55396,
744
706
    /*TargetOpcode::G_FSUB*//*Label 20*/ 56027,
745
706
    /*TargetOpcode::G_FMUL*//*Label 21*/ 56642,
746
706
    /*TargetOpcode::G_FMA*//*Label 22*/ 57225,
747
706
    /*TargetOpcode::G_FDIV*//*Label 23*/ 58246, 0, 0, 0, 0, 0, 0,
748
706
    /*TargetOpcode::G_FNEG*//*Label 24*/ 58409,
749
706
    /*TargetOpcode::G_FPEXT*//*Label 25*/ 59326,
750
706
    /*TargetOpcode::G_FPTRUNC*//*Label 26*/ 59483,
751
706
    /*TargetOpcode::G_FPTOSI*//*Label 27*/ 59644,
752
706
    /*TargetOpcode::G_FPTOUI*//*Label 28*/ 59984,
753
706
    /*TargetOpcode::G_SITOFP*//*Label 29*/ 60324,
754
706
    /*TargetOpcode::G_UITOFP*//*Label 30*/ 60661, 0, 0, 0,
755
706
    /*TargetOpcode::G_BR*//*Label 31*/ 60998, 0, 0, 0, 0, 0,
756
706
    /*TargetOpcode::G_CTLZ*//*Label 32*/ 61060, 0,
757
706
    /*TargetOpcode::G_CTPOP*//*Label 33*/ 61386,
758
706
    /*TargetOpcode::G_BSWAP*//*Label 34*/ 61474,
759
706
    // Label 0: @106
760
706
    GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/1, 10, /*)*//*default:*//*Label 45*/ 6656,
761
706
    /*GILLT_s32*//*Label 36*/ 121,
762
706
    /*GILLT_s64*//*Label 37*/ 1799,
763
706
    /*GILLT_v2s32*//*Label 38*/ 1850,
764
706
    /*GILLT_v2s64*//*Label 39*/ 2310,
765
706
    /*GILLT_v4s16*//*Label 40*/ 3028,
766
706
    /*GILLT_v4s32*//*Label 41*/ 3488,
767
706
    /*GILLT_v8s8*//*Label 42*/ 4612,
768
706
    /*GILLT_v8s16*//*Label 43*/ 5072,
769
706
    /*GILLT_v16s8*//*Label 44*/ 6196,
770
706
    // Label 36: @121
771
706
    GIM_Try, /*On fail goto*//*Label 46*/ 1798,
772
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32,
773
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32,
774
706
      GIM_Try, /*On fail goto*//*Label 47*/ 197, // Rule ID 2759 //
775
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM,
776
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
777
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
778
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_AND,
779
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
780
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
781
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRRegClassID,
782
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 255,
783
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
784
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
785
706
        // (add:{ *:[i32] } (and:{ *:[i32] } GPR:{ *:[i32] }:$Rm, 255:{ *:[i32] }), GPR:{ *:[i32] }:$Rn)  =>  (UXTAB:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
786
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::UXTAB,
787
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
788
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
789
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rm
790
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
791
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
792
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
793
706
        GIR_EraseFromParent, /*InsnID*/0,
794
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
795
706
        // GIR_Coverage, 2759,
796
706
        GIR_Done,
797
706
      // Label 47: @197
798
706
      GIM_Try, /*On fail goto*//*Label 48*/ 263, // Rule ID 2760 //
799
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM,
800
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
801
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
802
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_AND,
803
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
804
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
805
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRRegClassID,
806
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 65535,
807
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
808
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
809
706
        // (add:{ *:[i32] } (and:{ *:[i32] } GPR:{ *:[i32] }:$Rm, 65535:{ *:[i32] }), GPR:{ *:[i32] }:$Rn)  =>  (UXTAH:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
810
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::UXTAH,
811
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
812
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
813
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rm
814
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
815
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
816
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
817
706
        GIR_EraseFromParent, /*InsnID*/0,
818
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
819
706
        // GIR_Coverage, 2760,
820
706
        GIR_Done,
821
706
      // Label 48: @263
822
706
      GIM_Try, /*On fail goto*//*Label 49*/ 329, // Rule ID 2789 //
823
706
        GIM_CheckFeatures, GIFBS_HasDSP_IsThumb2,
824
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
825
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
826
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_AND,
827
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
828
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
829
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
830
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 255,
831
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
832
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
833
706
        // (add:{ *:[i32] } (and:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 255:{ *:[i32] }), rGPR:{ *:[i32] }:$Rn)  =>  (t2UXTAB:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
834
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2UXTAB,
835
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
836
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
837
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rm
838
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
839
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
840
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
841
706
        GIR_EraseFromParent, /*InsnID*/0,
842
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
843
706
        // GIR_Coverage, 2789,
844
706
        GIR_Done,
845
706
      // Label 49: @329
846
706
      GIM_Try, /*On fail goto*//*Label 50*/ 395, // Rule ID 2790 //
847
706
        GIM_CheckFeatures, GIFBS_HasDSP_IsThumb2,
848
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
849
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
850
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_AND,
851
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
852
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
853
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
854
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 65535,
855
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
856
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
857
706
        // (add:{ *:[i32] } (and:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 65535:{ *:[i32] }), rGPR:{ *:[i32] }:$Rn)  =>  (t2UXTAH:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
858
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2UXTAH,
859
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
860
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
861
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rm
862
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
863
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
864
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
865
706
        GIR_EraseFromParent, /*InsnID*/0,
866
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
867
706
        // GIR_Coverage, 2790,
868
706
        GIR_Done,
869
706
      // Label 50: @395
870
706
      GIM_Try, /*On fail goto*//*Label 51*/ 461, // Rule ID 1817 //
871
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM,
872
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
873
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
874
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
875
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_AND,
876
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
877
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
878
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRRegClassID,
879
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 255,
880
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
881
706
        // (add:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (and:{ *:[i32] } GPR:{ *:[i32] }:$Rm, 255:{ *:[i32] }))  =>  (UXTAB:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
882
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::UXTAB,
883
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
884
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
885
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rm
886
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
887
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
888
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
889
706
        GIR_EraseFromParent, /*InsnID*/0,
890
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
891
706
        // GIR_Coverage, 1817,
892
706
        GIR_Done,
893
706
      // Label 51: @461
894
706
      GIM_Try, /*On fail goto*//*Label 52*/ 527, // Rule ID 1818 //
895
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM,
896
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
897
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
898
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
899
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_AND,
900
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
901
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
902
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRRegClassID,
903
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 65535,
904
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
905
706
        // (add:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (and:{ *:[i32] } GPR:{ *:[i32] }:$Rm, 65535:{ *:[i32] }))  =>  (UXTAH:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
906
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::UXTAH,
907
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
908
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
909
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rm
910
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
911
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
912
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
913
706
        GIR_EraseFromParent, /*InsnID*/0,
914
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
915
706
        // GIR_Coverage, 1818,
916
706
        GIR_Done,
917
706
      // Label 52: @527
918
706
      GIM_Try, /*On fail goto*//*Label 53*/ 593, // Rule ID 2007 //
919
706
        GIM_CheckFeatures, GIFBS_HasDSP_IsThumb2,
920
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
921
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
922
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
923
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_AND,
924
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
925
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
926
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
927
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 255,
928
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
929
706
        // (add:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, (and:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 255:{ *:[i32] }))  =>  (t2UXTAB:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
930
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2UXTAB,
931
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
932
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
933
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rm
934
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
935
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
936
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
937
706
        GIR_EraseFromParent, /*InsnID*/0,
938
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
939
706
        // GIR_Coverage, 2007,
940
706
        GIR_Done,
941
706
      // Label 53: @593
942
706
      GIM_Try, /*On fail goto*//*Label 54*/ 659, // Rule ID 2008 //
943
706
        GIM_CheckFeatures, GIFBS_HasDSP_IsThumb2,
944
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
945
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
946
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
947
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_AND,
948
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
949
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
950
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
951
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 65535,
952
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
953
706
        // (add:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, (and:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 65535:{ *:[i32] }))  =>  (t2UXTAH:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
954
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2UXTAH,
955
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
956
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
957
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rm
958
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
959
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
960
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
961
706
        GIR_EraseFromParent, /*InsnID*/0,
962
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
963
706
        // GIR_Coverage, 2008,
964
706
        GIR_Done,
965
706
      // Label 54: @659
966
706
      GIM_Try, /*On fail goto*//*Label 55*/ 768, // Rule ID 2544 //
967
706
        GIM_CheckFeatures, GIFBS_HasV5TE_IsARM_UseMulOps,
968
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
969
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
970
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
971
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
972
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
973
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
974
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ASHR,
975
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_s32,
976
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_s32,
977
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
978
706
        GIM_CheckConstantInt, /*MI*/2, /*Op*/2, 16,
979
706
        GIM_RecordInsn, /*DefineMI*/3, /*MI*/1, /*OpIdx*/2, // MIs[3]
980
706
        GIM_CheckOpcode, /*MI*/3, TargetOpcode::G_ASHR,
981
706
        GIM_CheckType, /*MI*/3, /*Op*/1, /*Type*/GILLT_s32,
982
706
        GIM_CheckType, /*MI*/3, /*Op*/2, /*Type*/GILLT_s32,
983
706
        GIM_CheckRegBankForClass, /*MI*/3, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
984
706
        GIM_CheckConstantInt, /*MI*/3, /*Op*/2, 16,
985
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
986
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
987
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
988
706
        GIM_CheckIsSafeToFold, /*InsnID*/3,
989
706
        // (add:{ *:[i32] } (mul:{ *:[i32] } (sra:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, 16:{ *:[i32] }), (sra:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rm, 16:{ *:[i32] })), GPR:{ *:[i32] }:$Ra)  =>  (SMLATT:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm, GPR:{ *:[i32] }:$Ra)
990
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::SMLATT,
991
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
992
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Rn
993
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/3, /*OpIdx*/1, // Rm
994
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Ra
995
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
996
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
997
706
        GIR_EraseFromParent, /*InsnID*/0,
998
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
999
706
        // GIR_Coverage, 2544,
1000
706
        GIR_Done,
1001
706
      // Label 55: @768
1002
706
      GIM_Try, /*On fail goto*//*Label 56*/ 877, // Rule ID 2581 //
1003
706
        GIM_CheckFeatures, GIFBS_HasDSP_IsThumb2_UseMulOps,
1004
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
1005
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1006
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1007
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
1008
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
1009
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
1010
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ASHR,
1011
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_s32,
1012
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_s32,
1013
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
1014
706
        GIM_CheckConstantInt, /*MI*/2, /*Op*/2, 16,
1015
706
        GIM_RecordInsn, /*DefineMI*/3, /*MI*/1, /*OpIdx*/2, // MIs[3]
1016
706
        GIM_CheckOpcode, /*MI*/3, TargetOpcode::G_ASHR,
1017
706
        GIM_CheckType, /*MI*/3, /*Op*/1, /*Type*/GILLT_s32,
1018
706
        GIM_CheckType, /*MI*/3, /*Op*/2, /*Type*/GILLT_s32,
1019
706
        GIM_CheckRegBankForClass, /*MI*/3, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
1020
706
        GIM_CheckConstantInt, /*MI*/3, /*Op*/2, 16,
1021
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
1022
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1023
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
1024
706
        GIM_CheckIsSafeToFold, /*InsnID*/3,
1025
706
        // (add:{ *:[i32] } (mul:{ *:[i32] } (sra:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, 16:{ *:[i32] }), (sra:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 16:{ *:[i32] })), rGPR:{ *:[i32] }:$Ra)  =>  (t2SMLATT:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm, rGPR:{ *:[i32] }:$Ra)
1026
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2SMLATT,
1027
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1028
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Rn
1029
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/3, /*OpIdx*/1, // Rm
1030
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Ra
1031
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1032
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1033
706
        GIR_EraseFromParent, /*InsnID*/0,
1034
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1035
706
        // GIR_Coverage, 2581,
1036
706
        GIR_Done,
1037
706
      // Label 56: @877
1038
706
      GIM_Try, /*On fail goto*//*Label 57*/ 986, // Rule ID 194 //
1039
706
        GIM_CheckFeatures, GIFBS_HasV5TE_IsARM_UseMulOps,
1040
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
1041
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
1042
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1043
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1044
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
1045
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
1046
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
1047
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ASHR,
1048
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_s32,
1049
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_s32,
1050
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
1051
706
        GIM_CheckConstantInt, /*MI*/2, /*Op*/2, 16,
1052
706
        GIM_RecordInsn, /*DefineMI*/3, /*MI*/1, /*OpIdx*/2, // MIs[3]
1053
706
        GIM_CheckOpcode, /*MI*/3, TargetOpcode::G_ASHR,
1054
706
        GIM_CheckType, /*MI*/3, /*Op*/1, /*Type*/GILLT_s32,
1055
706
        GIM_CheckType, /*MI*/3, /*Op*/2, /*Type*/GILLT_s32,
1056
706
        GIM_CheckRegBankForClass, /*MI*/3, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
1057
706
        GIM_CheckConstantInt, /*MI*/3, /*Op*/2, 16,
1058
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1059
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
1060
706
        GIM_CheckIsSafeToFold, /*InsnID*/3,
1061
706
        // (add:{ *:[i32] } GPR:{ *:[i32] }:$Ra, (mul:{ *:[i32] } (sra:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, 16:{ *:[i32] }), (sra:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rm, 16:{ *:[i32] })))  =>  (SMLATT:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm, GPR:{ *:[i32] }:$Ra)
1062
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::SMLATT,
1063
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1064
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Rn
1065
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/3, /*OpIdx*/1, // Rm
1066
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Ra
1067
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1068
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1069
706
        GIR_EraseFromParent, /*InsnID*/0,
1070
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1071
706
        // GIR_Coverage, 194,
1072
706
        GIR_Done,
1073
706
      // Label 57: @986
1074
706
      GIM_Try, /*On fail goto*//*Label 58*/ 1095, // Rule ID 525 //
1075
706
        GIM_CheckFeatures, GIFBS_HasDSP_IsThumb2_UseMulOps,
1076
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
1077
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
1078
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1079
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1080
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
1081
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
1082
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
1083
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ASHR,
1084
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_s32,
1085
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_s32,
1086
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
1087
706
        GIM_CheckConstantInt, /*MI*/2, /*Op*/2, 16,
1088
706
        GIM_RecordInsn, /*DefineMI*/3, /*MI*/1, /*OpIdx*/2, // MIs[3]
1089
706
        GIM_CheckOpcode, /*MI*/3, TargetOpcode::G_ASHR,
1090
706
        GIM_CheckType, /*MI*/3, /*Op*/1, /*Type*/GILLT_s32,
1091
706
        GIM_CheckType, /*MI*/3, /*Op*/2, /*Type*/GILLT_s32,
1092
706
        GIM_CheckRegBankForClass, /*MI*/3, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
1093
706
        GIM_CheckConstantInt, /*MI*/3, /*Op*/2, 16,
1094
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1095
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
1096
706
        GIM_CheckIsSafeToFold, /*InsnID*/3,
1097
706
        // (add:{ *:[i32] } rGPR:{ *:[i32] }:$Ra, (mul:{ *:[i32] } (sra:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, 16:{ *:[i32] }), (sra:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 16:{ *:[i32] })))  =>  (t2SMLATT:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm, rGPR:{ *:[i32] }:$Ra)
1098
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2SMLATT,
1099
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1100
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Rn
1101
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/3, /*OpIdx*/1, // Rm
1102
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Ra
1103
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1104
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1105
706
        GIR_EraseFromParent, /*InsnID*/0,
1106
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1107
706
        // GIR_Coverage, 525,
1108
706
        GIR_Done,
1109
706
      // Label 58: @1095
1110
706
      GIM_Try, /*On fail goto*//*Label 59*/ 1147, // Rule ID 74 //
1111
706
        GIM_CheckFeatures, GIFBS_IsARM,
1112
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
1113
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
1114
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1115
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_CONSTANT,
1116
706
        GIM_CheckI64ImmPredicate, /*MI*/1, /*Predicate*/GIPFP_I64_Predicate_mod_imm,
1117
706
        // MIs[1] Operand 1
1118
706
        // No operand predicates
1119
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1120
706
        // (add:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] })<<P:Predicate_mod_imm>>:$imm)  =>  (ADDri:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
1121
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::ADDri,
1122
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1123
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
1124
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // imm
1125
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1126
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1127
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1128
706
        GIR_EraseFromParent, /*InsnID*/0,
1129
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1130
706
        // GIR_Coverage, 74,
1131
706
        GIR_Done,
1132
706
      // Label 59: @1147
1133
706
      GIM_Try, /*On fail goto*//*Label 60*/ 1199, // Rule ID 411 //
1134
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
1135
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
1136
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
1137
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1138
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_CONSTANT,
1139
706
        GIM_CheckI64ImmPredicate, /*MI*/1, /*Predicate*/GIPFP_I64_Predicate_t2_so_imm,
1140
706
        // MIs[1] Operand 1
1141
706
        // No operand predicates
1142
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1143
706
        // (add:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, (imm:{ *:[i32] })<<P:Predicate_t2_so_imm>>:$imm)  =>  (t2ADDri:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
1144
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2ADDri,
1145
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1146
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
1147
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // imm
1148
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1149
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1150
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1151
706
        GIR_EraseFromParent, /*InsnID*/0,
1152
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1153
706
        // GIR_Coverage, 411,
1154
706
        GIR_Done,
1155
706
      // Label 60: @1199
1156
706
      GIM_Try, /*On fail goto*//*Label 61*/ 1248, // Rule ID 412 //
1157
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
1158
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
1159
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
1160
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1161
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_CONSTANT,
1162
706
        GIM_CheckI64ImmPredicate, /*MI*/1, /*Predicate*/GIPFP_I64_Predicate_imm0_4095,
1163
706
        // MIs[1] Operand 1
1164
706
        // No operand predicates
1165
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1166
706
        // (add:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] })<<P:Predicate_imm0_4095>>:$imm)  =>  (t2ADDri12:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
1167
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2ADDri12,
1168
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1169
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
1170
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // imm
1171
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1172
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1173
706
        GIR_EraseFromParent, /*InsnID*/0,
1174
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1175
706
        // GIR_Coverage, 412,
1176
706
        GIR_Done,
1177
706
      // Label 61: @1248
1178
706
      GIM_Try, /*On fail goto*//*Label 62*/ 1318, // Rule ID 173 //
1179
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM_UseMulOps,
1180
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
1181
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1182
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1183
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
1184
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
1185
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
1186
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::GPRnopcRegClassID,
1187
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRnopcRegClassID,
1188
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1189
706
        // (add:{ *:[i32] } (mul:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm), GPRnopc:{ *:[i32] }:$Ra)  =>  (MLA:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm, GPRnopc:{ *:[i32] }:$Ra)
1190
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::MLA,
1191
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1192
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rn
1193
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Rm
1194
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Ra
1195
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1196
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1197
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1198
706
        GIR_EraseFromParent, /*InsnID*/0,
1199
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1200
706
        // GIR_Coverage, 173,
1201
706
        GIR_Done,
1202
706
      // Label 62: @1318
1203
706
      GIM_Try, /*On fail goto*//*Label 63*/ 1388, // Rule ID 174 //
1204
706
        GIM_CheckFeatures, GIFBS_IsARM_NoV6,
1205
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
1206
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1207
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1208
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
1209
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
1210
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
1211
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::GPRnopcRegClassID,
1212
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRnopcRegClassID,
1213
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1214
706
        // (add:{ *:[i32] } (mul:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm), GPRnopc:{ *:[i32] }:$Ra)  =>  (MLAv5:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm, GPRnopc:{ *:[i32] }:$Ra)
1215
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::MLAv5,
1216
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1217
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rn
1218
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Rm
1219
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Ra
1220
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1221
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1222
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1223
706
        GIR_EraseFromParent, /*InsnID*/0,
1224
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1225
706
        // GIR_Coverage, 174,
1226
706
        GIR_Done,
1227
706
      // Label 63: @1388
1228
706
      GIM_Try, /*On fail goto*//*Label 64*/ 1455, // Rule ID 507 //
1229
706
        GIM_CheckFeatures, GIFBS_IsThumb2_UseMulOps,
1230
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
1231
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1232
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1233
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
1234
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
1235
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
1236
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
1237
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
1238
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1239
706
        // (add:{ *:[i32] } (mul:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm), rGPR:{ *:[i32] }:$Ra)  =>  (t2MLA:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm, rGPR:{ *:[i32] }:$Ra)
1240
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2MLA,
1241
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1242
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rn
1243
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Rm
1244
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Ra
1245
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1246
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1247
706
        GIR_EraseFromParent, /*InsnID*/0,
1248
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1249
706
        // GIR_Coverage, 507,
1250
706
        GIR_Done,
1251
706
      // Label 64: @1455
1252
706
      GIM_Try, /*On fail goto*//*Label 65*/ 1525, // Rule ID 2538 //
1253
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM_UseMulOps,
1254
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
1255
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
1256
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1257
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1258
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
1259
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
1260
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
1261
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::GPRnopcRegClassID,
1262
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1263
706
        // (add:{ *:[i32] } GPRnopc:{ *:[i32] }:$Ra, (mul:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm))  =>  (MLA:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm, GPRnopc:{ *:[i32] }:$Ra)
1264
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::MLA,
1265
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1266
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rn
1267
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Rm
1268
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Ra
1269
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1270
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1271
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1272
706
        GIR_EraseFromParent, /*InsnID*/0,
1273
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1274
706
        // GIR_Coverage, 2538,
1275
706
        GIR_Done,
1276
706
      // Label 65: @1525
1277
706
      GIM_Try, /*On fail goto*//*Label 66*/ 1595, // Rule ID 2539 //
1278
706
        GIM_CheckFeatures, GIFBS_IsARM_NoV6,
1279
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
1280
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
1281
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1282
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1283
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
1284
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
1285
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
1286
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::GPRnopcRegClassID,
1287
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1288
706
        // (add:{ *:[i32] } GPRnopc:{ *:[i32] }:$Ra, (mul:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm))  =>  (MLAv5:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm, GPRnopc:{ *:[i32] }:$Ra)
1289
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::MLAv5,
1290
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1291
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rn
1292
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Rm
1293
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Ra
1294
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1295
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1296
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1297
706
        GIR_EraseFromParent, /*InsnID*/0,
1298
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1299
706
        // GIR_Coverage, 2539,
1300
706
        GIR_Done,
1301
706
      // Label 66: @1595
1302
706
      GIM_Try, /*On fail goto*//*Label 67*/ 1662, // Rule ID 2576 //
1303
706
        GIM_CheckFeatures, GIFBS_IsThumb2_UseMulOps,
1304
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
1305
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
1306
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1307
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1308
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
1309
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
1310
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
1311
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
1312
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1313
706
        // (add:{ *:[i32] } rGPR:{ *:[i32] }:$Ra, (mul:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm))  =>  (t2MLA:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm, rGPR:{ *:[i32] }:$Ra)
1314
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2MLA,
1315
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1316
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rn
1317
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Rm
1318
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Ra
1319
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1320
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1321
706
        GIR_EraseFromParent, /*InsnID*/0,
1322
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1323
706
        // GIR_Coverage, 2576,
1324
706
        GIR_Done,
1325
706
      // Label 67: @1662
1326
706
      GIM_Try, /*On fail goto*//*Label 68*/ 1707, // Rule ID 75 //
1327
706
        GIM_CheckFeatures, GIFBS_IsARM,
1328
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
1329
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
1330
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
1331
706
        // (add:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm)  =>  (ADDrr:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm)
1332
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::ADDrr,
1333
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1334
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
1335
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
1336
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1337
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1338
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1339
706
        GIR_EraseFromParent, /*InsnID*/0,
1340
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1341
706
        // GIR_Coverage, 75,
1342
706
        GIR_Done,
1343
706
      // Label 68: @1707
1344
706
      GIM_Try, /*On fail goto*//*Label 69*/ 1752, // Rule ID 413 //
1345
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
1346
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
1347
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
1348
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
1349
706
        // (add:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)  =>  (t2ADDrr:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)
1350
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2ADDrr,
1351
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1352
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
1353
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
1354
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1355
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1356
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1357
706
        GIR_EraseFromParent, /*InsnID*/0,
1358
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1359
706
        // GIR_Coverage, 413,
1360
706
        GIR_Done,
1361
706
      // Label 69: @1752
1362
706
      GIM_Try, /*On fail goto*//*Label 70*/ 1797, // Rule ID 2558 //
1363
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
1364
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
1365
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
1366
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRnopcRegClassID,
1367
706
        // (add:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, GPRnopc:{ *:[i32] }:$Rn)  =>  (t2ADDrr:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)
1368
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2ADDrr,
1369
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
1370
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
1371
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rm
1372
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1373
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1374
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1375
706
        GIR_EraseFromParent, /*InsnID*/0,
1376
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1377
706
        // GIR_Coverage, 2558,
1378
706
        GIR_Done,
1379
706
      // Label 70: @1797
1380
706
      GIM_Reject,
1381
706
    // Label 46: @1798
1382
706
    GIM_Reject,
1383
706
    // Label 37: @1799
1384
706
    GIM_Try, /*On fail goto*//*Label 71*/ 1849, // Rule ID 760 //
1385
706
      GIM_CheckFeatures, GIFBS_HasNEON,
1386
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64,
1387
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64,
1388
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
1389
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1390
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1391
706
      // (add:{ *:[v1i64] } DPR:{ *:[v1i64] }:$Vn, DPR:{ *:[v1i64] }:$Vm)  =>  (VADDv1i64:{ *:[v1i64] } DPR:{ *:[v1i64] }:$Vn, DPR:{ *:[v1i64] }:$Vm)
1392
706
      GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDv1i64,
1393
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1394
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
1395
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
1396
706
      GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1397
706
      GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1398
706
      GIR_EraseFromParent, /*InsnID*/0,
1399
706
      GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1400
706
      // GIR_Coverage, 760,
1401
706
      GIR_Done,
1402
706
    // Label 71: @1849
1403
706
    GIM_Reject,
1404
706
    // Label 38: @1850
1405
706
    GIM_Try, /*On fail goto*//*Label 72*/ 2309,
1406
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v2s32,
1407
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v2s32,
1408
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
1409
706
      GIM_Try, /*On fail goto*//*Label 73*/ 1934, // Rule ID 2696 //
1410
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1411
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1412
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
1413
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
1414
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
1415
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v2s32,
1416
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v2s32,
1417
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1418
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1419
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1420
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1421
706
        // (add:{ *:[v2i32] } (intrinsic_wo_chain:{ *:[v2i32] } 1051:{ *:[iPTR] }, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm), DPR:{ *:[v2i32] }:$src1)  =>  (VABAsv2i32:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1422
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv2i32,
1423
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1424
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
1425
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
1426
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
1427
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1428
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1429
706
        GIR_EraseFromParent, /*InsnID*/0,
1430
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1431
706
        // GIR_Coverage, 2696,
1432
706
        GIR_Done,
1433
706
      // Label 73: @1934
1434
706
      GIM_Try, /*On fail goto*//*Label 74*/ 2004, // Rule ID 2702 //
1435
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1436
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1437
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
1438
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
1439
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
1440
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v2s32,
1441
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v2s32,
1442
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1443
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1444
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1445
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1446
706
        // (add:{ *:[v2i32] } (intrinsic_wo_chain:{ *:[v2i32] } 1052:{ *:[iPTR] }, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm), DPR:{ *:[v2i32] }:$src1)  =>  (VABAuv2i32:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1447
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv2i32,
1448
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1449
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
1450
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
1451
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
1452
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1453
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1454
706
        GIR_EraseFromParent, /*InsnID*/0,
1455
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1456
706
        // GIR_Coverage, 2702,
1457
706
        GIR_Done,
1458
706
      // Label 74: @2004
1459
706
      GIM_Try, /*On fail goto*//*Label 75*/ 2074, // Rule ID 1152 //
1460
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1461
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1462
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1463
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
1464
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
1465
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
1466
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v2s32,
1467
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v2s32,
1468
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1469
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1470
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1471
706
        // (add:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, (intrinsic_wo_chain:{ *:[v2i32] } 1051:{ *:[iPTR] }, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm))  =>  (VABAsv2i32:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1472
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv2i32,
1473
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1474
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
1475
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
1476
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
1477
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1478
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1479
706
        GIR_EraseFromParent, /*InsnID*/0,
1480
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1481
706
        // GIR_Coverage, 1152,
1482
706
        GIR_Done,
1483
706
      // Label 75: @2074
1484
706
      GIM_Try, /*On fail goto*//*Label 76*/ 2144, // Rule ID 1158 //
1485
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1486
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1487
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1488
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
1489
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
1490
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
1491
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v2s32,
1492
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v2s32,
1493
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1494
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1495
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1496
706
        // (add:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, (intrinsic_wo_chain:{ *:[v2i32] } 1052:{ *:[iPTR] }, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm))  =>  (VABAuv2i32:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1497
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv2i32,
1498
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1499
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
1500
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
1501
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
1502
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1503
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1504
706
        GIR_EraseFromParent, /*InsnID*/0,
1505
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1506
706
        // GIR_Coverage, 1158,
1507
706
        GIR_Done,
1508
706
      // Label 76: @2144
1509
706
      GIM_Try, /*On fail goto*//*Label 77*/ 2207, // Rule ID 2626 //
1510
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1511
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1512
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1513
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1514
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v2s32,
1515
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1516
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1517
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1518
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1519
706
        // (add:{ *:[v2i32] } (mul:{ *:[v2i32] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm), DPR:{ *:[v2i32] }:$src1)  =>  (VMLAv2i32:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1520
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv2i32,
1521
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1522
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
1523
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
1524
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
1525
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1526
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1527
706
        GIR_EraseFromParent, /*InsnID*/0,
1528
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1529
706
        // GIR_Coverage, 2626,
1530
706
        GIR_Done,
1531
706
      // Label 77: @2207
1532
706
      GIM_Try, /*On fail goto*//*Label 78*/ 2270, // Rule ID 875 //
1533
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1534
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1535
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1536
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1537
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1538
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v2s32,
1539
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1540
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1541
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1542
706
        // (add:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, (mul:{ *:[v2i32] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm))  =>  (VMLAv2i32:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1543
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv2i32,
1544
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1545
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
1546
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
1547
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
1548
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1549
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1550
706
        GIR_EraseFromParent, /*InsnID*/0,
1551
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1552
706
        // GIR_Coverage, 875,
1553
706
        GIR_Done,
1554
706
      // Label 78: @2270
1555
706
      GIM_Try, /*On fail goto*//*Label 79*/ 2308, // Rule ID 756 //
1556
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1557
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1558
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1559
706
        // (add:{ *:[v2i32] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)  =>  (VADDv2i32:{ *:[v2i32] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1560
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDv2i32,
1561
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1562
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
1563
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
1564
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1565
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1566
706
        GIR_EraseFromParent, /*InsnID*/0,
1567
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1568
706
        // GIR_Coverage, 756,
1569
706
        GIR_Done,
1570
706
      // Label 79: @2308
1571
706
      GIM_Reject,
1572
706
    // Label 72: @2309
1573
706
    GIM_Reject,
1574
706
    // Label 39: @2310
1575
706
    GIM_Try, /*On fail goto*//*Label 80*/ 3027,
1576
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v2s64,
1577
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v2s64,
1578
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
1579
706
      GIM_Try, /*On fail goto*//*Label 81*/ 2407, // Rule ID 2708 //
1580
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1581
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1582
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
1583
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1584
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
1585
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
1586
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
1587
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabds,
1588
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v2s32,
1589
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v2s32,
1590
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1591
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1592
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
1593
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1594
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
1595
706
        // (add:{ *:[v2i64] } (zext:{ *:[v2i64] } (intrinsic_wo_chain:{ *:[v2i32] } 1051:{ *:[iPTR] }, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)), QPR:{ *:[v2i64] }:$src1)  =>  (VABALsv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1596
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALsv2i64,
1597
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1598
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
1599
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
1600
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
1601
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1602
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1603
706
        GIR_EraseFromParent, /*InsnID*/0,
1604
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1605
706
        // GIR_Coverage, 2708,
1606
706
        GIR_Done,
1607
706
      // Label 81: @2407
1608
706
      GIM_Try, /*On fail goto*//*Label 82*/ 2490, // Rule ID 2711 //
1609
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1610
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1611
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
1612
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1613
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
1614
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
1615
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
1616
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabdu,
1617
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v2s32,
1618
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v2s32,
1619
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1620
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1621
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
1622
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1623
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
1624
706
        // (add:{ *:[v2i64] } (zext:{ *:[v2i64] } (intrinsic_wo_chain:{ *:[v2i32] } 1052:{ *:[iPTR] }, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)), QPR:{ *:[v2i64] }:$src1)  =>  (VABALuv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1625
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALuv2i64,
1626
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1627
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
1628
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
1629
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
1630
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1631
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1632
706
        GIR_EraseFromParent, /*InsnID*/0,
1633
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1634
706
        // GIR_Coverage, 2711,
1635
706
        GIR_Done,
1636
706
      // Label 82: @2490
1637
706
      GIM_Try, /*On fail goto*//*Label 83*/ 2573, // Rule ID 1164 //
1638
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1639
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
1640
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1641
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
1642
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1643
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
1644
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
1645
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
1646
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabds,
1647
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v2s32,
1648
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v2s32,
1649
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1650
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1651
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1652
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
1653
706
        // (add:{ *:[v2i64] } QPR:{ *:[v2i64] }:$src1, (zext:{ *:[v2i64] } (intrinsic_wo_chain:{ *:[v2i32] } 1051:{ *:[iPTR] }, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)))  =>  (VABALsv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1654
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALsv2i64,
1655
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1656
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
1657
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
1658
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
1659
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1660
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1661
706
        GIR_EraseFromParent, /*InsnID*/0,
1662
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1663
706
        // GIR_Coverage, 1164,
1664
706
        GIR_Done,
1665
706
      // Label 83: @2573
1666
706
      GIM_Try, /*On fail goto*//*Label 84*/ 2656, // Rule ID 1167 //
1667
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1668
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
1669
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1670
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
1671
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1672
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
1673
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
1674
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
1675
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabdu,
1676
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v2s32,
1677
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v2s32,
1678
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1679
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1680
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1681
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
1682
706
        // (add:{ *:[v2i64] } QPR:{ *:[v2i64] }:$src1, (zext:{ *:[v2i64] } (intrinsic_wo_chain:{ *:[v2i32] } 1052:{ *:[iPTR] }, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)))  =>  (VABALuv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1683
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALuv2i64,
1684
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1685
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
1686
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
1687
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
1688
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1689
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1690
706
        GIR_EraseFromParent, /*InsnID*/0,
1691
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1692
706
        // GIR_Coverage, 1167,
1693
706
        GIR_Done,
1694
706
      // Label 84: @2656
1695
706
      GIM_Try, /*On fail goto*//*Label 85*/ 2720, // Rule ID 768 //
1696
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1697
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1698
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
1699
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1700
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1701
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
1702
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_SEXT,
1703
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v2s32,
1704
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1705
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1706
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
1707
706
        // (add:{ *:[v2i64] } (sext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vn), (sext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vm))  =>  (VADDLsv2i64:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1708
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDLsv2i64,
1709
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1710
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
1711
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
1712
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1713
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1714
706
        GIR_EraseFromParent, /*InsnID*/0,
1715
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1716
706
        // GIR_Coverage, 768,
1717
706
        GIR_Done,
1718
706
      // Label 85: @2720
1719
706
      GIM_Try, /*On fail goto*//*Label 86*/ 2784, // Rule ID 771 //
1720
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1721
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1722
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
1723
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1724
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1725
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
1726
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ZEXT,
1727
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v2s32,
1728
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1729
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1730
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
1731
706
        // (add:{ *:[v2i64] } (zext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vn), (zext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vm))  =>  (VADDLuv2i64:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1732
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDLuv2i64,
1733
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1734
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
1735
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
1736
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1737
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1738
706
        GIR_EraseFromParent, /*InsnID*/0,
1739
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1740
706
        // GIR_Coverage, 771,
1741
706
        GIR_Done,
1742
706
      // Label 86: @2784
1743
706
      GIM_Try, /*On fail goto*//*Label 87*/ 2835, // Rule ID 2602 //
1744
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1745
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1746
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
1747
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1748
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1749
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
1750
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1751
706
        // (add:{ *:[v2i64] } (sext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vm), QPR:{ *:[v2i64] }:$Vn)  =>  (VADDWsv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1752
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWsv2i64,
1753
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1754
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vn
1755
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
1756
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1757
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1758
706
        GIR_EraseFromParent, /*InsnID*/0,
1759
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1760
706
        // GIR_Coverage, 2602,
1761
706
        GIR_Done,
1762
706
      // Label 87: @2835
1763
706
      GIM_Try, /*On fail goto*//*Label 88*/ 2886, // Rule ID 2605 //
1764
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1765
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1766
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
1767
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1768
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1769
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
1770
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1771
706
        // (add:{ *:[v2i64] } (zext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vm), QPR:{ *:[v2i64] }:$Vn)  =>  (VADDWuv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1772
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWuv2i64,
1773
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1774
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vn
1775
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
1776
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1777
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1778
706
        GIR_EraseFromParent, /*InsnID*/0,
1779
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1780
706
        // GIR_Coverage, 2605,
1781
706
        GIR_Done,
1782
706
      // Label 88: @2886
1783
706
      GIM_Try, /*On fail goto*//*Label 89*/ 2937, // Rule ID 774 //
1784
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1785
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
1786
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1787
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
1788
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1789
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1790
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1791
706
        // (add:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, (sext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vm))  =>  (VADDWsv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1792
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWsv2i64,
1793
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1794
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
1795
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
1796
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1797
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1798
706
        GIR_EraseFromParent, /*InsnID*/0,
1799
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1800
706
        // GIR_Coverage, 774,
1801
706
        GIR_Done,
1802
706
      // Label 89: @2937
1803
706
      GIM_Try, /*On fail goto*//*Label 90*/ 2988, // Rule ID 777 //
1804
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1805
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
1806
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1807
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
1808
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
1809
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1810
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1811
706
        // (add:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, (zext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vm))  =>  (VADDWuv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
1812
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWuv2i64,
1813
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1814
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
1815
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
1816
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1817
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1818
706
        GIR_EraseFromParent, /*InsnID*/0,
1819
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1820
706
        // GIR_Coverage, 777,
1821
706
        GIR_Done,
1822
706
      // Label 90: @2988
1823
706
      GIM_Try, /*On fail goto*//*Label 91*/ 3026, // Rule ID 761 //
1824
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1825
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
1826
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
1827
706
        // (add:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, QPR:{ *:[v2i64] }:$Vm)  =>  (VADDv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, QPR:{ *:[v2i64] }:$Vm)
1828
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDv2i64,
1829
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1830
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
1831
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
1832
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1833
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1834
706
        GIR_EraseFromParent, /*InsnID*/0,
1835
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1836
706
        // GIR_Coverage, 761,
1837
706
        GIR_Done,
1838
706
      // Label 91: @3026
1839
706
      GIM_Reject,
1840
706
    // Label 80: @3027
1841
706
    GIM_Reject,
1842
706
    // Label 40: @3028
1843
706
    GIM_Try, /*On fail goto*//*Label 92*/ 3487,
1844
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v4s16,
1845
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v4s16,
1846
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
1847
706
      GIM_Try, /*On fail goto*//*Label 93*/ 3112, // Rule ID 2695 //
1848
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1849
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1850
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
1851
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
1852
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
1853
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s16,
1854
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v4s16,
1855
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1856
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1857
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1858
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1859
706
        // (add:{ *:[v4i16] } (intrinsic_wo_chain:{ *:[v4i16] } 1051:{ *:[iPTR] }, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm), DPR:{ *:[v4i16] }:$src1)  =>  (VABAsv4i16:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
1860
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv4i16,
1861
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1862
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
1863
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
1864
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
1865
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1866
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1867
706
        GIR_EraseFromParent, /*InsnID*/0,
1868
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1869
706
        // GIR_Coverage, 2695,
1870
706
        GIR_Done,
1871
706
      // Label 93: @3112
1872
706
      GIM_Try, /*On fail goto*//*Label 94*/ 3182, // Rule ID 2701 //
1873
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1874
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1875
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
1876
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
1877
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
1878
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s16,
1879
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v4s16,
1880
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1881
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1882
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1883
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1884
706
        // (add:{ *:[v4i16] } (intrinsic_wo_chain:{ *:[v4i16] } 1052:{ *:[iPTR] }, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm), DPR:{ *:[v4i16] }:$src1)  =>  (VABAuv4i16:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
1885
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv4i16,
1886
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1887
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
1888
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
1889
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
1890
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1891
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1892
706
        GIR_EraseFromParent, /*InsnID*/0,
1893
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1894
706
        // GIR_Coverage, 2701,
1895
706
        GIR_Done,
1896
706
      // Label 94: @3182
1897
706
      GIM_Try, /*On fail goto*//*Label 95*/ 3252, // Rule ID 1151 //
1898
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1899
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1900
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1901
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
1902
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
1903
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
1904
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s16,
1905
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v4s16,
1906
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1907
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1908
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1909
706
        // (add:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, (intrinsic_wo_chain:{ *:[v4i16] } 1051:{ *:[iPTR] }, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm))  =>  (VABAsv4i16:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
1910
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv4i16,
1911
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1912
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
1913
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
1914
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
1915
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1916
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1917
706
        GIR_EraseFromParent, /*InsnID*/0,
1918
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1919
706
        // GIR_Coverage, 1151,
1920
706
        GIR_Done,
1921
706
      // Label 95: @3252
1922
706
      GIM_Try, /*On fail goto*//*Label 96*/ 3322, // Rule ID 1157 //
1923
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1924
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1925
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1926
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
1927
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
1928
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
1929
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s16,
1930
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v4s16,
1931
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1932
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
1933
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1934
706
        // (add:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, (intrinsic_wo_chain:{ *:[v4i16] } 1052:{ *:[iPTR] }, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm))  =>  (VABAuv4i16:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
1935
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv4i16,
1936
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1937
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
1938
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
1939
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
1940
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1941
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1942
706
        GIR_EraseFromParent, /*InsnID*/0,
1943
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1944
706
        // GIR_Coverage, 1157,
1945
706
        GIR_Done,
1946
706
      // Label 96: @3322
1947
706
      GIM_Try, /*On fail goto*//*Label 97*/ 3385, // Rule ID 2625 //
1948
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1949
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
1950
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1951
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
1952
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s16,
1953
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1954
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1955
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1956
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1957
706
        // (add:{ *:[v4i16] } (mul:{ *:[v4i16] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm), DPR:{ *:[v4i16] }:$src1)  =>  (VMLAv4i16:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
1958
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv4i16,
1959
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1960
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
1961
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
1962
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
1963
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1964
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1965
706
        GIR_EraseFromParent, /*InsnID*/0,
1966
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1967
706
        // GIR_Coverage, 2625,
1968
706
        GIR_Done,
1969
706
      // Label 97: @3385
1970
706
      GIM_Try, /*On fail goto*//*Label 98*/ 3448, // Rule ID 874 //
1971
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1972
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1973
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
1974
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
1975
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
1976
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s16,
1977
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1978
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1979
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
1980
706
        // (add:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, (mul:{ *:[v4i16] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm))  =>  (VMLAv4i16:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
1981
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv4i16,
1982
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
1983
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
1984
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
1985
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
1986
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
1987
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
1988
706
        GIR_EraseFromParent, /*InsnID*/0,
1989
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
1990
706
        // GIR_Coverage, 874,
1991
706
        GIR_Done,
1992
706
      // Label 98: @3448
1993
706
      GIM_Try, /*On fail goto*//*Label 99*/ 3486, // Rule ID 755 //
1994
706
        GIM_CheckFeatures, GIFBS_HasNEON,
1995
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
1996
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
1997
706
        // (add:{ *:[v4i16] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)  =>  (VADDv4i16:{ *:[v4i16] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
1998
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDv4i16,
1999
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2000
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
2001
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
2002
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2003
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2004
706
        GIR_EraseFromParent, /*InsnID*/0,
2005
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2006
706
        // GIR_Coverage, 755,
2007
706
        GIR_Done,
2008
706
      // Label 99: @3486
2009
706
      GIM_Reject,
2010
706
    // Label 92: @3487
2011
706
    GIM_Reject,
2012
706
    // Label 41: @3488
2013
706
    GIM_Try, /*On fail goto*//*Label 100*/ 4611,
2014
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v4s32,
2015
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v4s32,
2016
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
2017
706
      GIM_Try, /*On fail goto*//*Label 101*/ 3585, // Rule ID 2707 //
2018
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2019
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2020
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2021
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
2022
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
2023
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
2024
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
2025
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabds,
2026
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v4s16,
2027
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v4s16,
2028
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2029
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2030
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2031
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2032
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2033
706
        // (add:{ *:[v4i32] } (zext:{ *:[v4i32] } (intrinsic_wo_chain:{ *:[v4i16] } 1051:{ *:[iPTR] }, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)), QPR:{ *:[v4i32] }:$src1)  =>  (VABALsv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
2034
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALsv4i32,
2035
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2036
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2037
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
2038
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
2039
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2040
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2041
706
        GIR_EraseFromParent, /*InsnID*/0,
2042
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2043
706
        // GIR_Coverage, 2707,
2044
706
        GIR_Done,
2045
706
      // Label 101: @3585
2046
706
      GIM_Try, /*On fail goto*//*Label 102*/ 3668, // Rule ID 2710 //
2047
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2048
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2049
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2050
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
2051
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
2052
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
2053
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
2054
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabdu,
2055
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v4s16,
2056
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v4s16,
2057
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2058
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2059
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2060
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2061
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2062
706
        // (add:{ *:[v4i32] } (zext:{ *:[v4i32] } (intrinsic_wo_chain:{ *:[v4i16] } 1052:{ *:[iPTR] }, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)), QPR:{ *:[v4i32] }:$src1)  =>  (VABALuv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
2063
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALuv4i32,
2064
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2065
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2066
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
2067
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
2068
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2069
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2070
706
        GIR_EraseFromParent, /*InsnID*/0,
2071
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2072
706
        // GIR_Coverage, 2710,
2073
706
        GIR_Done,
2074
706
      // Label 102: @3668
2075
706
      GIM_Try, /*On fail goto*//*Label 103*/ 3751, // Rule ID 1163 //
2076
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2077
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2078
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2079
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2080
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
2081
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
2082
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
2083
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
2084
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabds,
2085
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v4s16,
2086
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v4s16,
2087
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2088
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2089
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2090
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2091
706
        // (add:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, (zext:{ *:[v4i32] } (intrinsic_wo_chain:{ *:[v4i16] } 1051:{ *:[iPTR] }, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)))  =>  (VABALsv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
2092
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALsv4i32,
2093
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2094
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2095
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
2096
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
2097
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2098
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2099
706
        GIR_EraseFromParent, /*InsnID*/0,
2100
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2101
706
        // GIR_Coverage, 1163,
2102
706
        GIR_Done,
2103
706
      // Label 103: @3751
2104
706
      GIM_Try, /*On fail goto*//*Label 104*/ 3834, // Rule ID 1166 //
2105
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2106
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2107
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2108
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2109
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
2110
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
2111
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
2112
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
2113
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabdu,
2114
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v4s16,
2115
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v4s16,
2116
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2117
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2118
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2119
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2120
706
        // (add:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, (zext:{ *:[v4i32] } (intrinsic_wo_chain:{ *:[v4i16] } 1052:{ *:[iPTR] }, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)))  =>  (VABALuv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
2121
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALuv4i32,
2122
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2123
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2124
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
2125
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
2126
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2127
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2128
706
        GIR_EraseFromParent, /*InsnID*/0,
2129
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2130
706
        // GIR_Coverage, 1166,
2131
706
        GIR_Done,
2132
706
      // Label 104: @3834
2133
706
      GIM_Try, /*On fail goto*//*Label 105*/ 3904, // Rule ID 2699 //
2134
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2135
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2136
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2137
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2138
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
2139
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s32,
2140
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v4s32,
2141
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2142
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
2143
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2144
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2145
706
        // (add:{ *:[v4i32] } (intrinsic_wo_chain:{ *:[v4i32] } 1051:{ *:[iPTR] }, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm), QPR:{ *:[v4i32] }:$src1)  =>  (VABAsv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)
2146
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv4i32,
2147
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2148
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2149
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2150
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2151
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2152
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2153
706
        GIR_EraseFromParent, /*InsnID*/0,
2154
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2155
706
        // GIR_Coverage, 2699,
2156
706
        GIR_Done,
2157
706
      // Label 105: @3904
2158
706
      GIM_Try, /*On fail goto*//*Label 106*/ 3974, // Rule ID 2705 //
2159
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2160
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2161
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2162
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2163
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
2164
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s32,
2165
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v4s32,
2166
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2167
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
2168
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2169
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2170
706
        // (add:{ *:[v4i32] } (intrinsic_wo_chain:{ *:[v4i32] } 1052:{ *:[iPTR] }, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm), QPR:{ *:[v4i32] }:$src1)  =>  (VABAuv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)
2171
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv4i32,
2172
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2173
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2174
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2175
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2176
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2177
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2178
706
        GIR_EraseFromParent, /*InsnID*/0,
2179
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2180
706
        // GIR_Coverage, 2705,
2181
706
        GIR_Done,
2182
706
      // Label 106: @3974
2183
706
      GIM_Try, /*On fail goto*//*Label 107*/ 4044, // Rule ID 1155 //
2184
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2185
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2186
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2187
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2188
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2189
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
2190
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s32,
2191
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v4s32,
2192
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2193
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
2194
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2195
706
        // (add:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, (intrinsic_wo_chain:{ *:[v4i32] } 1051:{ *:[iPTR] }, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm))  =>  (VABAsv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)
2196
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv4i32,
2197
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2198
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2199
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2200
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2201
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2202
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2203
706
        GIR_EraseFromParent, /*InsnID*/0,
2204
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2205
706
        // GIR_Coverage, 1155,
2206
706
        GIR_Done,
2207
706
      // Label 107: @4044
2208
706
      GIM_Try, /*On fail goto*//*Label 108*/ 4114, // Rule ID 1161 //
2209
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2210
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2211
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2212
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2213
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2214
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
2215
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s32,
2216
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v4s32,
2217
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2218
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
2219
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2220
706
        // (add:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, (intrinsic_wo_chain:{ *:[v4i32] } 1052:{ *:[iPTR] }, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm))  =>  (VABAuv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)
2221
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv4i32,
2222
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2223
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2224
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2225
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2226
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2227
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2228
706
        GIR_EraseFromParent, /*InsnID*/0,
2229
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2230
706
        // GIR_Coverage, 1161,
2231
706
        GIR_Done,
2232
706
      // Label 108: @4114
2233
706
      GIM_Try, /*On fail goto*//*Label 109*/ 4178, // Rule ID 767 //
2234
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2235
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2236
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
2237
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
2238
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2239
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
2240
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_SEXT,
2241
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v4s16,
2242
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2243
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2244
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2245
706
        // (add:{ *:[v4i32] } (sext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vn), (sext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vm))  =>  (VADDLsv4i32:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
2246
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDLsv4i32,
2247
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2248
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
2249
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
2250
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2251
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2252
706
        GIR_EraseFromParent, /*InsnID*/0,
2253
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2254
706
        // GIR_Coverage, 767,
2255
706
        GIR_Done,
2256
706
      // Label 109: @4178
2257
706
      GIM_Try, /*On fail goto*//*Label 110*/ 4242, // Rule ID 770 //
2258
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2259
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2260
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2261
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
2262
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2263
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
2264
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ZEXT,
2265
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v4s16,
2266
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2267
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2268
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2269
706
        // (add:{ *:[v4i32] } (zext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vn), (zext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vm))  =>  (VADDLuv4i32:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
2270
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDLuv4i32,
2271
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2272
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
2273
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
2274
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2275
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2276
706
        GIR_EraseFromParent, /*InsnID*/0,
2277
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2278
706
        // GIR_Coverage, 770,
2279
706
        GIR_Done,
2280
706
      // Label 110: @4242
2281
706
      GIM_Try, /*On fail goto*//*Label 111*/ 4305, // Rule ID 2629 //
2282
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2283
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2284
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
2285
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s32,
2286
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s32,
2287
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2288
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2289
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2290
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2291
706
        // (add:{ *:[v4i32] } (mul:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm), QPR:{ *:[v4i32] }:$src1)  =>  (VMLAv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)
2292
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv4i32,
2293
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2294
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2295
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
2296
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
2297
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2298
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2299
706
        GIR_EraseFromParent, /*InsnID*/0,
2300
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2301
706
        // GIR_Coverage, 2629,
2302
706
        GIR_Done,
2303
706
      // Label 111: @4305
2304
706
      GIM_Try, /*On fail goto*//*Label 112*/ 4356, // Rule ID 2601 //
2305
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2306
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2307
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
2308
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
2309
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2310
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2311
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2312
706
        // (add:{ *:[v4i32] } (sext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vm), QPR:{ *:[v4i32] }:$Vn)  =>  (VADDWsv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
2313
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWsv4i32,
2314
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2315
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vn
2316
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
2317
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2318
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2319
706
        GIR_EraseFromParent, /*InsnID*/0,
2320
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2321
706
        // GIR_Coverage, 2601,
2322
706
        GIR_Done,
2323
706
      // Label 112: @4356
2324
706
      GIM_Try, /*On fail goto*//*Label 113*/ 4407, // Rule ID 2604 //
2325
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2326
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2327
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2328
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
2329
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2330
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2331
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2332
706
        // (add:{ *:[v4i32] } (zext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vm), QPR:{ *:[v4i32] }:$Vn)  =>  (VADDWuv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
2333
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWuv4i32,
2334
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2335
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vn
2336
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
2337
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2338
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2339
706
        GIR_EraseFromParent, /*InsnID*/0,
2340
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2341
706
        // GIR_Coverage, 2604,
2342
706
        GIR_Done,
2343
706
      // Label 113: @4407
2344
706
      GIM_Try, /*On fail goto*//*Label 114*/ 4470, // Rule ID 878 //
2345
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2346
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2347
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2348
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
2349
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s32,
2350
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s32,
2351
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2352
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2353
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2354
706
        // (add:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, (mul:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm))  =>  (VMLAv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)
2355
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv4i32,
2356
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2357
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2358
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
2359
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
2360
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2361
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2362
706
        GIR_EraseFromParent, /*InsnID*/0,
2363
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2364
706
        // GIR_Coverage, 878,
2365
706
        GIR_Done,
2366
706
      // Label 114: @4470
2367
706
      GIM_Try, /*On fail goto*//*Label 115*/ 4521, // Rule ID 773 //
2368
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2369
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2370
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2371
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
2372
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
2373
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2374
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2375
706
        // (add:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, (sext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vm))  =>  (VADDWsv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
2376
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWsv4i32,
2377
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2378
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
2379
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
2380
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2381
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2382
706
        GIR_EraseFromParent, /*InsnID*/0,
2383
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2384
706
        // GIR_Coverage, 773,
2385
706
        GIR_Done,
2386
706
      // Label 115: @4521
2387
706
      GIM_Try, /*On fail goto*//*Label 116*/ 4572, // Rule ID 776 //
2388
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2389
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2390
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2391
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2392
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
2393
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2394
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2395
706
        // (add:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, (zext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vm))  =>  (VADDWuv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
2396
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWuv4i32,
2397
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2398
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
2399
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
2400
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2401
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2402
706
        GIR_EraseFromParent, /*InsnID*/0,
2403
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2404
706
        // GIR_Coverage, 776,
2405
706
        GIR_Done,
2406
706
      // Label 116: @4572
2407
706
      GIM_Try, /*On fail goto*//*Label 117*/ 4610, // Rule ID 759 //
2408
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2409
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2410
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2411
706
        // (add:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)  =>  (VADDv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)
2412
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDv4i32,
2413
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2414
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
2415
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
2416
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2417
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2418
706
        GIR_EraseFromParent, /*InsnID*/0,
2419
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2420
706
        // GIR_Coverage, 759,
2421
706
        GIR_Done,
2422
706
      // Label 117: @4610
2423
706
      GIM_Reject,
2424
706
    // Label 100: @4611
2425
706
    GIM_Reject,
2426
706
    // Label 42: @4612
2427
706
    GIM_Try, /*On fail goto*//*Label 118*/ 5071,
2428
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v8s8,
2429
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v8s8,
2430
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
2431
706
      GIM_Try, /*On fail goto*//*Label 119*/ 4696, // Rule ID 2694 //
2432
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2433
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2434
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2435
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2436
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
2437
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s8,
2438
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v8s8,
2439
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2440
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2441
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2442
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2443
706
        // (add:{ *:[v8i8] } (intrinsic_wo_chain:{ *:[v8i8] } 1051:{ *:[iPTR] }, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm), DPR:{ *:[v8i8] }:$src1)  =>  (VABAsv8i8:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2444
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv8i8,
2445
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2446
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2447
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2448
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2449
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2450
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2451
706
        GIR_EraseFromParent, /*InsnID*/0,
2452
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2453
706
        // GIR_Coverage, 2694,
2454
706
        GIR_Done,
2455
706
      // Label 119: @4696
2456
706
      GIM_Try, /*On fail goto*//*Label 120*/ 4766, // Rule ID 2700 //
2457
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2458
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2459
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2460
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2461
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
2462
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s8,
2463
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v8s8,
2464
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2465
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2466
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2467
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2468
706
        // (add:{ *:[v8i8] } (intrinsic_wo_chain:{ *:[v8i8] } 1052:{ *:[iPTR] }, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm), DPR:{ *:[v8i8] }:$src1)  =>  (VABAuv8i8:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2469
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv8i8,
2470
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2471
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2472
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2473
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2474
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2475
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2476
706
        GIR_EraseFromParent, /*InsnID*/0,
2477
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2478
706
        // GIR_Coverage, 2700,
2479
706
        GIR_Done,
2480
706
      // Label 120: @4766
2481
706
      GIM_Try, /*On fail goto*//*Label 121*/ 4836, // Rule ID 1150 //
2482
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2483
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2484
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2485
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2486
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2487
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
2488
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s8,
2489
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v8s8,
2490
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2491
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2492
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2493
706
        // (add:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, (intrinsic_wo_chain:{ *:[v8i8] } 1051:{ *:[iPTR] }, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm))  =>  (VABAsv8i8:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2494
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv8i8,
2495
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2496
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2497
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2498
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2499
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2500
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2501
706
        GIR_EraseFromParent, /*InsnID*/0,
2502
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2503
706
        // GIR_Coverage, 1150,
2504
706
        GIR_Done,
2505
706
      // Label 121: @4836
2506
706
      GIM_Try, /*On fail goto*//*Label 122*/ 4906, // Rule ID 1156 //
2507
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2508
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2509
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2510
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2511
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2512
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
2513
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s8,
2514
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v8s8,
2515
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2516
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2517
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2518
706
        // (add:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, (intrinsic_wo_chain:{ *:[v8i8] } 1052:{ *:[iPTR] }, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm))  =>  (VABAuv8i8:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2519
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv8i8,
2520
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2521
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2522
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2523
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2524
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2525
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2526
706
        GIR_EraseFromParent, /*InsnID*/0,
2527
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2528
706
        // GIR_Coverage, 1156,
2529
706
        GIR_Done,
2530
706
      // Label 122: @4906
2531
706
      GIM_Try, /*On fail goto*//*Label 123*/ 4969, // Rule ID 2624 //
2532
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2533
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2534
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
2535
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2536
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s8,
2537
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2538
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2539
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2540
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2541
706
        // (add:{ *:[v8i8] } (mul:{ *:[v8i8] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm), DPR:{ *:[v8i8] }:$src1)  =>  (VMLAv8i8:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2542
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv8i8,
2543
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2544
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2545
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
2546
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
2547
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2548
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2549
706
        GIR_EraseFromParent, /*InsnID*/0,
2550
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2551
706
        // GIR_Coverage, 2624,
2552
706
        GIR_Done,
2553
706
      // Label 123: @4969
2554
706
      GIM_Try, /*On fail goto*//*Label 124*/ 5032, // Rule ID 873 //
2555
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2556
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2557
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2558
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
2559
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2560
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s8,
2561
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2562
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2563
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2564
706
        // (add:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, (mul:{ *:[v8i8] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm))  =>  (VMLAv8i8:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2565
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv8i8,
2566
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2567
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2568
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
2569
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
2570
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2571
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2572
706
        GIR_EraseFromParent, /*InsnID*/0,
2573
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2574
706
        // GIR_Coverage, 873,
2575
706
        GIR_Done,
2576
706
      // Label 124: @5032
2577
706
      GIM_Try, /*On fail goto*//*Label 125*/ 5070, // Rule ID 754 //
2578
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2579
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2580
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2581
706
        // (add:{ *:[v8i8] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)  =>  (VADDv8i8:{ *:[v8i8] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2582
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDv8i8,
2583
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2584
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
2585
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
2586
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2587
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2588
706
        GIR_EraseFromParent, /*InsnID*/0,
2589
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2590
706
        // GIR_Coverage, 754,
2591
706
        GIR_Done,
2592
706
      // Label 125: @5070
2593
706
      GIM_Reject,
2594
706
    // Label 118: @5071
2595
706
    GIM_Reject,
2596
706
    // Label 43: @5072
2597
706
    GIM_Try, /*On fail goto*//*Label 126*/ 6195,
2598
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v8s16,
2599
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v8s16,
2600
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
2601
706
      GIM_Try, /*On fail goto*//*Label 127*/ 5169, // Rule ID 2706 //
2602
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2603
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2604
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2605
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2606
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
2607
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
2608
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
2609
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabds,
2610
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v8s8,
2611
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v8s8,
2612
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2613
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2614
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2615
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2616
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2617
706
        // (add:{ *:[v8i16] } (zext:{ *:[v8i16] } (intrinsic_wo_chain:{ *:[v8i8] } 1051:{ *:[iPTR] }, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)), QPR:{ *:[v8i16] }:$src1)  =>  (VABALsv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2618
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALsv8i16,
2619
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2620
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2621
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
2622
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
2623
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2624
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2625
706
        GIR_EraseFromParent, /*InsnID*/0,
2626
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2627
706
        // GIR_Coverage, 2706,
2628
706
        GIR_Done,
2629
706
      // Label 127: @5169
2630
706
      GIM_Try, /*On fail goto*//*Label 128*/ 5252, // Rule ID 2709 //
2631
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2632
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2633
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2634
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2635
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
2636
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
2637
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
2638
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabdu,
2639
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v8s8,
2640
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v8s8,
2641
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2642
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2643
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2644
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2645
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2646
706
        // (add:{ *:[v8i16] } (zext:{ *:[v8i16] } (intrinsic_wo_chain:{ *:[v8i8] } 1052:{ *:[iPTR] }, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)), QPR:{ *:[v8i16] }:$src1)  =>  (VABALuv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2647
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALuv8i16,
2648
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2649
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2650
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
2651
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
2652
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2653
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2654
706
        GIR_EraseFromParent, /*InsnID*/0,
2655
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2656
706
        // GIR_Coverage, 2709,
2657
706
        GIR_Done,
2658
706
      // Label 128: @5252
2659
706
      GIM_Try, /*On fail goto*//*Label 129*/ 5335, // Rule ID 1162 //
2660
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2661
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2662
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2663
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2664
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2665
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
2666
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
2667
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
2668
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabds,
2669
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v8s8,
2670
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v8s8,
2671
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2672
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2673
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2674
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2675
706
        // (add:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, (zext:{ *:[v8i16] } (intrinsic_wo_chain:{ *:[v8i8] } 1051:{ *:[iPTR] }, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)))  =>  (VABALsv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2676
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALsv8i16,
2677
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2678
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2679
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
2680
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
2681
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2682
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2683
706
        GIR_EraseFromParent, /*InsnID*/0,
2684
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2685
706
        // GIR_Coverage, 1162,
2686
706
        GIR_Done,
2687
706
      // Label 129: @5335
2688
706
      GIM_Try, /*On fail goto*//*Label 130*/ 5418, // Rule ID 1165 //
2689
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2690
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2691
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2692
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2693
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2694
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
2695
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_INTRINSIC,
2696
706
        GIM_CheckNumOperands, /*MI*/2, /*Expected*/4,
2697
706
        GIM_CheckIntrinsicID, /*MI*/2, /*Op*/1, Intrinsic::arm_neon_vabdu,
2698
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_v8s8,
2699
706
        GIM_CheckType, /*MI*/2, /*Op*/3, /*Type*/GILLT_v8s8,
2700
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/2, /*RC*/ARM::DPRRegClassID,
2701
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/3, /*RC*/ARM::DPRRegClassID,
2702
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2703
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2704
706
        // (add:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, (zext:{ *:[v8i16] } (intrinsic_wo_chain:{ *:[v8i8] } 1052:{ *:[iPTR] }, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)))  =>  (VABALuv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2705
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABALuv8i16,
2706
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2707
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2708
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/2, // Vn
2709
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/3, // Vm
2710
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2711
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2712
706
        GIR_EraseFromParent, /*InsnID*/0,
2713
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2714
706
        // GIR_Coverage, 1165,
2715
706
        GIR_Done,
2716
706
      // Label 130: @5418
2717
706
      GIM_Try, /*On fail goto*//*Label 131*/ 5488, // Rule ID 2698 //
2718
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2719
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2720
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2721
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2722
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
2723
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s16,
2724
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v8s16,
2725
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2726
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
2727
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2728
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2729
706
        // (add:{ *:[v8i16] } (intrinsic_wo_chain:{ *:[v8i16] } 1051:{ *:[iPTR] }, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm), QPR:{ *:[v8i16] }:$src1)  =>  (VABAsv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)
2730
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv8i16,
2731
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2732
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2733
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2734
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2735
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2736
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2737
706
        GIR_EraseFromParent, /*InsnID*/0,
2738
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2739
706
        // GIR_Coverage, 2698,
2740
706
        GIR_Done,
2741
706
      // Label 131: @5488
2742
706
      GIM_Try, /*On fail goto*//*Label 132*/ 5558, // Rule ID 2704 //
2743
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2744
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2745
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2746
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2747
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
2748
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s16,
2749
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v8s16,
2750
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2751
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
2752
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2753
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2754
706
        // (add:{ *:[v8i16] } (intrinsic_wo_chain:{ *:[v8i16] } 1052:{ *:[iPTR] }, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm), QPR:{ *:[v8i16] }:$src1)  =>  (VABAuv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)
2755
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv8i16,
2756
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2757
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2758
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2759
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2760
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2761
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2762
706
        GIR_EraseFromParent, /*InsnID*/0,
2763
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2764
706
        // GIR_Coverage, 2704,
2765
706
        GIR_Done,
2766
706
      // Label 132: @5558
2767
706
      GIM_Try, /*On fail goto*//*Label 133*/ 5628, // Rule ID 1154 //
2768
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2769
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2770
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2771
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2772
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2773
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
2774
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s16,
2775
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v8s16,
2776
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2777
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
2778
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2779
706
        // (add:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, (intrinsic_wo_chain:{ *:[v8i16] } 1051:{ *:[iPTR] }, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm))  =>  (VABAsv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)
2780
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv8i16,
2781
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2782
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2783
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2784
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2785
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2786
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2787
706
        GIR_EraseFromParent, /*InsnID*/0,
2788
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2789
706
        // GIR_Coverage, 1154,
2790
706
        GIR_Done,
2791
706
      // Label 133: @5628
2792
706
      GIM_Try, /*On fail goto*//*Label 134*/ 5698, // Rule ID 1160 //
2793
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2794
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2795
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2796
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
2797
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
2798
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
2799
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s16,
2800
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v8s16,
2801
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2802
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
2803
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2804
706
        // (add:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, (intrinsic_wo_chain:{ *:[v8i16] } 1052:{ *:[iPTR] }, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm))  =>  (VABAuv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)
2805
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv8i16,
2806
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2807
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2808
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
2809
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
2810
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2811
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2812
706
        GIR_EraseFromParent, /*InsnID*/0,
2813
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2814
706
        // GIR_Coverage, 1160,
2815
706
        GIR_Done,
2816
706
      // Label 134: @5698
2817
706
      GIM_Try, /*On fail goto*//*Label 135*/ 5762, // Rule ID 766 //
2818
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2819
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2820
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
2821
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2822
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2823
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
2824
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_SEXT,
2825
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v8s8,
2826
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2827
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2828
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2829
706
        // (add:{ *:[v8i16] } (sext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vn), (sext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vm))  =>  (VADDLsv8i16:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2830
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDLsv8i16,
2831
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2832
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
2833
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
2834
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2835
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2836
706
        GIR_EraseFromParent, /*InsnID*/0,
2837
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2838
706
        // GIR_Coverage, 766,
2839
706
        GIR_Done,
2840
706
      // Label 135: @5762
2841
706
      GIM_Try, /*On fail goto*//*Label 136*/ 5826, // Rule ID 769 //
2842
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2843
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2844
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2845
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2846
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2847
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
2848
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ZEXT,
2849
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v8s8,
2850
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2851
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2852
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
2853
706
        // (add:{ *:[v8i16] } (zext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vn), (zext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vm))  =>  (VADDLuv8i16:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2854
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDLuv8i16,
2855
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2856
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
2857
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
2858
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2859
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2860
706
        GIR_EraseFromParent, /*InsnID*/0,
2861
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2862
706
        // GIR_Coverage, 769,
2863
706
        GIR_Done,
2864
706
      // Label 136: @5826
2865
706
      GIM_Try, /*On fail goto*//*Label 137*/ 5889, // Rule ID 2628 //
2866
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2867
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2868
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
2869
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s16,
2870
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s16,
2871
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2872
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2873
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2874
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2875
706
        // (add:{ *:[v8i16] } (mul:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm), QPR:{ *:[v8i16] }:$src1)  =>  (VMLAv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)
2876
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv8i16,
2877
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2878
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
2879
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
2880
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
2881
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2882
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2883
706
        GIR_EraseFromParent, /*InsnID*/0,
2884
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2885
706
        // GIR_Coverage, 2628,
2886
706
        GIR_Done,
2887
706
      // Label 137: @5889
2888
706
      GIM_Try, /*On fail goto*//*Label 138*/ 5940, // Rule ID 2600 //
2889
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2890
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2891
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
2892
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2893
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2894
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2895
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2896
706
        // (add:{ *:[v8i16] } (sext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vm), QPR:{ *:[v8i16] }:$Vn)  =>  (VADDWsv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2897
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWsv8i16,
2898
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2899
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vn
2900
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
2901
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2902
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2903
706
        GIR_EraseFromParent, /*InsnID*/0,
2904
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2905
706
        // GIR_Coverage, 2600,
2906
706
        GIR_Done,
2907
706
      // Label 138: @5940
2908
706
      GIM_Try, /*On fail goto*//*Label 139*/ 5991, // Rule ID 2603 //
2909
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2910
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
2911
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2912
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2913
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2914
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2915
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2916
706
        // (add:{ *:[v8i16] } (zext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vm), QPR:{ *:[v8i16] }:$Vn)  =>  (VADDWuv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2917
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWuv8i16,
2918
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2919
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vn
2920
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
2921
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2922
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2923
706
        GIR_EraseFromParent, /*InsnID*/0,
2924
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2925
706
        // GIR_Coverage, 2603,
2926
706
        GIR_Done,
2927
706
      // Label 139: @5991
2928
706
      GIM_Try, /*On fail goto*//*Label 140*/ 6054, // Rule ID 877 //
2929
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2930
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2931
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2932
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
2933
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s16,
2934
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s16,
2935
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2936
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2937
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2938
706
        // (add:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, (mul:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm))  =>  (VMLAv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)
2939
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv8i16,
2940
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2941
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
2942
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
2943
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
2944
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2945
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2946
706
        GIR_EraseFromParent, /*InsnID*/0,
2947
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2948
706
        // GIR_Coverage, 877,
2949
706
        GIR_Done,
2950
706
      // Label 140: @6054
2951
706
      GIM_Try, /*On fail goto*//*Label 141*/ 6105, // Rule ID 772 //
2952
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2953
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2954
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2955
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
2956
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2957
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2958
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2959
706
        // (add:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, (sext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vm))  =>  (VADDWsv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2960
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWsv8i16,
2961
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2962
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
2963
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
2964
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2965
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2966
706
        GIR_EraseFromParent, /*InsnID*/0,
2967
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2968
706
        // GIR_Coverage, 772,
2969
706
        GIR_Done,
2970
706
      // Label 141: @6105
2971
706
      GIM_Try, /*On fail goto*//*Label 142*/ 6156, // Rule ID 775 //
2972
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2973
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2974
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
2975
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
2976
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
2977
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
2978
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
2979
706
        // (add:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, (zext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vm))  =>  (VADDWuv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
2980
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDWuv8i16,
2981
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2982
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
2983
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
2984
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
2985
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
2986
706
        GIR_EraseFromParent, /*InsnID*/0,
2987
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
2988
706
        // GIR_Coverage, 775,
2989
706
        GIR_Done,
2990
706
      // Label 142: @6156
2991
706
      GIM_Try, /*On fail goto*//*Label 143*/ 6194, // Rule ID 758 //
2992
706
        GIM_CheckFeatures, GIFBS_HasNEON,
2993
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
2994
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
2995
706
        // (add:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)  =>  (VADDv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)
2996
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDv8i16,
2997
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
2998
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
2999
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
3000
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3001
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3002
706
        GIR_EraseFromParent, /*InsnID*/0,
3003
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3004
706
        // GIR_Coverage, 758,
3005
706
        GIR_Done,
3006
706
      // Label 143: @6194
3007
706
      GIM_Reject,
3008
706
    // Label 126: @6195
3009
706
    GIM_Reject,
3010
706
    // Label 44: @6196
3011
706
    GIM_Try, /*On fail goto*//*Label 144*/ 6655,
3012
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v16s8,
3013
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v16s8,
3014
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
3015
706
      GIM_Try, /*On fail goto*//*Label 145*/ 6280, // Rule ID 2697 //
3016
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3017
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3018
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
3019
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
3020
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
3021
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v16s8,
3022
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v16s8,
3023
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3024
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
3025
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3026
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3027
706
        // (add:{ *:[v16i8] } (intrinsic_wo_chain:{ *:[v16i8] } 1051:{ *:[iPTR] }, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm), QPR:{ *:[v16i8] }:$src1)  =>  (VABAsv16i8:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)
3028
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv16i8,
3029
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3030
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
3031
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
3032
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
3033
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3034
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3035
706
        GIR_EraseFromParent, /*InsnID*/0,
3036
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3037
706
        // GIR_Coverage, 2697,
3038
706
        GIR_Done,
3039
706
      // Label 145: @6280
3040
706
      GIM_Try, /*On fail goto*//*Label 146*/ 6350, // Rule ID 2703 //
3041
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3042
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3043
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
3044
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
3045
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
3046
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v16s8,
3047
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v16s8,
3048
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3049
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
3050
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3051
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3052
706
        // (add:{ *:[v16i8] } (intrinsic_wo_chain:{ *:[v16i8] } 1052:{ *:[iPTR] }, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm), QPR:{ *:[v16i8] }:$src1)  =>  (VABAuv16i8:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)
3053
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv16i8,
3054
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3055
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
3056
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
3057
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
3058
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3059
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3060
706
        GIR_EraseFromParent, /*InsnID*/0,
3061
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3062
706
        // GIR_Coverage, 2703,
3063
706
        GIR_Done,
3064
706
      // Label 146: @6350
3065
706
      GIM_Try, /*On fail goto*//*Label 147*/ 6420, // Rule ID 1153 //
3066
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3067
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3068
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3069
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
3070
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
3071
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabds,
3072
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v16s8,
3073
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v16s8,
3074
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3075
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
3076
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3077
706
        // (add:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, (intrinsic_wo_chain:{ *:[v16i8] } 1051:{ *:[iPTR] }, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm))  =>  (VABAsv16i8:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)
3078
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAsv16i8,
3079
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3080
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
3081
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
3082
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
3083
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3084
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3085
706
        GIR_EraseFromParent, /*InsnID*/0,
3086
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3087
706
        // GIR_Coverage, 1153,
3088
706
        GIR_Done,
3089
706
      // Label 147: @6420
3090
706
      GIM_Try, /*On fail goto*//*Label 148*/ 6490, // Rule ID 1159 //
3091
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3092
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3093
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3094
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_INTRINSIC,
3095
706
        GIM_CheckNumOperands, /*MI*/1, /*Expected*/4,
3096
706
        GIM_CheckIntrinsicID, /*MI*/1, /*Op*/1, Intrinsic::arm_neon_vabdu,
3097
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v16s8,
3098
706
        GIM_CheckType, /*MI*/1, /*Op*/3, /*Type*/GILLT_v16s8,
3099
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3100
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/3, /*RC*/ARM::QPRRegClassID,
3101
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3102
706
        // (add:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, (intrinsic_wo_chain:{ *:[v16i8] } 1052:{ *:[iPTR] }, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm))  =>  (VABAuv16i8:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)
3103
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VABAuv16i8,
3104
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3105
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
3106
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vn
3107
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/3, // Vm
3108
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3109
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3110
706
        GIR_EraseFromParent, /*InsnID*/0,
3111
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3112
706
        // GIR_Coverage, 1159,
3113
706
        GIR_Done,
3114
706
      // Label 148: @6490
3115
706
      GIM_Try, /*On fail goto*//*Label 149*/ 6553, // Rule ID 2627 //
3116
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3117
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3118
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
3119
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v16s8,
3120
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v16s8,
3121
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3122
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3123
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3124
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3125
706
        // (add:{ *:[v16i8] } (mul:{ *:[v16i8] } QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm), QPR:{ *:[v16i8] }:$src1)  =>  (VMLAv16i8:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)
3126
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv16i8,
3127
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3128
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // src1
3129
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3130
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
3131
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3132
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3133
706
        GIR_EraseFromParent, /*InsnID*/0,
3134
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3135
706
        // GIR_Coverage, 2627,
3136
706
        GIR_Done,
3137
706
      // Label 149: @6553
3138
706
      GIM_Try, /*On fail goto*//*Label 150*/ 6616, // Rule ID 876 //
3139
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3140
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3141
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3142
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
3143
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v16s8,
3144
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v16s8,
3145
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3146
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3147
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3148
706
        // (add:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, (mul:{ *:[v16i8] } QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm))  =>  (VMLAv16i8:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)
3149
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLAv16i8,
3150
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3151
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
3152
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3153
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
3154
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3155
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3156
706
        GIR_EraseFromParent, /*InsnID*/0,
3157
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3158
706
        // GIR_Coverage, 876,
3159
706
        GIR_Done,
3160
706
      // Label 150: @6616
3161
706
      GIM_Try, /*On fail goto*//*Label 151*/ 6654, // Rule ID 757 //
3162
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3163
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3164
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3165
706
        // (add:{ *:[v16i8] } QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)  =>  (VADDv16i8:{ *:[v16i8] } QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)
3166
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VADDv16i8,
3167
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3168
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3169
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
3170
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3171
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3172
706
        GIR_EraseFromParent, /*InsnID*/0,
3173
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3174
706
        // GIR_Coverage, 757,
3175
706
        GIR_Done,
3176
706
      // Label 151: @6654
3177
706
      GIM_Reject,
3178
706
    // Label 144: @6655
3179
706
    GIM_Reject,
3180
706
    // Label 45: @6656
3181
706
    GIM_Reject,
3182
706
    // Label 1: @6657
3183
706
    GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/1, 10, /*)*//*default:*//*Label 161*/ 8646,
3184
706
    /*GILLT_s32*//*Label 152*/ 6672,
3185
706
    /*GILLT_s64*//*Label 153*/ 7165,
3186
706
    /*GILLT_v2s32*//*Label 154*/ 7216,
3187
706
    /*GILLT_v2s64*//*Label 155*/ 7329,
3188
706
    /*GILLT_v4s16*//*Label 156*/ 7613,
3189
706
    /*GILLT_v4s32*//*Label 157*/ 7726,
3190
706
    /*GILLT_v8s8*//*Label 158*/ 8073,
3191
706
    /*GILLT_v8s16*//*Label 159*/ 8186,
3192
706
    /*GILLT_v16s8*//*Label 160*/ 8533,
3193
706
    // Label 152: @6672
3194
706
    GIM_Try, /*On fail goto*//*Label 162*/ 7164,
3195
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32,
3196
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32,
3197
706
      GIM_Try, /*On fail goto*//*Label 163*/ 6734, // Rule ID 98 //
3198
706
        GIM_CheckFeatures, GIFBS_IsARM,
3199
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
3200
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3201
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_CONSTANT,
3202
706
        GIM_CheckI64ImmPredicate, /*MI*/1, /*Predicate*/GIPFP_I64_Predicate_mod_imm,
3203
706
        // MIs[1] Operand 1
3204
706
        // No operand predicates
3205
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
3206
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3207
706
        // (sub:{ *:[i32] } (imm:{ *:[i32] })<<P:Predicate_mod_imm>>:$imm, GPR:{ *:[i32] }:$Rn)  =>  (RSBri:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
3208
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::RSBri,
3209
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
3210
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
3211
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // imm
3212
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3213
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3214
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3215
706
        GIR_EraseFromParent, /*InsnID*/0,
3216
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3217
706
        // GIR_Coverage, 98,
3218
706
        GIR_Done,
3219
706
      // Label 163: @6734
3220
706
      GIM_Try, /*On fail goto*//*Label 164*/ 6786, // Rule ID 431 //
3221
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
3222
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
3223
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3224
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_CONSTANT,
3225
706
        GIM_CheckI64ImmPredicate, /*MI*/1, /*Predicate*/GIPFP_I64_Predicate_t2_so_imm,
3226
706
        // MIs[1] Operand 1
3227
706
        // No operand predicates
3228
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
3229
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3230
706
        // (sub:{ *:[i32] } (imm:{ *:[i32] })<<P:Predicate_t2_so_imm>>:$imm, rGPR:{ *:[i32] }:$Rn)  =>  (t2RSBri:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
3231
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2RSBri,
3232
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
3233
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
3234
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // imm
3235
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3236
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3237
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3238
706
        GIR_EraseFromParent, /*InsnID*/0,
3239
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3240
706
        // GIR_Coverage, 431,
3241
706
        GIR_Done,
3242
706
      // Label 164: @6786
3243
706
      GIM_Try, /*On fail goto*//*Label 165*/ 6838, // Rule ID 78 //
3244
706
        GIM_CheckFeatures, GIFBS_IsARM,
3245
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
3246
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
3247
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3248
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_CONSTANT,
3249
706
        GIM_CheckI64ImmPredicate, /*MI*/1, /*Predicate*/GIPFP_I64_Predicate_mod_imm,
3250
706
        // MIs[1] Operand 1
3251
706
        // No operand predicates
3252
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3253
706
        // (sub:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] })<<P:Predicate_mod_imm>>:$imm)  =>  (SUBri:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
3254
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::SUBri,
3255
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
3256
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
3257
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // imm
3258
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3259
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3260
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3261
706
        GIR_EraseFromParent, /*InsnID*/0,
3262
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3263
706
        // GIR_Coverage, 78,
3264
706
        GIR_Done,
3265
706
      // Label 165: @6838
3266
706
      GIM_Try, /*On fail goto*//*Label 166*/ 6890, // Rule ID 415 //
3267
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
3268
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
3269
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
3270
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3271
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_CONSTANT,
3272
706
        GIM_CheckI64ImmPredicate, /*MI*/1, /*Predicate*/GIPFP_I64_Predicate_t2_so_imm,
3273
706
        // MIs[1] Operand 1
3274
706
        // No operand predicates
3275
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3276
706
        // (sub:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, (imm:{ *:[i32] })<<P:Predicate_t2_so_imm>>:$imm)  =>  (t2SUBri:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
3277
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2SUBri,
3278
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
3279
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
3280
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // imm
3281
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3282
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3283
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3284
706
        GIR_EraseFromParent, /*InsnID*/0,
3285
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3286
706
        // GIR_Coverage, 415,
3287
706
        GIR_Done,
3288
706
      // Label 166: @6890
3289
706
      GIM_Try, /*On fail goto*//*Label 167*/ 6939, // Rule ID 416 //
3290
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
3291
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
3292
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
3293
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3294
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_CONSTANT,
3295
706
        GIM_CheckI64ImmPredicate, /*MI*/1, /*Predicate*/GIPFP_I64_Predicate_imm0_4095,
3296
706
        // MIs[1] Operand 1
3297
706
        // No operand predicates
3298
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3299
706
        // (sub:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] })<<P:Predicate_imm0_4095>>:$imm)  =>  (t2SUBri12:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
3300
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2SUBri12,
3301
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
3302
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
3303
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/1, // imm
3304
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3305
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3306
706
        GIR_EraseFromParent, /*InsnID*/0,
3307
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3308
706
        // GIR_Coverage, 416,
3309
706
        GIR_Done,
3310
706
      // Label 167: @6939
3311
706
      GIM_Try, /*On fail goto*//*Label 168*/ 7006, // Rule ID 175 //
3312
706
        GIM_CheckFeatures, GIFBS_HasV6T2_IsARM_UseMulOps,
3313
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
3314
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
3315
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3316
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
3317
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
3318
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
3319
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRRegClassID,
3320
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::GPRRegClassID,
3321
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3322
706
        // (sub:{ *:[i32] } GPR:{ *:[i32] }:$Ra, (mul:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm))  =>  (MLS:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm, GPR:{ *:[i32] }:$Ra)
3323
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::MLS,
3324
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
3325
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rn
3326
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Rm
3327
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Ra
3328
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3329
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3330
706
        GIR_EraseFromParent, /*InsnID*/0,
3331
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3332
706
        // GIR_Coverage, 175,
3333
706
        GIR_Done,
3334
706
      // Label 168: @7006
3335
706
      GIM_Try, /*On fail goto*//*Label 169*/ 7073, // Rule ID 508 //
3336
706
        GIM_CheckFeatures, GIFBS_IsThumb2_UseMulOps,
3337
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
3338
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
3339
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3340
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
3341
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
3342
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
3343
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
3344
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
3345
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3346
706
        // (sub:{ *:[i32] } rGPR:{ *:[i32] }:$Ra, (mul:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm))  =>  (t2MLS:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm, rGPR:{ *:[i32] }:$Ra)
3347
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2MLS,
3348
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
3349
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rn
3350
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Rm
3351
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Ra
3352
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3353
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3354
706
        GIR_EraseFromParent, /*InsnID*/0,
3355
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3356
706
        // GIR_Coverage, 508,
3357
706
        GIR_Done,
3358
706
      // Label 169: @7073
3359
706
      GIM_Try, /*On fail goto*//*Label 170*/ 7118, // Rule ID 79 //
3360
706
        GIM_CheckFeatures, GIFBS_IsARM,
3361
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
3362
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
3363
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
3364
706
        // (sub:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm)  =>  (SUBrr:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm)
3365
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::SUBrr,
3366
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
3367
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
3368
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
3369
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3370
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3371
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3372
706
        GIR_EraseFromParent, /*InsnID*/0,
3373
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3374
706
        // GIR_Coverage, 79,
3375
706
        GIR_Done,
3376
706
      // Label 170: @7118
3377
706
      GIM_Try, /*On fail goto*//*Label 171*/ 7163, // Rule ID 417 //
3378
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
3379
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
3380
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
3381
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
3382
706
        // (sub:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)  =>  (t2SUBrr:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)
3383
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2SUBrr,
3384
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
3385
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
3386
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
3387
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3388
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3389
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3390
706
        GIR_EraseFromParent, /*InsnID*/0,
3391
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3392
706
        // GIR_Coverage, 417,
3393
706
        GIR_Done,
3394
706
      // Label 171: @7163
3395
706
      GIM_Reject,
3396
706
    // Label 162: @7164
3397
706
    GIM_Reject,
3398
706
    // Label 153: @7165
3399
706
    GIM_Try, /*On fail goto*//*Label 172*/ 7215, // Rule ID 947 //
3400
706
      GIM_CheckFeatures, GIFBS_HasNEON,
3401
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s64,
3402
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s64,
3403
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
3404
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3405
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
3406
706
      // (sub:{ *:[v1i64] } DPR:{ *:[v1i64] }:$Vn, DPR:{ *:[v1i64] }:$Vm)  =>  (VSUBv1i64:{ *:[v1i64] } DPR:{ *:[v1i64] }:$Vn, DPR:{ *:[v1i64] }:$Vm)
3407
706
      GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBv1i64,
3408
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3409
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3410
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
3411
706
      GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3412
706
      GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3413
706
      GIR_EraseFromParent, /*InsnID*/0,
3414
706
      GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3415
706
      // GIR_Coverage, 947,
3416
706
      GIR_Done,
3417
706
    // Label 172: @7215
3418
706
    GIM_Reject,
3419
706
    // Label 154: @7216
3420
706
    GIM_Try, /*On fail goto*//*Label 173*/ 7328,
3421
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v2s32,
3422
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v2s32,
3423
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
3424
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3425
706
      GIM_Try, /*On fail goto*//*Label 174*/ 7293, // Rule ID 903 //
3426
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3427
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3428
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
3429
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
3430
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v2s32,
3431
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3432
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
3433
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3434
706
        // (sub:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, (mul:{ *:[v2i32] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm))  =>  (VMLSv2i32:{ *:[v2i32] } DPR:{ *:[v2i32] }:$src1, DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
3435
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLSv2i32,
3436
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3437
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
3438
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3439
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
3440
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3441
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3442
706
        GIR_EraseFromParent, /*InsnID*/0,
3443
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3444
706
        // GIR_Coverage, 903,
3445
706
        GIR_Done,
3446
706
      // Label 174: @7293
3447
706
      GIM_Try, /*On fail goto*//*Label 175*/ 7327, // Rule ID 943 //
3448
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3449
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
3450
706
        // (sub:{ *:[v2i32] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)  =>  (VSUBv2i32:{ *:[v2i32] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
3451
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBv2i32,
3452
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3453
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3454
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
3455
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3456
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3457
706
        GIR_EraseFromParent, /*InsnID*/0,
3458
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3459
706
        // GIR_Coverage, 943,
3460
706
        GIR_Done,
3461
706
      // Label 175: @7327
3462
706
      GIM_Reject,
3463
706
    // Label 173: @7328
3464
706
    GIM_Reject,
3465
706
    // Label 155: @7329
3466
706
    GIM_Try, /*On fail goto*//*Label 176*/ 7612,
3467
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v2s64,
3468
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v2s64,
3469
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
3470
706
      GIM_Try, /*On fail goto*//*Label 177*/ 7407, // Rule ID 955 //
3471
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3472
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3473
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
3474
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
3475
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3476
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
3477
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_SEXT,
3478
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v2s32,
3479
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3480
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3481
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
3482
706
        // (sub:{ *:[v2i64] } (sext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vn), (sext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vm))  =>  (VSUBLsv2i64:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
3483
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBLsv2i64,
3484
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3485
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3486
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
3487
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3488
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3489
706
        GIR_EraseFromParent, /*InsnID*/0,
3490
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3491
706
        // GIR_Coverage, 955,
3492
706
        GIR_Done,
3493
706
      // Label 177: @7407
3494
706
      GIM_Try, /*On fail goto*//*Label 178*/ 7471, // Rule ID 958 //
3495
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3496
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3497
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
3498
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
3499
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3500
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
3501
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ZEXT,
3502
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v2s32,
3503
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3504
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3505
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
3506
706
        // (sub:{ *:[v2i64] } (zext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vn), (zext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vm))  =>  (VSUBLuv2i64:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
3507
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBLuv2i64,
3508
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3509
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3510
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
3511
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3512
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3513
706
        GIR_EraseFromParent, /*InsnID*/0,
3514
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3515
706
        // GIR_Coverage, 958,
3516
706
        GIR_Done,
3517
706
      // Label 178: @7471
3518
706
      GIM_Try, /*On fail goto*//*Label 179*/ 7522, // Rule ID 961 //
3519
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3520
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3521
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3522
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
3523
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
3524
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3525
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3526
706
        // (sub:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, (sext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vm))  =>  (VSUBWsv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
3527
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBWsv2i64,
3528
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3529
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3530
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
3531
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3532
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3533
706
        GIR_EraseFromParent, /*InsnID*/0,
3534
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3535
706
        // GIR_Coverage, 961,
3536
706
        GIR_Done,
3537
706
      // Label 179: @7522
3538
706
      GIM_Try, /*On fail goto*//*Label 180*/ 7573, // Rule ID 964 //
3539
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3540
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3541
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3542
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
3543
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v2s32,
3544
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3545
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3546
706
        // (sub:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, (zext:{ *:[v2i64] } DPR:{ *:[v2i32] }:$Vm))  =>  (VSUBWuv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
3547
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBWuv2i64,
3548
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3549
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3550
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
3551
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3552
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3553
706
        GIR_EraseFromParent, /*InsnID*/0,
3554
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3555
706
        // GIR_Coverage, 964,
3556
706
        GIR_Done,
3557
706
      // Label 180: @7573
3558
706
      GIM_Try, /*On fail goto*//*Label 181*/ 7611, // Rule ID 948 //
3559
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3560
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3561
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3562
706
        // (sub:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, QPR:{ *:[v2i64] }:$Vm)  =>  (VSUBv2i64:{ *:[v2i64] } QPR:{ *:[v2i64] }:$Vn, QPR:{ *:[v2i64] }:$Vm)
3563
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBv2i64,
3564
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3565
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3566
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
3567
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3568
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3569
706
        GIR_EraseFromParent, /*InsnID*/0,
3570
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3571
706
        // GIR_Coverage, 948,
3572
706
        GIR_Done,
3573
706
      // Label 181: @7611
3574
706
      GIM_Reject,
3575
706
    // Label 176: @7612
3576
706
    GIM_Reject,
3577
706
    // Label 156: @7613
3578
706
    GIM_Try, /*On fail goto*//*Label 182*/ 7725,
3579
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v4s16,
3580
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v4s16,
3581
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
3582
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3583
706
      GIM_Try, /*On fail goto*//*Label 183*/ 7690, // Rule ID 902 //
3584
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3585
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3586
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
3587
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
3588
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s16,
3589
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3590
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
3591
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3592
706
        // (sub:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, (mul:{ *:[v4i16] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm))  =>  (VMLSv4i16:{ *:[v4i16] } DPR:{ *:[v4i16] }:$src1, DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
3593
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLSv4i16,
3594
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3595
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
3596
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3597
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
3598
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3599
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3600
706
        GIR_EraseFromParent, /*InsnID*/0,
3601
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3602
706
        // GIR_Coverage, 902,
3603
706
        GIR_Done,
3604
706
      // Label 183: @7690
3605
706
      GIM_Try, /*On fail goto*//*Label 184*/ 7724, // Rule ID 942 //
3606
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3607
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
3608
706
        // (sub:{ *:[v4i16] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)  =>  (VSUBv4i16:{ *:[v4i16] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
3609
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBv4i16,
3610
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3611
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3612
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
3613
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3614
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3615
706
        GIR_EraseFromParent, /*InsnID*/0,
3616
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3617
706
        // GIR_Coverage, 942,
3618
706
        GIR_Done,
3619
706
      // Label 184: @7724
3620
706
      GIM_Reject,
3621
706
    // Label 182: @7725
3622
706
    GIM_Reject,
3623
706
    // Label 157: @7726
3624
706
    GIM_Try, /*On fail goto*//*Label 185*/ 8072,
3625
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v4s32,
3626
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v4s32,
3627
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
3628
706
      GIM_Try, /*On fail goto*//*Label 186*/ 7804, // Rule ID 954 //
3629
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3630
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3631
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
3632
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
3633
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3634
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
3635
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_SEXT,
3636
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v4s16,
3637
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3638
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3639
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
3640
706
        // (sub:{ *:[v4i32] } (sext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vn), (sext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vm))  =>  (VSUBLsv4i32:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
3641
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBLsv4i32,
3642
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3643
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3644
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
3645
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3646
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3647
706
        GIR_EraseFromParent, /*InsnID*/0,
3648
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3649
706
        // GIR_Coverage, 954,
3650
706
        GIR_Done,
3651
706
      // Label 186: @7804
3652
706
      GIM_Try, /*On fail goto*//*Label 187*/ 7868, // Rule ID 957 //
3653
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3654
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3655
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
3656
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
3657
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3658
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
3659
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ZEXT,
3660
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v4s16,
3661
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3662
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3663
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
3664
706
        // (sub:{ *:[v4i32] } (zext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vn), (zext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vm))  =>  (VSUBLuv4i32:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
3665
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBLuv4i32,
3666
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3667
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3668
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
3669
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3670
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3671
706
        GIR_EraseFromParent, /*InsnID*/0,
3672
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3673
706
        // GIR_Coverage, 957,
3674
706
        GIR_Done,
3675
706
      // Label 187: @7868
3676
706
      GIM_Try, /*On fail goto*//*Label 188*/ 7931, // Rule ID 906 //
3677
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3678
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3679
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3680
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
3681
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s32,
3682
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v4s32,
3683
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3684
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3685
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3686
706
        // (sub:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, (mul:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm))  =>  (VMLSv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$src1, QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)
3687
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLSv4i32,
3688
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3689
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
3690
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3691
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
3692
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3693
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3694
706
        GIR_EraseFromParent, /*InsnID*/0,
3695
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3696
706
        // GIR_Coverage, 906,
3697
706
        GIR_Done,
3698
706
      // Label 188: @7931
3699
706
      GIM_Try, /*On fail goto*//*Label 189*/ 7982, // Rule ID 960 //
3700
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3701
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3702
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3703
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
3704
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
3705
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3706
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3707
706
        // (sub:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, (sext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vm))  =>  (VSUBWsv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
3708
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBWsv4i32,
3709
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3710
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3711
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
3712
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3713
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3714
706
        GIR_EraseFromParent, /*InsnID*/0,
3715
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3716
706
        // GIR_Coverage, 960,
3717
706
        GIR_Done,
3718
706
      // Label 189: @7982
3719
706
      GIM_Try, /*On fail goto*//*Label 190*/ 8033, // Rule ID 963 //
3720
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3721
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3722
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3723
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
3724
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v4s16,
3725
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3726
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3727
706
        // (sub:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, (zext:{ *:[v4i32] } DPR:{ *:[v4i16] }:$Vm))  =>  (VSUBWuv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
3728
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBWuv4i32,
3729
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3730
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3731
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
3732
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3733
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3734
706
        GIR_EraseFromParent, /*InsnID*/0,
3735
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3736
706
        // GIR_Coverage, 963,
3737
706
        GIR_Done,
3738
706
      // Label 190: @8033
3739
706
      GIM_Try, /*On fail goto*//*Label 191*/ 8071, // Rule ID 946 //
3740
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3741
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3742
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3743
706
        // (sub:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)  =>  (VSUBv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)
3744
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBv4i32,
3745
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3746
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3747
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
3748
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3749
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3750
706
        GIR_EraseFromParent, /*InsnID*/0,
3751
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3752
706
        // GIR_Coverage, 946,
3753
706
        GIR_Done,
3754
706
      // Label 191: @8071
3755
706
      GIM_Reject,
3756
706
    // Label 185: @8072
3757
706
    GIM_Reject,
3758
706
    // Label 158: @8073
3759
706
    GIM_Try, /*On fail goto*//*Label 192*/ 8185,
3760
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v8s8,
3761
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v8s8,
3762
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
3763
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3764
706
      GIM_Try, /*On fail goto*//*Label 193*/ 8150, // Rule ID 901 //
3765
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3766
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3767
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
3768
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
3769
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s8,
3770
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3771
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::DPRRegClassID,
3772
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3773
706
        // (sub:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, (mul:{ *:[v8i8] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm))  =>  (VMLSv8i8:{ *:[v8i8] } DPR:{ *:[v8i8] }:$src1, DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
3774
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLSv8i8,
3775
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3776
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
3777
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3778
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
3779
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3780
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3781
706
        GIR_EraseFromParent, /*InsnID*/0,
3782
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3783
706
        // GIR_Coverage, 901,
3784
706
        GIR_Done,
3785
706
      // Label 193: @8150
3786
706
      GIM_Try, /*On fail goto*//*Label 194*/ 8184, // Rule ID 941 //
3787
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3788
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
3789
706
        // (sub:{ *:[v8i8] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)  =>  (VSUBv8i8:{ *:[v8i8] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
3790
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBv8i8,
3791
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3792
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3793
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
3794
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3795
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3796
706
        GIR_EraseFromParent, /*InsnID*/0,
3797
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3798
706
        // GIR_Coverage, 941,
3799
706
        GIR_Done,
3800
706
      // Label 194: @8184
3801
706
      GIM_Reject,
3802
706
    // Label 192: @8185
3803
706
    GIM_Reject,
3804
706
    // Label 159: @8186
3805
706
    GIM_Try, /*On fail goto*//*Label 195*/ 8532,
3806
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v8s16,
3807
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v8s16,
3808
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
3809
706
      GIM_Try, /*On fail goto*//*Label 196*/ 8264, // Rule ID 953 //
3810
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3811
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3812
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
3813
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
3814
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3815
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
3816
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_SEXT,
3817
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v8s8,
3818
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3819
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3820
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
3821
706
        // (sub:{ *:[v8i16] } (sext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vn), (sext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vm))  =>  (VSUBLsv8i16:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
3822
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBLsv8i16,
3823
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3824
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3825
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
3826
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3827
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3828
706
        GIR_EraseFromParent, /*InsnID*/0,
3829
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3830
706
        // GIR_Coverage, 953,
3831
706
        GIR_Done,
3832
706
      // Label 196: @8264
3833
706
      GIM_Try, /*On fail goto*//*Label 197*/ 8328, // Rule ID 956 //
3834
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3835
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
3836
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
3837
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
3838
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3839
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
3840
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ZEXT,
3841
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_v8s8,
3842
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3843
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3844
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
3845
706
        // (sub:{ *:[v8i16] } (zext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vn), (zext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vm))  =>  (VSUBLuv8i16:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
3846
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBLuv8i16,
3847
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3848
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3849
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Vm
3850
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3851
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3852
706
        GIR_EraseFromParent, /*InsnID*/0,
3853
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3854
706
        // GIR_Coverage, 956,
3855
706
        GIR_Done,
3856
706
      // Label 197: @8328
3857
706
      GIM_Try, /*On fail goto*//*Label 198*/ 8391, // Rule ID 905 //
3858
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3859
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3860
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3861
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
3862
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s16,
3863
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v8s16,
3864
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3865
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3866
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3867
706
        // (sub:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, (mul:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm))  =>  (VMLSv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$src1, QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)
3868
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLSv8i16,
3869
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3870
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
3871
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3872
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
3873
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3874
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3875
706
        GIR_EraseFromParent, /*InsnID*/0,
3876
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3877
706
        // GIR_Coverage, 905,
3878
706
        GIR_Done,
3879
706
      // Label 198: @8391
3880
706
      GIM_Try, /*On fail goto*//*Label 199*/ 8442, // Rule ID 959 //
3881
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3882
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3883
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3884
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_SEXT,
3885
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
3886
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3887
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3888
706
        // (sub:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, (sext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vm))  =>  (VSUBWsv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
3889
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBWsv8i16,
3890
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3891
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3892
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
3893
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3894
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3895
706
        GIR_EraseFromParent, /*InsnID*/0,
3896
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3897
706
        // GIR_Coverage, 959,
3898
706
        GIR_Done,
3899
706
      // Label 199: @8442
3900
706
      GIM_Try, /*On fail goto*//*Label 200*/ 8493, // Rule ID 962 //
3901
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3902
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3903
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3904
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ZEXT,
3905
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v8s8,
3906
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::DPRRegClassID,
3907
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3908
706
        // (sub:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, (zext:{ *:[v8i16] } DPR:{ *:[v8i8] }:$Vm))  =>  (VSUBWuv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
3909
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBWuv8i16,
3910
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3911
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3912
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vm
3913
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3914
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3915
706
        GIR_EraseFromParent, /*InsnID*/0,
3916
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3917
706
        // GIR_Coverage, 962,
3918
706
        GIR_Done,
3919
706
      // Label 200: @8493
3920
706
      GIM_Try, /*On fail goto*//*Label 201*/ 8531, // Rule ID 945 //
3921
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3922
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3923
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3924
706
        // (sub:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)  =>  (VSUBv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)
3925
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBv8i16,
3926
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3927
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3928
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
3929
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3930
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3931
706
        GIR_EraseFromParent, /*InsnID*/0,
3932
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3933
706
        // GIR_Coverage, 945,
3934
706
        GIR_Done,
3935
706
      // Label 201: @8531
3936
706
      GIM_Reject,
3937
706
    // Label 195: @8532
3938
706
    GIM_Reject,
3939
706
    // Label 160: @8533
3940
706
    GIM_Try, /*On fail goto*//*Label 202*/ 8645,
3941
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v16s8,
3942
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v16s8,
3943
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
3944
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3945
706
      GIM_Try, /*On fail goto*//*Label 203*/ 8610, // Rule ID 904 //
3946
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3947
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
3948
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_MUL,
3949
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_v16s8,
3950
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_v16s8,
3951
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::QPRRegClassID,
3952
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3953
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
3954
706
        // (sub:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, (mul:{ *:[v16i8] } QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm))  =>  (VMLSv16i8:{ *:[v16i8] } QPR:{ *:[v16i8] }:$src1, QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)
3955
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMLSv16i8,
3956
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3957
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // src1
3958
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Vn
3959
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/2, // Vm
3960
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3961
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3962
706
        GIR_EraseFromParent, /*InsnID*/0,
3963
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3964
706
        // GIR_Coverage, 904,
3965
706
        GIR_Done,
3966
706
      // Label 203: @8610
3967
706
      GIM_Try, /*On fail goto*//*Label 204*/ 8644, // Rule ID 944 //
3968
706
        GIM_CheckFeatures, GIFBS_HasNEON,
3969
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
3970
706
        // (sub:{ *:[v16i8] } QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)  =>  (VSUBv16i8:{ *:[v16i8] } QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)
3971
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VSUBv16i8,
3972
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
3973
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
3974
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
3975
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
3976
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
3977
706
        GIR_EraseFromParent, /*InsnID*/0,
3978
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
3979
706
        // GIR_Coverage, 944,
3980
706
        GIR_Done,
3981
706
      // Label 204: @8644
3982
706
      GIM_Reject,
3983
706
    // Label 202: @8645
3984
706
    GIM_Reject,
3985
706
    // Label 161: @8646
3986
706
    GIM_Reject,
3987
706
    // Label 2: @8647
3988
706
    GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/1, 10, /*)*//*default:*//*Label 212*/ 9280,
3989
706
    /*GILLT_s32*//*Label 205*/ 8662, 0,
3990
706
    /*GILLT_v2s32*//*Label 206*/ 8974, 0,
3991
706
    /*GILLT_v4s16*//*Label 207*/ 9025,
3992
706
    /*GILLT_v4s32*//*Label 208*/ 9076,
3993
706
    /*GILLT_v8s8*//*Label 209*/ 9127,
3994
706
    /*GILLT_v8s16*//*Label 210*/ 9178,
3995
706
    /*GILLT_v16s8*//*Label 211*/ 9229,
3996
706
    // Label 205: @8662
3997
706
    GIM_Try, /*On fail goto*//*Label 213*/ 8973,
3998
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32,
3999
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32,
4000
706
      GIM_Try, /*On fail goto*//*Label 214*/ 8756, // Rule ID 188 //
4001
706
        GIM_CheckFeatures, GIFBS_HasV5TE_IsARM,
4002
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
4003
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
4004
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ASHR,
4005
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4006
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4007
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4008
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 16,
4009
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
4010
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ASHR,
4011
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_s32,
4012
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_s32,
4013
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4014
706
        GIM_CheckConstantInt, /*MI*/2, /*Op*/2, 16,
4015
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4016
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
4017
706
        // (mul:{ *:[i32] } (sra:{ *:[i32] } GPR:{ *:[i32] }:$Rn, 16:{ *:[i32] }), (sra:{ *:[i32] } GPR:{ *:[i32] }:$Rm, 16:{ *:[i32] }))  =>  (SMULTT:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm)
4018
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::SMULTT,
4019
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4020
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rn
4021
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Rm
4022
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4023
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4024
706
        GIR_EraseFromParent, /*InsnID*/0,
4025
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4026
706
        // GIR_Coverage, 188,
4027
706
        GIR_Done,
4028
706
      // Label 214: @8756
4029
706
      GIM_Try, /*On fail goto*//*Label 215*/ 8840, // Rule ID 519 //
4030
706
        GIM_CheckFeatures, GIFBS_HasDSP_IsThumb2,
4031
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4032
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
4033
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_ASHR,
4034
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4035
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4036
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4037
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 16,
4038
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]
4039
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_ASHR,
4040
706
        GIM_CheckType, /*MI*/2, /*Op*/1, /*Type*/GILLT_s32,
4041
706
        GIM_CheckType, /*MI*/2, /*Op*/2, /*Type*/GILLT_s32,
4042
706
        GIM_CheckRegBankForClass, /*MI*/2, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4043
706
        GIM_CheckConstantInt, /*MI*/2, /*Op*/2, 16,
4044
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4045
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
4046
706
        // (mul:{ *:[i32] } (sra:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, 16:{ *:[i32] }), (sra:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 16:{ *:[i32] }))  =>  (t2SMULTT:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)
4047
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2SMULTT,
4048
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4049
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rn
4050
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/2, /*OpIdx*/1, // Rm
4051
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4052
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4053
706
        GIR_EraseFromParent, /*InsnID*/0,
4054
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4055
706
        // GIR_Coverage, 519,
4056
706
        GIR_Done,
4057
706
      // Label 215: @8840
4058
706
      GIM_Try, /*On fail goto*//*Label 216*/ 8885, // Rule ID 171 //
4059
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM,
4060
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
4061
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
4062
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRnopcRegClassID,
4063
706
        // (mul:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm)  =>  (MUL:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm)
4064
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::MUL,
4065
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4066
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4067
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
4068
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4069
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4070
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4071
706
        GIR_EraseFromParent, /*InsnID*/0,
4072
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4073
706
        // GIR_Coverage, 171,
4074
706
        GIR_Done,
4075
706
      // Label 216: @8885
4076
706
      GIM_Try, /*On fail goto*//*Label 217*/ 8930, // Rule ID 172 //
4077
706
        GIM_CheckFeatures, GIFBS_IsARM_NoV6_UseMulOps,
4078
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
4079
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRnopcRegClassID,
4080
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRnopcRegClassID,
4081
706
        // (mul:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm)  =>  (MULv5:{ *:[i32] } GPRnopc:{ *:[i32] }:$Rn, GPRnopc:{ *:[i32] }:$Rm)
4082
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::MULv5,
4083
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4084
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4085
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
4086
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4087
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4088
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4089
706
        GIR_EraseFromParent, /*InsnID*/0,
4090
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4091
706
        // GIR_Coverage, 172,
4092
706
        GIR_Done,
4093
706
      // Label 217: @8930
4094
706
      GIM_Try, /*On fail goto*//*Label 218*/ 8972, // Rule ID 506 //
4095
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
4096
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4097
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4098
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
4099
706
        // (mul:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)  =>  (t2MUL:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)
4100
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2MUL,
4101
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4102
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4103
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
4104
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4105
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4106
706
        GIR_EraseFromParent, /*InsnID*/0,
4107
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4108
706
        // GIR_Coverage, 506,
4109
706
        GIR_Done,
4110
706
      // Label 218: @8972
4111
706
      GIM_Reject,
4112
706
    // Label 213: @8973
4113
706
    GIM_Reject,
4114
706
    // Label 206: @8974
4115
706
    GIM_Try, /*On fail goto*//*Label 219*/ 9024, // Rule ID 823 //
4116
706
      GIM_CheckFeatures, GIFBS_HasNEON,
4117
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v2s32,
4118
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v2s32,
4119
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
4120
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
4121
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
4122
706
      // (mul:{ *:[v2i32] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)  =>  (VMULv2i32:{ *:[v2i32] } DPR:{ *:[v2i32] }:$Vn, DPR:{ *:[v2i32] }:$Vm)
4123
706
      GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMULv2i32,
4124
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
4125
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
4126
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
4127
706
      GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4128
706
      GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4129
706
      GIR_EraseFromParent, /*InsnID*/0,
4130
706
      GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4131
706
      // GIR_Coverage, 823,
4132
706
      GIR_Done,
4133
706
    // Label 219: @9024
4134
706
    GIM_Reject,
4135
706
    // Label 207: @9025
4136
706
    GIM_Try, /*On fail goto*//*Label 220*/ 9075, // Rule ID 822 //
4137
706
      GIM_CheckFeatures, GIFBS_HasNEON,
4138
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v4s16,
4139
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v4s16,
4140
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
4141
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
4142
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
4143
706
      // (mul:{ *:[v4i16] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)  =>  (VMULv4i16:{ *:[v4i16] } DPR:{ *:[v4i16] }:$Vn, DPR:{ *:[v4i16] }:$Vm)
4144
706
      GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMULv4i16,
4145
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
4146
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
4147
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
4148
706
      GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4149
706
      GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4150
706
      GIR_EraseFromParent, /*InsnID*/0,
4151
706
      GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4152
706
      // GIR_Coverage, 822,
4153
706
      GIR_Done,
4154
706
    // Label 220: @9075
4155
706
    GIM_Reject,
4156
706
    // Label 208: @9076
4157
706
    GIM_Try, /*On fail goto*//*Label 221*/ 9126, // Rule ID 826 //
4158
706
      GIM_CheckFeatures, GIFBS_HasNEON,
4159
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v4s32,
4160
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v4s32,
4161
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
4162
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
4163
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
4164
706
      // (mul:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)  =>  (VMULv4i32:{ *:[v4i32] } QPR:{ *:[v4i32] }:$Vn, QPR:{ *:[v4i32] }:$Vm)
4165
706
      GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMULv4i32,
4166
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
4167
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
4168
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
4169
706
      GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4170
706
      GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4171
706
      GIR_EraseFromParent, /*InsnID*/0,
4172
706
      GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4173
706
      // GIR_Coverage, 826,
4174
706
      GIR_Done,
4175
706
    // Label 221: @9126
4176
706
    GIM_Reject,
4177
706
    // Label 209: @9127
4178
706
    GIM_Try, /*On fail goto*//*Label 222*/ 9177, // Rule ID 821 //
4179
706
      GIM_CheckFeatures, GIFBS_HasNEON,
4180
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v8s8,
4181
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v8s8,
4182
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::DPRRegClassID,
4183
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::DPRRegClassID,
4184
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::DPRRegClassID,
4185
706
      // (mul:{ *:[v8i8] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)  =>  (VMULv8i8:{ *:[v8i8] } DPR:{ *:[v8i8] }:$Vn, DPR:{ *:[v8i8] }:$Vm)
4186
706
      GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMULv8i8,
4187
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
4188
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
4189
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
4190
706
      GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4191
706
      GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4192
706
      GIR_EraseFromParent, /*InsnID*/0,
4193
706
      GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4194
706
      // GIR_Coverage, 821,
4195
706
      GIR_Done,
4196
706
    // Label 222: @9177
4197
706
    GIM_Reject,
4198
706
    // Label 210: @9178
4199
706
    GIM_Try, /*On fail goto*//*Label 223*/ 9228, // Rule ID 825 //
4200
706
      GIM_CheckFeatures, GIFBS_HasNEON,
4201
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v8s16,
4202
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v8s16,
4203
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
4204
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
4205
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
4206
706
      // (mul:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)  =>  (VMULv8i16:{ *:[v8i16] } QPR:{ *:[v8i16] }:$Vn, QPR:{ *:[v8i16] }:$Vm)
4207
706
      GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMULv8i16,
4208
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
4209
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
4210
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
4211
706
      GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4212
706
      GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4213
706
      GIR_EraseFromParent, /*InsnID*/0,
4214
706
      GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4215
706
      // GIR_Coverage, 825,
4216
706
      GIR_Done,
4217
706
    // Label 223: @9228
4218
706
    GIM_Reject,
4219
706
    // Label 211: @9229
4220
706
    GIM_Try, /*On fail goto*//*Label 224*/ 9279, // Rule ID 824 //
4221
706
      GIM_CheckFeatures, GIFBS_HasNEON,
4222
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_v16s8,
4223
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_v16s8,
4224
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::QPRRegClassID,
4225
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::QPRRegClassID,
4226
706
      GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::QPRRegClassID,
4227
706
      // (mul:{ *:[v16i8] } QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)  =>  (VMULv16i8:{ *:[v16i8] } QPR:{ *:[v16i8] }:$Vn, QPR:{ *:[v16i8] }:$Vm)
4228
706
      GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::VMULv16i8,
4229
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Vd
4230
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Vn
4231
706
      GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Vm
4232
706
      GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4233
706
      GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4234
706
      GIR_EraseFromParent, /*InsnID*/0,
4235
706
      GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4236
706
      // GIR_Coverage, 824,
4237
706
      GIR_Done,
4238
706
    // Label 224: @9279
4239
706
    GIM_Reject,
4240
706
    // Label 212: @9280
4241
706
    GIM_Reject,
4242
706
    // Label 3: @9281
4243
706
    GIM_Try, /*On fail goto*//*Label 225*/ 9380,
4244
706
      GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s32,
4245
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32,
4246
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32,
4247
706
      GIM_Try, /*On fail goto*//*Label 226*/ 9337, // Rule ID 197 //
4248
706
        GIM_CheckFeatures, GIFBS_HasDivideInARM_IsARM,
4249
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
4250
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4251
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
4252
706
        // (sdiv:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm)  =>  (SDIV:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm)
4253
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::SDIV,
4254
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4255
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4256
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
4257
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4258
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4259
706
        GIR_EraseFromParent, /*InsnID*/0,
4260
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4261
706
        // GIR_Coverage, 197,
4262
706
        GIR_Done,
4263
706
      // Label 226: @9337
4264
706
      GIM_Try, /*On fail goto*//*Label 227*/ 9379, // Rule ID 536 //
4265
706
        GIM_CheckFeatures, GIFBS_HasDivideInThumb_HasV8MBaseline_IsThumb,
4266
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4267
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4268
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
4269
706
        // (sdiv:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)  =>  (t2SDIV:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)
4270
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2SDIV,
4271
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4272
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4273
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
4274
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4275
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4276
706
        GIR_EraseFromParent, /*InsnID*/0,
4277
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4278
706
        // GIR_Coverage, 536,
4279
706
        GIR_Done,
4280
706
      // Label 227: @9379
4281
706
      GIM_Reject,
4282
706
    // Label 225: @9380
4283
706
    GIM_Reject,
4284
706
    // Label 4: @9381
4285
706
    GIM_Try, /*On fail goto*//*Label 228*/ 9480,
4286
706
      GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s32,
4287
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32,
4288
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32,
4289
706
      GIM_Try, /*On fail goto*//*Label 229*/ 9437, // Rule ID 198 //
4290
706
        GIM_CheckFeatures, GIFBS_HasDivideInARM_IsARM,
4291
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
4292
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4293
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
4294
706
        // (udiv:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm)  =>  (UDIV:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm)
4295
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::UDIV,
4296
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4297
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4298
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
4299
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4300
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4301
706
        GIR_EraseFromParent, /*InsnID*/0,
4302
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4303
706
        // GIR_Coverage, 198,
4304
706
        GIR_Done,
4305
706
      // Label 229: @9437
4306
706
      GIM_Try, /*On fail goto*//*Label 230*/ 9479, // Rule ID 537 //
4307
706
        GIM_CheckFeatures, GIFBS_HasDivideInThumb_HasV8MBaseline_IsThumb,
4308
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4309
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4310
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
4311
706
        // (udiv:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)  =>  (t2UDIV:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, rGPR:{ *:[i32] }:$Rm)
4312
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2UDIV,
4313
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4314
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4315
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rm
4316
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4317
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4318
706
        GIR_EraseFromParent, /*InsnID*/0,
4319
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4320
706
        // GIR_Coverage, 537,
4321
706
        GIR_Done,
4322
706
      // Label 230: @9479
4323
706
      GIM_Reject,
4324
706
    // Label 228: @9480
4325
706
    GIM_Reject,
4326
706
    // Label 5: @9481
4327
706
    GIM_SwitchType, /*MI*/0, /*Op*/0, /*[*/1, 7, /*)*//*default:*//*Label 234*/ 11193,
4328
706
    /*GILLT_s32*//*Label 231*/ 9493, 0,
4329
706
    /*GILLT_v2s32*//*Label 232*/ 11091, 0, 0,
4330
706
    /*GILLT_v4s32*//*Label 233*/ 11142,
4331
706
    // Label 231: @9493
4332
706
    GIM_Try, /*On fail goto*//*Label 235*/ 11090,
4333
706
      GIM_CheckType, /*MI*/0, /*Op*/1, /*Type*/GILLT_s32,
4334
706
      GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32,
4335
706
      GIM_Try, /*On fail goto*//*Label 236*/ 9565, // Rule ID 1709 //
4336
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM,
4337
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
4338
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
4339
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_LSHR,
4340
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4341
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4342
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4343
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 8,
4344
706
        GIM_CheckConstantInt, /*MI*/0, /*Op*/2, 16711935,
4345
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4346
706
        // (and:{ *:[i32] } (srl:{ *:[i32] } GPR:{ *:[i32] }:$Src, 8:{ *:[i32] }), 16711935:{ *:[i32] })  =>  (UXTB16:{ *:[i32] } GPR:{ *:[i32] }:$Src, 1:{ *:[i32] })
4347
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::UXTB16,
4348
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4349
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Src
4350
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/1,
4351
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4352
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4353
706
        GIR_EraseFromParent, /*InsnID*/0,
4354
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4355
706
        // GIR_Coverage, 1709,
4356
706
        GIR_Done,
4357
706
      // Label 236: @9565
4358
706
      GIM_Try, /*On fail goto*//*Label 237*/ 9627, // Rule ID 1916 //
4359
706
        GIM_CheckFeatures, GIFBS_HasDSP_IsThumb2,
4360
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4361
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
4362
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_LSHR,
4363
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4364
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4365
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4366
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, 8,
4367
706
        GIM_CheckConstantInt, /*MI*/0, /*Op*/2, 16711935,
4368
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4369
706
        // (and:{ *:[i32] } (srl:{ *:[i32] } rGPR:{ *:[i32] }:$Src, 8:{ *:[i32] }), 16711935:{ *:[i32] })  =>  (t2UXTB16:{ *:[i32] } rGPR:{ *:[i32] }:$Src, 1:{ *:[i32] })
4370
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2UXTB16,
4371
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4372
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Src
4373
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/1,
4374
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4375
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4376
706
        GIR_EraseFromParent, /*InsnID*/0,
4377
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4378
706
        // GIR_Coverage, 1916,
4379
706
        GIR_Done,
4380
706
      // Label 237: @9627
4381
706
      GIM_Try, /*On fail goto*//*Label 238*/ 9668, // Rule ID 1814 //
4382
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM,
4383
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
4384
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4385
706
        GIM_CheckConstantInt, /*MI*/0, /*Op*/2, 255,
4386
706
        // (and:{ *:[i32] } GPR:{ *:[i32] }:$Src, 255:{ *:[i32] })  =>  (UXTB:{ *:[i32] } GPR:{ *:[i32] }:$Src, 0:{ *:[i32] })
4387
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::UXTB,
4388
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4389
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Src
4390
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
4391
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4392
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4393
706
        GIR_EraseFromParent, /*InsnID*/0,
4394
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4395
706
        // GIR_Coverage, 1814,
4396
706
        GIR_Done,
4397
706
      // Label 238: @9668
4398
706
      GIM_Try, /*On fail goto*//*Label 239*/ 9709, // Rule ID 1815 //
4399
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM,
4400
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
4401
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4402
706
        GIM_CheckConstantInt, /*MI*/0, /*Op*/2, 65535,
4403
706
        // (and:{ *:[i32] } GPR:{ *:[i32] }:$Src, 65535:{ *:[i32] })  =>  (UXTH:{ *:[i32] } GPR:{ *:[i32] }:$Src, 0:{ *:[i32] })
4404
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::UXTH,
4405
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4406
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Src
4407
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
4408
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4409
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4410
706
        GIR_EraseFromParent, /*InsnID*/0,
4411
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4412
706
        // GIR_Coverage, 1815,
4413
706
        GIR_Done,
4414
706
      // Label 239: @9709
4415
706
      GIM_Try, /*On fail goto*//*Label 240*/ 9750, // Rule ID 1816 //
4416
706
        GIM_CheckFeatures, GIFBS_HasV6_IsARM,
4417
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRnopcRegClassID,
4418
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4419
706
        GIM_CheckConstantInt, /*MI*/0, /*Op*/2, 16711935,
4420
706
        // (and:{ *:[i32] } GPR:{ *:[i32] }:$Src, 16711935:{ *:[i32] })  =>  (UXTB16:{ *:[i32] } GPR:{ *:[i32] }:$Src, 0:{ *:[i32] })
4421
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::UXTB16,
4422
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4423
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Src
4424
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
4425
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4426
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4427
706
        GIR_EraseFromParent, /*InsnID*/0,
4428
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4429
706
        // GIR_Coverage, 1816,
4430
706
        GIR_Done,
4431
706
      // Label 240: @9750
4432
706
      GIM_Try, /*On fail goto*//*Label 241*/ 9791, // Rule ID 2004 //
4433
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
4434
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4435
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4436
706
        GIM_CheckConstantInt, /*MI*/0, /*Op*/2, 255,
4437
706
        // (and:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 255:{ *:[i32] })  =>  (t2UXTB:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
4438
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2UXTB,
4439
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4440
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rm
4441
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
4442
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4443
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4444
706
        GIR_EraseFromParent, /*InsnID*/0,
4445
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4446
706
        // GIR_Coverage, 2004,
4447
706
        GIR_Done,
4448
706
      // Label 241: @9791
4449
706
      GIM_Try, /*On fail goto*//*Label 242*/ 9832, // Rule ID 2005 //
4450
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
4451
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4452
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4453
706
        GIM_CheckConstantInt, /*MI*/0, /*Op*/2, 65535,
4454
706
        // (and:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 65535:{ *:[i32] })  =>  (t2UXTH:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
4455
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2UXTH,
4456
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4457
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rm
4458
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
4459
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4460
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4461
706
        GIR_EraseFromParent, /*InsnID*/0,
4462
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4463
706
        // GIR_Coverage, 2005,
4464
706
        GIR_Done,
4465
706
      // Label 242: @9832
4466
706
      GIM_Try, /*On fail goto*//*Label 243*/ 9873, // Rule ID 2006 //
4467
706
        GIM_CheckFeatures, GIFBS_HasDSP_IsThumb2,
4468
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4469
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4470
706
        GIM_CheckConstantInt, /*MI*/0, /*Op*/2, 16711935,
4471
706
        // (and:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 16711935:{ *:[i32] })  =>  (t2UXTB16:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, 0:{ *:[i32] })
4472
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2UXTB16,
4473
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4474
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rm
4475
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/0,
4476
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4477
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4478
706
        GIR_EraseFromParent, /*InsnID*/0,
4479
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4480
706
        // GIR_Coverage, 2006,
4481
706
        GIR_Done,
4482
706
      // Label 243: @9873
4483
706
      GIM_Try, /*On fail goto*//*Label 244*/ 9946, // Rule ID 2534 //
4484
706
        GIM_CheckFeatures, GIFBS_IsARM,
4485
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
4486
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
4487
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_XOR,
4488
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4489
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4490
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/1, -1,
4491
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/2, // MIs[2]
4492
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_CONSTANT,
4493
706
        GIM_CheckI64ImmPredicate, /*MI*/2, /*Predicate*/GIPFP_I64_Predicate_mod_imm,
4494
706
        // MIs[2] Operand 1
4495
706
        // No operand predicates
4496
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
4497
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4498
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
4499
706
        // (and:{ *:[i32] } (xor:{ *:[i32] } -1:{ *:[i32] }, (imm:{ *:[i32] })<<P:Predicate_mod_imm>>:$imm), GPR:{ *:[i32] }:$Rn)  =>  (BICri:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
4500
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::BICri,
4501
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4502
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
4503
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
4504
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4505
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4506
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4507
706
        GIR_EraseFromParent, /*InsnID*/0,
4508
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4509
706
        // GIR_Coverage, 2534,
4510
706
        GIR_Done,
4511
706
      // Label 244: @9946
4512
706
      GIM_Try, /*On fail goto*//*Label 245*/ 10019, // Rule ID 2567 //
4513
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
4514
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4515
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
4516
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_XOR,
4517
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4518
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4519
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/1, -1,
4520
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/2, // MIs[2]
4521
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_CONSTANT,
4522
706
        GIM_CheckI64ImmPredicate, /*MI*/2, /*Predicate*/GIPFP_I64_Predicate_t2_so_imm,
4523
706
        // MIs[2] Operand 1
4524
706
        // No operand predicates
4525
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
4526
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4527
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
4528
706
        // (and:{ *:[i32] } (xor:{ *:[i32] } -1:{ *:[i32] }, (imm:{ *:[i32] })<<P:Predicate_t2_so_imm>>:$imm), rGPR:{ *:[i32] }:$Rn)  =>  (t2BICri:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
4529
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2BICri,
4530
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4531
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
4532
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
4533
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4534
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4535
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4536
706
        GIR_EraseFromParent, /*InsnID*/0,
4537
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4538
706
        // GIR_Coverage, 2567,
4539
706
        GIR_Done,
4540
706
      // Label 245: @10019
4541
706
      GIM_Try, /*On fail goto*//*Label 246*/ 10092, // Rule ID 2533 //
4542
706
        GIM_CheckFeatures, GIFBS_IsARM,
4543
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
4544
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
4545
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_XOR,
4546
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4547
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4548
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
4549
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_CONSTANT,
4550
706
        GIM_CheckI64ImmPredicate, /*MI*/2, /*Predicate*/GIPFP_I64_Predicate_mod_imm,
4551
706
        // MIs[2] Operand 1
4552
706
        // No operand predicates
4553
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, -1,
4554
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
4555
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4556
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
4557
706
        // (and:{ *:[i32] } (xor:{ *:[i32] } (imm:{ *:[i32] })<<P:Predicate_mod_imm>>:$imm, -1:{ *:[i32] }), GPR:{ *:[i32] }:$Rn)  =>  (BICri:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
4558
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::BICri,
4559
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4560
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
4561
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
4562
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4563
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4564
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4565
706
        GIR_EraseFromParent, /*InsnID*/0,
4566
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4567
706
        // GIR_Coverage, 2533,
4568
706
        GIR_Done,
4569
706
      // Label 246: @10092
4570
706
      GIM_Try, /*On fail goto*//*Label 247*/ 10165, // Rule ID 2566 //
4571
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
4572
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4573
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
4574
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_XOR,
4575
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4576
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4577
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
4578
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_CONSTANT,
4579
706
        GIM_CheckI64ImmPredicate, /*MI*/2, /*Predicate*/GIPFP_I64_Predicate_t2_so_imm,
4580
706
        // MIs[2] Operand 1
4581
706
        // No operand predicates
4582
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, -1,
4583
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
4584
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4585
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
4586
706
        // (and:{ *:[i32] } (xor:{ *:[i32] } (imm:{ *:[i32] })<<P:Predicate_t2_so_imm>>:$imm, -1:{ *:[i32] }), rGPR:{ *:[i32] }:$Rn)  =>  (t2BICri:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
4587
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2BICri,
4588
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4589
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
4590
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
4591
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4592
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4593
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4594
706
        GIR_EraseFromParent, /*InsnID*/0,
4595
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4596
706
        // GIR_Coverage, 2566,
4597
706
        GIR_Done,
4598
706
      // Label 247: @10165
4599
706
      GIM_Try, /*On fail goto*//*Label 248*/ 10238, // Rule ID 2532 //
4600
706
        GIM_CheckFeatures, GIFBS_IsARM,
4601
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
4602
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4603
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
4604
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_XOR,
4605
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4606
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4607
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/1, -1,
4608
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/2, // MIs[2]
4609
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_CONSTANT,
4610
706
        GIM_CheckI64ImmPredicate, /*MI*/2, /*Predicate*/GIPFP_I64_Predicate_mod_imm,
4611
706
        // MIs[2] Operand 1
4612
706
        // No operand predicates
4613
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4614
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
4615
706
        // (and:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (xor:{ *:[i32] } -1:{ *:[i32] }, (imm:{ *:[i32] })<<P:Predicate_mod_imm>>:$imm))  =>  (BICri:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
4616
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::BICri,
4617
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4618
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4619
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
4620
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4621
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4622
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4623
706
        GIR_EraseFromParent, /*InsnID*/0,
4624
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4625
706
        // GIR_Coverage, 2532,
4626
706
        GIR_Done,
4627
706
      // Label 248: @10238
4628
706
      GIM_Try, /*On fail goto*//*Label 249*/ 10311, // Rule ID 2565 //
4629
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
4630
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4631
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4632
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
4633
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_XOR,
4634
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4635
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4636
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/1, -1,
4637
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/2, // MIs[2]
4638
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_CONSTANT,
4639
706
        GIM_CheckI64ImmPredicate, /*MI*/2, /*Predicate*/GIPFP_I64_Predicate_t2_so_imm,
4640
706
        // MIs[2] Operand 1
4641
706
        // No operand predicates
4642
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4643
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
4644
706
        // (and:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, (xor:{ *:[i32] } -1:{ *:[i32] }, (imm:{ *:[i32] })<<P:Predicate_t2_so_imm>>:$imm))  =>  (t2BICri:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
4645
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2BICri,
4646
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4647
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4648
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
4649
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4650
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4651
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4652
706
        GIR_EraseFromParent, /*InsnID*/0,
4653
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4654
706
        // GIR_Coverage, 2565,
4655
706
        GIR_Done,
4656
706
      // Label 249: @10311
4657
706
      GIM_Try, /*On fail goto*//*Label 250*/ 10384, // Rule ID 161 //
4658
706
        GIM_CheckFeatures, GIFBS_IsARM,
4659
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
4660
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4661
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
4662
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_XOR,
4663
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4664
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4665
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
4666
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_CONSTANT,
4667
706
        GIM_CheckI64ImmPredicate, /*MI*/2, /*Predicate*/GIPFP_I64_Predicate_mod_imm,
4668
706
        // MIs[2] Operand 1
4669
706
        // No operand predicates
4670
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, -1,
4671
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4672
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
4673
706
        // (and:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (xor:{ *:[i32] } (imm:{ *:[i32] })<<P:Predicate_mod_imm>>:$imm, -1:{ *:[i32] }))  =>  (BICri:{ *:[i32] } GPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
4674
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::BICri,
4675
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4676
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4677
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
4678
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4679
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4680
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4681
706
        GIR_EraseFromParent, /*InsnID*/0,
4682
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4683
706
        // GIR_Coverage, 161,
4684
706
        GIR_Done,
4685
706
      // Label 250: @10384
4686
706
      GIM_Try, /*On fail goto*//*Label 251*/ 10457, // Rule ID 494 //
4687
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
4688
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4689
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4690
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/2, // MIs[1]
4691
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_XOR,
4692
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4693
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4694
706
        GIM_RecordInsn, /*DefineMI*/2, /*MI*/1, /*OpIdx*/1, // MIs[2]
4695
706
        GIM_CheckOpcode, /*MI*/2, TargetOpcode::G_CONSTANT,
4696
706
        GIM_CheckI64ImmPredicate, /*MI*/2, /*Predicate*/GIPFP_I64_Predicate_t2_so_imm,
4697
706
        // MIs[2] Operand 1
4698
706
        // No operand predicates
4699
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, -1,
4700
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4701
706
        GIM_CheckIsSafeToFold, /*InsnID*/2,
4702
706
        // (and:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, (xor:{ *:[i32] } (imm:{ *:[i32] })<<P:Predicate_t2_so_imm>>:$imm, -1:{ *:[i32] }))  =>  (t2BICri:{ *:[i32] } rGPR:{ *:[i32] }:$Rn, (imm:{ *:[i32] }):$imm)
4703
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::t2BICri,
4704
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4705
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/1, // Rn
4706
706
        GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // imm
4707
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4708
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4709
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4710
706
        GIR_EraseFromParent, /*InsnID*/0,
4711
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4712
706
        // GIR_Coverage, 494,
4713
706
        GIR_Done,
4714
706
      // Label 251: @10457
4715
706
      GIM_Try, /*On fail goto*//*Label 252*/ 10523, // Rule ID 2535 //
4716
706
        GIM_CheckFeatures, GIFBS_IsARM,
4717
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::GPRRegClassID,
4718
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
4719
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_XOR,
4720
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4721
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4722
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::GPRRegClassID,
4723
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, -1,
4724
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::GPRRegClassID,
4725
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4726
706
        // (and:{ *:[i32] } (xor:{ *:[i32] } GPR:{ *:[i32] }:$Rm, -1:{ *:[i32] }), GPR:{ *:[i32] }:$Rn)  =>  (BICrr:{ *:[i32] } GPR:{ *:[i32] }:$Rn, GPR:{ *:[i32] }:$Rm)
4727
706
        GIR_BuildMI, /*InsnID*/0, /*Opcode*/ARM::BICrr,
4728
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // Rd
4729
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/2, // Rn
4730
706
        GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/1, /*OpIdx*/1, // Rm
4731
706
        GIR_AddImm, /*InsnID*/0, /*Imm*/14,
4732
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4733
706
        GIR_AddRegister, /*InsnID*/0, ::zero_reg,
4734
706
        GIR_EraseFromParent, /*InsnID*/0,
4735
706
        GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
4736
706
        // GIR_Coverage, 2535,
4737
706
        GIR_Done,
4738
706
      // Label 252: @10523
4739
706
      GIM_Try, /*On fail goto*//*Label 253*/ 10589, // Rule ID 2568 //
4740
706
        GIM_CheckFeatures, GIFBS_IsThumb2,
4741
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/ARM::rGPRRegClassID,
4742
706
        GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]
4743
706
        GIM_CheckOpcode, /*MI*/1, TargetOpcode::G_XOR,
4744
706
        GIM_CheckType, /*MI*/1, /*Op*/1, /*Type*/GILLT_s32,
4745
706
        GIM_CheckType, /*MI*/1, /*Op*/2, /*Type*/GILLT_s32,
4746
706
        GIM_CheckRegBankForClass, /*MI*/1, /*Op*/1, /*RC*/ARM::rGPRRegClassID,
4747
706
        GIM_CheckConstantInt, /*MI*/1, /*Op*/2, -1,
4748
706
        GIM_CheckRegBankForClass, /*MI*/0, /*Op*/2, /*RC*/ARM::rGPRRegClassID,
4749
706
        GIM_CheckIsSafeToFold, /*InsnID*/1,
4750
706
        // (and:{ *:[i32] } (xor:{ *:[i32] } rGPR:{ *:[i32] }:$Rm, -1:{ *:[i32] }), rGPR:{ *:[i32] }:$Rn)  =>