1; RUN: llc -march=arm64 -aarch64-neon-syntax=apple < %s | FileCheck %s
2
3define <8 x i8> @test_vclz_u8(<8 x i8> %a) nounwind readnone ssp {
4  ; CHECK-LABEL: test_vclz_u8:
5  ; CHECK: clz.8b v0, v0
6  ; CHECK-NEXT: ret
7  %vclz.i = tail call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) nounwind
8  ret <8 x i8> %vclz.i
9}
10
11define <8 x i8> @test_vclz_s8(<8 x i8> %a) nounwind readnone ssp {
12  ; CHECK-LABEL: test_vclz_s8:
13  ; CHECK: clz.8b v0, v0
14  ; CHECK-NEXT: ret
15  %vclz.i = tail call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) nounwind
16  ret <8 x i8> %vclz.i
17}
18
19define <4 x i16> @test_vclz_u16(<4 x i16> %a) nounwind readnone ssp {
20  ; CHECK-LABEL: test_vclz_u16:
21  ; CHECK: clz.4h v0, v0
22  ; CHECK-NEXT: ret
23  %vclz1.i = tail call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %a, i1 false) nounwind
24  ret <4 x i16> %vclz1.i
25}
26
27define <4 x i16> @test_vclz_s16(<4 x i16> %a) nounwind readnone ssp {
28  ; CHECK-LABEL: test_vclz_s16:
29  ; CHECK: clz.4h v0, v0
30  ; CHECK-NEXT: ret
31  %vclz1.i = tail call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %a, i1 false) nounwind
32  ret <4 x i16> %vclz1.i
33}
34
35define <2 x i32> @test_vclz_u32(<2 x i32> %a) nounwind readnone ssp {
36  ; CHECK-LABEL: test_vclz_u32:
37  ; CHECK: clz.2s v0, v0
38  ; CHECK-NEXT: ret
39  %vclz1.i = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false) nounwind
40  ret <2 x i32> %vclz1.i
41}
42
43define <2 x i32> @test_vclz_s32(<2 x i32> %a) nounwind readnone ssp {
44  ; CHECK-LABEL: test_vclz_s32:
45  ; CHECK: clz.2s v0, v0
46  ; CHECK-NEXT: ret
47  %vclz1.i = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false) nounwind
48  ret <2 x i32> %vclz1.i
49}
50
51define <16 x i8> @test_vclzq_u8(<16 x i8> %a) nounwind readnone ssp {
52  ; CHECK-LABEL: test_vclzq_u8:
53  ; CHECK: clz.16b v0, v0
54  ; CHECK-NEXT: ret
55  %vclz.i = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) nounwind
56  ret <16 x i8> %vclz.i
57}
58
59define <16 x i8> @test_vclzq_s8(<16 x i8> %a) nounwind readnone ssp {
60  ; CHECK-LABEL: test_vclzq_s8:
61  ; CHECK: clz.16b v0, v0
62  ; CHECK-NEXT: ret
63  %vclz.i = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) nounwind
64  ret <16 x i8> %vclz.i
65}
66
67define <8 x i16> @test_vclzq_u16(<8 x i16> %a) nounwind readnone ssp {
68  ; CHECK-LABEL: test_vclzq_u16:
69  ; CHECK: clz.8h v0, v0
70  ; CHECK-NEXT: ret
71  %vclz1.i = tail call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false) nounwind
72  ret <8 x i16> %vclz1.i
73}
74
75define <8 x i16> @test_vclzq_s16(<8 x i16> %a) nounwind readnone ssp {
76  ; CHECK-LABEL: test_vclzq_s16:
77  ; CHECK: clz.8h v0, v0
78  ; CHECK-NEXT: ret
79  %vclz1.i = tail call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false) nounwind
80  ret <8 x i16> %vclz1.i
81}
82
83define <4 x i32> @test_vclzq_u32(<4 x i32> %a) nounwind readnone ssp {
84  ; CHECK-LABEL: test_vclzq_u32:
85  ; CHECK: clz.4s v0, v0
86  ; CHECK-NEXT: ret
87  %vclz1.i = tail call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false) nounwind
88  ret <4 x i32> %vclz1.i
89}
90
91define <4 x i32> @test_vclzq_s32(<4 x i32> %a) nounwind readnone ssp {
92  ; CHECK-LABEL: test_vclzq_s32:
93  ; CHECK: clz.4s v0, v0
94  ; CHECK-NEXT: ret
95  %vclz1.i = tail call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false) nounwind
96  ret <4 x i32> %vclz1.i
97}
98
99declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1) nounwind readnone
100
101declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1) nounwind readnone
102
103declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1) nounwind readnone
104
105declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1) nounwind readnone
106
107declare <4 x i16> @llvm.ctlz.v4i16(<4 x i16>, i1) nounwind readnone
108
109declare <8 x i8> @llvm.ctlz.v8i8(<8 x i8>, i1) nounwind readnone
110