1 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple | FileCheck %s
2 ; RUN: llc < %s -global-isel -global-isel-abort=2 -pass-remarks-missed=gisel* -mtriple=arm64-eabi -aarch64-neon-syntax=apple | FileCheck %s
4 ; FALLBACK-NOT: remark{{.*}}test_vclz_u8
5 define <8 x i8> @test_vclz_u8(<8 x i8> %a) nounwind readnone ssp {
6 ; CHECK-LABEL: test_vclz_u8:
9 %vclz.i = tail call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) nounwind
13 ; FALLBACK-NOT: remark{{.*}}test_vclz_s8
14 define <8 x i8> @test_vclz_s8(<8 x i8> %a) nounwind readnone ssp {
15 ; CHECK-LABEL: test_vclz_s8:
16 ; CHECK: clz.8b v0, v0
18 %vclz.i = tail call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) nounwind
22 ; FALLBACK-NOT: remark{{.*}}test_vclz_u16
23 define <4 x i16> @test_vclz_u16(<4 x i16> %a) nounwind readnone ssp {
24 ; CHECK-LABEL: test_vclz_u16:
25 ; CHECK: clz.4h v0, v0
27 %vclz1.i = tail call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %a, i1 false) nounwind
28 ret <4 x i16> %vclz1.i
31 ; FALLBACK-NOT: remark{{.*}}test_vclz_s16
32 define <4 x i16> @test_vclz_s16(<4 x i16> %a) nounwind readnone ssp {
33 ; CHECK-LABEL: test_vclz_s16:
34 ; CHECK: clz.4h v0, v0
36 %vclz1.i = tail call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %a, i1 false) nounwind
37 ret <4 x i16> %vclz1.i
40 ; FALLBACK-NOT: remark{{.*}}test_vclz_u32
41 define <2 x i32> @test_vclz_u32(<2 x i32> %a) nounwind readnone ssp {
42 ; CHECK-LABEL: test_vclz_u32:
43 ; CHECK: clz.2s v0, v0
45 %vclz1.i = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false) nounwind
46 ret <2 x i32> %vclz1.i
49 ; FALLBACK-NOT: remark{{.*}}test_vclz_s32
50 define <2 x i32> @test_vclz_s32(<2 x i32> %a) nounwind readnone ssp {
51 ; CHECK-LABEL: test_vclz_s32:
52 ; CHECK: clz.2s v0, v0
54 %vclz1.i = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false) nounwind
55 ret <2 x i32> %vclz1.i
58 ; FALLBACK-NOT: remark{{.*}}test_vclz_u64
59 define <1 x i64> @test_vclz_u64(<1 x i64> %a) nounwind readnone ssp {
60 ; CHECK-LABEL: test_vclz_u64:
61 %vclz1.i = tail call <1 x i64> @llvm.ctlz.v1i64(<1 x i64> %a, i1 false) nounwind
62 ret <1 x i64> %vclz1.i
65 ; FALLBACK-NOT: remark{{.*}}test_vclz_s64
66 define <1 x i64> @test_vclz_s64(<1 x i64> %a) nounwind readnone ssp {
67 ; CHECK-LABEL: test_vclz_s64:
68 %vclz1.i = tail call <1 x i64> @llvm.ctlz.v1i64(<1 x i64> %a, i1 false) nounwind
69 ret <1 x i64> %vclz1.i
72 ; FALLBACK-NOT: remark{{.*}}test_vclzq_u8
73 define <16 x i8> @test_vclzq_u8(<16 x i8> %a) nounwind readnone ssp {
74 ; CHECK-LABEL: test_vclzq_u8:
75 ; CHECK: clz.16b v0, v0
77 %vclz.i = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) nounwind
81 ; FALLBACK-NOT: remark{{.*}}test_vclzq_s8
82 define <16 x i8> @test_vclzq_s8(<16 x i8> %a) nounwind readnone ssp {
83 ; CHECK-LABEL: test_vclzq_s8:
84 ; CHECK: clz.16b v0, v0
86 %vclz.i = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) nounwind
90 ; FALLBACK-NOT: remark{{.*}}test_vclzq_u16
91 define <8 x i16> @test_vclzq_u16(<8 x i16> %a) nounwind readnone ssp {
92 ; CHECK-LABEL: test_vclzq_u16:
93 ; CHECK: clz.8h v0, v0
95 %vclz1.i = tail call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false) nounwind
96 ret <8 x i16> %vclz1.i
99 ; FALLBACK-NOT: remark{{.*}}test_vclzq_s16
100 define <8 x i16> @test_vclzq_s16(<8 x i16> %a) nounwind readnone ssp {
101 ; CHECK-LABEL: test_vclzq_s16:
102 ; CHECK: clz.8h v0, v0
104 %vclz1.i = tail call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false) nounwind
105 ret <8 x i16> %vclz1.i
108 ; FALLBACK-NOT: remark{{.*}}test_vclzq_u32
109 define <4 x i32> @test_vclzq_u32(<4 x i32> %a) nounwind readnone ssp {
110 ; CHECK-LABEL: test_vclzq_u32:
111 ; CHECK: clz.4s v0, v0
113 %vclz1.i = tail call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false) nounwind
114 ret <4 x i32> %vclz1.i
117 ; FALLBACK-NOT: remark{{.*}}test_vclzq_s32
118 define <4 x i32> @test_vclzq_s32(<4 x i32> %a) nounwind readnone ssp {
119 ; CHECK-LABEL: test_vclzq_s32:
120 ; CHECK: clz.4s v0, v0
122 %vclz1.i = tail call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false) nounwind
123 ret <4 x i32> %vclz1.i
126 ; FALLBACK-NOT: remark{{.*}}test_vclzq_u64
127 define <2 x i64> @test_vclzq_u64(<2 x i64> %a) nounwind readnone ssp {
128 ; CHECK-LABEL: test_vclzq_u64:
129 %vclz1.i = tail call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false) nounwind
130 ret <2 x i64> %vclz1.i
133 ; FALLBACK-NOT: remark{{.*}}test_vclzq_s64
134 define <2 x i64> @test_vclzq_s64(<2 x i64> %a) nounwind readnone ssp {
135 ; CHECK-LABEL: test_vclzq_s64:
136 %vclz1.i = tail call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false) nounwind
137 ret <2 x i64> %vclz1.i
140 declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1) nounwind readnone
142 declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1) nounwind readnone
144 declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1) nounwind readnone
146 declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1) nounwind readnone
148 declare <1 x i64> @llvm.ctlz.v1i64(<1 x i64>, i1) nounwind readnone
150 declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1) nounwind readnone
152 declare <4 x i16> @llvm.ctlz.v4i16(<4 x i16>, i1) nounwind readnone
154 declare <8 x i8> @llvm.ctlz.v8i8(<8 x i8>, i1) nounwind readnone