1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* DAG Instruction Selector for the AVR target *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* *|
7\*===----------------------------------------------------------------------===*/
8
9// *** NOTE: This file is #included into the middle of the target
10// *** instruction selector class. These functions are really methods.
11
12// If GET_DAGISEL_DECL is #defined with any value, only function
13// declarations will be included when this file is included.
14// If GET_DAGISEL_BODY is #defined, its value should be the name of
15// the instruction selector class. Function bodies will be emitted
16// and each function's name will be qualified with the name of the
17// class.
18//
19// When neither of the GET_DAGISEL* macros is defined, the functions
20// are emitted inline.
21
22#if defined(GET_DAGISEL_DECL) && defined(GET_DAGISEL_BODY)
23#error GET_DAGISEL_DECL and GET_DAGISEL_BODY cannot be both defined, undef both for inline definitions
24#endif
25
26#ifdef GET_DAGISEL_BODY
27#define LOCAL_DAGISEL_STRINGIZE(X) LOCAL_DAGISEL_STRINGIZE_(X)
28#define LOCAL_DAGISEL_STRINGIZE_(X) #X
29static_assert(sizeof(LOCAL_DAGISEL_STRINGIZE(GET_DAGISEL_BODY)) > 1,
30 "GET_DAGISEL_BODY is empty: it should be defined with the class name");
31#undef LOCAL_DAGISEL_STRINGIZE_
32#undef LOCAL_DAGISEL_STRINGIZE
33#endif
34
35#if !defined(GET_DAGISEL_DECL) && !defined(GET_DAGISEL_BODY)
36#define DAGISEL_INLINE 1
37#else
38#define DAGISEL_INLINE 0
39#endif
40
41#if !DAGISEL_INLINE
42#define DAGISEL_CLASS_COLONCOLON GET_DAGISEL_BODY ::
43#else
44#define DAGISEL_CLASS_COLONCOLON
45#endif
46
47#ifdef GET_DAGISEL_DECL
48void SelectCode(SDNode *N);
49#endif
50#if defined(GET_DAGISEL_BODY) || DAGISEL_INLINE
51void DAGISEL_CLASS_COLONCOLON SelectCode(SDNode *N)
52{
53 // Some target values are emitted as 2 bytes, TARGET_VAL handles
54 // this. Coverage indexes are emitted as 4 bytes,
55 // COVERAGE_IDX_VAL handles this.
56 #define TARGET_VAL(X) X & 255, unsigned(X) >> 8
57 #define COVERAGE_IDX_VAL(X) X & 255, (unsigned(X) >> 8) & 255, (unsigned(X) >> 16) & 255, (unsigned(X) >> 24) & 255
58 static const uint8_t MatcherTable[] = {
59 OPC_SwitchOpcode , 57|128,3, TARGET_VAL(ISD::STORE),
60 OPC_RecordMemRef,
61 OPC_RecordNode,
62 OPC_Scope, 107,
63 OPC_MoveChild1,
64 OPC_SwitchOpcode , 49, TARGET_VAL(ISD::OR),
65 OPC_MoveChild0,
66 OPC_CheckOpcode, TARGET_VAL(ISD::LOAD),
67 OPC_RecordMemRef,
68 OPC_RecordNode,
69 OPC_CheckFoldableChainNode,
70 OPC_RecordChild1,
71 OPC_MoveChild1,
72 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
73 OPC_CheckPredicate6,
74 OPC_MoveParent,
75 OPC_CheckPredicate2,
76 OPC_CheckPredicate3,
77 OPC_MoveSibling1,
78 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
79 OPC_RecordNode,
80 OPC_CheckPredicate, 12,
81 OPC_MoveParent,
82 OPC_CheckType, MVT::i8,
83 OPC_MoveParent,
84 OPC_CheckChild2Same, 2,
85 OPC_CheckPredicate1,
86 OPC_CheckPredicate0,
87 OPC_EmitMergeInputChains, 2, 0, 1,
88 OPC_EmitConvertToTarget2,
89 OPC_EmitNodeXForm, 0, 4,
90 OPC_EmitConvertToTarget3,
91 OPC_EmitNodeXForm, 1, 6,
92 OPC_MorphNodeTo0, TARGET_VAL(AVR::SBIAb), 0|OPFL_Chain|OPFL_MemRefs,
93 2, 28,
94 49, TARGET_VAL(ISD::AND),
95 OPC_MoveChild0,
96 OPC_CheckOpcode, TARGET_VAL(ISD::LOAD),
97 OPC_RecordMemRef,
98 OPC_RecordNode,
99 OPC_CheckFoldableChainNode,
100 OPC_RecordChild1,
101 OPC_MoveChild1,
102 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
103 OPC_CheckPredicate6,
104 OPC_MoveParent,
105 OPC_CheckPredicate2,
106 OPC_CheckPredicate3,
107 OPC_MoveSibling1,
108 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
109 OPC_RecordNode,
110 OPC_CheckPredicate, 13,
111 OPC_MoveParent,
112 OPC_CheckType, MVT::i8,
113 OPC_MoveParent,
114 OPC_CheckChild2Same, 2,
115 OPC_CheckPredicate1,
116 OPC_CheckPredicate0,
117 OPC_EmitMergeInputChains, 2, 0, 1,
118 OPC_EmitConvertToTarget2,
119 OPC_EmitNodeXForm, 0, 4,
120 OPC_EmitConvertToTarget3,
121 OPC_EmitNodeXForm, 2, 6,
122 OPC_MorphNodeTo0, TARGET_VAL(AVR::CBIAb), 0|OPFL_Chain|OPFL_MemRefs,
123 2, 28,
124 0,
125 71|128,2,
126 OPC_RecordChild1,
127 OPC_Scope, 44|128,1,
128 OPC_CheckChild1Type, MVT::i8,
129 OPC_Scope, 27,
130 OPC_RecordChild2,
131 OPC_CheckPredicate1,
132 OPC_CheckPredicate0,
133 OPC_Scope, 10,
134 OPC_CheckPatternPredicate0,
135 OPC_CheckComplexPat0, /*#*/2,
136 OPC_EmitMergeInputChains1_0,
137 OPC_MorphNodeTo0, TARGET_VAL(AVR::STDPtrQRr), 0|OPFL_Chain|OPFL_MemRefs,
138 3, 10,
139 10,
140 OPC_CheckComplexPat0, /*#*/2,
141 OPC_EmitMergeInputChains1_0,
142 OPC_MorphNodeTo1, TARGET_VAL(AVR::STDSPQRr), 0|OPFL_Chain|OPFL_MemRefs,
143 MVT::i16, 3, 10,
144 0,
145 35,
146 OPC_MoveChild2,
147 OPC_CheckOpcode, TARGET_VAL(AVRISD::WRAPPER),
148 OPC_RecordChild0,
149 OPC_MoveChild0,
150 OPC_CheckOpcode, TARGET_VAL(ISD::TargetGlobalAddress),
151 OPC_MoveParent,
152 OPC_CheckType, MVT::i16,
153 OPC_MoveParent,
154 OPC_CheckPredicate1,
155 OPC_CheckPredicate0,
156 OPC_Scope, 8,
157 OPC_CheckPatternPredicate0,
158 OPC_EmitMergeInputChains1_0,
159 OPC_MorphNodeTo0, TARGET_VAL(AVR::STSKRr), 0|OPFL_Chain|OPFL_MemRefs,
160 2, 6,
161 8,
162 OPC_CheckPatternPredicate2,
163 OPC_EmitMergeInputChains1_0,
164 OPC_MorphNodeTo0, TARGET_VAL(AVR::STSKRrTiny), 0|OPFL_Chain|OPFL_MemRefs,
165 2, 6,
166 0,
167 103,
168 OPC_RecordChild2,
169 OPC_Scope, 48,
170 OPC_MoveChild2,
171 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
172 OPC_Scope, 15,
173 OPC_CheckPredicate7,
174 OPC_MoveParent,
175 OPC_CheckPredicate1,
176 OPC_CheckPredicate0,
177 OPC_EmitMergeInputChains1_0,
178 OPC_EmitConvertToTarget2,
179 OPC_EmitNodeXForm, 0, 3,
180 OPC_MorphNodeTo0, TARGET_VAL(AVR::OUTARr), 0|OPFL_Chain|OPFL_MemRefs,
181 2, 11,
182 25,
183 OPC_MoveParent,
184 OPC_CheckPredicate1,
185 OPC_CheckPredicate0,
186 OPC_Scope, 9,
187 OPC_CheckPatternPredicate0,
188 OPC_EmitMergeInputChains1_0,
189 OPC_EmitConvertToTarget2,
190 OPC_MorphNodeTo0, TARGET_VAL(AVR::STSKRr), 0|OPFL_Chain|OPFL_MemRefs,
191 2, 8,
192 9,
193 OPC_CheckPatternPredicate2,
194 OPC_EmitMergeInputChains1_0,
195 OPC_EmitConvertToTarget2,
196 OPC_MorphNodeTo0, TARGET_VAL(AVR::STSKRrTiny), 0|OPFL_Chain|OPFL_MemRefs,
197 2, 8,
198 0,
199 0,
200 37,
201 OPC_RecordChild3,
202 OPC_MoveChild3,
203 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
204 OPC_MoveParent,
205 OPC_CheckPredicate0,
206 OPC_CheckType, MVT::i16,
207 OPC_Scope, 12,
208 OPC_CheckPredicate, 8,
209 OPC_CheckPatternPredicate1,
210 OPC_EmitMergeInputChains1_0,
211 OPC_EmitConvertToTarget3,
212 OPC_MorphNodeTo1, TARGET_VAL(AVR::STPtrPiRr), 0|OPFL_Chain|OPFL_MemRefs,
213 MVT::i16, 3, 25,
214 12,
215 OPC_CheckPredicate, 9,
216 OPC_CheckPatternPredicate1,
217 OPC_EmitMergeInputChains1_0,
218 OPC_EmitConvertToTarget3,
219 OPC_MorphNodeTo1, TARGET_VAL(AVR::STPtrPdRr), 0|OPFL_Chain|OPFL_MemRefs,
220 MVT::i16, 3, 25,
221 0,
222 12,
223 OPC_CheckChild2Type, MVT::i16,
224 OPC_CheckPredicate1,
225 OPC_CheckPredicate0,
226 OPC_CheckPatternPredicate1,
227 OPC_EmitMergeInputChains1_0,
228 OPC_MorphNodeTo0, TARGET_VAL(AVR::STPtrRr), 0|OPFL_Chain|OPFL_MemRefs,
229 2, 6,
230 0,
231 0,
232 20|128,1,
233 OPC_CheckChild1Type, MVT::i16,
234 OPC_Scope, 27,
235 OPC_RecordChild2,
236 OPC_CheckPredicate1,
237 OPC_CheckPredicate0,
238 OPC_Scope, 10,
239 OPC_CheckPatternPredicate1,
240 OPC_CheckComplexPat0, /*#*/2,
241 OPC_EmitMergeInputChains1_0,
242 OPC_MorphNodeTo0, TARGET_VAL(AVR::STDWPtrQRr), 0|OPFL_Chain|OPFL_MemRefs,
243 3, 10,
244 10,
245 OPC_CheckComplexPat0, /*#*/2,
246 OPC_EmitMergeInputChains1_0,
247 OPC_MorphNodeTo1, TARGET_VAL(AVR::STDWSPQRr), 0|OPFL_Chain|OPFL_MemRefs,
248 MVT::i16, 3, 10,
249 0,
250 23,
251 OPC_MoveChild2,
252 OPC_CheckOpcode, TARGET_VAL(AVRISD::WRAPPER),
253 OPC_RecordChild0,
254 OPC_MoveChild0,
255 OPC_CheckOpcode, TARGET_VAL(ISD::TargetGlobalAddress),
256 OPC_MoveParent,
257 OPC_CheckType, MVT::i16,
258 OPC_MoveParent,
259 OPC_CheckPredicate1,
260 OPC_CheckPredicate0,
261 OPC_CheckPatternPredicate0,
262 OPC_EmitMergeInputChains1_0,
263 OPC_MorphNodeTo0, TARGET_VAL(AVR::STSWKRr), 0|OPFL_Chain|OPFL_MemRefs,
264 2, 6,
265 91,
266 OPC_RecordChild2,
267 OPC_Scope, 36,
268 OPC_MoveChild2,
269 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
270 OPC_Scope, 16,
271 OPC_CheckPredicate, 10,
272 OPC_MoveParent,
273 OPC_CheckPredicate1,
274 OPC_CheckPredicate0,
275 OPC_EmitMergeInputChains1_0,
276 OPC_EmitConvertToTarget2,
277 OPC_EmitNodeXForm, 0, 3,
278 OPC_MorphNodeTo0, TARGET_VAL(AVR::OUTWARr), 0|OPFL_Chain|OPFL_MemRefs,
279 2, 11,
280 12,
281 OPC_MoveParent,
282 OPC_CheckPredicate1,
283 OPC_CheckPredicate0,
284 OPC_CheckPatternPredicate0,
285 OPC_EmitMergeInputChains1_0,
286 OPC_EmitConvertToTarget2,
287 OPC_MorphNodeTo0, TARGET_VAL(AVR::STSWKRr), 0|OPFL_Chain|OPFL_MemRefs,
288 2, 8,
289 0,
290 37,
291 OPC_RecordChild3,
292 OPC_MoveChild3,
293 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
294 OPC_MoveParent,
295 OPC_CheckPredicate0,
296 OPC_CheckType, MVT::i16,
297 OPC_Scope, 12,
298 OPC_CheckPredicate, 8,
299 OPC_CheckPatternPredicate1,
300 OPC_EmitMergeInputChains1_0,
301 OPC_EmitConvertToTarget3,
302 OPC_MorphNodeTo1, TARGET_VAL(AVR::STWPtrPiRr), 0|OPFL_Chain|OPFL_MemRefs,
303 MVT::i16, 3, 25,
304 12,
305 OPC_CheckPredicate, 9,
306 OPC_CheckPatternPredicate1,
307 OPC_EmitMergeInputChains1_0,
308 OPC_EmitConvertToTarget3,
309 OPC_MorphNodeTo1, TARGET_VAL(AVR::STWPtrPdRr), 0|OPFL_Chain|OPFL_MemRefs,
310 MVT::i16, 3, 25,
311 0,
312 12,
313 OPC_CheckChild2Type, MVT::i16,
314 OPC_CheckPredicate1,
315 OPC_CheckPredicate0,
316 OPC_CheckPatternPredicate1,
317 OPC_EmitMergeInputChains1_0,
318 OPC_MorphNodeTo0, TARGET_VAL(AVR::STWPtrRr), 0|OPFL_Chain|OPFL_MemRefs,
319 2, 6,
320 0,
321 0,
322 0,
323 0,
324 82|128,1, TARGET_VAL(ISD::LOAD),
325 OPC_RecordMemRef,
326 OPC_RecordNode,
327 OPC_Scope, 31,
328 OPC_RecordChild1,
329 OPC_CheckPredicate2,
330 OPC_CheckPredicate3,
331 OPC_SwitchType , 11, MVT::i8,
332 OPC_CheckPatternPredicate0,
333 OPC_CheckComplexPat0, /*#*/1,
334 OPC_EmitMergeInputChains1_0,
335 OPC_MorphNodeTo1, TARGET_VAL(AVR::LDDRdPtrQ), 0|OPFL_Chain|OPFL_MemRefs,
336 MVT::i8, 2, 23,
337 11, MVT::i16,
338 OPC_CheckPatternPredicate1,
339 OPC_CheckComplexPat0, /*#*/1,
340 OPC_EmitMergeInputChains1_0,
341 OPC_MorphNodeTo1, TARGET_VAL(AVR::LDDWRdPtrQ), 0|OPFL_Chain|OPFL_MemRefs,
342 MVT::i16, 2, 23,
343 0,
344 50,
345 OPC_MoveChild1,
346 OPC_CheckOpcode, TARGET_VAL(AVRISD::WRAPPER),
347 OPC_RecordChild0,
348 OPC_MoveChild0,
349 OPC_CheckOpcode, TARGET_VAL(ISD::TargetGlobalAddress),
350 OPC_MoveParent,
351 OPC_MoveParent,
352 OPC_CheckPredicate2,
353 OPC_CheckPredicate3,
354 OPC_SwitchType , 22, MVT::i8,
355 OPC_Scope, 9,
356 OPC_CheckPatternPredicate0,
357 OPC_EmitMergeInputChains1_0,
358 OPC_MorphNodeTo1, TARGET_VAL(AVR::LDSRdK), 0|OPFL_Chain|OPFL_MemRefs,
359 MVT::i8, 1, 5,
360 9,
361 OPC_CheckPatternPredicate2,
362 OPC_EmitMergeInputChains1_0,
363 OPC_MorphNodeTo1, TARGET_VAL(AVR::LDSRdKTiny), 0|OPFL_Chain|OPFL_MemRefs,
364 MVT::i8, 1, 5,
365 0,
366 9, MVT::i16,
367 OPC_CheckPatternPredicate0,
368 OPC_EmitMergeInputChains1_0,
369 OPC_MorphNodeTo1, TARGET_VAL(AVR::LDSWRdK), 0|OPFL_Chain|OPFL_MemRefs,
370 MVT::i16, 1, 5,
371 0,
372 122,
373 OPC_RecordChild1,
374 OPC_Scope, 89,
375 OPC_MoveChild1,
376 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
377 OPC_Scope, 18,
378 OPC_CheckPredicate7,
379 OPC_MoveParent,
380 OPC_CheckPredicate2,
381 OPC_CheckPredicate3,
382 OPC_CheckType, MVT::i8,
383 OPC_EmitMergeInputChains1_0,
384 OPC_EmitConvertToTarget1,
385 OPC_EmitNodeXForm, 0, 2,
386 OPC_MorphNodeTo1, TARGET_VAL(AVR::INRdA), 0|OPFL_Chain|OPFL_MemRefs,
387 MVT::i8, 1, 19,
388 19,
389 OPC_CheckPredicate, 10,
390 OPC_MoveParent,
391 OPC_CheckPredicate2,
392 OPC_CheckPredicate3,
393 OPC_CheckType, MVT::i16,
394 OPC_EmitMergeInputChains1_0,
395 OPC_EmitConvertToTarget1,
396 OPC_EmitNodeXForm, 0, 2,
397 OPC_MorphNodeTo1, TARGET_VAL(AVR::INWRdA), 0|OPFL_Chain|OPFL_MemRefs,
398 MVT::i16, 1, 19,
399 43,
400 OPC_MoveParent,
401 OPC_CheckPredicate2,
402 OPC_CheckPredicate3,
403 OPC_SwitchType , 24, MVT::i8,
404 OPC_Scope, 10,
405 OPC_CheckPatternPredicate0,
406 OPC_EmitMergeInputChains1_0,
407 OPC_EmitConvertToTarget1,
408 OPC_MorphNodeTo1, TARGET_VAL(AVR::LDSRdK), 0|OPFL_Chain|OPFL_MemRefs,
409 MVT::i8, 1, 14,
410 10,
411 OPC_CheckPatternPredicate2,
412 OPC_EmitMergeInputChains1_0,
413 OPC_EmitConvertToTarget1,
414 OPC_MorphNodeTo1, TARGET_VAL(AVR::LDSRdKTiny), 0|OPFL_Chain|OPFL_MemRefs,
415 MVT::i8, 1, 14,
416 0,
417 10, MVT::i16,
418 OPC_CheckPatternPredicate0,
419 OPC_EmitMergeInputChains1_0,
420 OPC_EmitConvertToTarget1,
421 OPC_MorphNodeTo1, TARGET_VAL(AVR::LDSWRdK), 0|OPFL_Chain|OPFL_MemRefs,
422 MVT::i16, 1, 14,
423 0,
424 0,
425 28,
426 OPC_CheckChild1Type, MVT::i16,
427 OPC_CheckPredicate2,
428 OPC_CheckPredicate3,
429 OPC_SwitchType , 9, MVT::i8,
430 OPC_CheckPatternPredicate1,
431 OPC_EmitMergeInputChains1_0,
432 OPC_MorphNodeTo1, TARGET_VAL(AVR::LDRdPtr), 0|OPFL_Chain|OPFL_MemRefs,
433 MVT::i8, 1, 5,
434 9, MVT::i16,
435 OPC_CheckPatternPredicate1,
436 OPC_EmitMergeInputChains1_0,
437 OPC_MorphNodeTo1, TARGET_VAL(AVR::LDWRdPtr), 0|OPFL_Chain|OPFL_MemRefs,
438 MVT::i16, 1, 5,
439 0,
440 0,
441 0,
442 29, TARGET_VAL(ISD::TRUNCATE),
443 OPC_Scope, 16,
444 OPC_MoveChild0,
445 OPC_CheckOpcode, TARGET_VAL(AVRISD::LSRWN),
446 OPC_RecordChild0,
447 OPC_CheckChild1Integer, 8,
448 OPC_MoveParent,
449 OPC_EmitIntegerI32, AVR::sub_hi,
450 OPC_MorphNodeTo1None, TARGET_VAL(TargetOpcode::EXTRACT_SUBREG),
451 MVT::i8, 2, 4,
452 9,
453 OPC_RecordChild0,
454 OPC_EmitIntegerI32, AVR::sub_lo,
455 OPC_MorphNodeTo1None, TARGET_VAL(TargetOpcode::EXTRACT_SUBREG),
456 MVT::i8, 2, 4,
457 0,
458 20, TARGET_VAL(ISD::CALLSEQ_START),
459 OPC_RecordNode,
460 OPC_RecordChild1,
461 OPC_MoveChild1,
462 OPC_CheckOpcode, TARGET_VAL(ISD::TargetConstant),
463 OPC_MoveSibling2,
464 OPC_CheckOpcode, TARGET_VAL(ISD::TargetConstant),
465 OPC_RecordNode,
466 OPC_MoveParent,
467 OPC_EmitMergeInputChains1_0,
468 OPC_MorphNodeTo1, TARGET_VAL(AVR::ADJCALLSTACKDOWN), 0|OPFL_Chain|OPFL_GlueOutput,
469 MVT::i16, 2, 16,
470 21, TARGET_VAL(ISD::CALLSEQ_END),
471 OPC_RecordNode,
472 OPC_CaptureGlueInput,
473 OPC_RecordChild1,
474 OPC_MoveChild1,
475 OPC_CheckOpcode, TARGET_VAL(ISD::TargetConstant),
476 OPC_MoveSibling2,
477 OPC_CheckOpcode, TARGET_VAL(ISD::TargetConstant),
478 OPC_RecordNode,
479 OPC_MoveParent,
480 OPC_EmitMergeInputChains1_0,
481 OPC_MorphNodeTo1, TARGET_VAL(AVR::ADJCALLSTACKUP), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput,
482 MVT::i16, 2, 16,
483 15, TARGET_VAL(ISD::ATOMIC_FENCE),
484 OPC_RecordNode,
485 OPC_MoveChild1,
486 OPC_CheckOpcode, TARGET_VAL(ISD::TargetConstant),
487 OPC_MoveSibling2,
488 OPC_CheckOpcode, TARGET_VAL(ISD::TargetConstant),
489 OPC_MoveParent,
490 OPC_EmitMergeInputChains1_0,
491 OPC_MorphNodeTo0Chain, TARGET_VAL(AVR::AtomicFence),
492 0,
493 40|128,1, TARGET_VAL(ISD::ADD),
494 OPC_Scope, 21,
495 OPC_RecordChild0,
496 OPC_MoveChild1,
497 OPC_CheckOpcode, TARGET_VAL(AVRISD::WRAPPER),
498 OPC_RecordChild0,
499 OPC_MoveChild0,
500 OPC_CheckOpcode, TARGET_VAL(ISD::TargetGlobalAddress),
501 OPC_MoveParent,
502 OPC_MoveParent,
503 OPC_CheckType, MVT::i16,
504 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBIWRdK),
505 MVT::i16, MVT::i8, 2, 4,
506 21,
507 OPC_MoveChild0,
508 OPC_CheckOpcode, TARGET_VAL(AVRISD::WRAPPER),
509 OPC_RecordChild0,
510 OPC_MoveChild0,
511 OPC_CheckOpcode, TARGET_VAL(ISD::TargetGlobalAddress),
512 OPC_MoveParent,
513 OPC_MoveParent,
514 OPC_RecordChild1,
515 OPC_CheckType, MVT::i16,
516 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBIWRdK),
517 MVT::i16, MVT::i8, 2, 2,
518 121,
519 OPC_RecordChild0,
520 OPC_Scope, 11,
521 OPC_CheckChild1Integer, 1,
522 OPC_CheckType, MVT::i8,
523 OPC_MorphNodeTo2None, TARGET_VAL(AVR::INCRd),
524 MVT::i8, MVT::i8, 1, 1,
525 11,
526 OPC_CheckChild1Integer, 127,
527 OPC_CheckType, MVT::i8,
528 OPC_MorphNodeTo2None, TARGET_VAL(AVR::DECRd),
529 MVT::i8, MVT::i8, 1, 1,
530 93,
531 OPC_RecordChild1,
532 OPC_Scope, 69,
533 OPC_MoveChild1,
534 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
535 OPC_Scope, 14,
536 OPC_CheckPredicate, 11,
537 OPC_MoveParent,
538 OPC_CheckType, MVT::i16,
539 OPC_CheckPatternPredicate3,
540 OPC_EmitConvertToTarget1,
541 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ADIWRdK),
542 MVT::i16, MVT::i8, 2, 13,
543 17,
544 OPC_CheckPredicate, 14,
545 OPC_MoveParent,
546 OPC_CheckType, MVT::i16,
547 OPC_CheckPatternPredicate3,
548 OPC_EmitConvertToTarget1,
549 OPC_EmitNodeXForm, 3, 2,
550 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SBIWRdK),
551 MVT::i16, MVT::i8, 2, 18,
552 29,
553 OPC_MoveParent,
554 OPC_SwitchType , 11, MVT::i16,
555 OPC_EmitConvertToTarget1,
556 OPC_EmitNodeXForm, 3, 2,
557 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBIWRdK),
558 MVT::i16, MVT::i8, 2, 18,
559 11, MVT::i8,
560 OPC_EmitConvertToTarget1,
561 OPC_EmitNodeXForm, 4, 2,
562 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBIRdK),
563 MVT::i8, MVT::i8, 2, 18,
564 0,
565 0,
566 9,
567 OPC_CheckType, MVT::i8,
568 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ADDRdRr),
569 MVT::i8, MVT::i8, 2, 4,
570 9,
571 OPC_CheckType, MVT::i16,
572 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ADDWRdRr),
573 MVT::i16, MVT::i8, 2, 4,
574 0,
575 0,
576 0,
577 48, TARGET_VAL(ISD::XOR),
578 OPC_RecordChild0,
579 OPC_Scope, 22,
580 OPC_CheckChild1Integer, 127,
581 OPC_SwitchType , 7, MVT::i8,
582 OPC_MorphNodeTo2None, TARGET_VAL(AVR::COMRd),
583 MVT::i8, MVT::i8, 1, 1,
584 7, MVT::i16,
585 OPC_MorphNodeTo2None, TARGET_VAL(AVR::COMWRd),
586 MVT::i16, MVT::i8, 1, 1,
587 0,
588 21,
589 OPC_RecordChild1,
590 OPC_SwitchType , 7, MVT::i8,
591 OPC_MorphNodeTo2None, TARGET_VAL(AVR::EORRdRr),
592 MVT::i8, MVT::i8, 2, 4,
593 7, MVT::i16,
594 OPC_MorphNodeTo2None, TARGET_VAL(AVR::EORWRdRr),
595 MVT::i16, MVT::i8, 2, 4,
596 0,
597 0,
598 102, TARGET_VAL(ISD::SUB),
599 OPC_Scope, 28,
600 OPC_CheckChild0Integer, 0,
601 OPC_RecordChild1,
602 OPC_SwitchType , 7, MVT::i8,
603 OPC_MorphNodeTo2None, TARGET_VAL(AVR::NEGRd),
604 MVT::i8, MVT::i8, 1, 1,
605 12, MVT::i16,
606 OPC_EmitNode1None, TARGET_VAL(AVR::CopyZero),
607 MVT::i8, 0,
608 OPC_MorphNodeTo2None, TARGET_VAL(AVR::NEGWRd),
609 MVT::i16, MVT::i8, 2, 4,
610 0,
611 70,
612 OPC_RecordChild0,
613 OPC_RecordChild1,
614 OPC_Scope, 45,
615 OPC_MoveChild1,
616 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
617 OPC_Scope, 14,
618 OPC_CheckPredicate, 11,
619 OPC_MoveParent,
620 OPC_CheckType, MVT::i16,
621 OPC_CheckPatternPredicate3,
622 OPC_EmitConvertToTarget1,
623 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SBIWRdK),
624 MVT::i16, MVT::i8, 2, 13,
625 23,
626 OPC_MoveParent,
627 OPC_SwitchType , 8, MVT::i8,
628 OPC_EmitConvertToTarget1,
629 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBIRdK),
630 MVT::i8, MVT::i8, 2, 13,
631 8, MVT::i16,
632 OPC_EmitConvertToTarget1,
633 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBIWRdK),
634 MVT::i16, MVT::i8, 2, 13,
635 0,
636 0,
637 9,
638 OPC_CheckType, MVT::i8,
639 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBRdRr),
640 MVT::i8, MVT::i8, 2, 4,
641 9,
642 OPC_CheckType, MVT::i16,
643 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBWRdRr),
644 MVT::i16, MVT::i8, 2, 4,
645 0,
646 0,
647 90, TARGET_VAL(AVRISD::BRCOND),
648 OPC_RecordNode,
649 OPC_CaptureGlueInput,
650 OPC_RecordChild1,
651 OPC_MoveChild1,
652 OPC_CheckOpcode, TARGET_VAL(ISD::BasicBlock),
653 OPC_MoveParent,
654 OPC_Scope, 9,
655 OPC_CheckChild2Integer, 0,
656 OPC_EmitMergeInputChains1_0,
657 OPC_MorphNodeTo0, TARGET_VAL(AVR::BREQk), 0|OPFL_Chain|OPFL_GlueInput,
658 1, 5,
659 9,
660 OPC_CheckChild2Integer, 1,
661 OPC_EmitMergeInputChains1_0,
662 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRNEk), 0|OPFL_Chain|OPFL_GlueInput,
663 1, 5,
664 9,
665 OPC_CheckChild2Integer, 4,
666 OPC_EmitMergeInputChains1_0,
667 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRSHk), 0|OPFL_Chain|OPFL_GlueInput,
668 1, 5,
669 9,
670 OPC_CheckChild2Integer, 5,
671 OPC_EmitMergeInputChains1_0,
672 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRLOk), 0|OPFL_Chain|OPFL_GlueInput,
673 1, 5,
674 9,
675 OPC_CheckChild2Integer, 6,
676 OPC_EmitMergeInputChains1_0,
677 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRMIk), 0|OPFL_Chain|OPFL_GlueInput,
678 1, 5,
679 9,
680 OPC_CheckChild2Integer, 7,
681 OPC_EmitMergeInputChains1_0,
682 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRPLk), 0|OPFL_Chain|OPFL_GlueInput,
683 1, 5,
684 9,
685 OPC_CheckChild2Integer, 2,
686 OPC_EmitMergeInputChains1_0,
687 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRGEk), 0|OPFL_Chain|OPFL_GlueInput,
688 1, 5,
689 9,
690 OPC_CheckChild2Integer, 3,
691 OPC_EmitMergeInputChains1_0,
692 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRLTk), 0|OPFL_Chain|OPFL_GlueInput,
693 1, 5,
694 0,
695 14, TARGET_VAL(ISD::SHL),
696 OPC_RecordChild0,
697 OPC_CheckChild1Integer, 1,
698 OPC_CheckChild1Type, MVT::i8,
699 OPC_CheckType, MVT::i16,
700 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSLWRd),
701 MVT::i16, MVT::i8, 1, 1,
702 56, TARGET_VAL(ISD::INTRINSIC_VOID),
703 OPC_RecordNode,
704 OPC_Scope, 8,
705 OPC_CheckChild1Integer, 11|128,33,
706 OPC_EmitMergeInputChains1_0,
707 OPC_MorphNodeTo0Chain, TARGET_VAL(AVR::NOP),
708 0,
709 8,
710 OPC_CheckChild1Integer, 13|128,33,
711 OPC_EmitMergeInputChains1_0,
712 OPC_MorphNodeTo0Chain, TARGET_VAL(AVR::SLEEP),
713 0,
714 8,
715 OPC_CheckChild1Integer, 15|128,33,
716 OPC_EmitMergeInputChains1_0,
717 OPC_MorphNodeTo0Chain, TARGET_VAL(AVR::WDR),
718 0,
719 12,
720 OPC_CheckChild1Integer, 12|128,33,
721 OPC_EmitMergeInputChains1_0,
722 OPC_EmitIntegerI8, 7,
723 OPC_MorphNodeTo1Chain, TARGET_VAL(AVR::BSETs),
724 MVT::i8, 1, 5,
725 12,
726 OPC_CheckChild1Integer, 10|128,33,
727 OPC_EmitMergeInputChains1_0,
728 OPC_EmitIntegerI8, 7,
729 OPC_MorphNodeTo1Chain, TARGET_VAL(AVR::BCLRs),
730 MVT::i8, 1, 5,
731 0,
732 10, TARGET_VAL(ISD::INTRINSIC_WO_CHAIN),
733 OPC_CheckChild0Integer, 14|128,33,
734 OPC_RecordChild1,
735 OPC_MorphNodeTo1None, TARGET_VAL(AVR::SWAPRd),
736 MVT::i8, 1, 1,
737 57, TARGET_VAL(ISD::SUBE),
738 OPC_CaptureGlueInput,
739 OPC_RecordChild0,
740 OPC_RecordChild1,
741 OPC_Scope, 29,
742 OPC_MoveChild1,
743 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
744 OPC_MoveParent,
745 OPC_SwitchType , 9, MVT::i8,
746 OPC_EmitConvertToTarget1,
747 OPC_MorphNodeTo2, TARGET_VAL(AVR::SBCIRdK), 0|OPFL_GlueInput|OPFL_GlueOutput,
748 MVT::i8, MVT::i8, 2, 13,
749 9, MVT::i16,
750 OPC_EmitConvertToTarget1,
751 OPC_MorphNodeTo2, TARGET_VAL(AVR::SBCIWRdK), 0|OPFL_GlueInput|OPFL_GlueOutput,
752 MVT::i16, MVT::i8, 2, 13,
753 0,
754 10,
755 OPC_CheckType, MVT::i8,
756 OPC_MorphNodeTo2, TARGET_VAL(AVR::SBCRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
757 MVT::i8, MVT::i8, 2, 4,
758 10,
759 OPC_CheckType, MVT::i16,
760 OPC_MorphNodeTo2, TARGET_VAL(AVR::SBCWRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
761 MVT::i16, MVT::i8, 2, 4,
762 0,
763 52, TARGET_VAL(ISD::AND),
764 OPC_RecordChild0,
765 OPC_RecordChild1,
766 OPC_Scope, 27,
767 OPC_MoveChild1,
768 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
769 OPC_MoveParent,
770 OPC_SwitchType , 8, MVT::i8,
771 OPC_EmitConvertToTarget1,
772 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ANDIRdK),
773 MVT::i8, MVT::i8, 2, 13,
774 8, MVT::i16,
775 OPC_EmitConvertToTarget1,
776 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ANDIWRdK),
777 MVT::i16, MVT::i8, 2, 13,
778 0,
779 9,
780 OPC_CheckType, MVT::i8,
781 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ANDRdRr),
782 MVT::i8, MVT::i8, 2, 4,
783 9,
784 OPC_CheckType, MVT::i16,
785 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ANDWRdRr),
786 MVT::i16, MVT::i8, 2, 4,
787 0,
788 52, TARGET_VAL(ISD::OR),
789 OPC_RecordChild0,
790 OPC_RecordChild1,
791 OPC_Scope, 27,
792 OPC_MoveChild1,
793 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
794 OPC_MoveParent,
795 OPC_SwitchType , 8, MVT::i8,
796 OPC_EmitConvertToTarget1,
797 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ORIRdK),
798 MVT::i8, MVT::i8, 2, 13,
799 8, MVT::i16,
800 OPC_EmitConvertToTarget1,
801 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ORIWRdK),
802 MVT::i16, MVT::i8, 2, 13,
803 0,
804 9,
805 OPC_CheckType, MVT::i8,
806 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ORRdRr),
807 MVT::i8, MVT::i8, 2, 4,
808 9,
809 OPC_CheckType, MVT::i16,
810 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ORWRdRr),
811 MVT::i16, MVT::i8, 2, 4,
812 0,
813 81, TARGET_VAL(AVRISD::CALL),
814 OPC_RecordNode,
815 OPC_CaptureGlueInput,
816 OPC_RecordChild1,
817 OPC_MoveChild1,
818 OPC_SwitchOpcode , 22, TARGET_VAL(ISD::Constant),
819 OPC_MoveParent,
820 OPC_Scope, 8,
821 OPC_EmitMergeInputChains1_0,
822 OPC_EmitConvertToTarget1,
823 OPC_MorphNodeTo0, TARGET_VAL(AVR::RCALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
824 1, 14,
825 9,
826 OPC_CheckPatternPredicate4,
827 OPC_EmitMergeInputChains1_0,
828 OPC_EmitConvertToTarget1,
829 OPC_MorphNodeTo0, TARGET_VAL(AVR::CALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
830 1, 14,
831 0,
832 22, TARGET_VAL(ISD::TargetGlobalAddress),
833 OPC_CheckType, MVT::i16,
834 OPC_MoveParent,
835 OPC_Scope, 8,
836 OPC_CheckPatternPredicate4,
837 OPC_EmitMergeInputChains1_0,
838 OPC_MorphNodeTo0, TARGET_VAL(AVR::CALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
839 1, 5,
840 7,
841 OPC_EmitMergeInputChains1_0,
842 OPC_MorphNodeTo0, TARGET_VAL(AVR::RCALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
843 1, 5,
844 0,
845 22, TARGET_VAL(ISD::TargetExternalSymbol),
846 OPC_CheckType, MVT::i16,
847 OPC_MoveParent,
848 OPC_Scope, 8,
849 OPC_CheckPatternPredicate4,
850 OPC_EmitMergeInputChains1_0,
851 OPC_MorphNodeTo0, TARGET_VAL(AVR::CALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
852 1, 5,
853 7,
854 OPC_EmitMergeInputChains1_0,
855 OPC_MorphNodeTo0, TARGET_VAL(AVR::RCALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
856 1, 5,
857 0,
858 0,
859 39, TARGET_VAL(AVRISD::CMP),
860 OPC_RecordChild0,
861 OPC_Scope, 25,
862 OPC_CheckChild0Type, MVT::i8,
863 OPC_RecordChild1,
864 OPC_Scope, 12,
865 OPC_MoveChild1,
866 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
867 OPC_MoveParent,
868 OPC_EmitConvertToTarget1,
869 OPC_MorphNodeTo1GlueOutput, TARGET_VAL(AVR::CPIRdK),
870 MVT::i8, 2, 13,
871 6,
872 OPC_MorphNodeTo1GlueOutput, TARGET_VAL(AVR::CPRdRr),
873 MVT::i8, 2, 4,
874 0,
875 9,
876 OPC_CheckChild0Type, MVT::i16,
877 OPC_RecordChild1,
878 OPC_MorphNodeTo1GlueOutput, TARGET_VAL(AVR::CPWRdRr),
879 MVT::i8, 2, 4,
880 0,
881 17, TARGET_VAL(AVRISD::LSLWN),
882 OPC_RecordChild0,
883 OPC_RecordChild1,
884 OPC_MoveChild1,
885 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
886 OPC_MoveParent,
887 OPC_CheckType, MVT::i16,
888 OPC_EmitConvertToTarget1,
889 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSLWNRd),
890 MVT::i16, MVT::i8, 2, 13,
891 17, TARGET_VAL(AVRISD::LSLBN),
892 OPC_RecordChild0,
893 OPC_RecordChild1,
894 OPC_MoveChild1,
895 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
896 OPC_MoveParent,
897 OPC_CheckType, MVT::i8,
898 OPC_EmitConvertToTarget1,
899 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSLBNRd),
900 MVT::i8, MVT::i8, 2, 13,
901 17, TARGET_VAL(AVRISD::LSRWN),
902 OPC_RecordChild0,
903 OPC_RecordChild1,
904 OPC_MoveChild1,
905 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
906 OPC_MoveParent,
907 OPC_CheckType, MVT::i16,
908 OPC_EmitConvertToTarget1,
909 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSRWNRd),
910 MVT::i16, MVT::i8, 2, 13,
911 17, TARGET_VAL(AVRISD::LSRBN),
912 OPC_RecordChild0,
913 OPC_RecordChild1,
914 OPC_MoveChild1,
915 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
916 OPC_MoveParent,
917 OPC_CheckType, MVT::i8,
918 OPC_EmitConvertToTarget1,
919 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSRBNRd),
920 MVT::i8, MVT::i8, 2, 13,
921 17, TARGET_VAL(AVRISD::ASRWN),
922 OPC_RecordChild0,
923 OPC_RecordChild1,
924 OPC_MoveChild1,
925 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
926 OPC_MoveParent,
927 OPC_CheckType, MVT::i16,
928 OPC_EmitConvertToTarget1,
929 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ASRWNRd),
930 MVT::i16, MVT::i8, 2, 13,
931 17, TARGET_VAL(AVRISD::ASRBN),
932 OPC_RecordChild0,
933 OPC_RecordChild1,
934 OPC_MoveChild1,
935 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
936 OPC_MoveParent,
937 OPC_CheckType, MVT::i8,
938 OPC_EmitConvertToTarget1,
939 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ASRBNRd),
940 MVT::i8, MVT::i8, 2, 13,
941 52, TARGET_VAL(ISD::SUBC),
942 OPC_RecordChild0,
943 OPC_RecordChild1,
944 OPC_Scope, 27,
945 OPC_MoveChild1,
946 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
947 OPC_MoveParent,
948 OPC_SwitchType , 8, MVT::i8,
949 OPC_EmitConvertToTarget1,
950 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBIRdK),
951 MVT::i8, MVT::i8, 2, 13,
952 8, MVT::i16,
953 OPC_EmitConvertToTarget1,
954 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBIWRdK),
955 MVT::i16, MVT::i8, 2, 13,
956 0,
957 9,
958 OPC_CheckType, MVT::i8,
959 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBRdRr),
960 MVT::i8, MVT::i8, 2, 4,
961 9,
962 OPC_CheckType, MVT::i16,
963 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBWRdRr),
964 MVT::i16, MVT::i8, 2, 4,
965 0,
966 58, TARGET_VAL(ISD::ADDC),
967 OPC_RecordChild0,
968 OPC_RecordChild1,
969 OPC_Scope, 33,
970 OPC_MoveChild1,
971 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
972 OPC_MoveParent,
973 OPC_SwitchType , 11, MVT::i16,
974 OPC_EmitConvertToTarget1,
975 OPC_EmitNodeXForm, 3, 2,
976 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBIWRdK),
977 MVT::i16, MVT::i8, 2, 18,
978 11, MVT::i8,
979 OPC_EmitConvertToTarget1,
980 OPC_EmitNodeXForm, 4, 2,
981 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBIRdK),
982 MVT::i8, MVT::i8, 2, 18,
983 0,
984 9,
985 OPC_CheckType, MVT::i8,
986 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::ADDRdRr),
987 MVT::i8, MVT::i8, 2, 4,
988 9,
989 OPC_CheckType, MVT::i16,
990 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::ADDWRdRr),
991 MVT::i16, MVT::i8, 2, 4,
992 0,
993 47, TARGET_VAL(ISD::ADDE),
994 OPC_CaptureGlueInput,
995 OPC_RecordChild0,
996 OPC_RecordChild1,
997 OPC_Scope, 19,
998 OPC_MoveChild1,
999 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
1000 OPC_MoveParent,
1001 OPC_CheckType, MVT::i8,
1002 OPC_EmitConvertToTarget1,
1003 OPC_EmitNodeXForm, 4, 2,
1004 OPC_MorphNodeTo2, TARGET_VAL(AVR::SBCIRdK), 0|OPFL_GlueInput|OPFL_GlueOutput,
1005 MVT::i8, MVT::i8, 2, 18,
1006 10,
1007 OPC_CheckType, MVT::i8,
1008 OPC_MorphNodeTo2, TARGET_VAL(AVR::ADCRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
1009 MVT::i8, MVT::i8, 2, 4,
1010 10,
1011 OPC_CheckType, MVT::i16,
1012 OPC_MorphNodeTo2, TARGET_VAL(AVR::ADCWRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
1013 MVT::i16, MVT::i8, 2, 4,
1014 0,
1015 28, TARGET_VAL(AVRISD::WRAPPER),
1016 OPC_RecordChild0,
1017 OPC_MoveChild0,
1018 OPC_SwitchOpcode , 9, TARGET_VAL(ISD::TargetGlobalAddress),
1019 OPC_MoveParent,
1020 OPC_CheckType, MVT::i16,
1021 OPC_MorphNodeTo1None, TARGET_VAL(AVR::LDIWRdK),
1022 MVT::i16, 1, 1,
1023 9, TARGET_VAL(ISD::TargetBlockAddress),
1024 OPC_MoveParent,
1025 OPC_CheckType, MVT::i16,
1026 OPC_MorphNodeTo1None, TARGET_VAL(AVR::LDIWRdK),
1027 MVT::i16, 1, 1,
1028 0,
1029 29, TARGET_VAL(AVRISD::SELECT_CC),
1030 OPC_CaptureGlueInput,
1031 OPC_RecordChild0,
1032 OPC_RecordChild1,
1033 OPC_RecordChild2,
1034 OPC_MoveChild2,
1035 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
1036 OPC_MoveParent,
1037 OPC_SwitchType , 7, MVT::i8,
1038 OPC_EmitConvertToTarget2,
1039 OPC_MorphNodeTo1GlueInput, TARGET_VAL(AVR::Select8),
1040 MVT::i8, 3, 20,
1041 7, MVT::i16,
1042 OPC_EmitConvertToTarget2,
1043 OPC_MorphNodeTo1GlueInput, TARGET_VAL(AVR::Select16),
1044 MVT::i16, 3, 20,
1045 0,
1046 34, TARGET_VAL(ISD::Constant),
1047 OPC_Scope, 9,
1048 OPC_CheckInteger, 0,
1049 OPC_CheckType, MVT::i8,
1050 OPC_MorphNodeTo1None, TARGET_VAL(AVR::CopyZero),
1051 MVT::i8, 0,
1052 21,
1053 OPC_RecordNode,
1054 OPC_SwitchType , 7, MVT::i8,
1055 OPC_EmitConvertToTarget0,
1056 OPC_MorphNodeTo1None, TARGET_VAL(AVR::LDIRdK),
1057 MVT::i8, 1, 5,
1058 7, MVT::i16,
1059 OPC_EmitConvertToTarget0,
1060 OPC_MorphNodeTo1None, TARGET_VAL(AVR::LDIWRdK),
1061 MVT::i16, 1, 5,
1062 0,
1063 0,
1064 31, TARGET_VAL(ISD::ATOMIC_LOAD),
1065 OPC_RecordMemRef,
1066 OPC_RecordNode,
1067 OPC_RecordChild1,
1068 OPC_CheckChild1Type, MVT::i16,
1069 OPC_CheckPredicate, 15,
1070 OPC_SwitchType , 9, MVT::i8,
1071 OPC_CheckPredicate4,
1072 OPC_EmitMergeInputChains1_0,
1073 OPC_MorphNodeTo1, TARGET_VAL(AVR::AtomicLoad8), 0|OPFL_Chain|OPFL_MemRefs,
1074 MVT::i8, 1, 5,
1075 9, MVT::i16,
1076 OPC_CheckPredicate5,
1077 OPC_EmitMergeInputChains1_0,
1078 OPC_MorphNodeTo1, TARGET_VAL(AVR::AtomicLoad16), 0|OPFL_Chain|OPFL_MemRefs,
1079 MVT::i16, 1, 5,
1080 0,
1081 33, TARGET_VAL(ISD::ATOMIC_STORE),
1082 OPC_RecordMemRef,
1083 OPC_RecordNode,
1084 OPC_RecordChild1,
1085 OPC_Scope, 13,
1086 OPC_CheckChild1Type, MVT::i8,
1087 OPC_RecordChild2,
1088 OPC_CheckChild2Type, MVT::i16,
1089 OPC_CheckPredicate4,
1090 OPC_EmitMergeInputChains1_0,
1091 OPC_MorphNodeTo0, TARGET_VAL(AVR::AtomicStore8), 0|OPFL_Chain|OPFL_MemRefs,
1092 2, 6,
1093 13,
1094 OPC_CheckChild1Type, MVT::i16,
1095 OPC_RecordChild2,
1096 OPC_CheckChild2Type, MVT::i16,
1097 OPC_CheckPredicate5,
1098 OPC_EmitMergeInputChains1_0,
1099 OPC_MorphNodeTo0, TARGET_VAL(AVR::AtomicStore16), 0|OPFL_Chain|OPFL_MemRefs,
1100 2, 6,
1101 0,
1102 32, TARGET_VAL(ISD::ATOMIC_LOAD_ADD),
1103 OPC_RecordMemRef,
1104 OPC_RecordNode,
1105 OPC_RecordChild1,
1106 OPC_CheckChild1Type, MVT::i16,
1107 OPC_RecordChild2,
1108 OPC_SwitchType , 10, MVT::i8,
1109 OPC_CheckPredicate4,
1110 OPC_EmitMergeInputChains1_0,
1111 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadAdd8), 0|OPFL_Chain|OPFL_MemRefs,
1112 MVT::i8, MVT::i8, 2, 16,
1113 10, MVT::i16,
1114 OPC_CheckPredicate5,
1115 OPC_EmitMergeInputChains1_0,
1116 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadAdd16), 0|OPFL_Chain|OPFL_MemRefs,
1117 MVT::i16, MVT::i8, 2, 16,
1118 0,
1119 32, TARGET_VAL(ISD::ATOMIC_LOAD_SUB),
1120 OPC_RecordMemRef,
1121 OPC_RecordNode,
1122 OPC_RecordChild1,
1123 OPC_CheckChild1Type, MVT::i16,
1124 OPC_RecordChild2,
1125 OPC_SwitchType , 10, MVT::i8,
1126 OPC_CheckPredicate4,
1127 OPC_EmitMergeInputChains1_0,
1128 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadSub8), 0|OPFL_Chain|OPFL_MemRefs,
1129 MVT::i8, MVT::i8, 2, 16,
1130 10, MVT::i16,
1131 OPC_CheckPredicate5,
1132 OPC_EmitMergeInputChains1_0,
1133 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadSub16), 0|OPFL_Chain|OPFL_MemRefs,
1134 MVT::i16, MVT::i8, 2, 16,
1135 0,
1136 32, TARGET_VAL(ISD::ATOMIC_LOAD_AND),
1137 OPC_RecordMemRef,
1138 OPC_RecordNode,
1139 OPC_RecordChild1,
1140 OPC_CheckChild1Type, MVT::i16,
1141 OPC_RecordChild2,
1142 OPC_SwitchType , 10, MVT::i8,
1143 OPC_CheckPredicate4,
1144 OPC_EmitMergeInputChains1_0,
1145 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadAnd8), 0|OPFL_Chain|OPFL_MemRefs,
1146 MVT::i8, MVT::i8, 2, 16,
1147 10, MVT::i16,
1148 OPC_CheckPredicate5,
1149 OPC_EmitMergeInputChains1_0,
1150 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadAnd16), 0|OPFL_Chain|OPFL_MemRefs,
1151 MVT::i16, MVT::i8, 2, 16,
1152 0,
1153 32, TARGET_VAL(ISD::ATOMIC_LOAD_OR),
1154 OPC_RecordMemRef,
1155 OPC_RecordNode,
1156 OPC_RecordChild1,
1157 OPC_CheckChild1Type, MVT::i16,
1158 OPC_RecordChild2,
1159 OPC_SwitchType , 10, MVT::i8,
1160 OPC_CheckPredicate4,
1161 OPC_EmitMergeInputChains1_0,
1162 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadOr8), 0|OPFL_Chain|OPFL_MemRefs,
1163 MVT::i8, MVT::i8, 2, 16,
1164 10, MVT::i16,
1165 OPC_CheckPredicate5,
1166 OPC_EmitMergeInputChains1_0,
1167 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadOr16), 0|OPFL_Chain|OPFL_MemRefs,
1168 MVT::i16, MVT::i8, 2, 16,
1169 0,
1170 32, TARGET_VAL(ISD::ATOMIC_LOAD_XOR),
1171 OPC_RecordMemRef,
1172 OPC_RecordNode,
1173 OPC_RecordChild1,
1174 OPC_CheckChild1Type, MVT::i16,
1175 OPC_RecordChild2,
1176 OPC_SwitchType , 10, MVT::i8,
1177 OPC_CheckPredicate4,
1178 OPC_EmitMergeInputChains1_0,
1179 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadXor8), 0|OPFL_Chain|OPFL_MemRefs,
1180 MVT::i8, MVT::i8, 2, 16,
1181 10, MVT::i16,
1182 OPC_CheckPredicate5,
1183 OPC_EmitMergeInputChains1_0,
1184 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadXor16), 0|OPFL_Chain|OPFL_MemRefs,
1185 MVT::i16, MVT::i8, 2, 16,
1186 0,
1187 13, TARGET_VAL(ISD::BR),
1188 OPC_RecordNode,
1189 OPC_RecordChild1,
1190 OPC_MoveChild1,
1191 OPC_CheckOpcode, TARGET_VAL(ISD::BasicBlock),
1192 OPC_MoveParent,
1193 OPC_EmitMergeInputChains1_0,
1194 OPC_MorphNodeTo0Chain, TARGET_VAL(AVR::RJMPk),
1195 1, 5,
1196 8, TARGET_VAL(AVRISD::RET_GLUE),
1197 OPC_RecordNode,
1198 OPC_CaptureGlueInput,
1199 OPC_EmitMergeInputChains1_0,
1200 OPC_MorphNodeTo0, TARGET_VAL(AVR::RET), 0|OPFL_Chain|OPFL_GlueInput|OPFL_Variadic0,
1201 0,
1202 8, TARGET_VAL(AVRISD::RETI_GLUE),
1203 OPC_RecordNode,
1204 OPC_CaptureGlueInput,
1205 OPC_EmitMergeInputChains1_0,
1206 OPC_MorphNodeTo0, TARGET_VAL(AVR::RETI), 0|OPFL_Chain|OPFL_GlueInput|OPFL_Variadic0,
1207 0,
1208 26, TARGET_VAL(AVRISD::CMPC),
1209 OPC_CaptureGlueInput,
1210 OPC_RecordChild0,
1211 OPC_Scope, 10,
1212 OPC_CheckChild0Type, MVT::i8,
1213 OPC_RecordChild1,
1214 OPC_MorphNodeTo1, TARGET_VAL(AVR::CPCRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
1215 MVT::i8, 2, 4,
1216 10,
1217 OPC_CheckChild0Type, MVT::i16,
1218 OPC_RecordChild1,
1219 OPC_MorphNodeTo1, TARGET_VAL(AVR::CPCWRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
1220 MVT::i8, 2, 4,
1221 0,
1222 21, TARGET_VAL(AVRISD::LSL),
1223 OPC_RecordChild0,
1224 OPC_SwitchType , 7, MVT::i16,
1225 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSLWRd),
1226 MVT::i16, MVT::i8, 1, 1,
1227 7, MVT::i8,
1228 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ADDRdRr),
1229 MVT::i8, MVT::i8, 2, 0,
1230 0,
1231 10, TARGET_VAL(AVRISD::LSLHI),
1232 OPC_RecordChild0,
1233 OPC_CheckType, MVT::i16,
1234 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSLWHiRd),
1235 MVT::i16, MVT::i8, 1, 1,
1236 21, TARGET_VAL(AVRISD::LSR),
1237 OPC_RecordChild0,
1238 OPC_SwitchType , 7, MVT::i8,
1239 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSRRd),
1240 MVT::i8, MVT::i8, 1, 1,
1241 7, MVT::i16,
1242 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSRWRd),
1243 MVT::i16, MVT::i8, 1, 1,
1244 0,
1245 10, TARGET_VAL(AVRISD::LSRLO),
1246 OPC_RecordChild0,
1247 OPC_CheckType, MVT::i16,
1248 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSRWLoRd),
1249 MVT::i16, MVT::i8, 1, 1,
1250 21, TARGET_VAL(AVRISD::ASR),
1251 OPC_RecordChild0,
1252 OPC_SwitchType , 7, MVT::i8,
1253 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ASRRd),
1254 MVT::i8, MVT::i8, 1, 1,
1255 7, MVT::i16,
1256 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ASRWRd),
1257 MVT::i16, MVT::i8, 1, 1,
1258 0,
1259 10, TARGET_VAL(AVRISD::ASRLO),
1260 OPC_RecordChild0,
1261 OPC_CheckType, MVT::i16,
1262 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ASRWLoRd),
1263 MVT::i16, MVT::i8, 1, 1,
1264 34, TARGET_VAL(AVRISD::ROL),
1265 OPC_RecordChild0,
1266 OPC_SwitchType , 20, MVT::i8,
1267 OPC_Scope, 8,
1268 OPC_CheckPatternPredicate5,
1269 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ROLBRdR1),
1270 MVT::i8, MVT::i8, 1, 1,
1271 8,
1272 OPC_CheckPatternPredicate6,
1273 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ROLBRdR17),
1274 MVT::i8, MVT::i8, 1, 1,
1275 0,
1276 7, MVT::i16,
1277 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ROLWRd),
1278 MVT::i16, MVT::i8, 1, 1,
1279 0,
1280 21, TARGET_VAL(AVRISD::ROR),
1281 OPC_RecordChild0,
1282 OPC_SwitchType , 7, MVT::i8,
1283 OPC_MorphNodeTo2None, TARGET_VAL(AVR::RORBRd),
1284 MVT::i8, MVT::i8, 1, 1,
1285 7, MVT::i16,
1286 OPC_MorphNodeTo2None, TARGET_VAL(AVR::RORWRd),
1287 MVT::i16, MVT::i8, 1, 1,
1288 0,
1289 9, TARGET_VAL(AVRISD::SWAP),
1290 OPC_RecordChild0,
1291 OPC_CheckType, MVT::i8,
1292 OPC_MorphNodeTo1None, TARGET_VAL(AVR::SWAPRd),
1293 MVT::i8, 1, 1,
1294 8, TARGET_VAL(ISD::SIGN_EXTEND),
1295 OPC_RecordChild0,
1296 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SEXT),
1297 MVT::i16, MVT::i8, 1, 1,
1298 8, TARGET_VAL(ISD::ZERO_EXTEND),
1299 OPC_RecordChild0,
1300 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ZEXT),
1301 MVT::i16, MVT::i8, 1, 1,
1302 8, TARGET_VAL(ISD::ANY_EXTEND),
1303 OPC_RecordChild0,
1304 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ZEXT),
1305 MVT::i16, MVT::i8, 1, 1,
1306 10, TARGET_VAL(AVRISD::TST),
1307 OPC_RecordChild0,
1308 OPC_CheckChild0Type, MVT::i8,
1309 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::ANDRdRr),
1310 MVT::i8, MVT::i8, 2, 0,
1311 20, TARGET_VAL(ISD::SIGN_EXTEND_INREG),
1312 OPC_RecordChild0,
1313 OPC_MoveChild1,
1314 OPC_CheckValueType, MVT::i8,
1315 OPC_MoveParent,
1316 OPC_EmitIntegerI32, AVR::sub_lo,
1317 OPC_EmitNode1None, TARGET_VAL(TargetOpcode::EXTRACT_SUBREG),
1318 MVT::i8, 2, 4,
1319 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SEXT),
1320 MVT::i16, MVT::i8, 1, 14,
1321 24, TARGET_VAL(AVRISD::LSLLOOP),
1322 OPC_RecordChild0,
1323 OPC_RecordChild1,
1324 OPC_CheckChild1Type, MVT::i8,
1325 OPC_SwitchType , 7, MVT::i8,
1326 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Lsl8),
1327 MVT::i8, MVT::i8, 2, 4,
1328 7, MVT::i16,
1329 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Lsl16),
1330 MVT::i16, MVT::i8, 2, 4,
1331 0,
1332 17, TARGET_VAL(AVRISD::LSLW),
1333 OPC_RecordChild0,
1334 OPC_RecordChild1,
1335 OPC_RecordChild2,
1336 OPC_CheckChild2Type, MVT::i8,
1337 OPC_CheckType, MVT::i16,
1338 OPC_MorphNodeTo, TARGET_VAL(AVR::Lsl32), 0,
1339 3, MVT::i16, MVT::i16, MVT::i8, 3, 15,
1340 24, TARGET_VAL(AVRISD::LSRLOOP),
1341 OPC_RecordChild0,
1342 OPC_RecordChild1,
1343 OPC_CheckChild1Type, MVT::i8,
1344 OPC_SwitchType , 7, MVT::i8,
1345 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Lsr8),
1346 MVT::i8, MVT::i8, 2, 4,
1347 7, MVT::i16,
1348 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Lsr16),
1349 MVT::i16, MVT::i8, 2, 4,
1350 0,
1351 17, TARGET_VAL(AVRISD::LSRW),
1352 OPC_RecordChild0,
1353 OPC_RecordChild1,
1354 OPC_RecordChild2,
1355 OPC_CheckChild2Type, MVT::i8,
1356 OPC_CheckType, MVT::i16,
1357 OPC_MorphNodeTo, TARGET_VAL(AVR::Lsr32), 0,
1358 3, MVT::i16, MVT::i16, MVT::i8, 3, 15,
1359 24, TARGET_VAL(AVRISD::ROLLOOP),
1360 OPC_RecordChild0,
1361 OPC_RecordChild1,
1362 OPC_CheckChild1Type, MVT::i8,
1363 OPC_SwitchType , 7, MVT::i8,
1364 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Rol8),
1365 MVT::i8, MVT::i8, 2, 4,
1366 7, MVT::i16,
1367 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Rol16),
1368 MVT::i16, MVT::i8, 2, 4,
1369 0,
1370 24, TARGET_VAL(AVRISD::RORLOOP),
1371 OPC_RecordChild0,
1372 OPC_RecordChild1,
1373 OPC_CheckChild1Type, MVT::i8,
1374 OPC_SwitchType , 7, MVT::i8,
1375 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Ror8),
1376 MVT::i8, MVT::i8, 2, 4,
1377 7, MVT::i16,
1378 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Ror16),
1379 MVT::i16, MVT::i8, 2, 4,
1380 0,
1381 24, TARGET_VAL(AVRISD::ASRLOOP),
1382 OPC_RecordChild0,
1383 OPC_RecordChild1,
1384 OPC_CheckChild1Type, MVT::i8,
1385 OPC_SwitchType , 7, MVT::i8,
1386 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Asr8),
1387 MVT::i8, MVT::i8, 2, 4,
1388 7, MVT::i16,
1389 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Asr16),
1390 MVT::i16, MVT::i8, 2, 4,
1391 0,
1392 17, TARGET_VAL(AVRISD::ASRW),
1393 OPC_RecordChild0,
1394 OPC_RecordChild1,
1395 OPC_RecordChild2,
1396 OPC_CheckChild2Type, MVT::i8,
1397 OPC_CheckType, MVT::i16,
1398 OPC_MorphNodeTo, TARGET_VAL(AVR::Asr32), 0,
1399 3, MVT::i16, MVT::i16, MVT::i8, 3, 15,
1400 0,
1401 }; // Total Array size is 2710 bytes
1402
1403 static const uint8_t OperandLists[] = {
1404 /* 0 */ 0, 0,
1405 /* 2 */ 1, 0,
1406 /* 4 */ 0, 1,
1407 /* 6 */ 2, 1,
1408 /* 8 */ 3, 1,
1409 /* 10 */ 3, 4, 1,
1410 /* 13 */ 0, 2,
1411 /* 15 */ 0, 1, 2,
1412 /* 18 */ 0, 3,
1413 /* 20 */ 0, 1, 3,
1414 /* 23 */ 2, 3,
1415 /* 25 */ 2, 1, 4,
1416 /* 28 */ 5, 7,
1417 };
1418
1419 #undef COVERAGE_IDX_VAL
1420 #undef TARGET_VAL
1421 SelectCodeCommon(NodeToMatch: N, MatcherTable, TableSize: sizeof(MatcherTable),
1422 OperandLists);
1423}
1424#endif // GET_DAGISEL_BODY
1425
1426#ifdef GET_DAGISEL_DECL
1427bool CheckPatternPredicate(unsigned PredNo) const override;
1428#endif
1429#if defined(GET_DAGISEL_BODY) || DAGISEL_INLINE
1430bool DAGISEL_CLASS_COLONCOLON CheckPatternPredicate(unsigned PredNo) const
1431#if DAGISEL_INLINE
1432 override
1433#endif
1434{
1435 switch (PredNo) {
1436 default: llvm_unreachable("Invalid predicate in table?");
1437 case 0: return (!Subtarget->hasTinyEncoding()) && (Subtarget->hasSRAM());
1438 case 1: return (Subtarget->hasSRAM());
1439 case 2: return (Subtarget->hasSRAM()) && (Subtarget->hasTinyEncoding());
1440 case 3: return (Subtarget->hasADDSUBIW());
1441 case 4: return (Subtarget->hasJMPCALL());
1442 case 5: return (!Subtarget->hasTinyEncoding());
1443 case 6: return (Subtarget->hasTinyEncoding());
1444 }
1445}
1446#endif // GET_DAGISEL_BODY
1447
1448#ifdef GET_DAGISEL_DECL
1449bool CheckNodePredicate(SDValue Op, unsigned PredNo) const override;
1450#endif
1451#if defined(GET_DAGISEL_BODY) || DAGISEL_INLINE
1452bool DAGISEL_CLASS_COLONCOLON CheckNodePredicate(SDValue Op, unsigned PredNo) const
1453#if DAGISEL_INLINE
1454 override
1455#endif
1456{
1457 switch (PredNo) {
1458 default: llvm_unreachable("Invalid predicate in table?");
1459 case 0: {
1460 // Predicate_istore
1461 // Predicate_store
1462 SDNode *N = Op.getNode();
1463 (void)N;
1464 if (cast<StoreSDNode>(Val: N)->isTruncatingStore()) return false;
1465return true;
1466
1467 }
1468 case 1: {
1469 // Predicate_unindexedstore
1470 SDNode *N = Op.getNode();
1471 (void)N;
1472if (cast<StoreSDNode>(Val: N)->getAddressingMode() != ISD::UNINDEXED) return false;
1473return true;
1474
1475 }
1476 case 2: {
1477 // Predicate_unindexedload
1478 SDNode *N = Op.getNode();
1479 (void)N;
1480if (cast<LoadSDNode>(Val: N)->getAddressingMode() != ISD::UNINDEXED) return false;
1481return true;
1482
1483 }
1484 case 3: {
1485 // Predicate_load
1486 SDNode *N = Op.getNode();
1487 (void)N;
1488if (cast<LoadSDNode>(Val: N)->getExtensionType() != ISD::NON_EXTLOAD) return false;
1489return true;
1490
1491 }
1492 case 4: {
1493 // Predicate_atomic_load_add_i8
1494 // Predicate_atomic_load_and_i8
1495 // Predicate_atomic_load_nonext_8
1496 // Predicate_atomic_load_or_i8
1497 // Predicate_atomic_load_sub_i8
1498 // Predicate_atomic_load_xor_i8
1499 // Predicate_atomic_store_8
1500 SDNode *N = Op.getNode();
1501 (void)N;
1502if (cast<MemSDNode>(Val: N)->getMemoryVT() != MVT::i8) return false;
1503return true;
1504
1505 }
1506 case 5: {
1507 // Predicate_atomic_load_add_i16
1508 // Predicate_atomic_load_and_i16
1509 // Predicate_atomic_load_nonext_16
1510 // Predicate_atomic_load_or_i16
1511 // Predicate_atomic_load_sub_i16
1512 // Predicate_atomic_load_xor_i16
1513 // Predicate_atomic_store_16
1514 SDNode *N = Op.getNode();
1515 (void)N;
1516if (cast<MemSDNode>(Val: N)->getMemoryVT() != MVT::i16) return false;
1517return true;
1518
1519 }
1520 case 6: {
1521 // Predicate_lowioaddr8
1522 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1523 (void)N;
1524
1525 uint8_t offset = Subtarget->getIORegisterOffset();
1526 uint64_t val = N->getZExtValue() - offset;
1527 return val < 0x20;
1528
1529 }
1530 case 7: {
1531 // Predicate_ioaddr8
1532 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1533 (void)N;
1534
1535 uint8_t offset = Subtarget->getIORegisterOffset();
1536 uint64_t val = N->getZExtValue() - offset;
1537 return val < 0x40;
1538
1539 }
1540 case 8: {
1541 // Predicate_post_store
1542 SDNode *N = Op.getNode();
1543 (void)N;
1544
1545 ISD::MemIndexedMode AM = cast<StoreSDNode>(Val: N)->getAddressingMode();
1546 return AM == ISD::POST_INC || AM == ISD::POST_DEC;
1547
1548 }
1549 case 9: {
1550 // Predicate_pre_store
1551 SDNode *N = Op.getNode();
1552 (void)N;
1553
1554 ISD::MemIndexedMode AM = cast<StoreSDNode>(Val: N)->getAddressingMode();
1555 return AM == ISD::PRE_INC || AM == ISD::PRE_DEC;
1556
1557 }
1558 case 10: {
1559 // Predicate_ioaddr16
1560 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1561 (void)N;
1562
1563 uint8_t offset = Subtarget->getIORegisterOffset();
1564 uint64_t val = N->getZExtValue() - offset;
1565 return val < 0x3f;
1566
1567 }
1568 case 11: {
1569 // Predicate_uimm6
1570 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1571 (void)N;
1572 return isUInt<6>(x: N->getZExtValue());
1573 }
1574 case 12: {
1575 // Predicate_iobitpos8
1576 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1577 (void)N;
1578
1579 return isPowerOf2_32(Value: uint8_t(N->getZExtValue()));
1580
1581 }
1582 case 13: {
1583 // Predicate_iobitposn8
1584 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1585 (void)N;
1586
1587 return isPowerOf2_32(Value: uint8_t(~N->getZExtValue()));
1588
1589 }
1590 case 14: {
1591 // Predicate_imm0_63_neg
1592 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1593 (void)N;
1594
1595 int64_t val = -N->getSExtValue();
1596 return val >= 0 && val < 64;
1597
1598 }
1599 case 15: {
1600 // Predicate_atomic_load_nonext
1601 SDNode *N = Op.getNode();
1602 (void)N;
1603if (cast<AtomicSDNode>(Val: N)->getExtensionType() != ISD::NON_EXTLOAD) return false;
1604return true;
1605
1606 }
1607 }
1608}
1609#endif // GET_DAGISEL_BODY
1610
1611#ifdef GET_DAGISEL_DECL
1612bool CheckComplexPattern(SDNode *Root, SDNode *Parent,
1613 SDValue N, unsigned PatternNo,
1614 SmallVectorImpl<std::pair<SDValue, SDNode *>> &Result) override;
1615#endif
1616#if defined(GET_DAGISEL_BODY) || DAGISEL_INLINE
1617bool DAGISEL_CLASS_COLONCOLON CheckComplexPattern(SDNode *Root, SDNode *Parent,
1618 SDValue N, unsigned PatternNo,
1619 SmallVectorImpl<std::pair<SDValue, SDNode *>> &Result)
1620#if DAGISEL_INLINE
1621 override
1622#endif
1623{
1624 unsigned NextRes = Result.size();
1625 switch (PatternNo) {
1626 default: llvm_unreachable("Invalid pattern # in table?");
1627 case 0:
1628 Result.resize(N: NextRes+2);
1629 return SelectAddr(Op: Root, N, Base&: Result[NextRes+0].first, Disp&: Result[NextRes+1].first);
1630 }
1631}
1632#endif // GET_DAGISEL_BODY
1633
1634#ifdef GET_DAGISEL_DECL
1635SDValue RunSDNodeXForm(SDValue V, unsigned XFormNo) override;
1636#endif
1637#if defined(GET_DAGISEL_BODY) || DAGISEL_INLINE
1638SDValue DAGISEL_CLASS_COLONCOLON RunSDNodeXForm(SDValue V, unsigned XFormNo)
1639#if DAGISEL_INLINE
1640 override
1641#endif
1642{
1643 switch (XFormNo) {
1644 default: llvm_unreachable("Invalid xform # in table?");
1645 case 0: {
1646 ConstantSDNode *N = cast<ConstantSDNode>(Val: V.getNode());
1647
1648 uint8_t offset = Subtarget->getIORegisterOffset();
1649 return CurDAG->getTargetConstant(
1650 Val: uint8_t(N->getZExtValue()) - offset, DL: SDLoc(N), VT: MVT::i8);
1651
1652 }
1653 case 1: {
1654 ConstantSDNode *N = cast<ConstantSDNode>(Val: V.getNode());
1655
1656 return CurDAG->getTargetConstant(
1657 Val: Log2_32(Value: uint8_t(N->getZExtValue())), DL: SDLoc(N), VT: MVT::i8);
1658
1659 }
1660 case 2: {
1661 ConstantSDNode *N = cast<ConstantSDNode>(Val: V.getNode());
1662
1663 return CurDAG->getTargetConstant(
1664 Val: Log2_32(Value: uint8_t(~N->getZExtValue())), DL: SDLoc(N), VT: MVT::i8);
1665
1666 }
1667 case 3: {
1668 ConstantSDNode *N = cast<ConstantSDNode>(Val: V.getNode());
1669
1670 return CurDAG->getTargetConstant(Val: -N->getAPIntValue(), DL: SDLoc(N), VT: MVT::i16);
1671
1672 }
1673 case 4: {
1674 ConstantSDNode *N = cast<ConstantSDNode>(Val: V.getNode());
1675
1676 return CurDAG->getTargetConstant(Val: -N->getAPIntValue(), DL: SDLoc(N), VT: MVT::i8);
1677
1678 }
1679 }
1680}
1681#endif // GET_DAGISEL_BODY
1682
1683
1684#ifdef DAGISEL_INLINE
1685#undef DAGISEL_INLINE
1686#endif
1687#ifdef DAGISEL_CLASS_COLONCOLON
1688#undef DAGISEL_CLASS_COLONCOLON
1689#endif
1690#ifdef GET_DAGISEL_DECL
1691#undef GET_DAGISEL_DECL
1692#endif
1693#ifdef GET_DAGISEL_BODY
1694#undef GET_DAGISEL_BODY
1695#endif
1696