xref: /llvm-project/llvm/test/CodeGen/AVR/cttz.ll (revision 9ef1d37ffb5f56a9b949a6307bbb16c2ea0130e3)
1; RUN: llc < %s -mtriple=avr | FileCheck %s
2
3define i8 @count_trailing_zeros(i8) unnamed_addr {
4entry-block:
5  %1 = tail call i8 @llvm.cttz.i8(i8 %0)
6  ret i8 %1
7}
8
9declare i8 @llvm.cttz.i8(i8)
10
11; CHECK-LABEL: count_trailing_zeros:
12; CHECK: cpi    [[RESULT:r[0-9]+]], 0
13; CHECK: breq   [[END_BB:.LBB[0-9]+_[0-9]+]]
14; CHECK: mov    [[SCRATCH:r[0-9]+]], {{.*}}[[RESULT]]
15; CHECK: dec    {{.*}}[[SCRATCH]]
16; CHECK: com    {{.*}}[[RESULT]]
17; CHECK: and    {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
18; CHECK: mov    {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
19; CHECK: lsr    {{.*}}[[SCRATCH]]
20; CHECK: andi   {{.*}}[[SCRATCH]], 85
21; CHECK: sub    {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
22; CHECK: mov    {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
23; CHECK: andi   {{.*}}[[SCRATCH]], 51
24; CHECK: lsr    {{.*}}[[RESULT]]
25; CHECK: lsr    {{.*}}[[RESULT]]
26; CHECK: andi   {{.*}}[[RESULT]], 51
27; CHECK: add    {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
28; CHECK: mov    {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
29; CHECK: swap   {{.*}}[[SCRATCH]]
30; CHECK: add    {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
31; CHECK: mov    {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
32; CHECK: andi   {{.*}}[[RESULT]], 15
33; CHECK: ret
34; CHECK: [[END_BB]]:
35; CHECK: ldi    {{.*}}[[RESULT]], 8
36; CHECK: ret
37