12d08f2ebSKrzysztof Parzyszek; RUN: llc -march=hexagon < %s | FileCheck %s 22d08f2ebSKrzysztof Parzyszek 32d08f2ebSKrzysztof Parzyszek; CHECK: count_leading_0: 42d08f2ebSKrzysztof Parzyszek; CHECK: cl0(r0) 52d08f2ebSKrzysztof Parzyszekdefine i32 @count_leading_0(i32 %p) #0 { 62d08f2ebSKrzysztof Parzyszek %1 = call i32 @llvm.ctlz.i32(i32 %p, i1 false) 72d08f2ebSKrzysztof Parzyszek ret i32 %1 82d08f2ebSKrzysztof Parzyszek} 92d08f2ebSKrzysztof Parzyszek 102d08f2ebSKrzysztof Parzyszek; CHECK: count_leading_0p: 112d08f2ebSKrzysztof Parzyszek; CHECK: cl0(r1:0) 122d08f2ebSKrzysztof Parzyszekdefine i32 @count_leading_0p(i64 %p) #0 { 132d08f2ebSKrzysztof Parzyszek %1 = call i64 @llvm.ctlz.i64(i64 %p, i1 false) 142d08f2ebSKrzysztof Parzyszek %2 = trunc i64 %1 to i32 152d08f2ebSKrzysztof Parzyszek ret i32 %2 162d08f2ebSKrzysztof Parzyszek} 172d08f2ebSKrzysztof Parzyszek 182d08f2ebSKrzysztof Parzyszek; CHECK: count_leading_1: 192d08f2ebSKrzysztof Parzyszek; CHECK: cl1(r0) 202d08f2ebSKrzysztof Parzyszekdefine i32 @count_leading_1(i32 %p) #0 { 212d08f2ebSKrzysztof Parzyszek %1 = xor i32 %p, -1 222d08f2ebSKrzysztof Parzyszek %2 = call i32 @llvm.ctlz.i32(i32 %1, i1 false) 232d08f2ebSKrzysztof Parzyszek ret i32 %2 242d08f2ebSKrzysztof Parzyszek} 252d08f2ebSKrzysztof Parzyszek 262d08f2ebSKrzysztof Parzyszek; CHECK: count_leading_1p: 272d08f2ebSKrzysztof Parzyszek; CHECK: cl1(r1:0) 282d08f2ebSKrzysztof Parzyszekdefine i32 @count_leading_1p(i64 %p) #0 { 292d08f2ebSKrzysztof Parzyszek %1 = xor i64 %p, -1 302d08f2ebSKrzysztof Parzyszek %2 = call i64 @llvm.ctlz.i64(i64 %1, i1 false) 312d08f2ebSKrzysztof Parzyszek %3 = trunc i64 %2 to i32 322d08f2ebSKrzysztof Parzyszek ret i32 %3 332d08f2ebSKrzysztof Parzyszek} 342d08f2ebSKrzysztof Parzyszek 352d08f2ebSKrzysztof Parzyszek 362d08f2ebSKrzysztof Parzyszek 372d08f2ebSKrzysztof Parzyszek; CHECK: count_trailing_0: 382d08f2ebSKrzysztof Parzyszek; CHECK: ct0(r0) 392d08f2ebSKrzysztof Parzyszekdefine i32 @count_trailing_0(i32 %p) #0 { 402d08f2ebSKrzysztof Parzyszek %1 = call i32 @llvm.cttz.i32(i32 %p, i1 false) 412d08f2ebSKrzysztof Parzyszek ret i32 %1 422d08f2ebSKrzysztof Parzyszek} 432d08f2ebSKrzysztof Parzyszek 442d08f2ebSKrzysztof Parzyszek; CHECK: count_trailing_0p: 452d08f2ebSKrzysztof Parzyszek; CHECK: ct0(r1:0) 462d08f2ebSKrzysztof Parzyszekdefine i32 @count_trailing_0p(i64 %p) #0 { 472d08f2ebSKrzysztof Parzyszek %1 = call i64 @llvm.cttz.i64(i64 %p, i1 false) 482d08f2ebSKrzysztof Parzyszek %2 = trunc i64 %1 to i32 492d08f2ebSKrzysztof Parzyszek ret i32 %2 502d08f2ebSKrzysztof Parzyszek} 512d08f2ebSKrzysztof Parzyszek 522d08f2ebSKrzysztof Parzyszek; CHECK: count_trailing_1: 532d08f2ebSKrzysztof Parzyszek; CHECK: ct1(r0) 542d08f2ebSKrzysztof Parzyszekdefine i32 @count_trailing_1(i32 %p) #0 { 552d08f2ebSKrzysztof Parzyszek %1 = xor i32 %p, -1 562d08f2ebSKrzysztof Parzyszek %2 = call i32 @llvm.cttz.i32(i32 %1, i1 false) 572d08f2ebSKrzysztof Parzyszek ret i32 %2 582d08f2ebSKrzysztof Parzyszek} 592d08f2ebSKrzysztof Parzyszek 602d08f2ebSKrzysztof Parzyszek; CHECK: count_trailing_1p: 612d08f2ebSKrzysztof Parzyszek; CHECK: ct1(r1:0) 622d08f2ebSKrzysztof Parzyszekdefine i32 @count_trailing_1p(i64 %p) #0 { 632d08f2ebSKrzysztof Parzyszek %1 = xor i64 %p, -1 642d08f2ebSKrzysztof Parzyszek %2 = call i64 @llvm.cttz.i64(i64 %1, i1 false) 652d08f2ebSKrzysztof Parzyszek %3 = trunc i64 %2 to i32 662d08f2ebSKrzysztof Parzyszek ret i32 %3 672d08f2ebSKrzysztof Parzyszek} 682d08f2ebSKrzysztof Parzyszek 692d08f2ebSKrzysztof Parzyszekdeclare i32 @llvm.ctlz.i32(i32, i1) 702d08f2ebSKrzysztof Parzyszekdeclare i64 @llvm.ctlz.i64(i64, i1) 712d08f2ebSKrzysztof Parzyszekdeclare i32 @llvm.cttz.i32(i32, i1) 722d08f2ebSKrzysztof Parzyszekdeclare i64 @llvm.cttz.i64(i64, i1) 732d08f2ebSKrzysztof Parzyszek 74*36ca823fSKrzysztof Parzyszekattributes #0 = { nounwind "target-cpu"="hexagonv55" } 752d08f2ebSKrzysztof Parzyszek 76