xref: /llvm-project/llvm/test/CodeGen/X86/tail-merge-after-mbp.mir (revision c81a121f3f230cfe468b6def6d2904b4aefb855b)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=x86_64-linux -run-pass=block-placement -o - %s | FileCheck %s
3
4---
5# check loop bb.7 is not merged with bb.10, bb.13
6# check loop bb.9 is not merged with bb.12
7
8name:            foo
9body:             |
10  ; CHECK-LABEL: name: foo
11  ; CHECK: bb.0:
12  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
13  ; CHECK:   TEST8ri $dl, 1, implicit-def $eflags, implicit killed $edx
14  ; CHECK:   JCC_1 %bb.1, 5, implicit $eflags
15  ; CHECK: bb.2:
16  ; CHECK:   successors: %bb.1(0x30000000), %bb.3(0x50000000)
17  ; CHECK:   $rax = MOV64rm $r14, 1, $noreg, 0, $noreg :: (load (s64))
18  ; CHECK:   TEST64rr $rax, $rax, implicit-def $eflags
19  ; CHECK:   JCC_1 %bb.1, 4, implicit $eflags
20  ; CHECK: bb.3:
21  ; CHECK:   successors: %bb.6(0x30000000), %bb.4(0x50000000)
22  ; CHECK:   CMP64mi32 killed $rax, 1, $noreg, 8, $noreg, 0, implicit-def $eflags :: (load (s64))
23  ; CHECK:   JCC_1 %bb.6, 4, implicit $eflags
24  ; CHECK: bb.4:
25  ; CHECK:   $ebp = XOR32rr undef $ebp, undef $ebp, implicit-def dead $eflags
26  ; CHECK:   dead $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags, implicit-def $al
27  ; CHECK:   RET64 $eax
28  ; CHECK: bb.6:
29  ; CHECK:   successors: %bb.1(0x30000000), %bb.7(0x50000000)
30  ; CHECK:   $rax = MOV64rm $r14, 1, $noreg, 0, $noreg :: (load (s64))
31  ; CHECK:   TEST64rr $rax, $rax, implicit-def $eflags
32  ; CHECK:   JCC_1 %bb.1, 4, implicit $eflags
33  ; CHECK: bb.7 (align 16):
34  ; CHECK:   successors: %bb.8(0x71555555), %bb.4(0x0eaaaaab)
35  ; CHECK:   CMP64mi32 killed $rax, 1, $noreg, 8, $noreg, 0, implicit-def $eflags :: (load (s64)), (load (s64))
36  ; CHECK:   JCC_1 %bb.4, 5, implicit $eflags
37  ; CHECK: bb.8:
38  ; CHECK:   successors: %bb.1(0x04000000), %bb.7(0x7c000000)
39  ; CHECK:   $rax = MOV64rm $r14, 1, $noreg, 0, $noreg :: (load (s64))
40  ; CHECK:   TEST64rr $rax, $rax, implicit-def $eflags
41  ; CHECK:   JCC_1 %bb.7, 5, implicit $eflags
42  ; CHECK: bb.1:
43  ; CHECK:   $ebp = XOR32rr undef $ebp, undef $ebp, implicit-def dead $eflags
44  ; CHECK:   RET64 $eax
45  bb.0:
46    successors: %bb.1(0x40000000), %bb.7(0x40000000)
47
48    TEST8ri $dl, 1, implicit-def $eflags, implicit killed $edx
49    JCC_1 %bb.7, 4, implicit $eflags
50
51  bb.1:
52    successors: %bb.16(0x80000000)
53
54    $ebp = XOR32rr undef $ebp, undef $ebp, implicit-def dead $eflags
55    JMP_1 %bb.16
56
57  bb.7:
58    successors: %bb.8(0x30000000), %bb.9(0x50000000)
59
60    $rax = MOV64rm $r14, 1, $noreg, 0, $noreg :: (load (s64))
61    TEST64rr $rax, $rax, implicit-def $eflags
62    JCC_1 %bb.9, 5, implicit killed $eflags
63
64  bb.8:
65    successors: %bb.16(0x80000000)
66
67    $ebp = XOR32rr undef $ebp, undef $ebp, implicit-def dead $eflags
68    JMP_1 %bb.16
69
70  bb.9:
71    successors: %bb.10(0x30000000), %bb.15(0x50000000)
72
73    CMP64mi32 killed $rax, 1, $noreg, 8, $noreg, 0, implicit-def $eflags :: (load (s64))
74    JCC_1 %bb.15, 5, implicit $eflags
75
76  bb.10:
77    successors: %bb.11(0x30000000), %bb.12(0x50000000)
78
79    $rax = MOV64rm $r14, 1, $noreg, 0, $noreg :: (load (s64))
80    TEST64rr $rax, $rax, implicit-def $eflags
81    JCC_1 %bb.12, 5, implicit $eflags
82
83  bb.11:
84    successors: %bb.16(0x80000000)
85
86    $ebp = XOR32rr undef $ebp, undef $ebp, implicit-def dead $eflags
87    JMP_1 %bb.16
88
89  bb.12:
90    successors: %bb.13(0x71555555), %bb.15(0x0eaaaaab)
91
92    CMP64mi32 killed $rax, 1, $noreg, 8, $noreg, 0, implicit-def $eflags :: (load (s64)), (load (s64))
93    JCC_1 %bb.15, 5, implicit $eflags
94
95  bb.13:
96    successors: %bb.14(0x04000000), %bb.12(0x7c000000)
97
98    $rax = MOV64rm $r14, 1, $noreg, 0, $noreg :: (load (s64))
99    TEST64rr $rax, $rax, implicit-def $eflags
100    JCC_1 %bb.12, 5, implicit $eflags
101
102  bb.14:
103    successors: %bb.16(0x80000000)
104
105    $ebp = XOR32rr undef $ebp, undef $ebp, implicit-def dead $eflags
106    JMP_1 %bb.16
107
108  bb.15:
109    successors: %bb.16(0x80000000)
110
111    $ebp = XOR32rr undef $ebp, undef $ebp, implicit-def dead $eflags
112    dead $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags, implicit-def $al
113
114  bb.16:
115
116    RET64 $eax
117
118...
119