xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-vclz.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=arm64 -aarch64-neon-syntax=apple < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vclz_u8(<8 x i8> %a) nounwind readnone ssp {
4*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclz_u8:
5*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.8b v0, v0
6*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
7*9880d681SAndroid Build Coastguard Worker  %vclz.i = tail call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) nounwind
8*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %vclz.i
9*9880d681SAndroid Build Coastguard Worker}
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vclz_s8(<8 x i8> %a) nounwind readnone ssp {
12*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclz_s8:
13*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.8b v0, v0
14*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
15*9880d681SAndroid Build Coastguard Worker  %vclz.i = tail call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) nounwind
16*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %vclz.i
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vclz_u16(<4 x i16> %a) nounwind readnone ssp {
20*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclz_u16:
21*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.4h v0, v0
22*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
23*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %a, i1 false) nounwind
24*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vclz1.i
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vclz_s16(<4 x i16> %a) nounwind readnone ssp {
28*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclz_s16:
29*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.4h v0, v0
30*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
31*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %a, i1 false) nounwind
32*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vclz1.i
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vclz_u32(<2 x i32> %a) nounwind readnone ssp {
36*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclz_u32:
37*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.2s v0, v0
38*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
39*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false) nounwind
40*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vclz1.i
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vclz_s32(<2 x i32> %a) nounwind readnone ssp {
44*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclz_s32:
45*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.2s v0, v0
46*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
47*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false) nounwind
48*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vclz1.i
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vclz_u64(<1 x i64> %a) nounwind readnone ssp {
52*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclz_u64:
53*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <1 x i64> @llvm.ctlz.v1i64(<1 x i64> %a, i1 false) nounwind
54*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %vclz1.i
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vclz_s64(<1 x i64> %a) nounwind readnone ssp {
58*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclz_s64:
59*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <1 x i64> @llvm.ctlz.v1i64(<1 x i64> %a, i1 false) nounwind
60*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %vclz1.i
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vclzq_u8(<16 x i8> %a) nounwind readnone ssp {
64*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclzq_u8:
65*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.16b v0, v0
66*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
67*9880d681SAndroid Build Coastguard Worker  %vclz.i = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) nounwind
68*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vclz.i
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vclzq_s8(<16 x i8> %a) nounwind readnone ssp {
72*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclzq_s8:
73*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.16b v0, v0
74*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
75*9880d681SAndroid Build Coastguard Worker  %vclz.i = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) nounwind
76*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vclz.i
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vclzq_u16(<8 x i16> %a) nounwind readnone ssp {
80*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclzq_u16:
81*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.8h v0, v0
82*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
83*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false) nounwind
84*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vclz1.i
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vclzq_s16(<8 x i16> %a) nounwind readnone ssp {
88*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclzq_s16:
89*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.8h v0, v0
90*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
91*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false) nounwind
92*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vclz1.i
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vclzq_u32(<4 x i32> %a) nounwind readnone ssp {
96*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclzq_u32:
97*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.4s v0, v0
98*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
99*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false) nounwind
100*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vclz1.i
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vclzq_s32(<4 x i32> %a) nounwind readnone ssp {
104*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclzq_s32:
105*9880d681SAndroid Build Coastguard Worker  ; CHECK: clz.4s v0, v0
106*9880d681SAndroid Build Coastguard Worker  ; CHECK-NEXT: ret
107*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false) nounwind
108*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vclz1.i
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vclzq_u64(<2 x i64> %a) nounwind readnone ssp {
112*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclzq_u64:
113*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false) nounwind
114*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vclz1.i
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vclzq_s64(<2 x i64> %a) nounwind readnone ssp {
118*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test_vclzq_s64:
119*9880d681SAndroid Build Coastguard Worker  %vclz1.i = tail call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false) nounwind
120*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vclz1.i
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1) nounwind readnone
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1) nounwind readnone
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1) nounwind readnone
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1) nounwind readnone
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Workerdeclare <1 x i64> @llvm.ctlz.v1i64(<1 x i64>, i1) nounwind readnone
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1) nounwind readnone
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.ctlz.v4i16(<4 x i16>, i1) nounwind readnone
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.ctlz.v8i8(<8 x i8>, i1) nounwind readnone
138