# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=print-machine-cycles -o - %s 2>&1 | FileCheck %s
...
---
# CHECK-LABEL: MachineCycleInfo for function: empty
name: empty
alignment: 16
tracksRegLiveness: true
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: simple
# CHECK: depth=1: entries(bb.1)
name: simple
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
JMP_1 %bb.1
bb.1:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.2
bb.2:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: two_latches
# CHECK: depth=1: entries(bb.1) bb.2
name: two_latches
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
- { id: 1, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
JMP_1 %bb.1
bb.1:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.2
bb.2:
%1:gr8 = IMPLICIT_DEF
TEST8ri %1, 1, implicit-def $eflags
JCC_1 %bb.3, 5, implicit $eflags
JMP_1 %bb.1
bb.3:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: nested_simple
# CHECK: depth=1: entries(bb.1) bb.3 bb.2
# CHECK: depth=2: entries(bb.2)
name: nested_simple
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
- { id: 1, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
JMP_1 %bb.1
bb.1:
JMP_1 %bb.2
bb.2:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.2, 5, implicit $eflags
JMP_1 %bb.3
bb.3:
%1:gr8 = IMPLICIT_DEF
TEST8ri %1, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.4
bb.4:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: nested_outer_latch_in_inner_loop
# CHECK: depth=1: entries(bb.1) bb.2 bb.3
# CHECK: depth=2: entries(bb.2) bb.3
name: nested_outer_latch_in_inner_loop
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
- { id: 1, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
JMP_1 %bb.1
bb.1:
JMP_1 %bb.2
bb.2:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.3, 5, implicit $eflags
JMP_1 %bb.1
bb.3:
%1:gr8 = IMPLICIT_DEF
TEST8ri %1, 1, implicit-def $eflags
JCC_1 %bb.4, 5, implicit $eflags
JMP_1 %bb.2
bb.4:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: sibling_loops
# CHECK: depth=1: entries(bb.1)
# CHECK: depth=1: entries(bb.2)
name: sibling_loops
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
- { id: 1, class: gr8 }
- { id: 2, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.2
bb.1:
%2:gr8 = IMPLICIT_DEF
TEST8ri %2, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.3
bb.2:
%1:gr8 = IMPLICIT_DEF
TEST8ri %1, 1, implicit-def $eflags
JCC_1 %bb.2, 5, implicit $eflags
JMP_1 %bb.3
bb.3:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: serial_loops
# CHECK: depth=1: entries(bb.2)
# CHECK: depth=1: entries(bb.1)
name: serial_loops
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
- { id: 1, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
JMP_1 %bb.1
bb.1:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.2
bb.2:
%1:gr8 = IMPLICIT_DEF
TEST8ri %1, 1, implicit-def $eflags
JCC_1 %bb.2, 5, implicit $eflags
JMP_1 %bb.3
bb.3:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: nested_sibling_loops
# CHECK: depth=1: entries(bb.1) bb.4 bb.5 bb.3 bb.2
# CHECK: depth=2: entries(bb.4) bb.5
# CHECK: depth=2: entries(bb.2)
name: nested_sibling_loops
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
- { id: 1, class: gr32 }
- { id: 2, class: gr8 }
- { id: 3, class: gr32 }
- { id: 4, class: gr8 }
- { id: 5, class: gr32 }
- { id: 6, class: gr8 }
- { id: 7, class: gr32 }
- { id: 8, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
JMP_1 %bb.1
bb.1:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.2, 5, implicit $eflags
JMP_1 %bb.3
bb.2:
%5:gr32 = MOV32r0 implicit-def dead $eflags
%6:gr8 = COPY %5.sub_8bit
TEST8rr %6, %6, implicit-def $eflags
JCC_1 %bb.2, 5, implicit $eflags
JMP_1 %bb.6
bb.6:
%7:gr32 = MOV32r0 implicit-def dead $eflags
%8:gr8 = COPY %7.sub_8bit
TEST8rr %8, %8, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.4
bb.3:
%1:gr32 = MOV32r0 implicit-def dead $eflags
%2:gr8 = COPY %1.sub_8bit
TEST8rr %2, %2, implicit-def $eflags
JCC_1 %bb.4, 5, implicit $eflags
JMP_1 %bb.5
bb.5:
%3:gr32 = MOV32r0 implicit-def dead $eflags
%4:gr8 = COPY %3.sub_8bit
TEST8rr %4, %4, implicit-def $eflags
JCC_1 %bb.3, 5, implicit $eflags
JMP_1 %bb.1
bb.4:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: deeper_nest
# CHECK: depth=1: entries(bb.1) bb.5 bb.2 bb.3 bb.4
# CHECK: depth=2: entries(bb.2) bb.3 bb.4
# CHECK: depth=3: entries(bb.3) bb.4
name: deeper_nest
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
- { id: 1, class: gr8 }
- { id: 2, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
JMP_1 %bb.1
bb.1:
JMP_1 %bb.2
bb.2:
JMP_1 %bb.3
bb.3:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.2, 5, implicit $eflags
JMP_1 %bb.4
bb.4:
%1:gr8 = IMPLICIT_DEF
TEST8ri %1, 1, implicit-def $eflags
JCC_1 %bb.3, 5, implicit $eflags
JMP_1 %bb.5
bb.5:
%2:gr8 = IMPLICIT_DEF
TEST8ri %2, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.6
bb.6:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: irreducible_basic
# CHECK: depth=1: entries(bb.2 bb.1)
name: irreducible_basic
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
- { id: 1, class: gr8 }
- { id: 2, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.2
bb.1:
%1:gr8 = IMPLICIT_DEF
TEST8ri %1, 1, implicit-def $eflags
JCC_1 %bb.2, 5, implicit $eflags
JMP_1 %bb.3
bb.2:
%2:gr8 = IMPLICIT_DEF
TEST8ri %2, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.3
bb.3:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: irreducible_mess
# CHECK: depth=1: entries(bb.2 bb.1) bb.6 bb.5 bb.3 bb.4
# CHECK: depth=2: entries(bb.5 bb.3 bb.1) bb.4
# CHECK: depth=3: entries(bb.3 bb.1) bb.4
name: irreducible_mess
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
- { id: 1, class: gr8 }
- { id: 2, class: gr32 }
- { id: 3, class: gr8 }
- { id: 4, class: gr32 }
- { id: 5, class: gr8 }
- { id: 6, class: gr32 }
- { id: 7, class: gr8 }
- { id: 8, class: gr32 }
- { id: 9, class: gr8 }
- { id: 10, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.2
bb.1:
%1:gr8 = IMPLICIT_DEF
TEST8ri %1, 1, implicit-def $eflags
JCC_1 %bb.3, 5, implicit $eflags
JMP_1 %bb.4
bb.2:
%10:gr8 = IMPLICIT_DEF
TEST8ri %10, 1, implicit-def $eflags
JCC_1 %bb.3, 5, implicit $eflags
JMP_1 %bb.4
bb.3:
%2:gr32 = MOV32r0 implicit-def dead $eflags
%3:gr8 = COPY %2.sub_8bit
TEST8rr %3, %3, implicit-def $eflags
JCC_1 %bb.4, 5, implicit $eflags
JMP_1 %bb.6
bb.6:
%4:gr32 = MOV32r0 implicit-def dead $eflags
%5:gr8 = COPY %4.sub_8bit
TEST8rr %5, %5, implicit-def $eflags
JCC_1 %bb.5, 5, implicit $eflags
JMP_1 %bb.1
bb.4:
%6:gr32 = MOV32r0 implicit-def dead $eflags
%7:gr8 = COPY %6.sub_8bit
TEST8rr %7, %7, implicit-def $eflags
JCC_1 %bb.3, 5, implicit $eflags
JMP_1 %bb.7
bb.7:
successors: %bb.5, %bb.2
%8:gr32 = MOV32r0 implicit-def dead $eflags
%9:gr8 = COPY %8.sub_8bit
TEST8rr %9, %9, implicit-def $eflags
JCC_1 %bb.2, 5, implicit $eflags
JMP_1 %bb.5
bb.5:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: irreducible_into_simple_cycle
# CHECK: depth=1: entries(bb.2 bb.7 bb.4) bb.6 bb.5 bb.3
name: irreducible_into_simple_cycle
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr32 }
- { id: 1, class: gr8 }
- { id: 2, class: gr32 }
- { id: 3, class: gr8 }
- { id: 4, class: gr8 }
- { id: 5, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
%0:gr32 = MOV32r0 implicit-def dead $eflags
%1:gr8 = COPY %0.sub_8bit
TEST8rr %1, %1, implicit-def $eflags
JCC_1 %bb.3, 5, implicit $eflags
JMP_1 %bb.8
bb.8:
%2:gr32 = MOV32r0 implicit-def dead $eflags
%3:gr8 = COPY %2.sub_8bit
TEST8rr %3, %3, implicit-def $eflags
JCC_1 %bb.6, 5, implicit $eflags
JMP_1 %bb.1
bb.1:
JMP_1 %bb.2
bb.2:
JMP_1 %bb.3
bb.3:
JMP_1 %bb.4
bb.4:
%4:gr8 = IMPLICIT_DEF
TEST8ri %4, 1, implicit-def $eflags
JCC_1 %bb.5, 5, implicit $eflags
JMP_1 %bb.7
bb.5:
JMP_1 %bb.6
bb.6:
%5:gr8 = IMPLICIT_DEF
TEST8ri %5, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.7
bb.7:
RET64
...
---
# CHECK-LABEL: MachineCycleInfo for function: irreducible_mountain_bug
# CHECK: depth=1: entries(bb.6) bb.11 bb.10 bb.8 bb.7 bb.9 bb.12
# CHECK: depth=2: entries(bb.10 bb.7) bb.8 bb.9
# CHECK: depth=3: entries(bb.8 bb.7) bb.9
name: irreducible_mountain_bug
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: gr8 }
- { id: 1, class: gr8 }
- { id: 2, class: gr8 }
- { id: 3, class: gr8 }
- { id: 4, class: gr8 }
- { id: 5, class: gr8 }
- { id: 6, class: gr8 }
- { id: 7, class: gr8 }
- { id: 8, class: gr8 }
- { id: 9, class: gr8 }
- { id: 10, class: gr8 }
- { id: 11, class: gr8 }
- { id: 12, class: gr8 }
- { id: 13, class: gr8 }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
%0:gr8 = IMPLICIT_DEF
TEST8ri %0, 1, implicit-def $eflags
JCC_1 %bb.1, 5, implicit $eflags
JMP_1 %bb.17
bb.1:
%3:gr8 = IMPLICIT_DEF
TEST8ri %3, 1, implicit-def $eflags
JCC_1 %bb.2, 5, implicit $eflags
JMP_1 %bb.3
bb.2:
JMP_1 %bb.4
bb.3:
JMP_1 %bb.4
bb.4:
%4:gr8 = IMPLICIT_DEF
TEST8ri %4, 1, implicit-def $eflags
JCC_1 %bb.5, 5, implicit $eflags
JMP_1 %bb.14
bb.5:
JMP_1 %bb.6
bb.6:
%7:gr8 = IMPLICIT_DEF
TEST8ri %7, 1, implicit-def $eflags
JCC_1 %bb.7, 5, implicit $eflags
JMP_1 %bb.12
bb.7:
%9:gr8 = IMPLICIT_DEF
TEST8ri %9, 1, implicit-def $eflags
JCC_1 %bb.11, 5, implicit $eflags
JMP_1 %bb.8
bb.8:
%10:gr8 = IMPLICIT_DEF
TEST8ri %10, 1, implicit-def $eflags
JCC_1 %bb.20, 5, implicit $eflags
JMP_1 %bb.9
bb.9:
%11:gr8 = IMPLICIT_DEF
TEST8ri %11, 1, implicit-def $eflags
JCC_1 %bb.7, 5, implicit $eflags
JMP_1 %bb.10
bb.10:
%12:gr8 = IMPLICIT_DEF
TEST8ri %12, 1, implicit-def $eflags
JCC_1 %bb.8, 5, implicit $eflags
JMP_1 %bb.6
bb.11:
%13:gr8 = IMPLICIT_DEF
TEST8ri %13, 1, implicit-def $eflags
JCC_1 %bb.20, 5, implicit $eflags
JMP_1 %bb.6
bb.12:
%8:gr8 = IMPLICIT_DEF
TEST8ri %8, 1, implicit-def $eflags
JCC_1 %bb.10, 5, implicit $eflags
JMP_1 %bb.13
bb.13:
JMP_1 %bb.20
bb.14:
%5:gr8 = IMPLICIT_DEF
TEST8ri %5, 1, implicit-def $eflags
JCC_1 %bb.20, 5, implicit $eflags
JMP_1 %bb.15
bb.15:
%6:gr8 = IMPLICIT_DEF
TEST8ri %6, 1, implicit-def $eflags
JCC_1 %bb.20, 5, implicit $eflags
JMP_1 %bb.16
bb.16:
JMP_1 %bb.20
bb.17:
%1:gr8 = IMPLICIT_DEF
TEST8ri %1, 1, implicit-def $eflags
JCC_1 %bb.20, 5, implicit $eflags
JMP_1 %bb.18
bb.18:
%2:gr8 = IMPLICIT_DEF
TEST8ri %2, 1, implicit-def $eflags
JCC_1 %bb.20, 5, implicit $eflags
JMP_1 %bb.19
bb.19:
JMP_1 %bb.20
bb.20:
RET64
...