1; RUN: llc < %s -march=avr | FileCheck %s
2
3define i8 @count_leading_zeros(i8) unnamed_addr {
4entry-block:
5  %1 = tail call i8 @llvm.ctlz.i8(i8 %0)
6  ret i8 %1
7}
8
9declare i8 @llvm.ctlz.i8(i8)
10
11; CHECK-LABEL: count_leading_zeros:
12; CHECK: cpi    [[RESULT:r[0-9]+]], 0
13; CHECK: brne   LBB0_1
14; CHECK: rjmp   LBB0_2
15; CHECK: mov    [[SCRATCH:r[0-9]+]], {{.*}}[[RESULT]]
16; CHECK: lsr    {{.*}}[[SCRATCH]]
17; CHECK: or     {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
18; CHECK: mov    {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
19; CHECK: lsr    {{.*}}[[RESULT]]
20; CHECK: lsr    {{.*}}[[RESULT]]
21; CHECK: or     {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
22; CHECK: mov    {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
23; CHECK: lsr    {{.*}}[[SCRATCH]]
24; CHECK: lsr    {{.*}}[[SCRATCH]]
25; CHECK: lsr    {{.*}}[[SCRATCH]]
26; CHECK: lsr    {{.*}}[[SCRATCH]]
27; CHECK: or     {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
28; CHECK: com    {{.*}}[[SCRATCH]]
29; CHECK: mov    {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
30; CHECK: lsr    {{.*}}[[RESULT]]
31; CHECK: andi   {{.*}}[[RESULT]], 85
32; CHECK: sub    {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
33; CHECK: mov    {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
34; CHECK: andi   {{.*}}[[RESULT]], 51
35; CHECK: lsr    {{.*}}[[SCRATCH]]
36; CHECK: lsr    {{.*}}[[SCRATCH]]
37; CHECK: andi   {{.*}}[[SCRATCH]], 51
38; CHECK: add    {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
39; CHECK: mov    {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
40; CHECK: lsr    {{.*}}[[RESULT]]
41; CHECK: lsr    {{.*}}[[RESULT]]
42; CHECK: lsr    {{.*}}[[RESULT]]
43; CHECK: lsr    {{.*}}[[RESULT]]
44; CHECK: add    {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
45; CHECK: andi   {{.*}}[[RESULT]], 15
46; CHECK: ret
47; CHECK: LBB0_2:
48; CHECK: ldi    {{.*}}[[RESULT]], 8
49; CHECK: ret
50