blob: 02d36954f5264f97a8f22550d7281f5a574414a9 [file] [log] [blame]
Dylan McKay9701c422016-11-16 22:38:43 +00001; RUN: llc < %s -march=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
Dylan McKay9cf1dc12017-07-11 04:17:13 +000013; CHECK: breq [[END_BB:LBB[0-9]+_[0-9]+]]
Dylan McKay9701c422016-11-16 22:38:43 +000014; 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: lsr {{.*}}[[SCRATCH]]
30; CHECK: lsr {{.*}}[[SCRATCH]]
31; CHECK: lsr {{.*}}[[SCRATCH]]
32; CHECK: lsr {{.*}}[[SCRATCH]]
33; CHECK: add {{.*}}[[SCRATCH]], {{.*}}[[RESULT]]
34; CHECK: andi {{.*}}[[SCRATCH]], 15
35; CHECK: mov {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
36; CHECK: ret
Dylan McKay9cf1dc12017-07-11 04:17:13 +000037; CHECK: [[END_BB]]:
Dylan McKay9701c422016-11-16 22:38:43 +000038; CHECK: ldi {{.*}}[[SCRATCH]], 8
39; CHECK: mov {{.*}}[[RESULT]], {{.*}}[[SCRATCH]]
40; CHECK: ret