76 lines · plain
1; RUN: llc -mtriple=hexagon < %s | FileCheck %s2 3; CHECK: count_leading_0:4; CHECK: cl0(r0)5define i32 @count_leading_0(i32 %p) #0 {6 %1 = call i32 @llvm.ctlz.i32(i32 %p, i1 false)7 ret i32 %18}9 10; CHECK: count_leading_0p:11; CHECK: cl0(r1:0)12define i32 @count_leading_0p(i64 %p) #0 {13 %1 = call i64 @llvm.ctlz.i64(i64 %p, i1 false)14 %2 = trunc i64 %1 to i3215 ret i32 %216}17 18; CHECK: count_leading_1:19; CHECK: cl1(r0)20define i32 @count_leading_1(i32 %p) #0 {21 %1 = xor i32 %p, -122 %2 = call i32 @llvm.ctlz.i32(i32 %1, i1 false)23 ret i32 %224}25 26; CHECK: count_leading_1p:27; CHECK: cl1(r1:0)28define i32 @count_leading_1p(i64 %p) #0 {29 %1 = xor i64 %p, -130 %2 = call i64 @llvm.ctlz.i64(i64 %1, i1 false)31 %3 = trunc i64 %2 to i3232 ret i32 %333}34 35 36 37; CHECK: count_trailing_0:38; CHECK: ct0(r0)39define i32 @count_trailing_0(i32 %p) #0 {40 %1 = call i32 @llvm.cttz.i32(i32 %p, i1 false)41 ret i32 %142}43 44; CHECK: count_trailing_0p:45; CHECK: ct0(r1:0)46define i32 @count_trailing_0p(i64 %p) #0 {47 %1 = call i64 @llvm.cttz.i64(i64 %p, i1 false)48 %2 = trunc i64 %1 to i3249 ret i32 %250}51 52; CHECK: count_trailing_1:53; CHECK: ct1(r0)54define i32 @count_trailing_1(i32 %p) #0 {55 %1 = xor i32 %p, -156 %2 = call i32 @llvm.cttz.i32(i32 %1, i1 false)57 ret i32 %258}59 60; CHECK: count_trailing_1p:61; CHECK: ct1(r1:0)62define i32 @count_trailing_1p(i64 %p) #0 {63 %1 = xor i64 %p, -164 %2 = call i64 @llvm.cttz.i64(i64 %1, i1 false)65 %3 = trunc i64 %2 to i3266 ret i32 %367}68 69declare i32 @llvm.ctlz.i32(i32, i1)70declare i64 @llvm.ctlz.i64(i64, i1)71declare i32 @llvm.cttz.i32(i32, i1)72declare i64 @llvm.cttz.i64(i64, i1)73 74attributes #0 = { nounwind "target-cpu"="hexagonv55" }75 76