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