Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AArch64 / arm64-vclz.ll
blob38c0572e23f8901d2aa4a6ad7ce9b37d700e337c
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:
7   ; CHECK: clz.8b v0, v0
8   ; CHECK-NEXT: ret
9   %vclz.i = tail call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) nounwind
10   ret <8 x i8> %vclz.i
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
17   ; CHECK-NEXT: ret
18   %vclz.i = tail call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) nounwind
19   ret <8 x i8> %vclz.i
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
26   ; CHECK-NEXT: ret
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
35   ; CHECK-NEXT: ret
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
44   ; CHECK-NEXT: ret
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
53   ; CHECK-NEXT: ret
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
76   ; CHECK-NEXT: ret
77   %vclz.i = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) nounwind
78   ret <16 x i8> %vclz.i
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
85   ; CHECK-NEXT: ret
86   %vclz.i = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) nounwind
87   ret <16 x i8> %vclz.i
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
94   ; CHECK-NEXT: ret
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
103   ; CHECK-NEXT: ret
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
112   ; CHECK-NEXT: ret
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
121   ; CHECK-NEXT: ret
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