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 52|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 4|128,1,
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 104,
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 20,
571 OPC_CheckType, MVT::i16,
572 OPC_Scope, 7,
573 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ADDWRdRr),
574 MVT::i16, MVT::i8, 2, 4,
575 7,
576 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ADIWRdKP),
577 MVT::i16, MVT::i8, 2, 4,
578 0,
579 0,
580 0,
581 0,
582 48, TARGET_VAL(ISD::XOR),
583 OPC_RecordChild0,
584 OPC_Scope, 22,
585 OPC_CheckChild1Integer, 127,
586 OPC_SwitchType , 7, MVT::i8,
587 OPC_MorphNodeTo2None, TARGET_VAL(AVR::COMRd),
588 MVT::i8, MVT::i8, 1, 1,
589 7, MVT::i16,
590 OPC_MorphNodeTo2None, TARGET_VAL(AVR::COMWRd),
591 MVT::i16, MVT::i8, 1, 1,
592 0,
593 21,
594 OPC_RecordChild1,
595 OPC_SwitchType , 7, MVT::i8,
596 OPC_MorphNodeTo2None, TARGET_VAL(AVR::EORRdRr),
597 MVT::i8, MVT::i8, 2, 4,
598 7, MVT::i16,
599 OPC_MorphNodeTo2None, TARGET_VAL(AVR::EORWRdRr),
600 MVT::i16, MVT::i8, 2, 4,
601 0,
602 0,
603 102, TARGET_VAL(ISD::SUB),
604 OPC_Scope, 28,
605 OPC_CheckChild0Integer, 0,
606 OPC_RecordChild1,
607 OPC_SwitchType , 7, MVT::i8,
608 OPC_MorphNodeTo2None, TARGET_VAL(AVR::NEGRd),
609 MVT::i8, MVT::i8, 1, 1,
610 12, MVT::i16,
611 OPC_EmitNode1None, TARGET_VAL(AVR::CopyZero),
612 MVT::i8, 0,
613 OPC_MorphNodeTo2None, TARGET_VAL(AVR::NEGWRd),
614 MVT::i16, MVT::i8, 2, 4,
615 0,
616 70,
617 OPC_RecordChild0,
618 OPC_RecordChild1,
619 OPC_Scope, 45,
620 OPC_MoveChild1,
621 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
622 OPC_Scope, 14,
623 OPC_CheckPredicate, 11,
624 OPC_MoveParent,
625 OPC_CheckType, MVT::i16,
626 OPC_CheckPatternPredicate3,
627 OPC_EmitConvertToTarget1,
628 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SBIWRdK),
629 MVT::i16, MVT::i8, 2, 13,
630 23,
631 OPC_MoveParent,
632 OPC_SwitchType , 8, MVT::i8,
633 OPC_EmitConvertToTarget1,
634 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBIRdK),
635 MVT::i8, MVT::i8, 2, 13,
636 8, MVT::i16,
637 OPC_EmitConvertToTarget1,
638 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBIWRdK),
639 MVT::i16, MVT::i8, 2, 13,
640 0,
641 0,
642 9,
643 OPC_CheckType, MVT::i8,
644 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBRdRr),
645 MVT::i8, MVT::i8, 2, 4,
646 9,
647 OPC_CheckType, MVT::i16,
648 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SUBWRdRr),
649 MVT::i16, MVT::i8, 2, 4,
650 0,
651 0,
652 90, TARGET_VAL(AVRISD::BRCOND),
653 OPC_RecordNode,
654 OPC_CaptureGlueInput,
655 OPC_RecordChild1,
656 OPC_MoveChild1,
657 OPC_CheckOpcode, TARGET_VAL(ISD::BasicBlock),
658 OPC_MoveParent,
659 OPC_Scope, 9,
660 OPC_CheckChild2Integer, 0,
661 OPC_EmitMergeInputChains1_0,
662 OPC_MorphNodeTo0, TARGET_VAL(AVR::BREQk), 0|OPFL_Chain|OPFL_GlueInput,
663 1, 5,
664 9,
665 OPC_CheckChild2Integer, 1,
666 OPC_EmitMergeInputChains1_0,
667 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRNEk), 0|OPFL_Chain|OPFL_GlueInput,
668 1, 5,
669 9,
670 OPC_CheckChild2Integer, 4,
671 OPC_EmitMergeInputChains1_0,
672 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRSHk), 0|OPFL_Chain|OPFL_GlueInput,
673 1, 5,
674 9,
675 OPC_CheckChild2Integer, 5,
676 OPC_EmitMergeInputChains1_0,
677 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRLOk), 0|OPFL_Chain|OPFL_GlueInput,
678 1, 5,
679 9,
680 OPC_CheckChild2Integer, 6,
681 OPC_EmitMergeInputChains1_0,
682 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRMIk), 0|OPFL_Chain|OPFL_GlueInput,
683 1, 5,
684 9,
685 OPC_CheckChild2Integer, 7,
686 OPC_EmitMergeInputChains1_0,
687 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRPLk), 0|OPFL_Chain|OPFL_GlueInput,
688 1, 5,
689 9,
690 OPC_CheckChild2Integer, 2,
691 OPC_EmitMergeInputChains1_0,
692 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRGEk), 0|OPFL_Chain|OPFL_GlueInput,
693 1, 5,
694 9,
695 OPC_CheckChild2Integer, 3,
696 OPC_EmitMergeInputChains1_0,
697 OPC_MorphNodeTo0, TARGET_VAL(AVR::BRLTk), 0|OPFL_Chain|OPFL_GlueInput,
698 1, 5,
699 0,
700 14, TARGET_VAL(ISD::SHL),
701 OPC_RecordChild0,
702 OPC_CheckChild1Integer, 1,
703 OPC_CheckChild1Type, MVT::i8,
704 OPC_CheckType, MVT::i16,
705 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSLWRd),
706 MVT::i16, MVT::i8, 1, 1,
707 56, TARGET_VAL(ISD::INTRINSIC_VOID),
708 OPC_RecordNode,
709 OPC_Scope, 8,
710 OPC_CheckChild1Integer, 83|128,32,
711 OPC_EmitMergeInputChains1_0,
712 OPC_MorphNodeTo0Chain, TARGET_VAL(AVR::NOP),
713 0,
714 8,
715 OPC_CheckChild1Integer, 85|128,32,
716 OPC_EmitMergeInputChains1_0,
717 OPC_MorphNodeTo0Chain, TARGET_VAL(AVR::SLEEP),
718 0,
719 8,
720 OPC_CheckChild1Integer, 87|128,32,
721 OPC_EmitMergeInputChains1_0,
722 OPC_MorphNodeTo0Chain, TARGET_VAL(AVR::WDR),
723 0,
724 12,
725 OPC_CheckChild1Integer, 84|128,32,
726 OPC_EmitMergeInputChains1_0,
727 OPC_EmitIntegerI8, 7,
728 OPC_MorphNodeTo1Chain, TARGET_VAL(AVR::BSETs),
729 MVT::i8, 1, 5,
730 12,
731 OPC_CheckChild1Integer, 82|128,32,
732 OPC_EmitMergeInputChains1_0,
733 OPC_EmitIntegerI8, 7,
734 OPC_MorphNodeTo1Chain, TARGET_VAL(AVR::BCLRs),
735 MVT::i8, 1, 5,
736 0,
737 10, TARGET_VAL(ISD::INTRINSIC_WO_CHAIN),
738 OPC_CheckChild0Integer, 86|128,32,
739 OPC_RecordChild1,
740 OPC_MorphNodeTo1None, TARGET_VAL(AVR::SWAPRd),
741 MVT::i8, 1, 1,
742 57, TARGET_VAL(ISD::SUBE),
743 OPC_CaptureGlueInput,
744 OPC_RecordChild0,
745 OPC_RecordChild1,
746 OPC_Scope, 29,
747 OPC_MoveChild1,
748 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
749 OPC_MoveParent,
750 OPC_SwitchType , 9, MVT::i8,
751 OPC_EmitConvertToTarget1,
752 OPC_MorphNodeTo2, TARGET_VAL(AVR::SBCIRdK), 0|OPFL_GlueInput|OPFL_GlueOutput,
753 MVT::i8, MVT::i8, 2, 13,
754 9, MVT::i16,
755 OPC_EmitConvertToTarget1,
756 OPC_MorphNodeTo2, TARGET_VAL(AVR::SBCIWRdK), 0|OPFL_GlueInput|OPFL_GlueOutput,
757 MVT::i16, MVT::i8, 2, 13,
758 0,
759 10,
760 OPC_CheckType, MVT::i8,
761 OPC_MorphNodeTo2, TARGET_VAL(AVR::SBCRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
762 MVT::i8, MVT::i8, 2, 4,
763 10,
764 OPC_CheckType, MVT::i16,
765 OPC_MorphNodeTo2, TARGET_VAL(AVR::SBCWRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
766 MVT::i16, MVT::i8, 2, 4,
767 0,
768 52, TARGET_VAL(ISD::AND),
769 OPC_RecordChild0,
770 OPC_RecordChild1,
771 OPC_Scope, 27,
772 OPC_MoveChild1,
773 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
774 OPC_MoveParent,
775 OPC_SwitchType , 8, MVT::i8,
776 OPC_EmitConvertToTarget1,
777 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ANDIRdK),
778 MVT::i8, MVT::i8, 2, 13,
779 8, MVT::i16,
780 OPC_EmitConvertToTarget1,
781 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ANDIWRdK),
782 MVT::i16, MVT::i8, 2, 13,
783 0,
784 9,
785 OPC_CheckType, MVT::i8,
786 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ANDRdRr),
787 MVT::i8, MVT::i8, 2, 4,
788 9,
789 OPC_CheckType, MVT::i16,
790 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ANDWRdRr),
791 MVT::i16, MVT::i8, 2, 4,
792 0,
793 52, TARGET_VAL(ISD::OR),
794 OPC_RecordChild0,
795 OPC_RecordChild1,
796 OPC_Scope, 27,
797 OPC_MoveChild1,
798 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
799 OPC_MoveParent,
800 OPC_SwitchType , 8, MVT::i8,
801 OPC_EmitConvertToTarget1,
802 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ORIRdK),
803 MVT::i8, MVT::i8, 2, 13,
804 8, MVT::i16,
805 OPC_EmitConvertToTarget1,
806 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ORIWRdK),
807 MVT::i16, MVT::i8, 2, 13,
808 0,
809 9,
810 OPC_CheckType, MVT::i8,
811 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ORRdRr),
812 MVT::i8, MVT::i8, 2, 4,
813 9,
814 OPC_CheckType, MVT::i16,
815 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ORWRdRr),
816 MVT::i16, MVT::i8, 2, 4,
817 0,
818 81, TARGET_VAL(AVRISD::CALL),
819 OPC_RecordNode,
820 OPC_CaptureGlueInput,
821 OPC_RecordChild1,
822 OPC_MoveChild1,
823 OPC_SwitchOpcode , 22, TARGET_VAL(ISD::Constant),
824 OPC_MoveParent,
825 OPC_Scope, 8,
826 OPC_EmitMergeInputChains1_0,
827 OPC_EmitConvertToTarget1,
828 OPC_MorphNodeTo0, TARGET_VAL(AVR::RCALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
829 1, 14,
830 9,
831 OPC_CheckPatternPredicate4,
832 OPC_EmitMergeInputChains1_0,
833 OPC_EmitConvertToTarget1,
834 OPC_MorphNodeTo0, TARGET_VAL(AVR::CALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
835 1, 14,
836 0,
837 22, TARGET_VAL(ISD::TargetGlobalAddress),
838 OPC_CheckType, MVT::i16,
839 OPC_MoveParent,
840 OPC_Scope, 8,
841 OPC_CheckPatternPredicate4,
842 OPC_EmitMergeInputChains1_0,
843 OPC_MorphNodeTo0, TARGET_VAL(AVR::CALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
844 1, 5,
845 7,
846 OPC_EmitMergeInputChains1_0,
847 OPC_MorphNodeTo0, TARGET_VAL(AVR::RCALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
848 1, 5,
849 0,
850 22, TARGET_VAL(ISD::TargetExternalSymbol),
851 OPC_CheckType, MVT::i16,
852 OPC_MoveParent,
853 OPC_Scope, 8,
854 OPC_CheckPatternPredicate4,
855 OPC_EmitMergeInputChains1_0,
856 OPC_MorphNodeTo0, TARGET_VAL(AVR::CALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
857 1, 5,
858 7,
859 OPC_EmitMergeInputChains1_0,
860 OPC_MorphNodeTo0, TARGET_VAL(AVR::RCALLk), 0|OPFL_Chain|OPFL_GlueInput|OPFL_GlueOutput|OPFL_Variadic1,
861 1, 5,
862 0,
863 0,
864 39, TARGET_VAL(AVRISD::CMP),
865 OPC_RecordChild0,
866 OPC_Scope, 25,
867 OPC_CheckChild0Type, MVT::i8,
868 OPC_RecordChild1,
869 OPC_Scope, 12,
870 OPC_MoveChild1,
871 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
872 OPC_MoveParent,
873 OPC_EmitConvertToTarget1,
874 OPC_MorphNodeTo1GlueOutput, TARGET_VAL(AVR::CPIRdK),
875 MVT::i8, 2, 13,
876 6,
877 OPC_MorphNodeTo1GlueOutput, TARGET_VAL(AVR::CPRdRr),
878 MVT::i8, 2, 4,
879 0,
880 9,
881 OPC_CheckChild0Type, MVT::i16,
882 OPC_RecordChild1,
883 OPC_MorphNodeTo1GlueOutput, TARGET_VAL(AVR::CPWRdRr),
884 MVT::i8, 2, 4,
885 0,
886 17, TARGET_VAL(AVRISD::LSLWN),
887 OPC_RecordChild0,
888 OPC_RecordChild1,
889 OPC_MoveChild1,
890 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
891 OPC_MoveParent,
892 OPC_CheckType, MVT::i16,
893 OPC_EmitConvertToTarget1,
894 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSLWNRd),
895 MVT::i16, MVT::i8, 2, 13,
896 17, TARGET_VAL(AVRISD::LSLBN),
897 OPC_RecordChild0,
898 OPC_RecordChild1,
899 OPC_MoveChild1,
900 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
901 OPC_MoveParent,
902 OPC_CheckType, MVT::i8,
903 OPC_EmitConvertToTarget1,
904 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSLBNRd),
905 MVT::i8, MVT::i8, 2, 13,
906 17, TARGET_VAL(AVRISD::LSRWN),
907 OPC_RecordChild0,
908 OPC_RecordChild1,
909 OPC_MoveChild1,
910 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
911 OPC_MoveParent,
912 OPC_CheckType, MVT::i16,
913 OPC_EmitConvertToTarget1,
914 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSRWNRd),
915 MVT::i16, MVT::i8, 2, 13,
916 17, TARGET_VAL(AVRISD::LSRBN),
917 OPC_RecordChild0,
918 OPC_RecordChild1,
919 OPC_MoveChild1,
920 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
921 OPC_MoveParent,
922 OPC_CheckType, MVT::i8,
923 OPC_EmitConvertToTarget1,
924 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSRBNRd),
925 MVT::i8, MVT::i8, 2, 13,
926 17, TARGET_VAL(AVRISD::ASRWN),
927 OPC_RecordChild0,
928 OPC_RecordChild1,
929 OPC_MoveChild1,
930 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
931 OPC_MoveParent,
932 OPC_CheckType, MVT::i16,
933 OPC_EmitConvertToTarget1,
934 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ASRWNRd),
935 MVT::i16, MVT::i8, 2, 13,
936 17, TARGET_VAL(AVRISD::ASRBN),
937 OPC_RecordChild0,
938 OPC_RecordChild1,
939 OPC_MoveChild1,
940 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
941 OPC_MoveParent,
942 OPC_CheckType, MVT::i8,
943 OPC_EmitConvertToTarget1,
944 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ASRBNRd),
945 MVT::i8, MVT::i8, 2, 13,
946 52, TARGET_VAL(ISD::SUBC),
947 OPC_RecordChild0,
948 OPC_RecordChild1,
949 OPC_Scope, 27,
950 OPC_MoveChild1,
951 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
952 OPC_MoveParent,
953 OPC_SwitchType , 8, MVT::i8,
954 OPC_EmitConvertToTarget1,
955 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBIRdK),
956 MVT::i8, MVT::i8, 2, 13,
957 8, MVT::i16,
958 OPC_EmitConvertToTarget1,
959 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBIWRdK),
960 MVT::i16, MVT::i8, 2, 13,
961 0,
962 9,
963 OPC_CheckType, MVT::i8,
964 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBRdRr),
965 MVT::i8, MVT::i8, 2, 4,
966 9,
967 OPC_CheckType, MVT::i16,
968 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBWRdRr),
969 MVT::i16, MVT::i8, 2, 4,
970 0,
971 58, TARGET_VAL(ISD::ADDC),
972 OPC_RecordChild0,
973 OPC_RecordChild1,
974 OPC_Scope, 33,
975 OPC_MoveChild1,
976 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
977 OPC_MoveParent,
978 OPC_SwitchType , 11, MVT::i16,
979 OPC_EmitConvertToTarget1,
980 OPC_EmitNodeXForm, 3, 2,
981 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBIWRdK),
982 MVT::i16, MVT::i8, 2, 18,
983 11, MVT::i8,
984 OPC_EmitConvertToTarget1,
985 OPC_EmitNodeXForm, 4, 2,
986 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::SUBIRdK),
987 MVT::i8, MVT::i8, 2, 18,
988 0,
989 9,
990 OPC_CheckType, MVT::i8,
991 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::ADDRdRr),
992 MVT::i8, MVT::i8, 2, 4,
993 9,
994 OPC_CheckType, MVT::i16,
995 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::ADDWRdRr),
996 MVT::i16, MVT::i8, 2, 4,
997 0,
998 47, TARGET_VAL(ISD::ADDE),
999 OPC_CaptureGlueInput,
1000 OPC_RecordChild0,
1001 OPC_RecordChild1,
1002 OPC_Scope, 19,
1003 OPC_MoveChild1,
1004 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
1005 OPC_MoveParent,
1006 OPC_CheckType, MVT::i8,
1007 OPC_EmitConvertToTarget1,
1008 OPC_EmitNodeXForm, 4, 2,
1009 OPC_MorphNodeTo2, TARGET_VAL(AVR::SBCIRdK), 0|OPFL_GlueInput|OPFL_GlueOutput,
1010 MVT::i8, MVT::i8, 2, 18,
1011 10,
1012 OPC_CheckType, MVT::i8,
1013 OPC_MorphNodeTo2, TARGET_VAL(AVR::ADCRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
1014 MVT::i8, MVT::i8, 2, 4,
1015 10,
1016 OPC_CheckType, MVT::i16,
1017 OPC_MorphNodeTo2, TARGET_VAL(AVR::ADCWRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
1018 MVT::i16, MVT::i8, 2, 4,
1019 0,
1020 28, TARGET_VAL(AVRISD::WRAPPER),
1021 OPC_RecordChild0,
1022 OPC_MoveChild0,
1023 OPC_SwitchOpcode , 9, TARGET_VAL(ISD::TargetGlobalAddress),
1024 OPC_MoveParent,
1025 OPC_CheckType, MVT::i16,
1026 OPC_MorphNodeTo1None, TARGET_VAL(AVR::LDIWRdK),
1027 MVT::i16, 1, 1,
1028 9, TARGET_VAL(ISD::TargetBlockAddress),
1029 OPC_MoveParent,
1030 OPC_CheckType, MVT::i16,
1031 OPC_MorphNodeTo1None, TARGET_VAL(AVR::LDIWRdK),
1032 MVT::i16, 1, 1,
1033 0,
1034 29, TARGET_VAL(AVRISD::SELECT_CC),
1035 OPC_CaptureGlueInput,
1036 OPC_RecordChild0,
1037 OPC_RecordChild1,
1038 OPC_RecordChild2,
1039 OPC_MoveChild2,
1040 OPC_CheckOpcode, TARGET_VAL(ISD::Constant),
1041 OPC_MoveParent,
1042 OPC_SwitchType , 7, MVT::i8,
1043 OPC_EmitConvertToTarget2,
1044 OPC_MorphNodeTo1GlueInput, TARGET_VAL(AVR::Select8),
1045 MVT::i8, 3, 20,
1046 7, MVT::i16,
1047 OPC_EmitConvertToTarget2,
1048 OPC_MorphNodeTo1GlueInput, TARGET_VAL(AVR::Select16),
1049 MVT::i16, 3, 20,
1050 0,
1051 34, TARGET_VAL(ISD::Constant),
1052 OPC_Scope, 9,
1053 OPC_CheckInteger, 0,
1054 OPC_CheckType, MVT::i8,
1055 OPC_MorphNodeTo1None, TARGET_VAL(AVR::CopyZero),
1056 MVT::i8, 0,
1057 21,
1058 OPC_RecordNode,
1059 OPC_SwitchType , 7, MVT::i8,
1060 OPC_EmitConvertToTarget0,
1061 OPC_MorphNodeTo1None, TARGET_VAL(AVR::LDIRdK),
1062 MVT::i8, 1, 5,
1063 7, MVT::i16,
1064 OPC_EmitConvertToTarget0,
1065 OPC_MorphNodeTo1None, TARGET_VAL(AVR::LDIWRdK),
1066 MVT::i16, 1, 5,
1067 0,
1068 0,
1069 31, TARGET_VAL(ISD::ATOMIC_LOAD),
1070 OPC_RecordMemRef,
1071 OPC_RecordNode,
1072 OPC_RecordChild1,
1073 OPC_CheckChild1Type, MVT::i16,
1074 OPC_CheckPredicate, 15,
1075 OPC_SwitchType , 9, MVT::i8,
1076 OPC_CheckPredicate4,
1077 OPC_EmitMergeInputChains1_0,
1078 OPC_MorphNodeTo1, TARGET_VAL(AVR::AtomicLoad8), 0|OPFL_Chain|OPFL_MemRefs,
1079 MVT::i8, 1, 5,
1080 9, MVT::i16,
1081 OPC_CheckPredicate5,
1082 OPC_EmitMergeInputChains1_0,
1083 OPC_MorphNodeTo1, TARGET_VAL(AVR::AtomicLoad16), 0|OPFL_Chain|OPFL_MemRefs,
1084 MVT::i16, 1, 5,
1085 0,
1086 33, TARGET_VAL(ISD::ATOMIC_STORE),
1087 OPC_RecordMemRef,
1088 OPC_RecordNode,
1089 OPC_RecordChild1,
1090 OPC_Scope, 13,
1091 OPC_CheckChild1Type, MVT::i8,
1092 OPC_RecordChild2,
1093 OPC_CheckChild2Type, MVT::i16,
1094 OPC_CheckPredicate4,
1095 OPC_EmitMergeInputChains1_0,
1096 OPC_MorphNodeTo0, TARGET_VAL(AVR::AtomicStore8), 0|OPFL_Chain|OPFL_MemRefs,
1097 2, 6,
1098 13,
1099 OPC_CheckChild1Type, MVT::i16,
1100 OPC_RecordChild2,
1101 OPC_CheckChild2Type, MVT::i16,
1102 OPC_CheckPredicate5,
1103 OPC_EmitMergeInputChains1_0,
1104 OPC_MorphNodeTo0, TARGET_VAL(AVR::AtomicStore16), 0|OPFL_Chain|OPFL_MemRefs,
1105 2, 6,
1106 0,
1107 32, TARGET_VAL(ISD::ATOMIC_LOAD_ADD),
1108 OPC_RecordMemRef,
1109 OPC_RecordNode,
1110 OPC_RecordChild1,
1111 OPC_CheckChild1Type, MVT::i16,
1112 OPC_RecordChild2,
1113 OPC_SwitchType , 10, MVT::i8,
1114 OPC_CheckPredicate4,
1115 OPC_EmitMergeInputChains1_0,
1116 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadAdd8), 0|OPFL_Chain|OPFL_MemRefs,
1117 MVT::i8, MVT::i8, 2, 16,
1118 10, MVT::i16,
1119 OPC_CheckPredicate5,
1120 OPC_EmitMergeInputChains1_0,
1121 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadAdd16), 0|OPFL_Chain|OPFL_MemRefs,
1122 MVT::i16, MVT::i8, 2, 16,
1123 0,
1124 32, TARGET_VAL(ISD::ATOMIC_LOAD_SUB),
1125 OPC_RecordMemRef,
1126 OPC_RecordNode,
1127 OPC_RecordChild1,
1128 OPC_CheckChild1Type, MVT::i16,
1129 OPC_RecordChild2,
1130 OPC_SwitchType , 10, MVT::i8,
1131 OPC_CheckPredicate4,
1132 OPC_EmitMergeInputChains1_0,
1133 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadSub8), 0|OPFL_Chain|OPFL_MemRefs,
1134 MVT::i8, MVT::i8, 2, 16,
1135 10, MVT::i16,
1136 OPC_CheckPredicate5,
1137 OPC_EmitMergeInputChains1_0,
1138 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadSub16), 0|OPFL_Chain|OPFL_MemRefs,
1139 MVT::i16, MVT::i8, 2, 16,
1140 0,
1141 32, TARGET_VAL(ISD::ATOMIC_LOAD_AND),
1142 OPC_RecordMemRef,
1143 OPC_RecordNode,
1144 OPC_RecordChild1,
1145 OPC_CheckChild1Type, MVT::i16,
1146 OPC_RecordChild2,
1147 OPC_SwitchType , 10, MVT::i8,
1148 OPC_CheckPredicate4,
1149 OPC_EmitMergeInputChains1_0,
1150 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadAnd8), 0|OPFL_Chain|OPFL_MemRefs,
1151 MVT::i8, MVT::i8, 2, 16,
1152 10, MVT::i16,
1153 OPC_CheckPredicate5,
1154 OPC_EmitMergeInputChains1_0,
1155 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadAnd16), 0|OPFL_Chain|OPFL_MemRefs,
1156 MVT::i16, MVT::i8, 2, 16,
1157 0,
1158 32, TARGET_VAL(ISD::ATOMIC_LOAD_OR),
1159 OPC_RecordMemRef,
1160 OPC_RecordNode,
1161 OPC_RecordChild1,
1162 OPC_CheckChild1Type, MVT::i16,
1163 OPC_RecordChild2,
1164 OPC_SwitchType , 10, MVT::i8,
1165 OPC_CheckPredicate4,
1166 OPC_EmitMergeInputChains1_0,
1167 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadOr8), 0|OPFL_Chain|OPFL_MemRefs,
1168 MVT::i8, MVT::i8, 2, 16,
1169 10, MVT::i16,
1170 OPC_CheckPredicate5,
1171 OPC_EmitMergeInputChains1_0,
1172 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadOr16), 0|OPFL_Chain|OPFL_MemRefs,
1173 MVT::i16, MVT::i8, 2, 16,
1174 0,
1175 32, TARGET_VAL(ISD::ATOMIC_LOAD_XOR),
1176 OPC_RecordMemRef,
1177 OPC_RecordNode,
1178 OPC_RecordChild1,
1179 OPC_CheckChild1Type, MVT::i16,
1180 OPC_RecordChild2,
1181 OPC_SwitchType , 10, MVT::i8,
1182 OPC_CheckPredicate4,
1183 OPC_EmitMergeInputChains1_0,
1184 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadXor8), 0|OPFL_Chain|OPFL_MemRefs,
1185 MVT::i8, MVT::i8, 2, 16,
1186 10, MVT::i16,
1187 OPC_CheckPredicate5,
1188 OPC_EmitMergeInputChains1_0,
1189 OPC_MorphNodeTo2, TARGET_VAL(AVR::AtomicLoadXor16), 0|OPFL_Chain|OPFL_MemRefs,
1190 MVT::i16, MVT::i8, 2, 16,
1191 0,
1192 13, TARGET_VAL(ISD::BR),
1193 OPC_RecordNode,
1194 OPC_RecordChild1,
1195 OPC_MoveChild1,
1196 OPC_CheckOpcode, TARGET_VAL(ISD::BasicBlock),
1197 OPC_MoveParent,
1198 OPC_EmitMergeInputChains1_0,
1199 OPC_MorphNodeTo0Chain, TARGET_VAL(AVR::RJMPk),
1200 1, 5,
1201 8, TARGET_VAL(AVRISD::RET_GLUE),
1202 OPC_RecordNode,
1203 OPC_CaptureGlueInput,
1204 OPC_EmitMergeInputChains1_0,
1205 OPC_MorphNodeTo0, TARGET_VAL(AVR::RET), 0|OPFL_Chain|OPFL_GlueInput|OPFL_Variadic0,
1206 0,
1207 8, TARGET_VAL(AVRISD::RETI_GLUE),
1208 OPC_RecordNode,
1209 OPC_CaptureGlueInput,
1210 OPC_EmitMergeInputChains1_0,
1211 OPC_MorphNodeTo0, TARGET_VAL(AVR::RETI), 0|OPFL_Chain|OPFL_GlueInput|OPFL_Variadic0,
1212 0,
1213 26, TARGET_VAL(AVRISD::CMPC),
1214 OPC_CaptureGlueInput,
1215 OPC_RecordChild0,
1216 OPC_Scope, 10,
1217 OPC_CheckChild0Type, MVT::i8,
1218 OPC_RecordChild1,
1219 OPC_MorphNodeTo1, TARGET_VAL(AVR::CPCRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
1220 MVT::i8, 2, 4,
1221 10,
1222 OPC_CheckChild0Type, MVT::i16,
1223 OPC_RecordChild1,
1224 OPC_MorphNodeTo1, TARGET_VAL(AVR::CPCWRdRr), 0|OPFL_GlueInput|OPFL_GlueOutput,
1225 MVT::i8, 2, 4,
1226 0,
1227 21, TARGET_VAL(AVRISD::LSL),
1228 OPC_RecordChild0,
1229 OPC_SwitchType , 7, MVT::i16,
1230 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSLWRd),
1231 MVT::i16, MVT::i8, 1, 1,
1232 7, MVT::i8,
1233 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ADDRdRr),
1234 MVT::i8, MVT::i8, 2, 0,
1235 0,
1236 10, TARGET_VAL(AVRISD::LSLHI),
1237 OPC_RecordChild0,
1238 OPC_CheckType, MVT::i16,
1239 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSLWHiRd),
1240 MVT::i16, MVT::i8, 1, 1,
1241 21, TARGET_VAL(AVRISD::LSR),
1242 OPC_RecordChild0,
1243 OPC_SwitchType , 7, MVT::i8,
1244 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSRRd),
1245 MVT::i8, MVT::i8, 1, 1,
1246 7, MVT::i16,
1247 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSRWRd),
1248 MVT::i16, MVT::i8, 1, 1,
1249 0,
1250 10, TARGET_VAL(AVRISD::LSRLO),
1251 OPC_RecordChild0,
1252 OPC_CheckType, MVT::i16,
1253 OPC_MorphNodeTo2None, TARGET_VAL(AVR::LSRWLoRd),
1254 MVT::i16, MVT::i8, 1, 1,
1255 21, TARGET_VAL(AVRISD::ASR),
1256 OPC_RecordChild0,
1257 OPC_SwitchType , 7, MVT::i8,
1258 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ASRRd),
1259 MVT::i8, MVT::i8, 1, 1,
1260 7, MVT::i16,
1261 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ASRWRd),
1262 MVT::i16, MVT::i8, 1, 1,
1263 0,
1264 10, TARGET_VAL(AVRISD::ASRLO),
1265 OPC_RecordChild0,
1266 OPC_CheckType, MVT::i16,
1267 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ASRWLoRd),
1268 MVT::i16, MVT::i8, 1, 1,
1269 34, TARGET_VAL(AVRISD::ROL),
1270 OPC_RecordChild0,
1271 OPC_SwitchType , 20, MVT::i8,
1272 OPC_Scope, 8,
1273 OPC_CheckPatternPredicate5,
1274 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ROLBRdR1),
1275 MVT::i8, MVT::i8, 1, 1,
1276 8,
1277 OPC_CheckPatternPredicate6,
1278 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ROLBRdR17),
1279 MVT::i8, MVT::i8, 1, 1,
1280 0,
1281 7, MVT::i16,
1282 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ROLWRd),
1283 MVT::i16, MVT::i8, 1, 1,
1284 0,
1285 21, TARGET_VAL(AVRISD::ROR),
1286 OPC_RecordChild0,
1287 OPC_SwitchType , 7, MVT::i8,
1288 OPC_MorphNodeTo2None, TARGET_VAL(AVR::RORBRd),
1289 MVT::i8, MVT::i8, 1, 1,
1290 7, MVT::i16,
1291 OPC_MorphNodeTo2None, TARGET_VAL(AVR::RORWRd),
1292 MVT::i16, MVT::i8, 1, 1,
1293 0,
1294 9, TARGET_VAL(AVRISD::SWAP),
1295 OPC_RecordChild0,
1296 OPC_CheckType, MVT::i8,
1297 OPC_MorphNodeTo1None, TARGET_VAL(AVR::SWAPRd),
1298 MVT::i8, 1, 1,
1299 8, TARGET_VAL(ISD::SIGN_EXTEND),
1300 OPC_RecordChild0,
1301 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SEXT),
1302 MVT::i16, MVT::i8, 1, 1,
1303 8, TARGET_VAL(ISD::ZERO_EXTEND),
1304 OPC_RecordChild0,
1305 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ZEXT),
1306 MVT::i16, MVT::i8, 1, 1,
1307 8, TARGET_VAL(ISD::ANY_EXTEND),
1308 OPC_RecordChild0,
1309 OPC_MorphNodeTo2None, TARGET_VAL(AVR::ZEXT),
1310 MVT::i16, MVT::i8, 1, 1,
1311 10, TARGET_VAL(AVRISD::TST),
1312 OPC_RecordChild0,
1313 OPC_CheckChild0Type, MVT::i8,
1314 OPC_MorphNodeTo2GlueOutput, TARGET_VAL(AVR::ANDRdRr),
1315 MVT::i8, MVT::i8, 2, 0,
1316 20, TARGET_VAL(ISD::SIGN_EXTEND_INREG),
1317 OPC_RecordChild0,
1318 OPC_MoveChild1,
1319 OPC_CheckValueType, MVT::i8,
1320 OPC_MoveParent,
1321 OPC_EmitIntegerI32, AVR::sub_lo,
1322 OPC_EmitNode1None, TARGET_VAL(TargetOpcode::EXTRACT_SUBREG),
1323 MVT::i8, 2, 4,
1324 OPC_MorphNodeTo2None, TARGET_VAL(AVR::SEXT),
1325 MVT::i16, MVT::i8, 1, 14,
1326 24, TARGET_VAL(AVRISD::LSLLOOP),
1327 OPC_RecordChild0,
1328 OPC_RecordChild1,
1329 OPC_CheckChild1Type, MVT::i8,
1330 OPC_SwitchType , 7, MVT::i8,
1331 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Lsl8),
1332 MVT::i8, MVT::i8, 2, 4,
1333 7, MVT::i16,
1334 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Lsl16),
1335 MVT::i16, MVT::i8, 2, 4,
1336 0,
1337 17, TARGET_VAL(AVRISD::LSLW),
1338 OPC_RecordChild0,
1339 OPC_RecordChild1,
1340 OPC_RecordChild2,
1341 OPC_CheckChild2Type, MVT::i8,
1342 OPC_CheckType, MVT::i16,
1343 OPC_MorphNodeTo, TARGET_VAL(AVR::Lsl32), 0,
1344 3, MVT::i16, MVT::i16, MVT::i8, 3, 15,
1345 24, TARGET_VAL(AVRISD::LSRLOOP),
1346 OPC_RecordChild0,
1347 OPC_RecordChild1,
1348 OPC_CheckChild1Type, MVT::i8,
1349 OPC_SwitchType , 7, MVT::i8,
1350 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Lsr8),
1351 MVT::i8, MVT::i8, 2, 4,
1352 7, MVT::i16,
1353 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Lsr16),
1354 MVT::i16, MVT::i8, 2, 4,
1355 0,
1356 17, TARGET_VAL(AVRISD::LSRW),
1357 OPC_RecordChild0,
1358 OPC_RecordChild1,
1359 OPC_RecordChild2,
1360 OPC_CheckChild2Type, MVT::i8,
1361 OPC_CheckType, MVT::i16,
1362 OPC_MorphNodeTo, TARGET_VAL(AVR::Lsr32), 0,
1363 3, MVT::i16, MVT::i16, MVT::i8, 3, 15,
1364 24, TARGET_VAL(AVRISD::ROLLOOP),
1365 OPC_RecordChild0,
1366 OPC_RecordChild1,
1367 OPC_CheckChild1Type, MVT::i8,
1368 OPC_SwitchType , 7, MVT::i8,
1369 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Rol8),
1370 MVT::i8, MVT::i8, 2, 4,
1371 7, MVT::i16,
1372 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Rol16),
1373 MVT::i16, MVT::i8, 2, 4,
1374 0,
1375 24, TARGET_VAL(AVRISD::RORLOOP),
1376 OPC_RecordChild0,
1377 OPC_RecordChild1,
1378 OPC_CheckChild1Type, MVT::i8,
1379 OPC_SwitchType , 7, MVT::i8,
1380 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Ror8),
1381 MVT::i8, MVT::i8, 2, 4,
1382 7, MVT::i16,
1383 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Ror16),
1384 MVT::i16, MVT::i8, 2, 4,
1385 0,
1386 24, TARGET_VAL(AVRISD::ASRLOOP),
1387 OPC_RecordChild0,
1388 OPC_RecordChild1,
1389 OPC_CheckChild1Type, MVT::i8,
1390 OPC_SwitchType , 7, MVT::i8,
1391 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Asr8),
1392 MVT::i8, MVT::i8, 2, 4,
1393 7, MVT::i16,
1394 OPC_MorphNodeTo2None, TARGET_VAL(AVR::Asr16),
1395 MVT::i16, MVT::i8, 2, 4,
1396 0,
1397 17, TARGET_VAL(AVRISD::ASRW),
1398 OPC_RecordChild0,
1399 OPC_RecordChild1,
1400 OPC_RecordChild2,
1401 OPC_CheckChild2Type, MVT::i8,
1402 OPC_CheckType, MVT::i16,
1403 OPC_MorphNodeTo, TARGET_VAL(AVR::Asr32), 0,
1404 3, MVT::i16, MVT::i16, MVT::i8, 3, 15,
1405 0,
1406 }; // Total Array size is 2722 bytes
1407
1408 static const uint8_t OperandLists[] = {
1409 /* 0 */ 0, 0,
1410 /* 2 */ 1, 0,
1411 /* 4 */ 0, 1,
1412 /* 6 */ 2, 1,
1413 /* 8 */ 3, 1,
1414 /* 10 */ 3, 4, 1,
1415 /* 13 */ 0, 2,
1416 /* 15 */ 0, 1, 2,
1417 /* 18 */ 0, 3,
1418 /* 20 */ 0, 1, 3,
1419 /* 23 */ 2, 3,
1420 /* 25 */ 2, 1, 4,
1421 /* 28 */ 5, 7,
1422 };
1423
1424 #undef COVERAGE_IDX_VAL
1425 #undef TARGET_VAL
1426 SelectCodeCommon(NodeToMatch: N, MatcherTable, TableSize: sizeof(MatcherTable),
1427 OperandLists);
1428}
1429#endif // GET_DAGISEL_BODY
1430
1431#ifdef GET_DAGISEL_DECL
1432bool CheckPatternPredicate(unsigned PredNo) const override;
1433#endif
1434#if defined(GET_DAGISEL_BODY) || DAGISEL_INLINE
1435bool DAGISEL_CLASS_COLONCOLON CheckPatternPredicate(unsigned PredNo) const
1436#if DAGISEL_INLINE
1437 override
1438#endif
1439{
1440 switch (PredNo) {
1441 default: llvm_unreachable("Invalid predicate in table?");
1442 case 0: return (!Subtarget->hasTinyEncoding()) && (Subtarget->hasSRAM());
1443 case 1: return (Subtarget->hasSRAM());
1444 case 2: return (Subtarget->hasSRAM()) && (Subtarget->hasTinyEncoding());
1445 case 3: return (Subtarget->hasADDSUBIW());
1446 case 4: return (Subtarget->hasJMPCALL());
1447 case 5: return (!Subtarget->hasTinyEncoding());
1448 case 6: return (Subtarget->hasTinyEncoding());
1449 }
1450}
1451#endif // GET_DAGISEL_BODY
1452
1453#ifdef GET_DAGISEL_DECL
1454bool CheckNodePredicate(SDValue Op, unsigned PredNo) const override;
1455#endif
1456#if defined(GET_DAGISEL_BODY) || DAGISEL_INLINE
1457bool DAGISEL_CLASS_COLONCOLON CheckNodePredicate(SDValue Op, unsigned PredNo) const
1458#if DAGISEL_INLINE
1459 override
1460#endif
1461{
1462 switch (PredNo) {
1463 default: llvm_unreachable("Invalid predicate in table?");
1464 case 0: {
1465 // Predicate_istore
1466 // Predicate_store
1467 SDNode *N = Op.getNode();
1468 (void)N;
1469 if (cast<StoreSDNode>(Val: N)->isTruncatingStore()) return false;
1470return true;
1471
1472 }
1473 case 1: {
1474 // Predicate_unindexedstore
1475 SDNode *N = Op.getNode();
1476 (void)N;
1477if (cast<StoreSDNode>(Val: N)->getAddressingMode() != ISD::UNINDEXED) return false;
1478return true;
1479
1480 }
1481 case 2: {
1482 // Predicate_unindexedload
1483 SDNode *N = Op.getNode();
1484 (void)N;
1485if (cast<LoadSDNode>(Val: N)->getAddressingMode() != ISD::UNINDEXED) return false;
1486return true;
1487
1488 }
1489 case 3: {
1490 // Predicate_load
1491 SDNode *N = Op.getNode();
1492 (void)N;
1493if (cast<LoadSDNode>(Val: N)->getExtensionType() != ISD::NON_EXTLOAD) return false;
1494return true;
1495
1496 }
1497 case 4: {
1498 // Predicate_atomic_load_add_i8
1499 // Predicate_atomic_load_and_i8
1500 // Predicate_atomic_load_nonext_8
1501 // Predicate_atomic_load_or_i8
1502 // Predicate_atomic_load_sub_i8
1503 // Predicate_atomic_load_xor_i8
1504 // Predicate_atomic_store_8
1505 SDNode *N = Op.getNode();
1506 (void)N;
1507if (cast<MemSDNode>(Val: N)->getMemoryVT() != MVT::i8) return false;
1508return true;
1509
1510 }
1511 case 5: {
1512 // Predicate_atomic_load_add_i16
1513 // Predicate_atomic_load_and_i16
1514 // Predicate_atomic_load_nonext_16
1515 // Predicate_atomic_load_or_i16
1516 // Predicate_atomic_load_sub_i16
1517 // Predicate_atomic_load_xor_i16
1518 // Predicate_atomic_store_16
1519 SDNode *N = Op.getNode();
1520 (void)N;
1521if (cast<MemSDNode>(Val: N)->getMemoryVT() != MVT::i16) return false;
1522return true;
1523
1524 }
1525 case 6: {
1526 // Predicate_lowioaddr8
1527 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1528 (void)N;
1529
1530 uint8_t offset = Subtarget->getIORegisterOffset();
1531 uint64_t val = N->getZExtValue() - offset;
1532 return val < 0x20;
1533
1534 }
1535 case 7: {
1536 // Predicate_ioaddr8
1537 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1538 (void)N;
1539
1540 uint8_t offset = Subtarget->getIORegisterOffset();
1541 uint64_t val = N->getZExtValue() - offset;
1542 return val < 0x40;
1543
1544 }
1545 case 8: {
1546 // Predicate_post_store
1547 SDNode *N = Op.getNode();
1548 (void)N;
1549
1550 ISD::MemIndexedMode AM = cast<StoreSDNode>(Val: N)->getAddressingMode();
1551 return AM == ISD::POST_INC || AM == ISD::POST_DEC;
1552
1553 }
1554 case 9: {
1555 // Predicate_pre_store
1556 SDNode *N = Op.getNode();
1557 (void)N;
1558
1559 ISD::MemIndexedMode AM = cast<StoreSDNode>(Val: N)->getAddressingMode();
1560 return AM == ISD::PRE_INC || AM == ISD::PRE_DEC;
1561
1562 }
1563 case 10: {
1564 // Predicate_ioaddr16
1565 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1566 (void)N;
1567
1568 uint8_t offset = Subtarget->getIORegisterOffset();
1569 uint64_t val = N->getZExtValue() - offset;
1570 return val < 0x3f;
1571
1572 }
1573 case 11: {
1574 // Predicate_uimm6
1575 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1576 (void)N;
1577 return isUInt<6>(x: N->getZExtValue());
1578 }
1579 case 12: {
1580 // Predicate_iobitpos8
1581 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1582 (void)N;
1583
1584 return isPowerOf2_32(Value: uint8_t(N->getZExtValue()));
1585
1586 }
1587 case 13: {
1588 // Predicate_iobitposn8
1589 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1590 (void)N;
1591
1592 return isPowerOf2_32(Value: uint8_t(~N->getZExtValue()));
1593
1594 }
1595 case 14: {
1596 // Predicate_imm0_63_neg
1597 auto *N = cast<ConstantSDNode>(Val: Op.getNode());
1598 (void)N;
1599
1600 int64_t val = -N->getSExtValue();
1601 return val >= 0 && val < 64;
1602
1603 }
1604 case 15: {
1605 // Predicate_atomic_load_nonext
1606 SDNode *N = Op.getNode();
1607 (void)N;
1608if (cast<AtomicSDNode>(Val: N)->getExtensionType() != ISD::NON_EXTLOAD) return false;
1609return true;
1610
1611 }
1612 }
1613}
1614#endif // GET_DAGISEL_BODY
1615
1616#ifdef GET_DAGISEL_DECL
1617bool CheckComplexPattern(SDNode *Root, SDNode *Parent,
1618 SDValue N, unsigned PatternNo,
1619 SmallVectorImpl<std::pair<SDValue, SDNode *>> &Result) override;
1620#endif
1621#if defined(GET_DAGISEL_BODY) || DAGISEL_INLINE
1622bool DAGISEL_CLASS_COLONCOLON CheckComplexPattern(SDNode *Root, SDNode *Parent,
1623 SDValue N, unsigned PatternNo,
1624 SmallVectorImpl<std::pair<SDValue, SDNode *>> &Result)
1625#if DAGISEL_INLINE
1626 override
1627#endif
1628{
1629 unsigned NextRes = Result.size();
1630 switch (PatternNo) {
1631 default: llvm_unreachable("Invalid pattern # in table?");
1632 case 0:
1633 Result.resize(N: NextRes+2);
1634 return SelectAddr(Op: Root, N, Base&: Result[NextRes+0].first, Disp&: Result[NextRes+1].first);
1635 }
1636}
1637#endif // GET_DAGISEL_BODY
1638
1639#ifdef GET_DAGISEL_DECL
1640SDValue RunSDNodeXForm(SDValue V, unsigned XFormNo) override;
1641#endif
1642#if defined(GET_DAGISEL_BODY) || DAGISEL_INLINE
1643SDValue DAGISEL_CLASS_COLONCOLON RunSDNodeXForm(SDValue V, unsigned XFormNo)
1644#if DAGISEL_INLINE
1645 override
1646#endif
1647{
1648 switch (XFormNo) {
1649 default: llvm_unreachable("Invalid xform # in table?");
1650 case 0: {
1651 ConstantSDNode *N = cast<ConstantSDNode>(Val: V.getNode());
1652
1653 uint8_t offset = Subtarget->getIORegisterOffset();
1654 return CurDAG->getTargetConstant(
1655 Val: uint8_t(N->getZExtValue()) - offset, DL: SDLoc(N), VT: MVT::i8);
1656
1657 }
1658 case 1: {
1659 ConstantSDNode *N = cast<ConstantSDNode>(Val: V.getNode());
1660
1661 return CurDAG->getTargetConstant(
1662 Val: Log2_32(Value: uint8_t(N->getZExtValue())), DL: SDLoc(N), VT: MVT::i8);
1663
1664 }
1665 case 2: {
1666 ConstantSDNode *N = cast<ConstantSDNode>(Val: V.getNode());
1667
1668 return CurDAG->getTargetConstant(
1669 Val: Log2_32(Value: uint8_t(~N->getZExtValue())), DL: SDLoc(N), VT: MVT::i8);
1670
1671 }
1672 case 3: {
1673 ConstantSDNode *N = cast<ConstantSDNode>(Val: V.getNode());
1674
1675 return CurDAG->getTargetConstant(Val: -N->getAPIntValue(), DL: SDLoc(N), VT: MVT::i16);
1676
1677 }
1678 case 4: {
1679 ConstantSDNode *N = cast<ConstantSDNode>(Val: V.getNode());
1680
1681 return CurDAG->getTargetConstant(Val: -N->getAPIntValue(), DL: SDLoc(N), VT: MVT::i8);
1682
1683 }
1684 }
1685}
1686#endif // GET_DAGISEL_BODY
1687
1688
1689#ifdef DAGISEL_INLINE
1690#undef DAGISEL_INLINE
1691#endif
1692#ifdef DAGISEL_CLASS_COLONCOLON
1693#undef DAGISEL_CLASS_COLONCOLON
1694#endif
1695#ifdef GET_DAGISEL_DECL
1696#undef GET_DAGISEL_DECL
1697#endif
1698#ifdef GET_DAGISEL_BODY
1699#undef GET_DAGISEL_BODY
1700#endif
1701