AArch64/ARM64: remove AArch64 from tree prior to renaming ARM64.
[oota-llvm.git] / test / CodeGen / ARM64 / vclz.ll
1 ; RUN: llc -march=arm64 -arm64-neon-syntax=apple < %s | FileCheck %s
2
3 define <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
11 define <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
19 define <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
27 define <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
35 define <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
43 define <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
51 define <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
59 define <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
67 define <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
75 define <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
83 define <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
91 define <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
99 declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1) nounwind readnone
100
101 declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1) nounwind readnone
102
103 declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1) nounwind readnone
104
105 declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1) nounwind readnone
106
107 declare <4 x i16> @llvm.ctlz.v4i16(<4 x i16>, i1) nounwind readnone
108
109 declare <8 x i8> @llvm.ctlz.v8i8(<8 x i8>, i1) nounwind readnone