blob: a49e80bd7ab675a1587dc7aa8862343f08bd9364 [file] [log] [blame]
Dylan McKay9701c422016-11-16 22:38:43 +00001; 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: breq LBB0_2
14; CHECK: mov [[SCRATCH:r[0-9]+]], {{.*}}[[RESULT]]
15; CHECK: lsr {{.*}}[[SCRATCH]]
16; CHECK: or {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
17; CHECK: mov {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
18; CHECK: lsr {{.*}}[[RESULT]]
19; CHECK: lsr {{.*}}[[RESULT]]
20; CHECK: or {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
21; CHECK: mov {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
22; CHECK: lsr {{.*}}[[SCRATCH]]
23; CHECK: lsr {{.*}}[[SCRATCH]]
24; CHECK: lsr {{.*}}[[SCRATCH]]
25; CHECK: lsr {{.*}}[[SCRATCH]]
26; CHECK: or {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
27; CHECK: com {{.*}}[[SCRATCH]]
28; CHECK: mov {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
29; CHECK: lsr {{.*}}[[RESULT]]
30; CHECK: andi {{.*}}[[RESULT]], 85
31; CHECK: sub {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
32; CHECK: mov {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
33; CHECK: andi {{.*}}[[RESULT]], 51
34; CHECK: lsr {{.*}}[[SCRATCH]]
35; CHECK: lsr {{.*}}[[SCRATCH]]
36; CHECK: andi {{.*}}[[SCRATCH]], 51
37; CHECK: add {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
38; CHECK: mov {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
39; CHECK: lsr {{.*}}[[RESULT]]
40; CHECK: lsr {{.*}}[[RESULT]]
41; CHECK: lsr {{.*}}[[RESULT]]
42; CHECK: lsr {{.*}}[[RESULT]]
43; CHECK: add {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
44; CHECK: andi {{.*}}[[RESULT]], 15
45; CHECK: ret
46; CHECK: LBB0_2:
47; CHECK: ldi {{.*}}[[RESULT]], 8
48; CHECK: ret