• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s
2
3define i32 @cnt32_advsimd(i32 %x) nounwind readnone {
4  %cnt = tail call i32 @llvm.ctpop.i32(i32 %x)
5  ret i32 %cnt
6; CHECK: fmov	s0, w0
7; CHECK: cnt.8b	v0, v0
8; CHECK: uaddlv.8b	h0, v0
9; CHECK: fmov w0, s0
10; CHECK: ret
11}
12
13define i64 @cnt64_advsimd(i64 %x) nounwind readnone {
14  %cnt = tail call i64 @llvm.ctpop.i64(i64 %x)
15  ret i64 %cnt
16; CHECK: fmov	d0, x0
17; CHECK: cnt.8b	v0, v0
18; CHECK: uaddlv.8b	h0, v0
19; CHECK: fmov	w0, s0
20; CHECK: ret
21}
22
23; Do not use AdvSIMD when -mno-implicit-float is specified.
24; rdar://9473858
25
26define i32 @cnt32(i32 %x) nounwind readnone noimplicitfloat {
27  %cnt = tail call i32 @llvm.ctpop.i32(i32 %x)
28  ret i32 %cnt
29; CHECK-LABEL: cnt32:
30; CHECK-NOT 16b
31; CHECK: ret
32}
33
34define i64 @cnt64(i64 %x) nounwind readnone noimplicitfloat {
35  %cnt = tail call i64 @llvm.ctpop.i64(i64 %x)
36  ret i64 %cnt
37; CHECK-LABEL: cnt64:
38; CHECK-NOT 16b
39; CHECK: ret
40}
41
42declare i32 @llvm.ctpop.i32(i32) nounwind readnone
43declare i64 @llvm.ctpop.i64(i64) nounwind readnone
44