blob: 715f88de2af9ded804a8033cab0eab60681bb0e0 [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
7 call void @llvm.arm.neon.vst2lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1)
8 ret void
9}
10
11define void @vst2lanei16(i16* %A, <4 x i16>* %B) nounwind {
12;CHECK: vst2lanei16:
13;CHECK: vst2.16
14 %tmp1 = load <4 x i16>* %B
15 call void @llvm.arm.neon.vst2lane.v4i16(i16* %A, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1)
16 ret void
17}
18
19define void @vst2lanei32(i32* %A, <2 x i32>* %B) nounwind {
20;CHECK: vst2lanei32:
21;CHECK: vst2.32
22 %tmp1 = load <2 x i32>* %B
23 call void @llvm.arm.neon.vst2lane.v2i32(i32* %A, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1)
24 ret void
25}
26
27define void @vst2lanef(float* %A, <2 x float>* %B) nounwind {
28;CHECK: vst2lanef:
29;CHECK: vst2.32
30 %tmp1 = load <2 x float>* %B
31 call void @llvm.arm.neon.vst2lane.v2f32(float* %A, <2 x float> %tmp1, <2 x float> %tmp1, i32 1)
32 ret void
33}
34
Bob Wilsonc5c6edb2009-10-08 23:38:24 +000035define void @vst2laneQi16(i16* %A, <8 x i16>* %B) nounwind {
36;CHECK: vst2laneQi16:
37;CHECK: vst2.16
38 %tmp1 = load <8 x i16>* %B
39 call void @llvm.arm.neon.vst2lane.v8i16(i16* %A, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 1)
40 ret void
41}
42
43define void @vst2laneQi32(i32* %A, <4 x i32>* %B) nounwind {
44;CHECK: vst2laneQi32:
45;CHECK: vst2.32
46 %tmp1 = load <4 x i32>* %B
47 call void @llvm.arm.neon.vst2lane.v4i32(i32* %A, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 2)
48 ret void
49}
50
51define void @vst2laneQf(float* %A, <4 x float>* %B) nounwind {
52;CHECK: vst2laneQf:
53;CHECK: vst2.32
54 %tmp1 = load <4 x float>* %B
55 call void @llvm.arm.neon.vst2lane.v4f32(float* %A, <4 x float> %tmp1, <4 x float> %tmp1, i32 3)
56 ret void
57}
58
Bob Wilson8a3198b2009-09-01 18:51:56 +000059declare void @llvm.arm.neon.vst2lane.v8i8(i8*, <8 x i8>, <8 x i8>, i32) nounwind
60declare void @llvm.arm.neon.vst2lane.v4i16(i8*, <4 x i16>, <4 x i16>, i32) nounwind
61declare void @llvm.arm.neon.vst2lane.v2i32(i8*, <2 x i32>, <2 x i32>, i32) nounwind
62declare void @llvm.arm.neon.vst2lane.v2f32(i8*, <2 x float>, <2 x float>, i32) nounwind
63
Bob Wilsonc5c6edb2009-10-08 23:38:24 +000064declare void @llvm.arm.neon.vst2lane.v8i16(i8*, <8 x i16>, <8 x i16>, i32) nounwind
65declare void @llvm.arm.neon.vst2lane.v4i32(i8*, <4 x i32>, <4 x i32>, i32) nounwind
66declare void @llvm.arm.neon.vst2lane.v4f32(i8*, <4 x float>, <4 x float>, i32) nounwind
67
Bob Wilson8a3198b2009-09-01 18:51:56 +000068define void @vst3lanei8(i8* %A, <8 x i8>* %B) nounwind {
69;CHECK: vst3lanei8:
70;CHECK: vst3.8
71 %tmp1 = load <8 x i8>* %B
72 call void @llvm.arm.neon.vst3lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1)
73 ret void
74}
75
76define void @vst3lanei16(i16* %A, <4 x i16>* %B) nounwind {
77;CHECK: vst3lanei16:
78;CHECK: vst3.16
79 %tmp1 = load <4 x i16>* %B
80 call void @llvm.arm.neon.vst3lane.v4i16(i16* %A, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1)
81 ret void
82}
83
84define void @vst3lanei32(i32* %A, <2 x i32>* %B) nounwind {
85;CHECK: vst3lanei32:
86;CHECK: vst3.32
87 %tmp1 = load <2 x i32>* %B
88 call void @llvm.arm.neon.vst3lane.v2i32(i32* %A, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1)
89 ret void
90}
91
92define void @vst3lanef(float* %A, <2 x float>* %B) nounwind {
93;CHECK: vst3lanef:
94;CHECK: vst3.32
95 %tmp1 = load <2 x float>* %B
96 call void @llvm.arm.neon.vst3lane.v2f32(float* %A, <2 x float> %tmp1, <2 x float> %tmp1, <2 x float> %tmp1, i32 1)
97 ret void
98}
99
100declare void @llvm.arm.neon.vst3lane.v8i8(i8*, <8 x i8>, <8 x i8>, <8 x i8>, i32) nounwind
101declare void @llvm.arm.neon.vst3lane.v4i16(i8*, <4 x i16>, <4 x i16>, <4 x i16>, i32) nounwind
102declare void @llvm.arm.neon.vst3lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, i32) nounwind
103declare void @llvm.arm.neon.vst3lane.v2f32(i8*, <2 x float>, <2 x float>, <2 x float>, i32) nounwind
104
105
106define void @vst4lanei8(i8* %A, <8 x i8>* %B) nounwind {
107;CHECK: vst4lanei8:
108;CHECK: vst4.8
109 %tmp1 = load <8 x i8>* %B
110 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)
111 ret void
112}
113
114define void @vst4lanei16(i16* %A, <4 x i16>* %B) nounwind {
115;CHECK: vst4lanei16:
116;CHECK: vst4.16
117 %tmp1 = load <4 x i16>* %B
118 call void @llvm.arm.neon.vst4lane.v4i16(i16* %A, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1)
119 ret void
120}
121
122define void @vst4lanei32(i32* %A, <2 x i32>* %B) nounwind {
123;CHECK: vst4lanei32:
124;CHECK: vst4.32
125 %tmp1 = load <2 x i32>* %B
126 call void @llvm.arm.neon.vst4lane.v2i32(i32* %A, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1)
127 ret void
128}
129
130define void @vst4lanef(float* %A, <2 x float>* %B) nounwind {
131;CHECK: vst4lanef:
132;CHECK: vst4.32
133 %tmp1 = load <2 x float>* %B
134 call void @llvm.arm.neon.vst4lane.v2f32(float* %A, <2 x float> %tmp1, <2 x float> %tmp1, <2 x float> %tmp1, <2 x float> %tmp1, i32 1)
135 ret void
136}
137
138declare void @llvm.arm.neon.vst4lane.v8i8(i8*, <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i32) nounwind
139declare void @llvm.arm.neon.vst4lane.v4i16(i8*, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i32) nounwind
140declare void @llvm.arm.neon.vst4lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32) nounwind
141declare void @llvm.arm.neon.vst4lane.v2f32(i8*, <2 x float>, <2 x float>, <2 x float>, <2 x float>, i32) nounwind