1; RUN: llc -march=hexagon < %s | FileCheck %s 2 3; CHECK-LABEL: popcount_16 4; CHECK: zxth 5; CHECK: popcount 6define i16 @popcount_16(i16 %p) #0 { 7 %t = call i16 @llvm.ctpop.i16(i16 %p) #0 8 ret i16 %t 9} 10 11; CHECK-LABEL: popcount_32 12; CHECK: popcount 13define i32 @popcount_32(i32 %p) #0 { 14 %t = call i32 @llvm.ctpop.i32(i32 %p) #0 15 ret i32 %t 16} 17 18; CHECK-LABEL: popcount_64 19; CHECK: popcount 20define i64 @popcount_64(i64 %p) #0 { 21 %t = call i64 @llvm.ctpop.i64(i64 %p) #0 22 ret i64 %t 23} 24 25; CHECK-LABEL: ctlz_16 26; CHECK: [[REG0:r[0-9]+]] = zxth 27; CHECK: [[REG1:r[0-9]+]] = cl0([[REG0]]) 28; CHECK: add([[REG1]],#-16) 29define i16 @ctlz_16(i16 %p) #0 { 30 %t = call i16 @llvm.ctlz.i16(i16 %p, i1 true) #0 31 ret i16 %t 32} 33 34; CHECK-LABEL: ctlz_32 35; CHECK: cl0 36define i32 @ctlz_32(i32 %p) #0 { 37 %t = call i32 @llvm.ctlz.i32(i32 %p, i1 true) #0 38 ret i32 %t 39} 40 41; CHECK-LABEL: ctlz_64 42; CHECK: cl0 43define i64 @ctlz_64(i64 %p) #0 { 44 %t = call i64 @llvm.ctlz.i64(i64 %p, i1 true) #0 45 ret i64 %t 46} 47 48; CHECK-LABEL: cttz_16 49; CHECK: ct0 50define i16 @cttz_16(i16 %p) #0 { 51 %t = call i16 @llvm.cttz.i16(i16 %p, i1 true) #0 52 ret i16 %t 53} 54 55; CHECK-LABEL: cttz_32 56; CHECK: ct0 57define i32 @cttz_32(i32 %p) #0 { 58 %t = call i32 @llvm.cttz.i32(i32 %p, i1 true) #0 59 ret i32 %t 60} 61 62; CHECK-LABEL: cttz_64 63; CHECK: ct0 64define i64 @cttz_64(i64 %p) #0 { 65 %t = call i64 @llvm.cttz.i64(i64 %p, i1 true) #0 66 ret i64 %t 67} 68 69; CHECK-LABEL: brev_16 70; CHECK: [[REG:r[0-9]+]] = brev 71; CHECK: lsr([[REG]],#16) 72define i16 @brev_16(i16 %p) #0 { 73 %t = call i16 @llvm.bitreverse.i16(i16 %p) #0 74 ret i16 %t 75} 76 77; CHECK-LABEL: brev_32 78; CHECK: brev 79define i32 @brev_32(i32 %p) #0 { 80 %t = call i32 @llvm.bitreverse.i32(i32 %p) #0 81 ret i32 %t 82} 83 84; CHECK-LABEL: brev_64 85; CHECK: brev 86define i64 @brev_64(i64 %p) #0 { 87 %t = call i64 @llvm.bitreverse.i64(i64 %p) #0 88 ret i64 %t 89} 90 91; CHECK-LABEL: bswap_16 92; CHECK: [[REG:r[0-9]+]] = swiz 93; CHECK: lsr([[REG]],#16) 94define i16 @bswap_16(i16 %p) #0 { 95 %t = call i16 @llvm.bswap.i16(i16 %p) #0 96 ret i16 %t 97} 98 99; CHECK-LABEL: bswap_32 100; CHECK: swiz 101define i32 @bswap_32(i32 %p) #0 { 102 %t = call i32 @llvm.bswap.i32(i32 %p) #0 103 ret i32 %t 104} 105 106; CHECK-LABEL: bswap_64 107; CHECK: swiz 108; CHECK: swiz 109; CHECK: combine 110define i64 @bswap_64(i64 %p) #0 { 111 %t = call i64 @llvm.bswap.i64(i64 %p) #0 112 ret i64 %t 113} 114 115declare i16 @llvm.ctpop.i16(i16) #0 116declare i32 @llvm.ctpop.i32(i32) #0 117declare i64 @llvm.ctpop.i64(i64) #0 118 119declare i16 @llvm.ctlz.i16(i16, i1) #0 120declare i32 @llvm.ctlz.i32(i32, i1) #0 121declare i64 @llvm.ctlz.i64(i64, i1) #0 122 123declare i16 @llvm.cttz.i16(i16, i1) #0 124declare i32 @llvm.cttz.i32(i32, i1) #0 125declare i64 @llvm.cttz.i64(i64, i1) #0 126 127declare i16 @llvm.bitreverse.i16(i16) #0 128declare i32 @llvm.bitreverse.i32(i32) #0 129declare i64 @llvm.bitreverse.i64(i64) #0 130 131declare i16 @llvm.bswap.i16(i16) #0 132declare i32 @llvm.bswap.i32(i32) #0 133declare i64 @llvm.bswap.i64(i64) #0 134 135attributes #0 = { nounwind readnone } 136