xref: /llvm-project/llvm/test/CodeGen/AVR/branch-relaxation.ll (revision 9ef1d37ffb5f56a9b949a6307bbb16c2ea0130e3)
1; RUN: llc < %s -mtriple=avr | FileCheck %s
2; RUN: llc < %s -mtriple=avr -mcpu=avr5 | FileCheck -check-prefix=AVR5 %s
3
4; CHECK-LABEL: relax_breq
5; CHECK: cpi     r{{[0-9]+}}, 0
6; CHECK: brne    .LBB0_1
7; CHECK: rjmp    .LBB0_2
8; CHECK: .LBB0_1:
9; CHECK: nop
10; CHECK: .LBB0_2:
11
12; AVR5-LABEL: relax_breq
13; AVR5:         andi    r24, 1
14; AVR5:         cpi     r24, 0
15; AVR5:         brne    .LBB0_1
16; AVR5:         rjmp    .LBB0_2
17; AVR5:       .LBB0_1:
18; AVR5:         nop
19; AVR5:       .LBB0_2:
20
21define i8 @relax_breq(i1 %a) {
22entry-block:
23  br i1 %a, label %hello, label %finished
24
25hello:
26  call void asm sideeffect "nop", ""()
27  call void asm sideeffect "nop", ""()
28  call void asm sideeffect "nop", ""()
29  call void asm sideeffect "nop", ""()
30  call void asm sideeffect "nop", ""()
31  call void asm sideeffect "nop", ""()
32  call void asm sideeffect "nop", ""()
33  call void asm sideeffect "nop", ""()
34  call void asm sideeffect "nop", ""()
35  call void asm sideeffect "nop", ""()
36  call void asm sideeffect "nop", ""()
37  call void asm sideeffect "nop", ""()
38  call void asm sideeffect "nop", ""()
39  call void asm sideeffect "nop", ""()
40  call void asm sideeffect "nop", ""()
41  call void asm sideeffect "nop", ""()
42  call void asm sideeffect "nop", ""()
43  call void asm sideeffect "nop", ""()
44  call void asm sideeffect "nop", ""()
45  call void asm sideeffect "nop", ""()
46  call void asm sideeffect "nop", ""()
47  call void asm sideeffect "nop", ""()
48  call void asm sideeffect "nop", ""()
49  call void asm sideeffect "nop", ""()
50  call void asm sideeffect "nop", ""()
51  call void asm sideeffect "nop", ""()
52  call void asm sideeffect "nop", ""()
53  call void asm sideeffect "nop", ""()
54  call void asm sideeffect "nop", ""()
55  call void asm sideeffect "nop", ""()
56  call void asm sideeffect "nop", ""()
57  call void asm sideeffect "nop", ""()
58  call void asm sideeffect "nop", ""()
59  call void asm sideeffect "nop", ""()
60  call void asm sideeffect "nop", ""()
61  call void asm sideeffect "nop", ""()
62  call void asm sideeffect "nop", ""()
63  call void asm sideeffect "nop", ""()
64  call void asm sideeffect "nop", ""()
65  call void asm sideeffect "nop", ""()
66  call void asm sideeffect "nop", ""()
67  call void asm sideeffect "nop", ""()
68  call void asm sideeffect "nop", ""()
69  call void asm sideeffect "nop", ""()
70  call void asm sideeffect "nop", ""()
71  call void asm sideeffect "nop", ""()
72  call void asm sideeffect "nop", ""()
73  call void asm sideeffect "nop", ""()
74  call void asm sideeffect "nop", ""()
75  call void asm sideeffect "nop", ""()
76  br label %finished
77finished:
78  ret i8 3
79}
80
81; CHECK-LABEL: no_relax_breq
82; CHECK: cpi     r{{[0-9]+}}, 0
83; CHECK: breq    [[END_BB:.LBB[0-9]+_[0-9]+]]
84; CHECK: nop
85; CHECK: [[END_BB]]
86
87; AVR5-LABEL: no_relax_breq
88; AVR5:         cpi     r{{[0-9]+}}, 0
89; AVR5:         breq    [[END_BB:.LBB[0-9]+_[0-9]+]]
90; AVR5:         nop
91; AVR5:       [[END_BB]]
92
93define i8 @no_relax_breq(i1 %a) {
94entry-block:
95  br i1 %a, label %hello, label %finished
96
97hello:
98  ; There are not enough NOPs to require relaxation.
99  call void asm sideeffect "nop", ""()
100  call void asm sideeffect "nop", ""()
101  call void asm sideeffect "nop", ""()
102  call void asm sideeffect "nop", ""()
103  call void asm sideeffect "nop", ""()
104  call void asm sideeffect "nop", ""()
105  call void asm sideeffect "nop", ""()
106  call void asm sideeffect "nop", ""()
107  call void asm sideeffect "nop", ""()
108  call void asm sideeffect "nop", ""()
109  call void asm sideeffect "nop", ""()
110  br label %finished
111finished:
112  ret i8 3
113}
114
115