xref: /llvm-project/llvm/test/CodeGen/X86/cycle-info.mir (revision 1d0244aed78114d5bd03ec4930d7687d6e587f99)
1# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=print-machine-cycles -o - %s 2>&1 | FileCheck %s
2
3...
4---
5# CHECK-LABEL: MachineCycleInfo for function: empty
6name:            empty
7alignment:       16
8tracksRegLiveness: true
9frameInfo:
10  maxAlignment:    1
11machineFunctionInfo: {}
12body:             |
13  bb.0:
14    RET64
15
16...
17---
18# CHECK-LABEL: MachineCycleInfo for function: simple
19# CHECK:           depth=1: entries(bb.1)
20name:            simple
21alignment:       16
22tracksRegLiveness: true
23registers:
24  - { id: 0, class: gr8 }
25frameInfo:
26  maxAlignment:    1
27machineFunctionInfo: {}
28body:             |
29  bb.0:
30    JMP_1 %bb.1
31
32  bb.1:
33    %0:gr8 = IMPLICIT_DEF
34    TEST8ri %0, 1, implicit-def $eflags
35    JCC_1 %bb.1, 5, implicit $eflags
36    JMP_1 %bb.2
37
38  bb.2:
39    RET64
40
41...
42---
43# CHECK-LABEL: MachineCycleInfo for function: two_latches
44# CHECK:           depth=1: entries(bb.1) bb.2
45name:            two_latches
46alignment:       16
47tracksRegLiveness: true
48registers:
49  - { id: 0, class: gr8 }
50  - { id: 1, class: gr8 }
51frameInfo:
52  maxAlignment:    1
53machineFunctionInfo: {}
54body:             |
55  bb.0:
56    JMP_1 %bb.1
57
58  bb.1:
59    %0:gr8 = IMPLICIT_DEF
60    TEST8ri %0, 1, implicit-def $eflags
61    JCC_1 %bb.1, 5, implicit $eflags
62    JMP_1 %bb.2
63
64  bb.2:
65    %1:gr8 = IMPLICIT_DEF
66    TEST8ri %1, 1, implicit-def $eflags
67    JCC_1 %bb.3, 5, implicit $eflags
68    JMP_1 %bb.1
69
70  bb.3:
71    RET64
72
73...
74---
75# CHECK-LABEL: MachineCycleInfo for function: nested_simple
76# CHECK:           depth=1: entries(bb.1) bb.3 bb.2
77# CHECK:               depth=2: entries(bb.2)
78name:            nested_simple
79alignment:       16
80tracksRegLiveness: true
81registers:
82  - { id: 0, class: gr8 }
83  - { id: 1, class: gr8 }
84frameInfo:
85  maxAlignment:    1
86machineFunctionInfo: {}
87body:             |
88  bb.0:
89    JMP_1 %bb.1
90
91  bb.1:
92    JMP_1 %bb.2
93
94  bb.2:
95    %0:gr8 = IMPLICIT_DEF
96    TEST8ri %0, 1, implicit-def $eflags
97    JCC_1 %bb.2, 5, implicit $eflags
98    JMP_1 %bb.3
99
100  bb.3:
101    %1:gr8 = IMPLICIT_DEF
102    TEST8ri %1, 1, implicit-def $eflags
103    JCC_1 %bb.1, 5, implicit $eflags
104    JMP_1 %bb.4
105
106  bb.4:
107    RET64
108
109...
110---
111# CHECK-LABEL: MachineCycleInfo for function: nested_outer_latch_in_inner_loop
112# CHECK:           depth=1: entries(bb.1) bb.2 bb.3
113# CHECK:               depth=2: entries(bb.2) bb.3
114name:            nested_outer_latch_in_inner_loop
115alignment:       16
116tracksRegLiveness: true
117registers:
118  - { id: 0, class: gr8 }
119  - { id: 1, class: gr8 }
120frameInfo:
121  maxAlignment:    1
122machineFunctionInfo: {}
123body:             |
124  bb.0:
125    JMP_1 %bb.1
126
127  bb.1:
128    JMP_1 %bb.2
129
130  bb.2:
131    %0:gr8 = IMPLICIT_DEF
132    TEST8ri %0, 1, implicit-def $eflags
133    JCC_1 %bb.3, 5, implicit $eflags
134    JMP_1 %bb.1
135
136  bb.3:
137    %1:gr8 = IMPLICIT_DEF
138    TEST8ri %1, 1, implicit-def $eflags
139    JCC_1 %bb.4, 5, implicit $eflags
140    JMP_1 %bb.2
141
142  bb.4:
143    RET64
144
145...
146---
147# CHECK-LABEL: MachineCycleInfo for function: sibling_loops
148# CHECK:           depth=1: entries(bb.1)
149# CHECK:           depth=1: entries(bb.2)
150name:            sibling_loops
151alignment:       16
152tracksRegLiveness: true
153registers:
154  - { id: 0, class: gr8 }
155  - { id: 1, class: gr8 }
156  - { id: 2, class: gr8 }
157frameInfo:
158  maxAlignment:    1
159machineFunctionInfo: {}
160body:             |
161  bb.0:
162    %0:gr8 = IMPLICIT_DEF
163    TEST8ri %0, 1, implicit-def $eflags
164    JCC_1 %bb.1, 5, implicit $eflags
165    JMP_1 %bb.2
166
167  bb.1:
168    %2:gr8 = IMPLICIT_DEF
169    TEST8ri %2, 1, implicit-def $eflags
170    JCC_1 %bb.1, 5, implicit $eflags
171    JMP_1 %bb.3
172
173  bb.2:
174    %1:gr8 = IMPLICIT_DEF
175    TEST8ri %1, 1, implicit-def $eflags
176    JCC_1 %bb.2, 5, implicit $eflags
177    JMP_1 %bb.3
178
179  bb.3:
180    RET64
181
182...
183---
184# CHECK-LABEL: MachineCycleInfo for function: serial_loops
185# CHECK:           depth=1: entries(bb.2)
186# CHECK:           depth=1: entries(bb.1)
187name:            serial_loops
188alignment:       16
189tracksRegLiveness: true
190registers:
191  - { id: 0, class: gr8 }
192  - { id: 1, class: gr8 }
193frameInfo:
194  maxAlignment:    1
195machineFunctionInfo: {}
196body:             |
197  bb.0:
198    JMP_1 %bb.1
199
200  bb.1:
201    %0:gr8 = IMPLICIT_DEF
202    TEST8ri %0, 1, implicit-def $eflags
203    JCC_1 %bb.1, 5, implicit $eflags
204    JMP_1 %bb.2
205
206  bb.2:
207    %1:gr8 = IMPLICIT_DEF
208    TEST8ri %1, 1, implicit-def $eflags
209    JCC_1 %bb.2, 5, implicit $eflags
210    JMP_1 %bb.3
211
212  bb.3:
213    RET64
214
215...
216---
217# CHECK-LABEL: MachineCycleInfo for function: nested_sibling_loops
218# CHECK:           depth=1: entries(bb.1) bb.4 bb.5 bb.3 bb.2
219# CHECK:               depth=2: entries(bb.4) bb.5
220# CHECK:               depth=2: entries(bb.2)
221name:            nested_sibling_loops
222alignment:       16
223tracksRegLiveness: true
224registers:
225  - { id: 0, class: gr8 }
226  - { id: 1, class: gr32 }
227  - { id: 2, class: gr8 }
228  - { id: 3, class: gr32 }
229  - { id: 4, class: gr8 }
230  - { id: 5, class: gr32 }
231  - { id: 6, class: gr8 }
232  - { id: 7, class: gr32 }
233  - { id: 8, class: gr8 }
234frameInfo:
235  maxAlignment:    1
236machineFunctionInfo: {}
237body:             |
238  bb.0:
239    JMP_1 %bb.1
240
241  bb.1:
242    %0:gr8 = IMPLICIT_DEF
243    TEST8ri %0, 1, implicit-def $eflags
244    JCC_1 %bb.2, 5, implicit $eflags
245    JMP_1 %bb.3
246
247  bb.2:
248    %5:gr32 = MOV32r0 implicit-def dead $eflags
249    %6:gr8 = COPY %5.sub_8bit
250    TEST8rr %6, %6, implicit-def $eflags
251    JCC_1 %bb.2, 5, implicit $eflags
252    JMP_1 %bb.6
253
254  bb.6:
255    %7:gr32 = MOV32r0 implicit-def dead $eflags
256    %8:gr8 = COPY %7.sub_8bit
257    TEST8rr %8, %8, implicit-def $eflags
258    JCC_1 %bb.1, 5, implicit $eflags
259    JMP_1 %bb.4
260
261  bb.3:
262    %1:gr32 = MOV32r0 implicit-def dead $eflags
263    %2:gr8 = COPY %1.sub_8bit
264    TEST8rr %2, %2, implicit-def $eflags
265    JCC_1 %bb.4, 5, implicit $eflags
266    JMP_1 %bb.5
267
268  bb.5:
269    %3:gr32 = MOV32r0 implicit-def dead $eflags
270    %4:gr8 = COPY %3.sub_8bit
271    TEST8rr %4, %4, implicit-def $eflags
272    JCC_1 %bb.3, 5, implicit $eflags
273    JMP_1 %bb.1
274
275  bb.4:
276    RET64
277
278...
279---
280# CHECK-LABEL: MachineCycleInfo for function: deeper_nest
281# CHECK:           depth=1: entries(bb.1) bb.5 bb.2 bb.3 bb.4
282# CHECK:               depth=2: entries(bb.2) bb.3 bb.4
283# CHECK:                   depth=3: entries(bb.3) bb.4
284name:            deeper_nest
285alignment:       16
286tracksRegLiveness: true
287registers:
288  - { id: 0, class: gr8 }
289  - { id: 1, class: gr8 }
290  - { id: 2, class: gr8 }
291frameInfo:
292  maxAlignment:    1
293machineFunctionInfo: {}
294body:             |
295  bb.0:
296    JMP_1 %bb.1
297
298  bb.1:
299    JMP_1 %bb.2
300
301  bb.2:
302    JMP_1 %bb.3
303
304  bb.3:
305    %0:gr8 = IMPLICIT_DEF
306    TEST8ri %0, 1, implicit-def $eflags
307    JCC_1 %bb.2, 5, implicit $eflags
308    JMP_1 %bb.4
309
310  bb.4:
311    %1:gr8 = IMPLICIT_DEF
312    TEST8ri %1, 1, implicit-def $eflags
313    JCC_1 %bb.3, 5, implicit $eflags
314    JMP_1 %bb.5
315
316  bb.5:
317    %2:gr8 = IMPLICIT_DEF
318    TEST8ri %2, 1, implicit-def $eflags
319    JCC_1 %bb.1, 5, implicit $eflags
320    JMP_1 %bb.6
321
322  bb.6:
323    RET64
324
325...
326---
327# CHECK-LABEL: MachineCycleInfo for function: irreducible_basic
328# CHECK:           depth=1: entries(bb.2 bb.1)
329name:            irreducible_basic
330alignment:       16
331tracksRegLiveness: true
332registers:
333  - { id: 0, class: gr8 }
334  - { id: 1, class: gr8 }
335  - { id: 2, class: gr8 }
336frameInfo:
337  maxAlignment:    1
338machineFunctionInfo: {}
339body:             |
340  bb.0:
341    %0:gr8 = IMPLICIT_DEF
342    TEST8ri %0, 1, implicit-def $eflags
343    JCC_1 %bb.1, 5, implicit $eflags
344    JMP_1 %bb.2
345
346  bb.1:
347    %1:gr8 = IMPLICIT_DEF
348    TEST8ri %1, 1, implicit-def $eflags
349    JCC_1 %bb.2, 5, implicit $eflags
350    JMP_1 %bb.3
351
352  bb.2:
353    %2:gr8 = IMPLICIT_DEF
354    TEST8ri %2, 1, implicit-def $eflags
355    JCC_1 %bb.1, 5, implicit $eflags
356    JMP_1 %bb.3
357
358  bb.3:
359    RET64
360
361...
362---
363# CHECK-LABEL: MachineCycleInfo for function: irreducible_mess
364# CHECK:           depth=1: entries(bb.2 bb.1) bb.6 bb.5 bb.3 bb.4
365# CHECK:               depth=2: entries(bb.5 bb.3 bb.1) bb.4
366# CHECK:                   depth=3: entries(bb.3 bb.1) bb.4
367name:            irreducible_mess
368alignment:       16
369tracksRegLiveness: true
370registers:
371  - { id: 0, class: gr8 }
372  - { id: 1, class: gr8 }
373  - { id: 2, class: gr32 }
374  - { id: 3, class: gr8 }
375  - { id: 4, class: gr32 }
376  - { id: 5, class: gr8 }
377  - { id: 6, class: gr32 }
378  - { id: 7, class: gr8 }
379  - { id: 8, class: gr32 }
380  - { id: 9, class: gr8 }
381  - { id: 10, class: gr8 }
382frameInfo:
383  maxAlignment:    1
384machineFunctionInfo: {}
385body:             |
386  bb.0:
387    %0:gr8 = IMPLICIT_DEF
388    TEST8ri %0, 1, implicit-def $eflags
389    JCC_1 %bb.1, 5, implicit $eflags
390    JMP_1 %bb.2
391
392  bb.1:
393    %1:gr8 = IMPLICIT_DEF
394    TEST8ri %1, 1, implicit-def $eflags
395    JCC_1 %bb.3, 5, implicit $eflags
396    JMP_1 %bb.4
397
398  bb.2:
399    %10:gr8 = IMPLICIT_DEF
400    TEST8ri %10, 1, implicit-def $eflags
401    JCC_1 %bb.3, 5, implicit $eflags
402    JMP_1 %bb.4
403
404  bb.3:
405    %2:gr32 = MOV32r0 implicit-def dead $eflags
406    %3:gr8 = COPY %2.sub_8bit
407    TEST8rr %3, %3, implicit-def $eflags
408    JCC_1 %bb.4, 5, implicit $eflags
409    JMP_1 %bb.6
410
411  bb.6:
412    %4:gr32 = MOV32r0 implicit-def dead $eflags
413    %5:gr8 = COPY %4.sub_8bit
414    TEST8rr %5, %5, implicit-def $eflags
415    JCC_1 %bb.5, 5, implicit $eflags
416    JMP_1 %bb.1
417
418  bb.4:
419    %6:gr32 = MOV32r0 implicit-def dead $eflags
420    %7:gr8 = COPY %6.sub_8bit
421    TEST8rr %7, %7, implicit-def $eflags
422    JCC_1 %bb.3, 5, implicit $eflags
423    JMP_1 %bb.7
424
425  bb.7:
426    successors: %bb.5, %bb.2
427
428    %8:gr32 = MOV32r0 implicit-def dead $eflags
429    %9:gr8 = COPY %8.sub_8bit
430    TEST8rr %9, %9, implicit-def $eflags
431    JCC_1 %bb.2, 5, implicit $eflags
432    JMP_1 %bb.5
433
434  bb.5:
435    RET64
436
437...
438---
439# CHECK-LABEL: MachineCycleInfo for function: irreducible_into_simple_cycle
440# CHECK:           depth=1: entries(bb.2 bb.7 bb.4) bb.6 bb.5 bb.3
441name:            irreducible_into_simple_cycle
442alignment:       16
443tracksRegLiveness: true
444registers:
445  - { id: 0, class: gr32 }
446  - { id: 1, class: gr8 }
447  - { id: 2, class: gr32 }
448  - { id: 3, class: gr8 }
449  - { id: 4, class: gr8 }
450  - { id: 5, class: gr8 }
451frameInfo:
452  maxAlignment:    1
453machineFunctionInfo: {}
454body:             |
455  bb.0:
456    %0:gr32 = MOV32r0 implicit-def dead $eflags
457    %1:gr8 = COPY %0.sub_8bit
458    TEST8rr %1, %1, implicit-def $eflags
459    JCC_1 %bb.3, 5, implicit $eflags
460    JMP_1 %bb.8
461
462  bb.8:
463    %2:gr32 = MOV32r0 implicit-def dead $eflags
464    %3:gr8 = COPY %2.sub_8bit
465    TEST8rr %3, %3, implicit-def $eflags
466    JCC_1 %bb.6, 5, implicit $eflags
467    JMP_1 %bb.1
468
469  bb.1:
470    JMP_1 %bb.2
471
472  bb.2:
473    JMP_1 %bb.3
474
475  bb.3:
476    JMP_1 %bb.4
477
478  bb.4:
479    %4:gr8 = IMPLICIT_DEF
480    TEST8ri %4, 1, implicit-def $eflags
481    JCC_1 %bb.5, 5, implicit $eflags
482    JMP_1 %bb.7
483
484  bb.5:
485    JMP_1 %bb.6
486
487  bb.6:
488    %5:gr8 = IMPLICIT_DEF
489    TEST8ri %5, 1, implicit-def $eflags
490    JCC_1 %bb.1, 5, implicit $eflags
491    JMP_1 %bb.7
492
493  bb.7:
494    RET64
495
496...
497---
498# CHECK-LABEL: MachineCycleInfo for function: irreducible_mountain_bug
499# CHECK:           depth=1: entries(bb.6) bb.11 bb.10 bb.8 bb.7 bb.9 bb.12
500# CHECK:               depth=2: entries(bb.10 bb.7) bb.8 bb.9
501# CHECK:                   depth=3: entries(bb.8 bb.7) bb.9
502name:            irreducible_mountain_bug
503alignment:       16
504tracksRegLiveness: true
505registers:
506  - { id: 0, class: gr8 }
507  - { id: 1, class: gr8 }
508  - { id: 2, class: gr8 }
509  - { id: 3, class: gr8 }
510  - { id: 4, class: gr8 }
511  - { id: 5, class: gr8 }
512  - { id: 6, class: gr8 }
513  - { id: 7, class: gr8 }
514  - { id: 8, class: gr8 }
515  - { id: 9, class: gr8 }
516  - { id: 10, class: gr8 }
517  - { id: 11, class: gr8 }
518  - { id: 12, class: gr8 }
519  - { id: 13, class: gr8 }
520frameInfo:
521  maxAlignment:    1
522machineFunctionInfo: {}
523body:             |
524  bb.0:
525    %0:gr8 = IMPLICIT_DEF
526    TEST8ri %0, 1, implicit-def $eflags
527    JCC_1 %bb.1, 5, implicit $eflags
528    JMP_1 %bb.17
529
530  bb.1:
531    %3:gr8 = IMPLICIT_DEF
532    TEST8ri %3, 1, implicit-def $eflags
533    JCC_1 %bb.2, 5, implicit $eflags
534    JMP_1 %bb.3
535
536  bb.2:
537    JMP_1 %bb.4
538
539  bb.3:
540    JMP_1 %bb.4
541
542  bb.4:
543    %4:gr8 = IMPLICIT_DEF
544    TEST8ri %4, 1, implicit-def $eflags
545    JCC_1 %bb.5, 5, implicit $eflags
546    JMP_1 %bb.14
547
548  bb.5:
549    JMP_1 %bb.6
550
551  bb.6:
552    %7:gr8 = IMPLICIT_DEF
553    TEST8ri %7, 1, implicit-def $eflags
554    JCC_1 %bb.7, 5, implicit $eflags
555    JMP_1 %bb.12
556
557  bb.7:
558    %9:gr8 = IMPLICIT_DEF
559    TEST8ri %9, 1, implicit-def $eflags
560    JCC_1 %bb.11, 5, implicit $eflags
561    JMP_1 %bb.8
562
563  bb.8:
564    %10:gr8 = IMPLICIT_DEF
565    TEST8ri %10, 1, implicit-def $eflags
566    JCC_1 %bb.20, 5, implicit $eflags
567    JMP_1 %bb.9
568
569  bb.9:
570    %11:gr8 = IMPLICIT_DEF
571    TEST8ri %11, 1, implicit-def $eflags
572    JCC_1 %bb.7, 5, implicit $eflags
573    JMP_1 %bb.10
574
575  bb.10:
576    %12:gr8 = IMPLICIT_DEF
577    TEST8ri %12, 1, implicit-def $eflags
578    JCC_1 %bb.8, 5, implicit $eflags
579    JMP_1 %bb.6
580
581  bb.11:
582    %13:gr8 = IMPLICIT_DEF
583    TEST8ri %13, 1, implicit-def $eflags
584    JCC_1 %bb.20, 5, implicit $eflags
585    JMP_1 %bb.6
586
587  bb.12:
588    %8:gr8 = IMPLICIT_DEF
589    TEST8ri %8, 1, implicit-def $eflags
590    JCC_1 %bb.10, 5, implicit $eflags
591    JMP_1 %bb.13
592
593  bb.13:
594    JMP_1 %bb.20
595
596  bb.14:
597    %5:gr8 = IMPLICIT_DEF
598    TEST8ri %5, 1, implicit-def $eflags
599    JCC_1 %bb.20, 5, implicit $eflags
600    JMP_1 %bb.15
601
602  bb.15:
603    %6:gr8 = IMPLICIT_DEF
604    TEST8ri %6, 1, implicit-def $eflags
605    JCC_1 %bb.20, 5, implicit $eflags
606    JMP_1 %bb.16
607
608  bb.16:
609    JMP_1 %bb.20
610
611  bb.17:
612    %1:gr8 = IMPLICIT_DEF
613    TEST8ri %1, 1, implicit-def $eflags
614    JCC_1 %bb.20, 5, implicit $eflags
615    JMP_1 %bb.18
616
617  bb.18:
618    %2:gr8 = IMPLICIT_DEF
619    TEST8ri %2, 1, implicit-def $eflags
620    JCC_1 %bb.20, 5, implicit $eflags
621    JMP_1 %bb.19
622
623  bb.19:
624    JMP_1 %bb.20
625
626  bb.20:
627    RET64
628
629...
630