blob: 30ec52ac642099491734a9d784ea4ad75675e26d [file] [log] [blame]
Dan Gohmanfce288f2009-09-09 00:09:15 +00001; RUN: llc < %s -march=arm -mattr=+neon | FileCheck %s
Bob Wilson8a3198b2009-09-01 18:51:56 +00002
3define void @vst2lanei8(i8* %A, <8 x i8>* %B) nounwind {
4;CHECK: vst2lanei8:
5;CHECK: vst2.8
6 %tmp1 = load <8 x i8>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +00007 call void @llvm.arm.neon.vst2lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +00008 ret void
9}
10
11define void @vst2lanei16(i16* %A, <4 x i16>* %B) nounwind {
12;CHECK: vst2lanei16:
13;CHECK: vst2.16
Bob Wilson02170c02010-04-20 00:17:16 +000014 %tmp0 = bitcast i16* %A to i8*
Bob Wilson8a3198b2009-09-01 18:51:56 +000015 %tmp1 = load <4 x i16>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +000016 call void @llvm.arm.neon.vst2lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +000017 ret void
18}
19
20define void @vst2lanei32(i32* %A, <2 x i32>* %B) nounwind {
21;CHECK: vst2lanei32:
22;CHECK: vst2.32
Bob Wilson02170c02010-04-20 00:17:16 +000023 %tmp0 = bitcast i32* %A to i8*
Bob Wilson8a3198b2009-09-01 18:51:56 +000024 %tmp1 = load <2 x i32>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +000025 call void @llvm.arm.neon.vst2lane.v2i32(i8* %tmp0, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +000026 ret void
27}
28
29define void @vst2lanef(float* %A, <2 x float>* %B) nounwind {
30;CHECK: vst2lanef:
31;CHECK: vst2.32
Bob Wilson02170c02010-04-20 00:17:16 +000032 %tmp0 = bitcast float* %A to i8*
Bob Wilson8a3198b2009-09-01 18:51:56 +000033 %tmp1 = load <2 x float>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +000034 call void @llvm.arm.neon.vst2lane.v2f32(i8* %tmp0, <2 x float> %tmp1, <2 x float> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +000035 ret void
36}
37
Bob Wilsonc5c6edb2009-10-08 23:38:24 +000038define void @vst2laneQi16(i16* %A, <8 x i16>* %B) nounwind {
39;CHECK: vst2laneQi16:
40;CHECK: vst2.16
Bob Wilson02170c02010-04-20 00:17:16 +000041 %tmp0 = bitcast i16* %A to i8*
Bob Wilsonc5c6edb2009-10-08 23:38:24 +000042 %tmp1 = load <8 x i16>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +000043 call void @llvm.arm.neon.vst2lane.v8i16(i8* %tmp0, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 1, i32 1)
Bob Wilsonc5c6edb2009-10-08 23:38:24 +000044 ret void
45}
46
47define void @vst2laneQi32(i32* %A, <4 x i32>* %B) nounwind {
48;CHECK: vst2laneQi32:
49;CHECK: vst2.32
Bob Wilson02170c02010-04-20 00:17:16 +000050 %tmp0 = bitcast i32* %A to i8*
Bob Wilsonc5c6edb2009-10-08 23:38:24 +000051 %tmp1 = load <4 x i32>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +000052 call void @llvm.arm.neon.vst2lane.v4i32(i8* %tmp0, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 2, i32 1)
Bob Wilsonc5c6edb2009-10-08 23:38:24 +000053 ret void
54}
55
56define void @vst2laneQf(float* %A, <4 x float>* %B) nounwind {
57;CHECK: vst2laneQf:
58;CHECK: vst2.32
Bob Wilson02170c02010-04-20 00:17:16 +000059 %tmp0 = bitcast float* %A to i8*
Bob Wilsonc5c6edb2009-10-08 23:38:24 +000060 %tmp1 = load <4 x float>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +000061 call void @llvm.arm.neon.vst2lane.v4f32(i8* %tmp0, <4 x float> %tmp1, <4 x float> %tmp1, i32 3, i32 1)
Bob Wilsonc5c6edb2009-10-08 23:38:24 +000062 ret void
63}
64
Bob Wilson7a9ef442010-08-27 17:13:24 +000065declare void @llvm.arm.neon.vst2lane.v8i8(i8*, <8 x i8>, <8 x i8>, i32, i32) nounwind
66declare void @llvm.arm.neon.vst2lane.v4i16(i8*, <4 x i16>, <4 x i16>, i32, i32) nounwind
67declare void @llvm.arm.neon.vst2lane.v2i32(i8*, <2 x i32>, <2 x i32>, i32, i32) nounwind
68declare void @llvm.arm.neon.vst2lane.v2f32(i8*, <2 x float>, <2 x float>, i32, i32) nounwind
Bob Wilson8a3198b2009-09-01 18:51:56 +000069
Bob Wilson7a9ef442010-08-27 17:13:24 +000070declare void @llvm.arm.neon.vst2lane.v8i16(i8*, <8 x i16>, <8 x i16>, i32, i32) nounwind
71declare void @llvm.arm.neon.vst2lane.v4i32(i8*, <4 x i32>, <4 x i32>, i32, i32) nounwind
72declare void @llvm.arm.neon.vst2lane.v4f32(i8*, <4 x float>, <4 x float>, i32, i32) nounwind
Bob Wilsonc5c6edb2009-10-08 23:38:24 +000073
Bob Wilson8a3198b2009-09-01 18:51:56 +000074define void @vst3lanei8(i8* %A, <8 x i8>* %B) nounwind {
75;CHECK: vst3lanei8:
76;CHECK: vst3.8
77 %tmp1 = load <8 x i8>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +000078 call void @llvm.arm.neon.vst3lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +000079 ret void
80}
81
82define void @vst3lanei16(i16* %A, <4 x i16>* %B) nounwind {
83;CHECK: vst3lanei16:
84;CHECK: vst3.16
Bob Wilson02170c02010-04-20 00:17:16 +000085 %tmp0 = bitcast i16* %A to i8*
Bob Wilson8a3198b2009-09-01 18:51:56 +000086 %tmp1 = load <4 x i16>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +000087 call void @llvm.arm.neon.vst3lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +000088 ret void
89}
90
91define void @vst3lanei32(i32* %A, <2 x i32>* %B) nounwind {
92;CHECK: vst3lanei32:
93;CHECK: vst3.32
Bob Wilson02170c02010-04-20 00:17:16 +000094 %tmp0 = bitcast i32* %A to i8*
Bob Wilson8a3198b2009-09-01 18:51:56 +000095 %tmp1 = load <2 x i32>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +000096 call void @llvm.arm.neon.vst3lane.v2i32(i8* %tmp0, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +000097 ret void
98}
99
100define void @vst3lanef(float* %A, <2 x float>* %B) nounwind {
101;CHECK: vst3lanef:
102;CHECK: vst3.32
Bob Wilson02170c02010-04-20 00:17:16 +0000103 %tmp0 = bitcast float* %A to i8*
Bob Wilson8a3198b2009-09-01 18:51:56 +0000104 %tmp1 = load <2 x float>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000105 call void @llvm.arm.neon.vst3lane.v2f32(i8* %tmp0, <2 x float> %tmp1, <2 x float> %tmp1, <2 x float> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +0000106 ret void
107}
108
Bob Wilson8cdb2692009-10-08 23:51:31 +0000109define void @vst3laneQi16(i16* %A, <8 x i16>* %B) nounwind {
110;CHECK: vst3laneQi16:
111;CHECK: vst3.16
Bob Wilson02170c02010-04-20 00:17:16 +0000112 %tmp0 = bitcast i16* %A to i8*
Bob Wilson8cdb2692009-10-08 23:51:31 +0000113 %tmp1 = load <8 x i16>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000114 call void @llvm.arm.neon.vst3lane.v8i16(i8* %tmp0, <8 x i16> %tmp1, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 6, i32 1)
Bob Wilson8cdb2692009-10-08 23:51:31 +0000115 ret void
116}
117
118define void @vst3laneQi32(i32* %A, <4 x i32>* %B) nounwind {
119;CHECK: vst3laneQi32:
120;CHECK: vst3.32
Bob Wilson02170c02010-04-20 00:17:16 +0000121 %tmp0 = bitcast i32* %A to i8*
Bob Wilson8cdb2692009-10-08 23:51:31 +0000122 %tmp1 = load <4 x i32>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000123 call void @llvm.arm.neon.vst3lane.v4i32(i8* %tmp0, <4 x i32> %tmp1, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 0, i32 1)
Bob Wilson8cdb2692009-10-08 23:51:31 +0000124 ret void
125}
126
127define void @vst3laneQf(float* %A, <4 x float>* %B) nounwind {
128;CHECK: vst3laneQf:
129;CHECK: vst3.32
Bob Wilson02170c02010-04-20 00:17:16 +0000130 %tmp0 = bitcast float* %A to i8*
Bob Wilson8cdb2692009-10-08 23:51:31 +0000131 %tmp1 = load <4 x float>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000132 call void @llvm.arm.neon.vst3lane.v4f32(i8* %tmp0, <4 x float> %tmp1, <4 x float> %tmp1, <4 x float> %tmp1, i32 1, i32 1)
Bob Wilson8cdb2692009-10-08 23:51:31 +0000133 ret void
134}
135
Bob Wilson7a9ef442010-08-27 17:13:24 +0000136declare void @llvm.arm.neon.vst3lane.v8i8(i8*, <8 x i8>, <8 x i8>, <8 x i8>, i32, i32) nounwind
137declare void @llvm.arm.neon.vst3lane.v4i16(i8*, <4 x i16>, <4 x i16>, <4 x i16>, i32, i32) nounwind
138declare void @llvm.arm.neon.vst3lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind
139declare void @llvm.arm.neon.vst3lane.v2f32(i8*, <2 x float>, <2 x float>, <2 x float>, i32, i32) nounwind
Bob Wilson8a3198b2009-09-01 18:51:56 +0000140
Bob Wilson7a9ef442010-08-27 17:13:24 +0000141declare void @llvm.arm.neon.vst3lane.v8i16(i8*, <8 x i16>, <8 x i16>, <8 x i16>, i32, i32) nounwind
142declare void @llvm.arm.neon.vst3lane.v4i32(i8*, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) nounwind
143declare void @llvm.arm.neon.vst3lane.v4f32(i8*, <4 x float>, <4 x float>, <4 x float>, i32, i32) nounwind
Bob Wilson8cdb2692009-10-08 23:51:31 +0000144
Bob Wilson8a3198b2009-09-01 18:51:56 +0000145
146define void @vst4lanei8(i8* %A, <8 x i8>* %B) nounwind {
147;CHECK: vst4lanei8:
148;CHECK: vst4.8
149 %tmp1 = load <8 x i8>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000150 call void @llvm.arm.neon.vst4lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +0000151 ret void
152}
153
154define void @vst4lanei16(i16* %A, <4 x i16>* %B) nounwind {
155;CHECK: vst4lanei16:
156;CHECK: vst4.16
Bob Wilson02170c02010-04-20 00:17:16 +0000157 %tmp0 = bitcast i16* %A to i8*
Bob Wilson8a3198b2009-09-01 18:51:56 +0000158 %tmp1 = load <4 x i16>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000159 call void @llvm.arm.neon.vst4lane.v4i16(i8* %tmp0, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +0000160 ret void
161}
162
163define void @vst4lanei32(i32* %A, <2 x i32>* %B) nounwind {
164;CHECK: vst4lanei32:
165;CHECK: vst4.32
Bob Wilson02170c02010-04-20 00:17:16 +0000166 %tmp0 = bitcast i32* %A to i8*
Bob Wilson8a3198b2009-09-01 18:51:56 +0000167 %tmp1 = load <2 x i32>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000168 call void @llvm.arm.neon.vst4lane.v2i32(i8* %tmp0, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +0000169 ret void
170}
171
172define void @vst4lanef(float* %A, <2 x float>* %B) nounwind {
173;CHECK: vst4lanef:
174;CHECK: vst4.32
Bob Wilson02170c02010-04-20 00:17:16 +0000175 %tmp0 = bitcast float* %A to i8*
Bob Wilson8a3198b2009-09-01 18:51:56 +0000176 %tmp1 = load <2 x float>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000177 call void @llvm.arm.neon.vst4lane.v2f32(i8* %tmp0, <2 x float> %tmp1, <2 x float> %tmp1, <2 x float> %tmp1, <2 x float> %tmp1, i32 1, i32 1)
Bob Wilson8a3198b2009-09-01 18:51:56 +0000178 ret void
179}
180
Bob Wilson56311392009-10-09 00:01:36 +0000181define void @vst4laneQi16(i16* %A, <8 x i16>* %B) nounwind {
182;CHECK: vst4laneQi16:
183;CHECK: vst4.16
Bob Wilson02170c02010-04-20 00:17:16 +0000184 %tmp0 = bitcast i16* %A to i8*
Bob Wilson56311392009-10-09 00:01:36 +0000185 %tmp1 = load <8 x i16>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000186 call void @llvm.arm.neon.vst4lane.v8i16(i8* %tmp0, <8 x i16> %tmp1, <8 x i16> %tmp1, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 7, i32 1)
Bob Wilson56311392009-10-09 00:01:36 +0000187 ret void
188}
189
190define void @vst4laneQi32(i32* %A, <4 x i32>* %B) nounwind {
191;CHECK: vst4laneQi32:
192;CHECK: vst4.32
Bob Wilson02170c02010-04-20 00:17:16 +0000193 %tmp0 = bitcast i32* %A to i8*
Bob Wilson56311392009-10-09 00:01:36 +0000194 %tmp1 = load <4 x i32>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000195 call void @llvm.arm.neon.vst4lane.v4i32(i8* %tmp0, <4 x i32> %tmp1, <4 x i32> %tmp1, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 2, i32 1)
Bob Wilson56311392009-10-09 00:01:36 +0000196 ret void
197}
198
199define void @vst4laneQf(float* %A, <4 x float>* %B) nounwind {
200;CHECK: vst4laneQf:
201;CHECK: vst4.32
Bob Wilson02170c02010-04-20 00:17:16 +0000202 %tmp0 = bitcast float* %A to i8*
Bob Wilson56311392009-10-09 00:01:36 +0000203 %tmp1 = load <4 x float>* %B
Bob Wilson7a9ef442010-08-27 17:13:24 +0000204 call void @llvm.arm.neon.vst4lane.v4f32(i8* %tmp0, <4 x float> %tmp1, <4 x float> %tmp1, <4 x float> %tmp1, <4 x float> %tmp1, i32 1, i32 1)
Bob Wilson56311392009-10-09 00:01:36 +0000205 ret void
206}
207
Bob Wilson7a9ef442010-08-27 17:13:24 +0000208declare void @llvm.arm.neon.vst4lane.v8i8(i8*, <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i32, i32) nounwind
209declare void @llvm.arm.neon.vst4lane.v4i16(i8*, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i32, i32) nounwind
210declare void @llvm.arm.neon.vst4lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind
211declare void @llvm.arm.neon.vst4lane.v2f32(i8*, <2 x float>, <2 x float>, <2 x float>, <2 x float>, i32, i32) nounwind
Bob Wilson56311392009-10-09 00:01:36 +0000212
Bob Wilson7a9ef442010-08-27 17:13:24 +0000213declare void @llvm.arm.neon.vst4lane.v8i16(i8*, <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i32, i32) nounwind
214declare void @llvm.arm.neon.vst4lane.v4i32(i8*, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) nounwind
215declare void @llvm.arm.neon.vst4lane.v4f32(i8*, <4 x float>, <4 x float>, <4 x float>, <4 x float>, i32, i32) nounwind