blob: 9f55c24b40291bcf92114f6fb15068a6ac879683 [file] [log] [blame]
Dan Gohmanfce288f2009-09-09 00:09:15 +00001; RUN: llc < %s -march=arm -mattr=+neon | FileCheck %s
Joel Jones06a6a302012-07-13 23:25:25 +00002; NB: this tests vcnt, vclz, and vcls
Bob Wilson5bafff32009-06-22 23:27:02 +00003
4define <8 x i8> @vcnt8(<8 x i8>* %A) nounwind {
Bob Wilsone4696cf2009-08-26 18:11:50 +00005;CHECK: vcnt8:
Joel Jones7c82e6a2012-07-18 00:02:16 +00006;CHECK: vcnt.8 {{d[0-9]+}}, {{d[0-9]+}}
Bob Wilson5bafff32009-06-22 23:27:02 +00007 %tmp1 = load <8 x i8>* %A
Joel Jones7c82e6a2012-07-18 00:02:16 +00008 %tmp2 = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> %tmp1)
Bob Wilson5bafff32009-06-22 23:27:02 +00009 ret <8 x i8> %tmp2
10}
11
12define <16 x i8> @vcntQ8(<16 x i8>* %A) nounwind {
Bob Wilsone4696cf2009-08-26 18:11:50 +000013;CHECK: vcntQ8:
Joel Jones7c82e6a2012-07-18 00:02:16 +000014;CHECK: vcnt.8 {{q[0-9]+}}, {{q[0-9]+}}
Bob Wilson5bafff32009-06-22 23:27:02 +000015 %tmp1 = load <16 x i8>* %A
Joel Jones7c82e6a2012-07-18 00:02:16 +000016 %tmp2 = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %tmp1)
Bob Wilson5bafff32009-06-22 23:27:02 +000017 ret <16 x i8> %tmp2
18}
19
Joel Jones7c82e6a2012-07-18 00:02:16 +000020declare <8 x i8> @llvm.ctpop.v8i8(<8 x i8>) nounwind readnone
21declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>) nounwind readnone
Bob Wilson83815ae2009-10-09 20:20:54 +000022
23define <8 x i8> @vclz8(<8 x i8>* %A) nounwind {
24;CHECK: vclz8:
Joel Jones06a6a302012-07-13 23:25:25 +000025;CHECK: vclz.i8 {{d[0-9]+}}, {{d[0-9]+}}
Bob Wilson83815ae2009-10-09 20:20:54 +000026 %tmp1 = load <8 x i8>* %A
Joel Jones06a6a302012-07-13 23:25:25 +000027 %tmp2 = call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %tmp1, i1 0)
Bob Wilson83815ae2009-10-09 20:20:54 +000028 ret <8 x i8> %tmp2
29}
30
31define <4 x i16> @vclz16(<4 x i16>* %A) nounwind {
32;CHECK: vclz16:
Joel Jones06a6a302012-07-13 23:25:25 +000033;CHECK: vclz.i16 {{d[0-9]+}}, {{d[0-9]+}}
Bob Wilson83815ae2009-10-09 20:20:54 +000034 %tmp1 = load <4 x i16>* %A
Joel Jones06a6a302012-07-13 23:25:25 +000035 %tmp2 = call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %tmp1, i1 0)
Bob Wilson83815ae2009-10-09 20:20:54 +000036 ret <4 x i16> %tmp2
37}
38
39define <2 x i32> @vclz32(<2 x i32>* %A) nounwind {
40;CHECK: vclz32:
Joel Jones06a6a302012-07-13 23:25:25 +000041;CHECK: vclz.i32 {{d[0-9]+}}, {{d[0-9]+}}
Bob Wilson83815ae2009-10-09 20:20:54 +000042 %tmp1 = load <2 x i32>* %A
Joel Jones06a6a302012-07-13 23:25:25 +000043 %tmp2 = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %tmp1, i1 0)
Bob Wilson83815ae2009-10-09 20:20:54 +000044 ret <2 x i32> %tmp2
45}
46
47define <16 x i8> @vclzQ8(<16 x i8>* %A) nounwind {
48;CHECK: vclzQ8:
Joel Jones06a6a302012-07-13 23:25:25 +000049;CHECK: vclz.i8 {{q[0-9]+}}, {{q[0-9]+}}
Bob Wilson83815ae2009-10-09 20:20:54 +000050 %tmp1 = load <16 x i8>* %A
Joel Jones06a6a302012-07-13 23:25:25 +000051 %tmp2 = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %tmp1, i1 0)
Bob Wilson83815ae2009-10-09 20:20:54 +000052 ret <16 x i8> %tmp2
53}
54
55define <8 x i16> @vclzQ16(<8 x i16>* %A) nounwind {
56;CHECK: vclzQ16:
Joel Jones06a6a302012-07-13 23:25:25 +000057;CHECK: vclz.i16 {{q[0-9]+}}, {{q[0-9]+}}
Bob Wilson83815ae2009-10-09 20:20:54 +000058 %tmp1 = load <8 x i16>* %A
Joel Jones06a6a302012-07-13 23:25:25 +000059 %tmp2 = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %tmp1, i1 0)
Bob Wilson83815ae2009-10-09 20:20:54 +000060 ret <8 x i16> %tmp2
61}
62
63define <4 x i32> @vclzQ32(<4 x i32>* %A) nounwind {
64;CHECK: vclzQ32:
Joel Jones06a6a302012-07-13 23:25:25 +000065;CHECK: vclz.i32 {{q[0-9]+}}, {{q[0-9]+}}
Bob Wilson83815ae2009-10-09 20:20:54 +000066 %tmp1 = load <4 x i32>* %A
Joel Jones06a6a302012-07-13 23:25:25 +000067 %tmp2 = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %tmp1, i1 0)
Bob Wilson83815ae2009-10-09 20:20:54 +000068 ret <4 x i32> %tmp2
69}
70
Joel Jones06a6a302012-07-13 23:25:25 +000071declare <8 x i8> @llvm.ctlz.v8i8(<8 x i8>, i1) nounwind readnone
72declare <4 x i16> @llvm.ctlz.v4i16(<4 x i16>, i1) nounwind readnone
73declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1) nounwind readnone
Bob Wilson83815ae2009-10-09 20:20:54 +000074
Joel Jones06a6a302012-07-13 23:25:25 +000075declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1) nounwind readnone
76declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1) nounwind readnone
77declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1) nounwind readnone
Bob Wilson83815ae2009-10-09 20:20:54 +000078
79define <8 x i8> @vclss8(<8 x i8>* %A) nounwind {
80;CHECK: vclss8:
81;CHECK: vcls.s8
82 %tmp1 = load <8 x i8>* %A
83 %tmp2 = call <8 x i8> @llvm.arm.neon.vcls.v8i8(<8 x i8> %tmp1)
84 ret <8 x i8> %tmp2
85}
86
87define <4 x i16> @vclss16(<4 x i16>* %A) nounwind {
88;CHECK: vclss16:
89;CHECK: vcls.s16
90 %tmp1 = load <4 x i16>* %A
91 %tmp2 = call <4 x i16> @llvm.arm.neon.vcls.v4i16(<4 x i16> %tmp1)
92 ret <4 x i16> %tmp2
93}
94
95define <2 x i32> @vclss32(<2 x i32>* %A) nounwind {
96;CHECK: vclss32:
97;CHECK: vcls.s32
98 %tmp1 = load <2 x i32>* %A
99 %tmp2 = call <2 x i32> @llvm.arm.neon.vcls.v2i32(<2 x i32> %tmp1)
100 ret <2 x i32> %tmp2
101}
102
103define <16 x i8> @vclsQs8(<16 x i8>* %A) nounwind {
104;CHECK: vclsQs8:
105;CHECK: vcls.s8
106 %tmp1 = load <16 x i8>* %A
107 %tmp2 = call <16 x i8> @llvm.arm.neon.vcls.v16i8(<16 x i8> %tmp1)
108 ret <16 x i8> %tmp2
109}
110
111define <8 x i16> @vclsQs16(<8 x i16>* %A) nounwind {
112;CHECK: vclsQs16:
113;CHECK: vcls.s16
114 %tmp1 = load <8 x i16>* %A
115 %tmp2 = call <8 x i16> @llvm.arm.neon.vcls.v8i16(<8 x i16> %tmp1)
116 ret <8 x i16> %tmp2
117}
118
119define <4 x i32> @vclsQs32(<4 x i32>* %A) nounwind {
120;CHECK: vclsQs32:
121;CHECK: vcls.s32
122 %tmp1 = load <4 x i32>* %A
123 %tmp2 = call <4 x i32> @llvm.arm.neon.vcls.v4i32(<4 x i32> %tmp1)
124 ret <4 x i32> %tmp2
125}
126
127declare <8 x i8> @llvm.arm.neon.vcls.v8i8(<8 x i8>) nounwind readnone
128declare <4 x i16> @llvm.arm.neon.vcls.v4i16(<4 x i16>) nounwind readnone
129declare <2 x i32> @llvm.arm.neon.vcls.v2i32(<2 x i32>) nounwind readnone
130
131declare <16 x i8> @llvm.arm.neon.vcls.v16i8(<16 x i8>) nounwind readnone
132declare <8 x i16> @llvm.arm.neon.vcls.v8i16(<8 x i16>) nounwind readnone
133declare <4 x i32> @llvm.arm.neon.vcls.v4i32(<4 x i32>) nounwind readnone