blob: 9e7ec3fd9a315cf62a4415561bc4ebe6fa4d46ce [file] [log] [blame]
Tim Northover3b0846e2014-05-24 12:50:23 +00001; RUN: llc -mtriple=arm64-apple-ios7.0 -o - %s | FileCheck %s
2
3@ptr = global i8* null
4
5define <8 x i8> @test_v8i8_pre_load(<8 x i8>* %addr) {
6; CHECK-LABEL: test_v8i8_pre_load:
7; CHECK: ldr d0, [x0, #40]!
David Blaikie79e6c742015-02-27 19:29:02 +00008 %newaddr = getelementptr <8 x i8>, <8 x i8>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +00009 %val = load <8 x i8>, <8 x i8>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +000010 store <8 x i8>* %newaddr, <8 x i8>** bitcast(i8** @ptr to <8 x i8>**)
11 ret <8 x i8> %val
12}
13
14define <8 x i8> @test_v8i8_post_load(<8 x i8>* %addr) {
15; CHECK-LABEL: test_v8i8_post_load:
16; CHECK: ldr d0, [x0], #40
David Blaikie79e6c742015-02-27 19:29:02 +000017 %newaddr = getelementptr <8 x i8>, <8 x i8>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +000018 %val = load <8 x i8>, <8 x i8>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +000019 store <8 x i8>* %newaddr, <8 x i8>** bitcast(i8** @ptr to <8 x i8>**)
20 ret <8 x i8> %val
21}
22
23define void @test_v8i8_pre_store(<8 x i8> %in, <8 x i8>* %addr) {
24; CHECK-LABEL: test_v8i8_pre_store:
25; CHECK: str d0, [x0, #40]!
David Blaikie79e6c742015-02-27 19:29:02 +000026 %newaddr = getelementptr <8 x i8>, <8 x i8>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +000027 store <8 x i8> %in, <8 x i8>* %newaddr, align 8
28 store <8 x i8>* %newaddr, <8 x i8>** bitcast(i8** @ptr to <8 x i8>**)
29 ret void
30}
31
32define void @test_v8i8_post_store(<8 x i8> %in, <8 x i8>* %addr) {
33; CHECK-LABEL: test_v8i8_post_store:
34; CHECK: str d0, [x0], #40
David Blaikie79e6c742015-02-27 19:29:02 +000035 %newaddr = getelementptr <8 x i8>, <8 x i8>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +000036 store <8 x i8> %in, <8 x i8>* %addr, align 8
37 store <8 x i8>* %newaddr, <8 x i8>** bitcast(i8** @ptr to <8 x i8>**)
38 ret void
39}
40
41define <4 x i16> @test_v4i16_pre_load(<4 x i16>* %addr) {
42; CHECK-LABEL: test_v4i16_pre_load:
43; CHECK: ldr d0, [x0, #40]!
David Blaikie79e6c742015-02-27 19:29:02 +000044 %newaddr = getelementptr <4 x i16>, <4 x i16>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +000045 %val = load <4 x i16>, <4 x i16>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +000046 store <4 x i16>* %newaddr, <4 x i16>** bitcast(i8** @ptr to <4 x i16>**)
47 ret <4 x i16> %val
48}
49
50define <4 x i16> @test_v4i16_post_load(<4 x i16>* %addr) {
51; CHECK-LABEL: test_v4i16_post_load:
52; CHECK: ldr d0, [x0], #40
David Blaikie79e6c742015-02-27 19:29:02 +000053 %newaddr = getelementptr <4 x i16>, <4 x i16>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +000054 %val = load <4 x i16>, <4 x i16>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +000055 store <4 x i16>* %newaddr, <4 x i16>** bitcast(i8** @ptr to <4 x i16>**)
56 ret <4 x i16> %val
57}
58
59define void @test_v4i16_pre_store(<4 x i16> %in, <4 x i16>* %addr) {
60; CHECK-LABEL: test_v4i16_pre_store:
61; CHECK: str d0, [x0, #40]!
David Blaikie79e6c742015-02-27 19:29:02 +000062 %newaddr = getelementptr <4 x i16>, <4 x i16>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +000063 store <4 x i16> %in, <4 x i16>* %newaddr, align 8
64 store <4 x i16>* %newaddr, <4 x i16>** bitcast(i8** @ptr to <4 x i16>**)
65 ret void
66}
67
68define void @test_v4i16_post_store(<4 x i16> %in, <4 x i16>* %addr) {
69; CHECK-LABEL: test_v4i16_post_store:
70; CHECK: str d0, [x0], #40
David Blaikie79e6c742015-02-27 19:29:02 +000071 %newaddr = getelementptr <4 x i16>, <4 x i16>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +000072 store <4 x i16> %in, <4 x i16>* %addr, align 8
73 store <4 x i16>* %newaddr, <4 x i16>** bitcast(i8** @ptr to <4 x i16>**)
74 ret void
75}
76
77define <2 x i32> @test_v2i32_pre_load(<2 x i32>* %addr) {
78; CHECK-LABEL: test_v2i32_pre_load:
79; CHECK: ldr d0, [x0, #40]!
David Blaikie79e6c742015-02-27 19:29:02 +000080 %newaddr = getelementptr <2 x i32>, <2 x i32>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +000081 %val = load <2 x i32>, <2 x i32>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +000082 store <2 x i32>* %newaddr, <2 x i32>** bitcast(i8** @ptr to <2 x i32>**)
83 ret <2 x i32> %val
84}
85
86define <2 x i32> @test_v2i32_post_load(<2 x i32>* %addr) {
87; CHECK-LABEL: test_v2i32_post_load:
88; CHECK: ldr d0, [x0], #40
David Blaikie79e6c742015-02-27 19:29:02 +000089 %newaddr = getelementptr <2 x i32>, <2 x i32>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +000090 %val = load <2 x i32>, <2 x i32>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +000091 store <2 x i32>* %newaddr, <2 x i32>** bitcast(i8** @ptr to <2 x i32>**)
92 ret <2 x i32> %val
93}
94
95define void @test_v2i32_pre_store(<2 x i32> %in, <2 x i32>* %addr) {
96; CHECK-LABEL: test_v2i32_pre_store:
97; CHECK: str d0, [x0, #40]!
David Blaikie79e6c742015-02-27 19:29:02 +000098 %newaddr = getelementptr <2 x i32>, <2 x i32>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +000099 store <2 x i32> %in, <2 x i32>* %newaddr, align 8
100 store <2 x i32>* %newaddr, <2 x i32>** bitcast(i8** @ptr to <2 x i32>**)
101 ret void
102}
103
104define void @test_v2i32_post_store(<2 x i32> %in, <2 x i32>* %addr) {
105; CHECK-LABEL: test_v2i32_post_store:
106; CHECK: str d0, [x0], #40
David Blaikie79e6c742015-02-27 19:29:02 +0000107 %newaddr = getelementptr <2 x i32>, <2 x i32>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000108 store <2 x i32> %in, <2 x i32>* %addr, align 8
109 store <2 x i32>* %newaddr, <2 x i32>** bitcast(i8** @ptr to <2 x i32>**)
110 ret void
111}
112
113define <2 x float> @test_v2f32_pre_load(<2 x float>* %addr) {
114; CHECK-LABEL: test_v2f32_pre_load:
115; CHECK: ldr d0, [x0, #40]!
David Blaikie79e6c742015-02-27 19:29:02 +0000116 %newaddr = getelementptr <2 x float>, <2 x float>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000117 %val = load <2 x float>, <2 x float>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000118 store <2 x float>* %newaddr, <2 x float>** bitcast(i8** @ptr to <2 x float>**)
119 ret <2 x float> %val
120}
121
122define <2 x float> @test_v2f32_post_load(<2 x float>* %addr) {
123; CHECK-LABEL: test_v2f32_post_load:
124; CHECK: ldr d0, [x0], #40
David Blaikie79e6c742015-02-27 19:29:02 +0000125 %newaddr = getelementptr <2 x float>, <2 x float>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000126 %val = load <2 x float>, <2 x float>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000127 store <2 x float>* %newaddr, <2 x float>** bitcast(i8** @ptr to <2 x float>**)
128 ret <2 x float> %val
129}
130
131define void @test_v2f32_pre_store(<2 x float> %in, <2 x float>* %addr) {
132; CHECK-LABEL: test_v2f32_pre_store:
133; CHECK: str d0, [x0, #40]!
David Blaikie79e6c742015-02-27 19:29:02 +0000134 %newaddr = getelementptr <2 x float>, <2 x float>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000135 store <2 x float> %in, <2 x float>* %newaddr, align 8
136 store <2 x float>* %newaddr, <2 x float>** bitcast(i8** @ptr to <2 x float>**)
137 ret void
138}
139
140define void @test_v2f32_post_store(<2 x float> %in, <2 x float>* %addr) {
141; CHECK-LABEL: test_v2f32_post_store:
142; CHECK: str d0, [x0], #40
David Blaikie79e6c742015-02-27 19:29:02 +0000143 %newaddr = getelementptr <2 x float>, <2 x float>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000144 store <2 x float> %in, <2 x float>* %addr, align 8
145 store <2 x float>* %newaddr, <2 x float>** bitcast(i8** @ptr to <2 x float>**)
146 ret void
147}
148
149define <1 x i64> @test_v1i64_pre_load(<1 x i64>* %addr) {
150; CHECK-LABEL: test_v1i64_pre_load:
151; CHECK: ldr d0, [x0, #40]!
David Blaikie79e6c742015-02-27 19:29:02 +0000152 %newaddr = getelementptr <1 x i64>, <1 x i64>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000153 %val = load <1 x i64>, <1 x i64>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000154 store <1 x i64>* %newaddr, <1 x i64>** bitcast(i8** @ptr to <1 x i64>**)
155 ret <1 x i64> %val
156}
157
158define <1 x i64> @test_v1i64_post_load(<1 x i64>* %addr) {
159; CHECK-LABEL: test_v1i64_post_load:
160; CHECK: ldr d0, [x0], #40
David Blaikie79e6c742015-02-27 19:29:02 +0000161 %newaddr = getelementptr <1 x i64>, <1 x i64>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000162 %val = load <1 x i64>, <1 x i64>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000163 store <1 x i64>* %newaddr, <1 x i64>** bitcast(i8** @ptr to <1 x i64>**)
164 ret <1 x i64> %val
165}
166
167define void @test_v1i64_pre_store(<1 x i64> %in, <1 x i64>* %addr) {
168; CHECK-LABEL: test_v1i64_pre_store:
169; CHECK: str d0, [x0, #40]!
David Blaikie79e6c742015-02-27 19:29:02 +0000170 %newaddr = getelementptr <1 x i64>, <1 x i64>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000171 store <1 x i64> %in, <1 x i64>* %newaddr, align 8
172 store <1 x i64>* %newaddr, <1 x i64>** bitcast(i8** @ptr to <1 x i64>**)
173 ret void
174}
175
176define void @test_v1i64_post_store(<1 x i64> %in, <1 x i64>* %addr) {
177; CHECK-LABEL: test_v1i64_post_store:
178; CHECK: str d0, [x0], #40
David Blaikie79e6c742015-02-27 19:29:02 +0000179 %newaddr = getelementptr <1 x i64>, <1 x i64>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000180 store <1 x i64> %in, <1 x i64>* %addr, align 8
181 store <1 x i64>* %newaddr, <1 x i64>** bitcast(i8** @ptr to <1 x i64>**)
182 ret void
183}
184
185define <16 x i8> @test_v16i8_pre_load(<16 x i8>* %addr) {
186; CHECK-LABEL: test_v16i8_pre_load:
187; CHECK: ldr q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000188 %newaddr = getelementptr <16 x i8>, <16 x i8>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000189 %val = load <16 x i8>, <16 x i8>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000190 store <16 x i8>* %newaddr, <16 x i8>** bitcast(i8** @ptr to <16 x i8>**)
191 ret <16 x i8> %val
192}
193
194define <16 x i8> @test_v16i8_post_load(<16 x i8>* %addr) {
195; CHECK-LABEL: test_v16i8_post_load:
196; CHECK: ldr q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000197 %newaddr = getelementptr <16 x i8>, <16 x i8>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000198 %val = load <16 x i8>, <16 x i8>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000199 store <16 x i8>* %newaddr, <16 x i8>** bitcast(i8** @ptr to <16 x i8>**)
200 ret <16 x i8> %val
201}
202
203define void @test_v16i8_pre_store(<16 x i8> %in, <16 x i8>* %addr) {
204; CHECK-LABEL: test_v16i8_pre_store:
205; CHECK: str q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000206 %newaddr = getelementptr <16 x i8>, <16 x i8>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000207 store <16 x i8> %in, <16 x i8>* %newaddr, align 8
208 store <16 x i8>* %newaddr, <16 x i8>** bitcast(i8** @ptr to <16 x i8>**)
209 ret void
210}
211
212define void @test_v16i8_post_store(<16 x i8> %in, <16 x i8>* %addr) {
213; CHECK-LABEL: test_v16i8_post_store:
214; CHECK: str q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000215 %newaddr = getelementptr <16 x i8>, <16 x i8>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000216 store <16 x i8> %in, <16 x i8>* %addr, align 8
217 store <16 x i8>* %newaddr, <16 x i8>** bitcast(i8** @ptr to <16 x i8>**)
218 ret void
219}
220
221define <8 x i16> @test_v8i16_pre_load(<8 x i16>* %addr) {
222; CHECK-LABEL: test_v8i16_pre_load:
223; CHECK: ldr q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000224 %newaddr = getelementptr <8 x i16>, <8 x i16>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000225 %val = load <8 x i16>, <8 x i16>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000226 store <8 x i16>* %newaddr, <8 x i16>** bitcast(i8** @ptr to <8 x i16>**)
227 ret <8 x i16> %val
228}
229
230define <8 x i16> @test_v8i16_post_load(<8 x i16>* %addr) {
231; CHECK-LABEL: test_v8i16_post_load:
232; CHECK: ldr q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000233 %newaddr = getelementptr <8 x i16>, <8 x i16>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000234 %val = load <8 x i16>, <8 x i16>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000235 store <8 x i16>* %newaddr, <8 x i16>** bitcast(i8** @ptr to <8 x i16>**)
236 ret <8 x i16> %val
237}
238
239define void @test_v8i16_pre_store(<8 x i16> %in, <8 x i16>* %addr) {
240; CHECK-LABEL: test_v8i16_pre_store:
241; CHECK: str q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000242 %newaddr = getelementptr <8 x i16>, <8 x i16>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000243 store <8 x i16> %in, <8 x i16>* %newaddr, align 8
244 store <8 x i16>* %newaddr, <8 x i16>** bitcast(i8** @ptr to <8 x i16>**)
245 ret void
246}
247
248define void @test_v8i16_post_store(<8 x i16> %in, <8 x i16>* %addr) {
249; CHECK-LABEL: test_v8i16_post_store:
250; CHECK: str q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000251 %newaddr = getelementptr <8 x i16>, <8 x i16>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000252 store <8 x i16> %in, <8 x i16>* %addr, align 8
253 store <8 x i16>* %newaddr, <8 x i16>** bitcast(i8** @ptr to <8 x i16>**)
254 ret void
255}
256
257define <4 x i32> @test_v4i32_pre_load(<4 x i32>* %addr) {
258; CHECK-LABEL: test_v4i32_pre_load:
259; CHECK: ldr q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000260 %newaddr = getelementptr <4 x i32>, <4 x i32>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000261 %val = load <4 x i32>, <4 x i32>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000262 store <4 x i32>* %newaddr, <4 x i32>** bitcast(i8** @ptr to <4 x i32>**)
263 ret <4 x i32> %val
264}
265
266define <4 x i32> @test_v4i32_post_load(<4 x i32>* %addr) {
267; CHECK-LABEL: test_v4i32_post_load:
268; CHECK: ldr q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000269 %newaddr = getelementptr <4 x i32>, <4 x i32>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000270 %val = load <4 x i32>, <4 x i32>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000271 store <4 x i32>* %newaddr, <4 x i32>** bitcast(i8** @ptr to <4 x i32>**)
272 ret <4 x i32> %val
273}
274
275define void @test_v4i32_pre_store(<4 x i32> %in, <4 x i32>* %addr) {
276; CHECK-LABEL: test_v4i32_pre_store:
277; CHECK: str q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000278 %newaddr = getelementptr <4 x i32>, <4 x i32>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000279 store <4 x i32> %in, <4 x i32>* %newaddr, align 8
280 store <4 x i32>* %newaddr, <4 x i32>** bitcast(i8** @ptr to <4 x i32>**)
281 ret void
282}
283
284define void @test_v4i32_post_store(<4 x i32> %in, <4 x i32>* %addr) {
285; CHECK-LABEL: test_v4i32_post_store:
286; CHECK: str q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000287 %newaddr = getelementptr <4 x i32>, <4 x i32>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000288 store <4 x i32> %in, <4 x i32>* %addr, align 8
289 store <4 x i32>* %newaddr, <4 x i32>** bitcast(i8** @ptr to <4 x i32>**)
290 ret void
291}
292
293
294define <4 x float> @test_v4f32_pre_load(<4 x float>* %addr) {
295; CHECK-LABEL: test_v4f32_pre_load:
296; CHECK: ldr q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000297 %newaddr = getelementptr <4 x float>, <4 x float>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000298 %val = load <4 x float>, <4 x float>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000299 store <4 x float>* %newaddr, <4 x float>** bitcast(i8** @ptr to <4 x float>**)
300 ret <4 x float> %val
301}
302
303define <4 x float> @test_v4f32_post_load(<4 x float>* %addr) {
304; CHECK-LABEL: test_v4f32_post_load:
305; CHECK: ldr q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000306 %newaddr = getelementptr <4 x float>, <4 x float>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000307 %val = load <4 x float>, <4 x float>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000308 store <4 x float>* %newaddr, <4 x float>** bitcast(i8** @ptr to <4 x float>**)
309 ret <4 x float> %val
310}
311
312define void @test_v4f32_pre_store(<4 x float> %in, <4 x float>* %addr) {
313; CHECK-LABEL: test_v4f32_pre_store:
314; CHECK: str q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000315 %newaddr = getelementptr <4 x float>, <4 x float>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000316 store <4 x float> %in, <4 x float>* %newaddr, align 8
317 store <4 x float>* %newaddr, <4 x float>** bitcast(i8** @ptr to <4 x float>**)
318 ret void
319}
320
321define void @test_v4f32_post_store(<4 x float> %in, <4 x float>* %addr) {
322; CHECK-LABEL: test_v4f32_post_store:
323; CHECK: str q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000324 %newaddr = getelementptr <4 x float>, <4 x float>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000325 store <4 x float> %in, <4 x float>* %addr, align 8
326 store <4 x float>* %newaddr, <4 x float>** bitcast(i8** @ptr to <4 x float>**)
327 ret void
328}
329
330
331define <2 x i64> @test_v2i64_pre_load(<2 x i64>* %addr) {
332; CHECK-LABEL: test_v2i64_pre_load:
333; CHECK: ldr q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000334 %newaddr = getelementptr <2 x i64>, <2 x i64>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000335 %val = load <2 x i64>, <2 x i64>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000336 store <2 x i64>* %newaddr, <2 x i64>** bitcast(i8** @ptr to <2 x i64>**)
337 ret <2 x i64> %val
338}
339
340define <2 x i64> @test_v2i64_post_load(<2 x i64>* %addr) {
341; CHECK-LABEL: test_v2i64_post_load:
342; CHECK: ldr q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000343 %newaddr = getelementptr <2 x i64>, <2 x i64>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000344 %val = load <2 x i64>, <2 x i64>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000345 store <2 x i64>* %newaddr, <2 x i64>** bitcast(i8** @ptr to <2 x i64>**)
346 ret <2 x i64> %val
347}
348
349define void @test_v2i64_pre_store(<2 x i64> %in, <2 x i64>* %addr) {
350; CHECK-LABEL: test_v2i64_pre_store:
351; CHECK: str q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000352 %newaddr = getelementptr <2 x i64>, <2 x i64>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000353 store <2 x i64> %in, <2 x i64>* %newaddr, align 8
354 store <2 x i64>* %newaddr, <2 x i64>** bitcast(i8** @ptr to <2 x i64>**)
355 ret void
356}
357
358define void @test_v2i64_post_store(<2 x i64> %in, <2 x i64>* %addr) {
359; CHECK-LABEL: test_v2i64_post_store:
360; CHECK: str q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000361 %newaddr = getelementptr <2 x i64>, <2 x i64>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000362 store <2 x i64> %in, <2 x i64>* %addr, align 8
363 store <2 x i64>* %newaddr, <2 x i64>** bitcast(i8** @ptr to <2 x i64>**)
364 ret void
365}
366
367
368define <2 x double> @test_v2f64_pre_load(<2 x double>* %addr) {
369; CHECK-LABEL: test_v2f64_pre_load:
370; CHECK: ldr q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000371 %newaddr = getelementptr <2 x double>, <2 x double>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000372 %val = load <2 x double>, <2 x double>* %newaddr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000373 store <2 x double>* %newaddr, <2 x double>** bitcast(i8** @ptr to <2 x double>**)
374 ret <2 x double> %val
375}
376
377define <2 x double> @test_v2f64_post_load(<2 x double>* %addr) {
378; CHECK-LABEL: test_v2f64_post_load:
379; CHECK: ldr q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000380 %newaddr = getelementptr <2 x double>, <2 x double>* %addr, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000381 %val = load <2 x double>, <2 x double>* %addr, align 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000382 store <2 x double>* %newaddr, <2 x double>** bitcast(i8** @ptr to <2 x double>**)
383 ret <2 x double> %val
384}
385
386define void @test_v2f64_pre_store(<2 x double> %in, <2 x double>* %addr) {
387; CHECK-LABEL: test_v2f64_pre_store:
388; CHECK: str q0, [x0, #80]!
David Blaikie79e6c742015-02-27 19:29:02 +0000389 %newaddr = getelementptr <2 x double>, <2 x double>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000390 store <2 x double> %in, <2 x double>* %newaddr, align 8
391 store <2 x double>* %newaddr, <2 x double>** bitcast(i8** @ptr to <2 x double>**)
392 ret void
393}
394
395define void @test_v2f64_post_store(<2 x double> %in, <2 x double>* %addr) {
396; CHECK-LABEL: test_v2f64_post_store:
397; CHECK: str q0, [x0], #80
David Blaikie79e6c742015-02-27 19:29:02 +0000398 %newaddr = getelementptr <2 x double>, <2 x double>* %addr, i32 5
Tim Northover3b0846e2014-05-24 12:50:23 +0000399 store <2 x double> %in, <2 x double>* %addr, align 8
400 store <2 x double>* %newaddr, <2 x double>** bitcast(i8** @ptr to <2 x double>**)
401 ret void
402}
403
404define i8* @test_v16i8_post_imm_st1_lane(<16 x i8> %in, i8* %addr) {
405; CHECK-LABEL: test_v16i8_post_imm_st1_lane:
406; CHECK: st1.b { v0 }[3], [x0], #1
407 %elt = extractelement <16 x i8> %in, i32 3
408 store i8 %elt, i8* %addr
409
David Blaikie79e6c742015-02-27 19:29:02 +0000410 %newaddr = getelementptr i8, i8* %addr, i32 1
Tim Northover3b0846e2014-05-24 12:50:23 +0000411 ret i8* %newaddr
412}
413
414define i8* @test_v16i8_post_reg_st1_lane(<16 x i8> %in, i8* %addr) {
415; CHECK-LABEL: test_v16i8_post_reg_st1_lane:
416; CHECK: orr w[[OFFSET:[0-9]+]], wzr, #0x2
417; CHECK: st1.b { v0 }[3], [x0], x[[OFFSET]]
418 %elt = extractelement <16 x i8> %in, i32 3
419 store i8 %elt, i8* %addr
420
David Blaikie79e6c742015-02-27 19:29:02 +0000421 %newaddr = getelementptr i8, i8* %addr, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000422 ret i8* %newaddr
423}
424
425
426define i16* @test_v8i16_post_imm_st1_lane(<8 x i16> %in, i16* %addr) {
427; CHECK-LABEL: test_v8i16_post_imm_st1_lane:
428; CHECK: st1.h { v0 }[3], [x0], #2
429 %elt = extractelement <8 x i16> %in, i32 3
430 store i16 %elt, i16* %addr
431
David Blaikie79e6c742015-02-27 19:29:02 +0000432 %newaddr = getelementptr i16, i16* %addr, i32 1
Tim Northover3b0846e2014-05-24 12:50:23 +0000433 ret i16* %newaddr
434}
435
436define i16* @test_v8i16_post_reg_st1_lane(<8 x i16> %in, i16* %addr) {
437; CHECK-LABEL: test_v8i16_post_reg_st1_lane:
438; CHECK: orr w[[OFFSET:[0-9]+]], wzr, #0x4
439; CHECK: st1.h { v0 }[3], [x0], x[[OFFSET]]
440 %elt = extractelement <8 x i16> %in, i32 3
441 store i16 %elt, i16* %addr
442
David Blaikie79e6c742015-02-27 19:29:02 +0000443 %newaddr = getelementptr i16, i16* %addr, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000444 ret i16* %newaddr
445}
446
447define i32* @test_v4i32_post_imm_st1_lane(<4 x i32> %in, i32* %addr) {
448; CHECK-LABEL: test_v4i32_post_imm_st1_lane:
449; CHECK: st1.s { v0 }[3], [x0], #4
450 %elt = extractelement <4 x i32> %in, i32 3
451 store i32 %elt, i32* %addr
452
David Blaikie79e6c742015-02-27 19:29:02 +0000453 %newaddr = getelementptr i32, i32* %addr, i32 1
Tim Northover3b0846e2014-05-24 12:50:23 +0000454 ret i32* %newaddr
455}
456
457define i32* @test_v4i32_post_reg_st1_lane(<4 x i32> %in, i32* %addr) {
458; CHECK-LABEL: test_v4i32_post_reg_st1_lane:
459; CHECK: orr w[[OFFSET:[0-9]+]], wzr, #0x8
460; CHECK: st1.s { v0 }[3], [x0], x[[OFFSET]]
461 %elt = extractelement <4 x i32> %in, i32 3
462 store i32 %elt, i32* %addr
463
David Blaikie79e6c742015-02-27 19:29:02 +0000464 %newaddr = getelementptr i32, i32* %addr, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000465 ret i32* %newaddr
466}
467
468define float* @test_v4f32_post_imm_st1_lane(<4 x float> %in, float* %addr) {
469; CHECK-LABEL: test_v4f32_post_imm_st1_lane:
470; CHECK: st1.s { v0 }[3], [x0], #4
471 %elt = extractelement <4 x float> %in, i32 3
472 store float %elt, float* %addr
473
David Blaikie79e6c742015-02-27 19:29:02 +0000474 %newaddr = getelementptr float, float* %addr, i32 1
Tim Northover3b0846e2014-05-24 12:50:23 +0000475 ret float* %newaddr
476}
477
478define float* @test_v4f32_post_reg_st1_lane(<4 x float> %in, float* %addr) {
479; CHECK-LABEL: test_v4f32_post_reg_st1_lane:
480; CHECK: orr w[[OFFSET:[0-9]+]], wzr, #0x8
481; CHECK: st1.s { v0 }[3], [x0], x[[OFFSET]]
482 %elt = extractelement <4 x float> %in, i32 3
483 store float %elt, float* %addr
484
David Blaikie79e6c742015-02-27 19:29:02 +0000485 %newaddr = getelementptr float, float* %addr, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000486 ret float* %newaddr
487}
488
489define i64* @test_v2i64_post_imm_st1_lane(<2 x i64> %in, i64* %addr) {
490; CHECK-LABEL: test_v2i64_post_imm_st1_lane:
491; CHECK: st1.d { v0 }[1], [x0], #8
492 %elt = extractelement <2 x i64> %in, i64 1
493 store i64 %elt, i64* %addr
494
David Blaikie79e6c742015-02-27 19:29:02 +0000495 %newaddr = getelementptr i64, i64* %addr, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +0000496 ret i64* %newaddr
497}
498
499define i64* @test_v2i64_post_reg_st1_lane(<2 x i64> %in, i64* %addr) {
500; CHECK-LABEL: test_v2i64_post_reg_st1_lane:
501; CHECK: orr w[[OFFSET:[0-9]+]], wzr, #0x10
502; CHECK: st1.d { v0 }[1], [x0], x[[OFFSET]]
503 %elt = extractelement <2 x i64> %in, i64 1
504 store i64 %elt, i64* %addr
505
David Blaikie79e6c742015-02-27 19:29:02 +0000506 %newaddr = getelementptr i64, i64* %addr, i64 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000507 ret i64* %newaddr
508}
509
510define double* @test_v2f64_post_imm_st1_lane(<2 x double> %in, double* %addr) {
511; CHECK-LABEL: test_v2f64_post_imm_st1_lane:
512; CHECK: st1.d { v0 }[1], [x0], #8
513 %elt = extractelement <2 x double> %in, i32 1
514 store double %elt, double* %addr
515
David Blaikie79e6c742015-02-27 19:29:02 +0000516 %newaddr = getelementptr double, double* %addr, i32 1
Tim Northover3b0846e2014-05-24 12:50:23 +0000517 ret double* %newaddr
518}
519
520define double* @test_v2f64_post_reg_st1_lane(<2 x double> %in, double* %addr) {
521; CHECK-LABEL: test_v2f64_post_reg_st1_lane:
522; CHECK: orr w[[OFFSET:[0-9]+]], wzr, #0x10
523; CHECK: st1.d { v0 }[1], [x0], x[[OFFSET]]
524 %elt = extractelement <2 x double> %in, i32 1
525 store double %elt, double* %addr
526
David Blaikie79e6c742015-02-27 19:29:02 +0000527 %newaddr = getelementptr double, double* %addr, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000528 ret double* %newaddr
529}
530
531define i8* @test_v8i8_post_imm_st1_lane(<8 x i8> %in, i8* %addr) {
532; CHECK-LABEL: test_v8i8_post_imm_st1_lane:
533; CHECK: st1.b { v0 }[3], [x0], #1
534 %elt = extractelement <8 x i8> %in, i32 3
535 store i8 %elt, i8* %addr
536
David Blaikie79e6c742015-02-27 19:29:02 +0000537 %newaddr = getelementptr i8, i8* %addr, i32 1
Tim Northover3b0846e2014-05-24 12:50:23 +0000538 ret i8* %newaddr
539}
540
541define i8* @test_v8i8_post_reg_st1_lane(<8 x i8> %in, i8* %addr) {
542; CHECK-LABEL: test_v8i8_post_reg_st1_lane:
543; CHECK: orr w[[OFFSET:[0-9]+]], wzr, #0x2
544; CHECK: st1.b { v0 }[3], [x0], x[[OFFSET]]
545 %elt = extractelement <8 x i8> %in, i32 3
546 store i8 %elt, i8* %addr
547
David Blaikie79e6c742015-02-27 19:29:02 +0000548 %newaddr = getelementptr i8, i8* %addr, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000549 ret i8* %newaddr
550}
551
552define i16* @test_v4i16_post_imm_st1_lane(<4 x i16> %in, i16* %addr) {
553; CHECK-LABEL: test_v4i16_post_imm_st1_lane:
554; CHECK: st1.h { v0 }[3], [x0], #2
555 %elt = extractelement <4 x i16> %in, i32 3
556 store i16 %elt, i16* %addr
557
David Blaikie79e6c742015-02-27 19:29:02 +0000558 %newaddr = getelementptr i16, i16* %addr, i32 1
Tim Northover3b0846e2014-05-24 12:50:23 +0000559 ret i16* %newaddr
560}
561
562define i16* @test_v4i16_post_reg_st1_lane(<4 x i16> %in, i16* %addr) {
563; CHECK-LABEL: test_v4i16_post_reg_st1_lane:
564; CHECK: orr w[[OFFSET:[0-9]+]], wzr, #0x4
565; CHECK: st1.h { v0 }[3], [x0], x[[OFFSET]]
566 %elt = extractelement <4 x i16> %in, i32 3
567 store i16 %elt, i16* %addr
568
David Blaikie79e6c742015-02-27 19:29:02 +0000569 %newaddr = getelementptr i16, i16* %addr, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000570 ret i16* %newaddr
571}
572
573define i32* @test_v2i32_post_imm_st1_lane(<2 x i32> %in, i32* %addr) {
574; CHECK-LABEL: test_v2i32_post_imm_st1_lane:
575; CHECK: st1.s { v0 }[1], [x0], #4
576 %elt = extractelement <2 x i32> %in, i32 1
577 store i32 %elt, i32* %addr
578
David Blaikie79e6c742015-02-27 19:29:02 +0000579 %newaddr = getelementptr i32, i32* %addr, i32 1
Tim Northover3b0846e2014-05-24 12:50:23 +0000580 ret i32* %newaddr
581}
582
583define i32* @test_v2i32_post_reg_st1_lane(<2 x i32> %in, i32* %addr) {
584; CHECK-LABEL: test_v2i32_post_reg_st1_lane:
585; CHECK: orr w[[OFFSET:[0-9]+]], wzr, #0x8
586; CHECK: st1.s { v0 }[1], [x0], x[[OFFSET]]
587 %elt = extractelement <2 x i32> %in, i32 1
588 store i32 %elt, i32* %addr
589
David Blaikie79e6c742015-02-27 19:29:02 +0000590 %newaddr = getelementptr i32, i32* %addr, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000591 ret i32* %newaddr
592}
593
594define float* @test_v2f32_post_imm_st1_lane(<2 x float> %in, float* %addr) {
595; CHECK-LABEL: test_v2f32_post_imm_st1_lane:
596; CHECK: st1.s { v0 }[1], [x0], #4
597 %elt = extractelement <2 x float> %in, i32 1
598 store float %elt, float* %addr
599
David Blaikie79e6c742015-02-27 19:29:02 +0000600 %newaddr = getelementptr float, float* %addr, i32 1
Tim Northover3b0846e2014-05-24 12:50:23 +0000601 ret float* %newaddr
602}
603
604define float* @test_v2f32_post_reg_st1_lane(<2 x float> %in, float* %addr) {
605; CHECK-LABEL: test_v2f32_post_reg_st1_lane:
606; CHECK: orr w[[OFFSET:[0-9]+]], wzr, #0x8
607; CHECK: st1.s { v0 }[1], [x0], x[[OFFSET]]
608 %elt = extractelement <2 x float> %in, i32 1
609 store float %elt, float* %addr
610
David Blaikie79e6c742015-02-27 19:29:02 +0000611 %newaddr = getelementptr float, float* %addr, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000612 ret float* %newaddr
613}
614
615define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld2(i8* %A, i8** %ptr) {
616;CHECK-LABEL: test_v16i8_post_imm_ld2:
617;CHECK: ld2.16b { v0, v1 }, [x0], #32
618 %ld2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000619 %tmp = getelementptr i8, i8* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +0000620 store i8* %tmp, i8** %ptr
621 ret { <16 x i8>, <16 x i8> } %ld2
622}
623
624define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld2(i8* %A, i8** %ptr, i64 %inc) {
625;CHECK-LABEL: test_v16i8_post_reg_ld2:
626;CHECK: ld2.16b { v0, v1 }, [x0], x{{[0-9]+}}
627 %ld2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000628 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000629 store i8* %tmp, i8** %ptr
630 ret { <16 x i8>, <16 x i8> } %ld2
631}
632
633declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0i8(i8*)
634
635
636define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld2(i8* %A, i8** %ptr) {
637;CHECK-LABEL: test_v8i8_post_imm_ld2:
638;CHECK: ld2.8b { v0, v1 }, [x0], #16
639 %ld2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000640 %tmp = getelementptr i8, i8* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +0000641 store i8* %tmp, i8** %ptr
642 ret { <8 x i8>, <8 x i8> } %ld2
643}
644
645define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld2(i8* %A, i8** %ptr, i64 %inc) {
646;CHECK-LABEL: test_v8i8_post_reg_ld2:
647;CHECK: ld2.8b { v0, v1 }, [x0], x{{[0-9]+}}
648 %ld2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000649 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000650 store i8* %tmp, i8** %ptr
651 ret { <8 x i8>, <8 x i8> } %ld2
652}
653
654declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0i8(i8*)
655
656
657define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld2(i16* %A, i16** %ptr) {
658;CHECK-LABEL: test_v8i16_post_imm_ld2:
659;CHECK: ld2.8h { v0, v1 }, [x0], #32
660 %ld2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000661 %tmp = getelementptr i16, i16* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +0000662 store i16* %tmp, i16** %ptr
663 ret { <8 x i16>, <8 x i16> } %ld2
664}
665
666define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld2(i16* %A, i16** %ptr, i64 %inc) {
667;CHECK-LABEL: test_v8i16_post_reg_ld2:
668;CHECK: ld2.8h { v0, v1 }, [x0], x{{[0-9]+}}
669 %ld2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000670 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000671 store i16* %tmp, i16** %ptr
672 ret { <8 x i16>, <8 x i16> } %ld2
673}
674
675declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0i16(i16*)
676
677
678define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld2(i16* %A, i16** %ptr) {
679;CHECK-LABEL: test_v4i16_post_imm_ld2:
680;CHECK: ld2.4h { v0, v1 }, [x0], #16
681 %ld2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000682 %tmp = getelementptr i16, i16* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000683 store i16* %tmp, i16** %ptr
684 ret { <4 x i16>, <4 x i16> } %ld2
685}
686
687define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld2(i16* %A, i16** %ptr, i64 %inc) {
688;CHECK-LABEL: test_v4i16_post_reg_ld2:
689;CHECK: ld2.4h { v0, v1 }, [x0], x{{[0-9]+}}
690 %ld2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000691 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000692 store i16* %tmp, i16** %ptr
693 ret { <4 x i16>, <4 x i16> } %ld2
694}
695
696declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0i16(i16*)
697
698
699define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld2(i32* %A, i32** %ptr) {
700;CHECK-LABEL: test_v4i32_post_imm_ld2:
701;CHECK: ld2.4s { v0, v1 }, [x0], #32
702 %ld2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000703 %tmp = getelementptr i32, i32* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000704 store i32* %tmp, i32** %ptr
705 ret { <4 x i32>, <4 x i32> } %ld2
706}
707
708define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld2(i32* %A, i32** %ptr, i64 %inc) {
709;CHECK-LABEL: test_v4i32_post_reg_ld2:
710;CHECK: ld2.4s { v0, v1 }, [x0], x{{[0-9]+}}
711 %ld2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000712 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000713 store i32* %tmp, i32** %ptr
714 ret { <4 x i32>, <4 x i32> } %ld2
715}
716
717declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0i32(i32*)
718
719
720define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld2(i32* %A, i32** %ptr) {
721;CHECK-LABEL: test_v2i32_post_imm_ld2:
722;CHECK: ld2.2s { v0, v1 }, [x0], #16
723 %ld2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000724 %tmp = getelementptr i32, i32* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +0000725 store i32* %tmp, i32** %ptr
726 ret { <2 x i32>, <2 x i32> } %ld2
727}
728
729define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld2(i32* %A, i32** %ptr, i64 %inc) {
730;CHECK-LABEL: test_v2i32_post_reg_ld2:
731;CHECK: ld2.2s { v0, v1 }, [x0], x{{[0-9]+}}
732 %ld2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000733 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000734 store i32* %tmp, i32** %ptr
735 ret { <2 x i32>, <2 x i32> } %ld2
736}
737
738declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0i32(i32*)
739
740
741define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld2(i64* %A, i64** %ptr) {
742;CHECK-LABEL: test_v2i64_post_imm_ld2:
743;CHECK: ld2.2d { v0, v1 }, [x0], #32
744 %ld2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000745 %tmp = getelementptr i64, i64* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +0000746 store i64* %tmp, i64** %ptr
747 ret { <2 x i64>, <2 x i64> } %ld2
748}
749
750define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld2(i64* %A, i64** %ptr, i64 %inc) {
751;CHECK-LABEL: test_v2i64_post_reg_ld2:
752;CHECK: ld2.2d { v0, v1 }, [x0], x{{[0-9]+}}
753 %ld2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000754 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000755 store i64* %tmp, i64** %ptr
756 ret { <2 x i64>, <2 x i64> } %ld2
757}
758
759declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0i64(i64*)
760
761
762define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld2(i64* %A, i64** %ptr) {
763;CHECK-LABEL: test_v1i64_post_imm_ld2:
764;CHECK: ld1.1d { v0, v1 }, [x0], #16
765 %ld2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000766 %tmp = getelementptr i64, i64* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000767 store i64* %tmp, i64** %ptr
768 ret { <1 x i64>, <1 x i64> } %ld2
769}
770
771define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld2(i64* %A, i64** %ptr, i64 %inc) {
772;CHECK-LABEL: test_v1i64_post_reg_ld2:
773;CHECK: ld1.1d { v0, v1 }, [x0], x{{[0-9]+}}
774 %ld2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000775 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000776 store i64* %tmp, i64** %ptr
777 ret { <1 x i64>, <1 x i64> } %ld2
778}
779
780declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0i64(i64*)
781
782
783define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld2(float* %A, float** %ptr) {
784;CHECK-LABEL: test_v4f32_post_imm_ld2:
785;CHECK: ld2.4s { v0, v1 }, [x0], #32
786 %ld2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000787 %tmp = getelementptr float, float* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +0000788 store float* %tmp, float** %ptr
789 ret { <4 x float>, <4 x float> } %ld2
790}
791
792define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld2(float* %A, float** %ptr, i64 %inc) {
793;CHECK-LABEL: test_v4f32_post_reg_ld2:
794;CHECK: ld2.4s { v0, v1 }, [x0], x{{[0-9]+}}
795 %ld2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000796 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000797 store float* %tmp, float** %ptr
798 ret { <4 x float>, <4 x float> } %ld2
799}
800
801declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2.v4f32.p0f32(float*)
802
803
804define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld2(float* %A, float** %ptr) {
805;CHECK-LABEL: test_v2f32_post_imm_ld2:
806;CHECK: ld2.2s { v0, v1 }, [x0], #16
807 %ld2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000808 %tmp = getelementptr float, float* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +0000809 store float* %tmp, float** %ptr
810 ret { <2 x float>, <2 x float> } %ld2
811}
812
813define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld2(float* %A, float** %ptr, i64 %inc) {
814;CHECK-LABEL: test_v2f32_post_reg_ld2:
815;CHECK: ld2.2s { v0, v1 }, [x0], x{{[0-9]+}}
816 %ld2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000817 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000818 store float* %tmp, float** %ptr
819 ret { <2 x float>, <2 x float> } %ld2
820}
821
822declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2.v2f32.p0f32(float*)
823
824
825define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld2(double* %A, double** %ptr) {
826;CHECK-LABEL: test_v2f64_post_imm_ld2:
827;CHECK: ld2.2d { v0, v1 }, [x0], #32
828 %ld2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000829 %tmp = getelementptr double, double* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +0000830 store double* %tmp, double** %ptr
831 ret { <2 x double>, <2 x double> } %ld2
832}
833
834define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld2(double* %A, double** %ptr, i64 %inc) {
835;CHECK-LABEL: test_v2f64_post_reg_ld2:
836;CHECK: ld2.2d { v0, v1 }, [x0], x{{[0-9]+}}
837 %ld2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000838 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000839 store double* %tmp, double** %ptr
840 ret { <2 x double>, <2 x double> } %ld2
841}
842
843declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2.v2f64.p0f64(double*)
844
845
846define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld2(double* %A, double** %ptr) {
847;CHECK-LABEL: test_v1f64_post_imm_ld2:
848;CHECK: ld1.1d { v0, v1 }, [x0], #16
849 %ld2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000850 %tmp = getelementptr double, double* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +0000851 store double* %tmp, double** %ptr
852 ret { <1 x double>, <1 x double> } %ld2
853}
854
855define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld2(double* %A, double** %ptr, i64 %inc) {
856;CHECK-LABEL: test_v1f64_post_reg_ld2:
857;CHECK: ld1.1d { v0, v1 }, [x0], x{{[0-9]+}}
858 %ld2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000859 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000860 store double* %tmp, double** %ptr
861 ret { <1 x double>, <1 x double> } %ld2
862}
863
864declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2.v1f64.p0f64(double*)
865
866
867define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld3(i8* %A, i8** %ptr) {
868;CHECK-LABEL: test_v16i8_post_imm_ld3:
869;CHECK: ld3.16b { v0, v1, v2 }, [x0], #48
870 %ld3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000871 %tmp = getelementptr i8, i8* %A, i32 48
Tim Northover3b0846e2014-05-24 12:50:23 +0000872 store i8* %tmp, i8** %ptr
873 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
874}
875
876define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld3(i8* %A, i8** %ptr, i64 %inc) {
877;CHECK-LABEL: test_v16i8_post_reg_ld3:
878;CHECK: ld3.16b { v0, v1, v2 }, [x0], x{{[0-9]+}}
879 %ld3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000880 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000881 store i8* %tmp, i8** %ptr
882 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
883}
884
885declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0i8(i8*)
886
887
888define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld3(i8* %A, i8** %ptr) {
889;CHECK-LABEL: test_v8i8_post_imm_ld3:
890;CHECK: ld3.8b { v0, v1, v2 }, [x0], #24
891 %ld3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000892 %tmp = getelementptr i8, i8* %A, i32 24
Tim Northover3b0846e2014-05-24 12:50:23 +0000893 store i8* %tmp, i8** %ptr
894 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
895}
896
897define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld3(i8* %A, i8** %ptr, i64 %inc) {
898;CHECK-LABEL: test_v8i8_post_reg_ld3:
899;CHECK: ld3.8b { v0, v1, v2 }, [x0], x{{[0-9]+}}
900 %ld3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000901 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000902 store i8* %tmp, i8** %ptr
903 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
904}
905
906declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0i8(i8*)
907
908
909define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld3(i16* %A, i16** %ptr) {
910;CHECK-LABEL: test_v8i16_post_imm_ld3:
911;CHECK: ld3.8h { v0, v1, v2 }, [x0], #48
912 %ld3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000913 %tmp = getelementptr i16, i16* %A, i32 24
Tim Northover3b0846e2014-05-24 12:50:23 +0000914 store i16* %tmp, i16** %ptr
915 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
916}
917
918define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld3(i16* %A, i16** %ptr, i64 %inc) {
919;CHECK-LABEL: test_v8i16_post_reg_ld3:
920;CHECK: ld3.8h { v0, v1, v2 }, [x0], x{{[0-9]+}}
921 %ld3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000922 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000923 store i16* %tmp, i16** %ptr
924 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
925}
926
927declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0i16(i16*)
928
929
930define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld3(i16* %A, i16** %ptr) {
931;CHECK-LABEL: test_v4i16_post_imm_ld3:
932;CHECK: ld3.4h { v0, v1, v2 }, [x0], #24
933 %ld3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000934 %tmp = getelementptr i16, i16* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +0000935 store i16* %tmp, i16** %ptr
936 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
937}
938
939define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld3(i16* %A, i16** %ptr, i64 %inc) {
940;CHECK-LABEL: test_v4i16_post_reg_ld3:
941;CHECK: ld3.4h { v0, v1, v2 }, [x0], x{{[0-9]+}}
942 %ld3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000943 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000944 store i16* %tmp, i16** %ptr
945 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
946}
947
948declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0i16(i16*)
949
950
951define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld3(i32* %A, i32** %ptr) {
952;CHECK-LABEL: test_v4i32_post_imm_ld3:
953;CHECK: ld3.4s { v0, v1, v2 }, [x0], #48
954 %ld3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000955 %tmp = getelementptr i32, i32* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +0000956 store i32* %tmp, i32** %ptr
957 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
958}
959
960define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld3(i32* %A, i32** %ptr, i64 %inc) {
961;CHECK-LABEL: test_v4i32_post_reg_ld3:
962;CHECK: ld3.4s { v0, v1, v2 }, [x0], x{{[0-9]+}}
963 %ld3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000964 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000965 store i32* %tmp, i32** %ptr
966 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
967}
968
969declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0i32(i32*)
970
971
972define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld3(i32* %A, i32** %ptr) {
973;CHECK-LABEL: test_v2i32_post_imm_ld3:
974;CHECK: ld3.2s { v0, v1, v2 }, [x0], #24
975 %ld3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000976 %tmp = getelementptr i32, i32* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +0000977 store i32* %tmp, i32** %ptr
978 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
979}
980
981define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld3(i32* %A, i32** %ptr, i64 %inc) {
982;CHECK-LABEL: test_v2i32_post_reg_ld3:
983;CHECK: ld3.2s { v0, v1, v2 }, [x0], x{{[0-9]+}}
984 %ld3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000985 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +0000986 store i32* %tmp, i32** %ptr
987 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
988}
989
990declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0i32(i32*)
991
992
993define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld3(i64* %A, i64** %ptr) {
994;CHECK-LABEL: test_v2i64_post_imm_ld3:
995;CHECK: ld3.2d { v0, v1, v2 }, [x0], #48
996 %ld3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +0000997 %tmp = getelementptr i64, i64* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +0000998 store i64* %tmp, i64** %ptr
999 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
1000}
1001
1002define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld3(i64* %A, i64** %ptr, i64 %inc) {
1003;CHECK-LABEL: test_v2i64_post_reg_ld3:
1004;CHECK: ld3.2d { v0, v1, v2 }, [x0], x{{[0-9]+}}
1005 %ld3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001006 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001007 store i64* %tmp, i64** %ptr
1008 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
1009}
1010
1011declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0i64(i64*)
1012
1013
1014define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld3(i64* %A, i64** %ptr) {
1015;CHECK-LABEL: test_v1i64_post_imm_ld3:
1016;CHECK: ld1.1d { v0, v1, v2 }, [x0], #24
1017 %ld3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001018 %tmp = getelementptr i64, i64* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00001019 store i64* %tmp, i64** %ptr
1020 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
1021}
1022
1023define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld3(i64* %A, i64** %ptr, i64 %inc) {
1024;CHECK-LABEL: test_v1i64_post_reg_ld3:
1025;CHECK: ld1.1d { v0, v1, v2 }, [x0], x{{[0-9]+}}
1026 %ld3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001027 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001028 store i64* %tmp, i64** %ptr
1029 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
1030}
1031
1032declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0i64(i64*)
1033
1034
1035define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld3(float* %A, float** %ptr) {
1036;CHECK-LABEL: test_v4f32_post_imm_ld3:
1037;CHECK: ld3.4s { v0, v1, v2 }, [x0], #48
1038 %ld3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001039 %tmp = getelementptr float, float* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +00001040 store float* %tmp, float** %ptr
1041 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
1042}
1043
1044define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld3(float* %A, float** %ptr, i64 %inc) {
1045;CHECK-LABEL: test_v4f32_post_reg_ld3:
1046;CHECK: ld3.4s { v0, v1, v2 }, [x0], x{{[0-9]+}}
1047 %ld3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001048 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001049 store float* %tmp, float** %ptr
1050 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
1051}
1052
1053declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3.v4f32.p0f32(float*)
1054
1055
1056define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld3(float* %A, float** %ptr) {
1057;CHECK-LABEL: test_v2f32_post_imm_ld3:
1058;CHECK: ld3.2s { v0, v1, v2 }, [x0], #24
1059 %ld3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001060 %tmp = getelementptr float, float* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +00001061 store float* %tmp, float** %ptr
1062 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
1063}
1064
1065define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld3(float* %A, float** %ptr, i64 %inc) {
1066;CHECK-LABEL: test_v2f32_post_reg_ld3:
1067;CHECK: ld3.2s { v0, v1, v2 }, [x0], x{{[0-9]+}}
1068 %ld3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001069 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001070 store float* %tmp, float** %ptr
1071 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
1072}
1073
1074declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3.v2f32.p0f32(float*)
1075
1076
1077define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld3(double* %A, double** %ptr) {
1078;CHECK-LABEL: test_v2f64_post_imm_ld3:
1079;CHECK: ld3.2d { v0, v1, v2 }, [x0], #48
1080 %ld3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001081 %tmp = getelementptr double, double* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +00001082 store double* %tmp, double** %ptr
1083 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
1084}
1085
1086define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld3(double* %A, double** %ptr, i64 %inc) {
1087;CHECK-LABEL: test_v2f64_post_reg_ld3:
1088;CHECK: ld3.2d { v0, v1, v2 }, [x0], x{{[0-9]+}}
1089 %ld3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001090 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001091 store double* %tmp, double** %ptr
1092 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
1093}
1094
1095declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3.v2f64.p0f64(double*)
1096
1097
1098define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld3(double* %A, double** %ptr) {
1099;CHECK-LABEL: test_v1f64_post_imm_ld3:
1100;CHECK: ld1.1d { v0, v1, v2 }, [x0], #24
1101 %ld3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001102 %tmp = getelementptr double, double* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00001103 store double* %tmp, double** %ptr
1104 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
1105}
1106
1107define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld3(double* %A, double** %ptr, i64 %inc) {
1108;CHECK-LABEL: test_v1f64_post_reg_ld3:
1109;CHECK: ld1.1d { v0, v1, v2 }, [x0], x{{[0-9]+}}
1110 %ld3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001111 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001112 store double* %tmp, double** %ptr
1113 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
1114}
1115
1116declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3.v1f64.p0f64(double*)
1117
1118
1119define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld4(i8* %A, i8** %ptr) {
1120;CHECK-LABEL: test_v16i8_post_imm_ld4:
1121;CHECK: ld4.16b { v0, v1, v2, v3 }, [x0], #64
1122 %ld4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001123 %tmp = getelementptr i8, i8* %A, i32 64
Tim Northover3b0846e2014-05-24 12:50:23 +00001124 store i8* %tmp, i8** %ptr
1125 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
1126}
1127
1128define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld4(i8* %A, i8** %ptr, i64 %inc) {
1129;CHECK-LABEL: test_v16i8_post_reg_ld4:
1130;CHECK: ld4.16b { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1131 %ld4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001132 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001133 store i8* %tmp, i8** %ptr
1134 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
1135}
1136
1137declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0i8(i8*)
1138
1139
1140define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld4(i8* %A, i8** %ptr) {
1141;CHECK-LABEL: test_v8i8_post_imm_ld4:
1142;CHECK: ld4.8b { v0, v1, v2, v3 }, [x0], #32
1143 %ld4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001144 %tmp = getelementptr i8, i8* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00001145 store i8* %tmp, i8** %ptr
1146 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
1147}
1148
1149define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld4(i8* %A, i8** %ptr, i64 %inc) {
1150;CHECK-LABEL: test_v8i8_post_reg_ld4:
1151;CHECK: ld4.8b { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1152 %ld4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001153 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001154 store i8* %tmp, i8** %ptr
1155 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
1156}
1157
1158declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0i8(i8*)
1159
1160
1161define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld4(i16* %A, i16** %ptr) {
1162;CHECK-LABEL: test_v8i16_post_imm_ld4:
1163;CHECK: ld4.8h { v0, v1, v2, v3 }, [x0], #64
1164 %ld4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001165 %tmp = getelementptr i16, i16* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00001166 store i16* %tmp, i16** %ptr
1167 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
1168}
1169
1170define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld4(i16* %A, i16** %ptr, i64 %inc) {
1171;CHECK-LABEL: test_v8i16_post_reg_ld4:
1172;CHECK: ld4.8h { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1173 %ld4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001174 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001175 store i16* %tmp, i16** %ptr
1176 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
1177}
1178
1179declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0i16(i16*)
1180
1181
1182define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld4(i16* %A, i16** %ptr) {
1183;CHECK-LABEL: test_v4i16_post_imm_ld4:
1184;CHECK: ld4.4h { v0, v1, v2, v3 }, [x0], #32
1185 %ld4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001186 %tmp = getelementptr i16, i16* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00001187 store i16* %tmp, i16** %ptr
1188 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
1189}
1190
1191define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld4(i16* %A, i16** %ptr, i64 %inc) {
1192;CHECK-LABEL: test_v4i16_post_reg_ld4:
1193;CHECK: ld4.4h { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1194 %ld4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001195 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001196 store i16* %tmp, i16** %ptr
1197 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
1198}
1199
1200declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0i16(i16*)
1201
1202
1203define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld4(i32* %A, i32** %ptr) {
1204;CHECK-LABEL: test_v4i32_post_imm_ld4:
1205;CHECK: ld4.4s { v0, v1, v2, v3 }, [x0], #64
1206 %ld4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001207 %tmp = getelementptr i32, i32* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00001208 store i32* %tmp, i32** %ptr
1209 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
1210}
1211
1212define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld4(i32* %A, i32** %ptr, i64 %inc) {
1213;CHECK-LABEL: test_v4i32_post_reg_ld4:
1214;CHECK: ld4.4s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1215 %ld4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001216 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001217 store i32* %tmp, i32** %ptr
1218 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
1219}
1220
1221declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0i32(i32*)
1222
1223
1224define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld4(i32* %A, i32** %ptr) {
1225;CHECK-LABEL: test_v2i32_post_imm_ld4:
1226;CHECK: ld4.2s { v0, v1, v2, v3 }, [x0], #32
1227 %ld4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001228 %tmp = getelementptr i32, i32* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00001229 store i32* %tmp, i32** %ptr
1230 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
1231}
1232
1233define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld4(i32* %A, i32** %ptr, i64 %inc) {
1234;CHECK-LABEL: test_v2i32_post_reg_ld4:
1235;CHECK: ld4.2s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1236 %ld4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001237 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001238 store i32* %tmp, i32** %ptr
1239 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
1240}
1241
1242declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0i32(i32*)
1243
1244
1245define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld4(i64* %A, i64** %ptr) {
1246;CHECK-LABEL: test_v2i64_post_imm_ld4:
1247;CHECK: ld4.2d { v0, v1, v2, v3 }, [x0], #64
1248 %ld4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001249 %tmp = getelementptr i64, i64* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00001250 store i64* %tmp, i64** %ptr
1251 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
1252}
1253
1254define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld4(i64* %A, i64** %ptr, i64 %inc) {
1255;CHECK-LABEL: test_v2i64_post_reg_ld4:
1256;CHECK: ld4.2d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1257 %ld4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001258 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001259 store i64* %tmp, i64** %ptr
1260 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
1261}
1262
1263declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0i64(i64*)
1264
1265
1266define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld4(i64* %A, i64** %ptr) {
1267;CHECK-LABEL: test_v1i64_post_imm_ld4:
1268;CHECK: ld1.1d { v0, v1, v2, v3 }, [x0], #32
1269 %ld4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001270 %tmp = getelementptr i64, i64* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00001271 store i64* %tmp, i64** %ptr
1272 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
1273}
1274
1275define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld4(i64* %A, i64** %ptr, i64 %inc) {
1276;CHECK-LABEL: test_v1i64_post_reg_ld4:
1277;CHECK: ld1.1d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1278 %ld4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001279 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001280 store i64* %tmp, i64** %ptr
1281 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
1282}
1283
1284declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0i64(i64*)
1285
1286
1287define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld4(float* %A, float** %ptr) {
1288;CHECK-LABEL: test_v4f32_post_imm_ld4:
1289;CHECK: ld4.4s { v0, v1, v2, v3 }, [x0], #64
1290 %ld4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001291 %tmp = getelementptr float, float* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00001292 store float* %tmp, float** %ptr
1293 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
1294}
1295
1296define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld4(float* %A, float** %ptr, i64 %inc) {
1297;CHECK-LABEL: test_v4f32_post_reg_ld4:
1298;CHECK: ld4.4s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1299 %ld4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001300 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001301 store float* %tmp, float** %ptr
1302 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
1303}
1304
1305declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4.v4f32.p0f32(float*)
1306
1307
1308define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld4(float* %A, float** %ptr) {
1309;CHECK-LABEL: test_v2f32_post_imm_ld4:
1310;CHECK: ld4.2s { v0, v1, v2, v3 }, [x0], #32
1311 %ld4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001312 %tmp = getelementptr float, float* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00001313 store float* %tmp, float** %ptr
1314 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
1315}
1316
1317define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld4(float* %A, float** %ptr, i64 %inc) {
1318;CHECK-LABEL: test_v2f32_post_reg_ld4:
1319;CHECK: ld4.2s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1320 %ld4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001321 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001322 store float* %tmp, float** %ptr
1323 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
1324}
1325
1326declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4.v2f32.p0f32(float*)
1327
1328
1329define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld4(double* %A, double** %ptr) {
1330;CHECK-LABEL: test_v2f64_post_imm_ld4:
1331;CHECK: ld4.2d { v0, v1, v2, v3 }, [x0], #64
1332 %ld4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001333 %tmp = getelementptr double, double* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00001334 store double* %tmp, double** %ptr
1335 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
1336}
1337
1338define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld4(double* %A, double** %ptr, i64 %inc) {
1339;CHECK-LABEL: test_v2f64_post_reg_ld4:
1340;CHECK: ld4.2d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1341 %ld4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001342 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001343 store double* %tmp, double** %ptr
1344 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
1345}
1346
1347declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4.v2f64.p0f64(double*)
1348
1349
1350define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld4(double* %A, double** %ptr) {
1351;CHECK-LABEL: test_v1f64_post_imm_ld4:
1352;CHECK: ld1.1d { v0, v1, v2, v3 }, [x0], #32
1353 %ld4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001354 %tmp = getelementptr double, double* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00001355 store double* %tmp, double** %ptr
1356 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
1357}
1358
1359define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld4(double* %A, double** %ptr, i64 %inc) {
1360;CHECK-LABEL: test_v1f64_post_reg_ld4:
1361;CHECK: ld1.1d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1362 %ld4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001363 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001364 store double* %tmp, double** %ptr
1365 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
1366}
1367
1368declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4.v1f64.p0f64(double*)
1369
1370define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld1x2(i8* %A, i8** %ptr) {
1371;CHECK-LABEL: test_v16i8_post_imm_ld1x2:
1372;CHECK: ld1.16b { v0, v1 }, [x0], #32
1373 %ld1x2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001374 %tmp = getelementptr i8, i8* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00001375 store i8* %tmp, i8** %ptr
1376 ret { <16 x i8>, <16 x i8> } %ld1x2
1377}
1378
1379define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld1x2(i8* %A, i8** %ptr, i64 %inc) {
1380;CHECK-LABEL: test_v16i8_post_reg_ld1x2:
1381;CHECK: ld1.16b { v0, v1 }, [x0], x{{[0-9]+}}
1382 %ld1x2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001383 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001384 store i8* %tmp, i8** %ptr
1385 ret { <16 x i8>, <16 x i8> } %ld1x2
1386}
1387
1388declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0i8(i8*)
1389
1390
1391define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld1x2(i8* %A, i8** %ptr) {
1392;CHECK-LABEL: test_v8i8_post_imm_ld1x2:
1393;CHECK: ld1.8b { v0, v1 }, [x0], #16
1394 %ld1x2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001395 %tmp = getelementptr i8, i8* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00001396 store i8* %tmp, i8** %ptr
1397 ret { <8 x i8>, <8 x i8> } %ld1x2
1398}
1399
1400define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld1x2(i8* %A, i8** %ptr, i64 %inc) {
1401;CHECK-LABEL: test_v8i8_post_reg_ld1x2:
1402;CHECK: ld1.8b { v0, v1 }, [x0], x{{[0-9]+}}
1403 %ld1x2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001404 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001405 store i8* %tmp, i8** %ptr
1406 ret { <8 x i8>, <8 x i8> } %ld1x2
1407}
1408
1409declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0i8(i8*)
1410
1411
1412define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld1x2(i16* %A, i16** %ptr) {
1413;CHECK-LABEL: test_v8i16_post_imm_ld1x2:
1414;CHECK: ld1.8h { v0, v1 }, [x0], #32
1415 %ld1x2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001416 %tmp = getelementptr i16, i16* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00001417 store i16* %tmp, i16** %ptr
1418 ret { <8 x i16>, <8 x i16> } %ld1x2
1419}
1420
1421define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld1x2(i16* %A, i16** %ptr, i64 %inc) {
1422;CHECK-LABEL: test_v8i16_post_reg_ld1x2:
1423;CHECK: ld1.8h { v0, v1 }, [x0], x{{[0-9]+}}
1424 %ld1x2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001425 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001426 store i16* %tmp, i16** %ptr
1427 ret { <8 x i16>, <8 x i16> } %ld1x2
1428}
1429
1430declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0i16(i16*)
1431
1432
1433define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld1x2(i16* %A, i16** %ptr) {
1434;CHECK-LABEL: test_v4i16_post_imm_ld1x2:
1435;CHECK: ld1.4h { v0, v1 }, [x0], #16
1436 %ld1x2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001437 %tmp = getelementptr i16, i16* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00001438 store i16* %tmp, i16** %ptr
1439 ret { <4 x i16>, <4 x i16> } %ld1x2
1440}
1441
1442define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld1x2(i16* %A, i16** %ptr, i64 %inc) {
1443;CHECK-LABEL: test_v4i16_post_reg_ld1x2:
1444;CHECK: ld1.4h { v0, v1 }, [x0], x{{[0-9]+}}
1445 %ld1x2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001446 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001447 store i16* %tmp, i16** %ptr
1448 ret { <4 x i16>, <4 x i16> } %ld1x2
1449}
1450
1451declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0i16(i16*)
1452
1453
1454define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld1x2(i32* %A, i32** %ptr) {
1455;CHECK-LABEL: test_v4i32_post_imm_ld1x2:
1456;CHECK: ld1.4s { v0, v1 }, [x0], #32
1457 %ld1x2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001458 %tmp = getelementptr i32, i32* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00001459 store i32* %tmp, i32** %ptr
1460 ret { <4 x i32>, <4 x i32> } %ld1x2
1461}
1462
1463define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld1x2(i32* %A, i32** %ptr, i64 %inc) {
1464;CHECK-LABEL: test_v4i32_post_reg_ld1x2:
1465;CHECK: ld1.4s { v0, v1 }, [x0], x{{[0-9]+}}
1466 %ld1x2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001467 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001468 store i32* %tmp, i32** %ptr
1469 ret { <4 x i32>, <4 x i32> } %ld1x2
1470}
1471
1472declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0i32(i32*)
1473
1474
1475define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld1x2(i32* %A, i32** %ptr) {
1476;CHECK-LABEL: test_v2i32_post_imm_ld1x2:
1477;CHECK: ld1.2s { v0, v1 }, [x0], #16
1478 %ld1x2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001479 %tmp = getelementptr i32, i32* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00001480 store i32* %tmp, i32** %ptr
1481 ret { <2 x i32>, <2 x i32> } %ld1x2
1482}
1483
1484define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld1x2(i32* %A, i32** %ptr, i64 %inc) {
1485;CHECK-LABEL: test_v2i32_post_reg_ld1x2:
1486;CHECK: ld1.2s { v0, v1 }, [x0], x{{[0-9]+}}
1487 %ld1x2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001488 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001489 store i32* %tmp, i32** %ptr
1490 ret { <2 x i32>, <2 x i32> } %ld1x2
1491}
1492
1493declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0i32(i32*)
1494
1495
1496define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld1x2(i64* %A, i64** %ptr) {
1497;CHECK-LABEL: test_v2i64_post_imm_ld1x2:
1498;CHECK: ld1.2d { v0, v1 }, [x0], #32
1499 %ld1x2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001500 %tmp = getelementptr i64, i64* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00001501 store i64* %tmp, i64** %ptr
1502 ret { <2 x i64>, <2 x i64> } %ld1x2
1503}
1504
1505define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld1x2(i64* %A, i64** %ptr, i64 %inc) {
1506;CHECK-LABEL: test_v2i64_post_reg_ld1x2:
1507;CHECK: ld1.2d { v0, v1 }, [x0], x{{[0-9]+}}
1508 %ld1x2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001509 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001510 store i64* %tmp, i64** %ptr
1511 ret { <2 x i64>, <2 x i64> } %ld1x2
1512}
1513
1514declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0i64(i64*)
1515
1516
1517define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld1x2(i64* %A, i64** %ptr) {
1518;CHECK-LABEL: test_v1i64_post_imm_ld1x2:
1519;CHECK: ld1.1d { v0, v1 }, [x0], #16
1520 %ld1x2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001521 %tmp = getelementptr i64, i64* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00001522 store i64* %tmp, i64** %ptr
1523 ret { <1 x i64>, <1 x i64> } %ld1x2
1524}
1525
1526define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld1x2(i64* %A, i64** %ptr, i64 %inc) {
1527;CHECK-LABEL: test_v1i64_post_reg_ld1x2:
1528;CHECK: ld1.1d { v0, v1 }, [x0], x{{[0-9]+}}
1529 %ld1x2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001530 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001531 store i64* %tmp, i64** %ptr
1532 ret { <1 x i64>, <1 x i64> } %ld1x2
1533}
1534
1535declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0i64(i64*)
1536
1537
1538define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld1x2(float* %A, float** %ptr) {
1539;CHECK-LABEL: test_v4f32_post_imm_ld1x2:
1540;CHECK: ld1.4s { v0, v1 }, [x0], #32
1541 %ld1x2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x2.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001542 %tmp = getelementptr float, float* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00001543 store float* %tmp, float** %ptr
1544 ret { <4 x float>, <4 x float> } %ld1x2
1545}
1546
1547define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld1x2(float* %A, float** %ptr, i64 %inc) {
1548;CHECK-LABEL: test_v4f32_post_reg_ld1x2:
1549;CHECK: ld1.4s { v0, v1 }, [x0], x{{[0-9]+}}
1550 %ld1x2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x2.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001551 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001552 store float* %tmp, float** %ptr
1553 ret { <4 x float>, <4 x float> } %ld1x2
1554}
1555
1556declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x2.v4f32.p0f32(float*)
1557
1558
1559define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld1x2(float* %A, float** %ptr) {
1560;CHECK-LABEL: test_v2f32_post_imm_ld1x2:
1561;CHECK: ld1.2s { v0, v1 }, [x0], #16
1562 %ld1x2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x2.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001563 %tmp = getelementptr float, float* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00001564 store float* %tmp, float** %ptr
1565 ret { <2 x float>, <2 x float> } %ld1x2
1566}
1567
1568define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld1x2(float* %A, float** %ptr, i64 %inc) {
1569;CHECK-LABEL: test_v2f32_post_reg_ld1x2:
1570;CHECK: ld1.2s { v0, v1 }, [x0], x{{[0-9]+}}
1571 %ld1x2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x2.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001572 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001573 store float* %tmp, float** %ptr
1574 ret { <2 x float>, <2 x float> } %ld1x2
1575}
1576
1577declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x2.v2f32.p0f32(float*)
1578
1579
1580define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld1x2(double* %A, double** %ptr) {
1581;CHECK-LABEL: test_v2f64_post_imm_ld1x2:
1582;CHECK: ld1.2d { v0, v1 }, [x0], #32
1583 %ld1x2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x2.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001584 %tmp = getelementptr double, double* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00001585 store double* %tmp, double** %ptr
1586 ret { <2 x double>, <2 x double> } %ld1x2
1587}
1588
1589define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld1x2(double* %A, double** %ptr, i64 %inc) {
1590;CHECK-LABEL: test_v2f64_post_reg_ld1x2:
1591;CHECK: ld1.2d { v0, v1 }, [x0], x{{[0-9]+}}
1592 %ld1x2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x2.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001593 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001594 store double* %tmp, double** %ptr
1595 ret { <2 x double>, <2 x double> } %ld1x2
1596}
1597
1598declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x2.v2f64.p0f64(double*)
1599
1600
1601define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld1x2(double* %A, double** %ptr) {
1602;CHECK-LABEL: test_v1f64_post_imm_ld1x2:
1603;CHECK: ld1.1d { v0, v1 }, [x0], #16
1604 %ld1x2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x2.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001605 %tmp = getelementptr double, double* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00001606 store double* %tmp, double** %ptr
1607 ret { <1 x double>, <1 x double> } %ld1x2
1608}
1609
1610define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld1x2(double* %A, double** %ptr, i64 %inc) {
1611;CHECK-LABEL: test_v1f64_post_reg_ld1x2:
1612;CHECK: ld1.1d { v0, v1 }, [x0], x{{[0-9]+}}
1613 %ld1x2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x2.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001614 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001615 store double* %tmp, double** %ptr
1616 ret { <1 x double>, <1 x double> } %ld1x2
1617}
1618
1619declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x2.v1f64.p0f64(double*)
1620
1621
1622define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld1x3(i8* %A, i8** %ptr) {
1623;CHECK-LABEL: test_v16i8_post_imm_ld1x3:
1624;CHECK: ld1.16b { v0, v1, v2 }, [x0], #48
1625 %ld1x3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001626 %tmp = getelementptr i8, i8* %A, i32 48
Tim Northover3b0846e2014-05-24 12:50:23 +00001627 store i8* %tmp, i8** %ptr
1628 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld1x3
1629}
1630
1631define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld1x3(i8* %A, i8** %ptr, i64 %inc) {
1632;CHECK-LABEL: test_v16i8_post_reg_ld1x3:
1633;CHECK: ld1.16b { v0, v1, v2 }, [x0], x{{[0-9]+}}
1634 %ld1x3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001635 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001636 store i8* %tmp, i8** %ptr
1637 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld1x3
1638}
1639
1640declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0i8(i8*)
1641
1642
1643define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld1x3(i8* %A, i8** %ptr) {
1644;CHECK-LABEL: test_v8i8_post_imm_ld1x3:
1645;CHECK: ld1.8b { v0, v1, v2 }, [x0], #24
1646 %ld1x3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001647 %tmp = getelementptr i8, i8* %A, i32 24
Tim Northover3b0846e2014-05-24 12:50:23 +00001648 store i8* %tmp, i8** %ptr
1649 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld1x3
1650}
1651
1652define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld1x3(i8* %A, i8** %ptr, i64 %inc) {
1653;CHECK-LABEL: test_v8i8_post_reg_ld1x3:
1654;CHECK: ld1.8b { v0, v1, v2 }, [x0], x{{[0-9]+}}
1655 %ld1x3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001656 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001657 store i8* %tmp, i8** %ptr
1658 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld1x3
1659}
1660
1661declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0i8(i8*)
1662
1663
1664define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld1x3(i16* %A, i16** %ptr) {
1665;CHECK-LABEL: test_v8i16_post_imm_ld1x3:
1666;CHECK: ld1.8h { v0, v1, v2 }, [x0], #48
1667 %ld1x3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001668 %tmp = getelementptr i16, i16* %A, i32 24
Tim Northover3b0846e2014-05-24 12:50:23 +00001669 store i16* %tmp, i16** %ptr
1670 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld1x3
1671}
1672
1673define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld1x3(i16* %A, i16** %ptr, i64 %inc) {
1674;CHECK-LABEL: test_v8i16_post_reg_ld1x3:
1675;CHECK: ld1.8h { v0, v1, v2 }, [x0], x{{[0-9]+}}
1676 %ld1x3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001677 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001678 store i16* %tmp, i16** %ptr
1679 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld1x3
1680}
1681
1682declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0i16(i16*)
1683
1684
1685define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld1x3(i16* %A, i16** %ptr) {
1686;CHECK-LABEL: test_v4i16_post_imm_ld1x3:
1687;CHECK: ld1.4h { v0, v1, v2 }, [x0], #24
1688 %ld1x3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001689 %tmp = getelementptr i16, i16* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +00001690 store i16* %tmp, i16** %ptr
1691 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld1x3
1692}
1693
1694define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld1x3(i16* %A, i16** %ptr, i64 %inc) {
1695;CHECK-LABEL: test_v4i16_post_reg_ld1x3:
1696;CHECK: ld1.4h { v0, v1, v2 }, [x0], x{{[0-9]+}}
1697 %ld1x3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001698 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001699 store i16* %tmp, i16** %ptr
1700 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld1x3
1701}
1702
1703declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0i16(i16*)
1704
1705
1706define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld1x3(i32* %A, i32** %ptr) {
1707;CHECK-LABEL: test_v4i32_post_imm_ld1x3:
1708;CHECK: ld1.4s { v0, v1, v2 }, [x0], #48
1709 %ld1x3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001710 %tmp = getelementptr i32, i32* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +00001711 store i32* %tmp, i32** %ptr
1712 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld1x3
1713}
1714
1715define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld1x3(i32* %A, i32** %ptr, i64 %inc) {
1716;CHECK-LABEL: test_v4i32_post_reg_ld1x3:
1717;CHECK: ld1.4s { v0, v1, v2 }, [x0], x{{[0-9]+}}
1718 %ld1x3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001719 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001720 store i32* %tmp, i32** %ptr
1721 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld1x3
1722}
1723
1724declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0i32(i32*)
1725
1726
1727define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld1x3(i32* %A, i32** %ptr) {
1728;CHECK-LABEL: test_v2i32_post_imm_ld1x3:
1729;CHECK: ld1.2s { v0, v1, v2 }, [x0], #24
1730 %ld1x3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001731 %tmp = getelementptr i32, i32* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +00001732 store i32* %tmp, i32** %ptr
1733 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld1x3
1734}
1735
1736define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld1x3(i32* %A, i32** %ptr, i64 %inc) {
1737;CHECK-LABEL: test_v2i32_post_reg_ld1x3:
1738;CHECK: ld1.2s { v0, v1, v2 }, [x0], x{{[0-9]+}}
1739 %ld1x3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001740 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001741 store i32* %tmp, i32** %ptr
1742 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld1x3
1743}
1744
1745declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0i32(i32*)
1746
1747
1748define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld1x3(i64* %A, i64** %ptr) {
1749;CHECK-LABEL: test_v2i64_post_imm_ld1x3:
1750;CHECK: ld1.2d { v0, v1, v2 }, [x0], #48
1751 %ld1x3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001752 %tmp = getelementptr i64, i64* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +00001753 store i64* %tmp, i64** %ptr
1754 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld1x3
1755}
1756
1757define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld1x3(i64* %A, i64** %ptr, i64 %inc) {
1758;CHECK-LABEL: test_v2i64_post_reg_ld1x3:
1759;CHECK: ld1.2d { v0, v1, v2 }, [x0], x{{[0-9]+}}
1760 %ld1x3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001761 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001762 store i64* %tmp, i64** %ptr
1763 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld1x3
1764}
1765
1766declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0i64(i64*)
1767
1768
1769define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld1x3(i64* %A, i64** %ptr) {
1770;CHECK-LABEL: test_v1i64_post_imm_ld1x3:
1771;CHECK: ld1.1d { v0, v1, v2 }, [x0], #24
1772 %ld1x3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001773 %tmp = getelementptr i64, i64* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00001774 store i64* %tmp, i64** %ptr
1775 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld1x3
1776}
1777
1778define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld1x3(i64* %A, i64** %ptr, i64 %inc) {
1779;CHECK-LABEL: test_v1i64_post_reg_ld1x3:
1780;CHECK: ld1.1d { v0, v1, v2 }, [x0], x{{[0-9]+}}
1781 %ld1x3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001782 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001783 store i64* %tmp, i64** %ptr
1784 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld1x3
1785}
1786
1787declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0i64(i64*)
1788
1789
1790define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld1x3(float* %A, float** %ptr) {
1791;CHECK-LABEL: test_v4f32_post_imm_ld1x3:
1792;CHECK: ld1.4s { v0, v1, v2 }, [x0], #48
1793 %ld1x3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x3.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001794 %tmp = getelementptr float, float* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +00001795 store float* %tmp, float** %ptr
1796 ret { <4 x float>, <4 x float>, <4 x float> } %ld1x3
1797}
1798
1799define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld1x3(float* %A, float** %ptr, i64 %inc) {
1800;CHECK-LABEL: test_v4f32_post_reg_ld1x3:
1801;CHECK: ld1.4s { v0, v1, v2 }, [x0], x{{[0-9]+}}
1802 %ld1x3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x3.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001803 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001804 store float* %tmp, float** %ptr
1805 ret { <4 x float>, <4 x float>, <4 x float> } %ld1x3
1806}
1807
1808declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x3.v4f32.p0f32(float*)
1809
1810
1811define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld1x3(float* %A, float** %ptr) {
1812;CHECK-LABEL: test_v2f32_post_imm_ld1x3:
1813;CHECK: ld1.2s { v0, v1, v2 }, [x0], #24
1814 %ld1x3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x3.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001815 %tmp = getelementptr float, float* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +00001816 store float* %tmp, float** %ptr
1817 ret { <2 x float>, <2 x float>, <2 x float> } %ld1x3
1818}
1819
1820define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld1x3(float* %A, float** %ptr, i64 %inc) {
1821;CHECK-LABEL: test_v2f32_post_reg_ld1x3:
1822;CHECK: ld1.2s { v0, v1, v2 }, [x0], x{{[0-9]+}}
1823 %ld1x3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x3.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001824 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001825 store float* %tmp, float** %ptr
1826 ret { <2 x float>, <2 x float>, <2 x float> } %ld1x3
1827}
1828
1829declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x3.v2f32.p0f32(float*)
1830
1831
1832define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld1x3(double* %A, double** %ptr) {
1833;CHECK-LABEL: test_v2f64_post_imm_ld1x3:
1834;CHECK: ld1.2d { v0, v1, v2 }, [x0], #48
1835 %ld1x3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x3.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001836 %tmp = getelementptr double, double* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +00001837 store double* %tmp, double** %ptr
1838 ret { <2 x double>, <2 x double>, <2 x double> } %ld1x3
1839}
1840
1841define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld1x3(double* %A, double** %ptr, i64 %inc) {
1842;CHECK-LABEL: test_v2f64_post_reg_ld1x3:
1843;CHECK: ld1.2d { v0, v1, v2 }, [x0], x{{[0-9]+}}
1844 %ld1x3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x3.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001845 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001846 store double* %tmp, double** %ptr
1847 ret { <2 x double>, <2 x double>, <2 x double> } %ld1x3
1848}
1849
1850declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x3.v2f64.p0f64(double*)
1851
1852
1853define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld1x3(double* %A, double** %ptr) {
1854;CHECK-LABEL: test_v1f64_post_imm_ld1x3:
1855;CHECK: ld1.1d { v0, v1, v2 }, [x0], #24
1856 %ld1x3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x3.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001857 %tmp = getelementptr double, double* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00001858 store double* %tmp, double** %ptr
1859 ret { <1 x double>, <1 x double>, <1 x double> } %ld1x3
1860}
1861
1862define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld1x3(double* %A, double** %ptr, i64 %inc) {
1863;CHECK-LABEL: test_v1f64_post_reg_ld1x3:
1864;CHECK: ld1.1d { v0, v1, v2 }, [x0], x{{[0-9]+}}
1865 %ld1x3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x3.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001866 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001867 store double* %tmp, double** %ptr
1868 ret { <1 x double>, <1 x double>, <1 x double> } %ld1x3
1869}
1870
1871declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x3.v1f64.p0f64(double*)
1872
1873
1874define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld1x4(i8* %A, i8** %ptr) {
1875;CHECK-LABEL: test_v16i8_post_imm_ld1x4:
1876;CHECK: ld1.16b { v0, v1, v2, v3 }, [x0], #64
1877 %ld1x4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001878 %tmp = getelementptr i8, i8* %A, i32 64
Tim Northover3b0846e2014-05-24 12:50:23 +00001879 store i8* %tmp, i8** %ptr
1880 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld1x4
1881}
1882
1883define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld1x4(i8* %A, i8** %ptr, i64 %inc) {
1884;CHECK-LABEL: test_v16i8_post_reg_ld1x4:
1885;CHECK: ld1.16b { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1886 %ld1x4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001887 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001888 store i8* %tmp, i8** %ptr
1889 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld1x4
1890}
1891
1892declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0i8(i8*)
1893
1894
1895define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld1x4(i8* %A, i8** %ptr) {
1896;CHECK-LABEL: test_v8i8_post_imm_ld1x4:
1897;CHECK: ld1.8b { v0, v1, v2, v3 }, [x0], #32
1898 %ld1x4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001899 %tmp = getelementptr i8, i8* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00001900 store i8* %tmp, i8** %ptr
1901 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld1x4
1902}
1903
1904define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld1x4(i8* %A, i8** %ptr, i64 %inc) {
1905;CHECK-LABEL: test_v8i8_post_reg_ld1x4:
1906;CHECK: ld1.8b { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1907 %ld1x4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001908 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001909 store i8* %tmp, i8** %ptr
1910 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld1x4
1911}
1912
1913declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0i8(i8*)
1914
1915
1916define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld1x4(i16* %A, i16** %ptr) {
1917;CHECK-LABEL: test_v8i16_post_imm_ld1x4:
1918;CHECK: ld1.8h { v0, v1, v2, v3 }, [x0], #64
1919 %ld1x4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001920 %tmp = getelementptr i16, i16* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00001921 store i16* %tmp, i16** %ptr
1922 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld1x4
1923}
1924
1925define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld1x4(i16* %A, i16** %ptr, i64 %inc) {
1926;CHECK-LABEL: test_v8i16_post_reg_ld1x4:
1927;CHECK: ld1.8h { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1928 %ld1x4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001929 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001930 store i16* %tmp, i16** %ptr
1931 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld1x4
1932}
1933
1934declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0i16(i16*)
1935
1936
1937define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld1x4(i16* %A, i16** %ptr) {
1938;CHECK-LABEL: test_v4i16_post_imm_ld1x4:
1939;CHECK: ld1.4h { v0, v1, v2, v3 }, [x0], #32
1940 %ld1x4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001941 %tmp = getelementptr i16, i16* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00001942 store i16* %tmp, i16** %ptr
1943 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld1x4
1944}
1945
1946define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld1x4(i16* %A, i16** %ptr, i64 %inc) {
1947;CHECK-LABEL: test_v4i16_post_reg_ld1x4:
1948;CHECK: ld1.4h { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1949 %ld1x4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001950 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001951 store i16* %tmp, i16** %ptr
1952 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld1x4
1953}
1954
1955declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0i16(i16*)
1956
1957
1958define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld1x4(i32* %A, i32** %ptr) {
1959;CHECK-LABEL: test_v4i32_post_imm_ld1x4:
1960;CHECK: ld1.4s { v0, v1, v2, v3 }, [x0], #64
1961 %ld1x4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001962 %tmp = getelementptr i32, i32* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00001963 store i32* %tmp, i32** %ptr
1964 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld1x4
1965}
1966
1967define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld1x4(i32* %A, i32** %ptr, i64 %inc) {
1968;CHECK-LABEL: test_v4i32_post_reg_ld1x4:
1969;CHECK: ld1.4s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1970 %ld1x4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001971 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001972 store i32* %tmp, i32** %ptr
1973 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld1x4
1974}
1975
1976declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0i32(i32*)
1977
1978
1979define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld1x4(i32* %A, i32** %ptr) {
1980;CHECK-LABEL: test_v2i32_post_imm_ld1x4:
1981;CHECK: ld1.2s { v0, v1, v2, v3 }, [x0], #32
1982 %ld1x4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001983 %tmp = getelementptr i32, i32* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00001984 store i32* %tmp, i32** %ptr
1985 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld1x4
1986}
1987
1988define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld1x4(i32* %A, i32** %ptr, i64 %inc) {
1989;CHECK-LABEL: test_v2i32_post_reg_ld1x4:
1990;CHECK: ld1.2s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
1991 %ld1x4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00001992 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00001993 store i32* %tmp, i32** %ptr
1994 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld1x4
1995}
1996
1997declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0i32(i32*)
1998
1999
2000define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld1x4(i64* %A, i64** %ptr) {
2001;CHECK-LABEL: test_v2i64_post_imm_ld1x4:
2002;CHECK: ld1.2d { v0, v1, v2, v3 }, [x0], #64
2003 %ld1x4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002004 %tmp = getelementptr i64, i64* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00002005 store i64* %tmp, i64** %ptr
2006 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld1x4
2007}
2008
2009define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld1x4(i64* %A, i64** %ptr, i64 %inc) {
2010;CHECK-LABEL: test_v2i64_post_reg_ld1x4:
2011;CHECK: ld1.2d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2012 %ld1x4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002013 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002014 store i64* %tmp, i64** %ptr
2015 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld1x4
2016}
2017
2018declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0i64(i64*)
2019
2020
2021define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld1x4(i64* %A, i64** %ptr) {
2022;CHECK-LABEL: test_v1i64_post_imm_ld1x4:
2023;CHECK: ld1.1d { v0, v1, v2, v3 }, [x0], #32
2024 %ld1x4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002025 %tmp = getelementptr i64, i64* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002026 store i64* %tmp, i64** %ptr
2027 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld1x4
2028}
2029
2030define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld1x4(i64* %A, i64** %ptr, i64 %inc) {
2031;CHECK-LABEL: test_v1i64_post_reg_ld1x4:
2032;CHECK: ld1.1d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2033 %ld1x4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002034 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002035 store i64* %tmp, i64** %ptr
2036 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld1x4
2037}
2038
2039declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0i64(i64*)
2040
2041
2042define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld1x4(float* %A, float** %ptr) {
2043;CHECK-LABEL: test_v4f32_post_imm_ld1x4:
2044;CHECK: ld1.4s { v0, v1, v2, v3 }, [x0], #64
2045 %ld1x4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x4.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002046 %tmp = getelementptr float, float* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00002047 store float* %tmp, float** %ptr
2048 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld1x4
2049}
2050
2051define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld1x4(float* %A, float** %ptr, i64 %inc) {
2052;CHECK-LABEL: test_v4f32_post_reg_ld1x4:
2053;CHECK: ld1.4s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2054 %ld1x4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x4.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002055 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002056 store float* %tmp, float** %ptr
2057 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld1x4
2058}
2059
2060declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x4.v4f32.p0f32(float*)
2061
2062
2063define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld1x4(float* %A, float** %ptr) {
2064;CHECK-LABEL: test_v2f32_post_imm_ld1x4:
2065;CHECK: ld1.2s { v0, v1, v2, v3 }, [x0], #32
2066 %ld1x4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x4.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002067 %tmp = getelementptr float, float* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00002068 store float* %tmp, float** %ptr
2069 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld1x4
2070}
2071
2072define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld1x4(float* %A, float** %ptr, i64 %inc) {
2073;CHECK-LABEL: test_v2f32_post_reg_ld1x4:
2074;CHECK: ld1.2s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2075 %ld1x4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x4.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002076 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002077 store float* %tmp, float** %ptr
2078 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld1x4
2079}
2080
2081declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x4.v2f32.p0f32(float*)
2082
2083
2084define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld1x4(double* %A, double** %ptr) {
2085;CHECK-LABEL: test_v2f64_post_imm_ld1x4:
2086;CHECK: ld1.2d { v0, v1, v2, v3 }, [x0], #64
2087 %ld1x4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x4.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002088 %tmp = getelementptr double, double* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00002089 store double* %tmp, double** %ptr
2090 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld1x4
2091}
2092
2093define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld1x4(double* %A, double** %ptr, i64 %inc) {
2094;CHECK-LABEL: test_v2f64_post_reg_ld1x4:
2095;CHECK: ld1.2d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2096 %ld1x4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x4.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002097 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002098 store double* %tmp, double** %ptr
2099 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld1x4
2100}
2101
2102declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x4.v2f64.p0f64(double*)
2103
2104
2105define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld1x4(double* %A, double** %ptr) {
2106;CHECK-LABEL: test_v1f64_post_imm_ld1x4:
2107;CHECK: ld1.1d { v0, v1, v2, v3 }, [x0], #32
2108 %ld1x4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x4.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002109 %tmp = getelementptr double, double* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002110 store double* %tmp, double** %ptr
2111 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld1x4
2112}
2113
2114define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld1x4(double* %A, double** %ptr, i64 %inc) {
2115;CHECK-LABEL: test_v1f64_post_reg_ld1x4:
2116;CHECK: ld1.1d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2117 %ld1x4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x4.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002118 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002119 store double* %tmp, double** %ptr
2120 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld1x4
2121}
2122
2123declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x4.v1f64.p0f64(double*)
2124
2125
2126define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld2r(i8* %A, i8** %ptr) nounwind {
2127;CHECK-LABEL: test_v16i8_post_imm_ld2r:
2128;CHECK: ld2r.16b { v0, v1 }, [x0], #2
2129 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002130 %tmp = getelementptr i8, i8* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002131 store i8* %tmp, i8** %ptr
2132 ret { <16 x i8>, <16 x i8> } %ld2
2133}
2134
2135define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld2r(i8* %A, i8** %ptr, i64 %inc) nounwind {
2136;CHECK-LABEL: test_v16i8_post_reg_ld2r:
2137;CHECK: ld2r.16b { v0, v1 }, [x0], x{{[0-9]+}}
2138 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002139 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002140 store i8* %tmp, i8** %ptr
2141 ret { <16 x i8>, <16 x i8> } %ld2
2142}
2143
2144declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0i8(i8*) nounwind readonly
2145
2146
2147define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld2r(i8* %A, i8** %ptr) nounwind {
2148;CHECK-LABEL: test_v8i8_post_imm_ld2r:
2149;CHECK: ld2r.8b { v0, v1 }, [x0], #2
2150 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002151 %tmp = getelementptr i8, i8* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002152 store i8* %tmp, i8** %ptr
2153 ret { <8 x i8>, <8 x i8> } %ld2
2154}
2155
2156define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld2r(i8* %A, i8** %ptr, i64 %inc) nounwind {
2157;CHECK-LABEL: test_v8i8_post_reg_ld2r:
2158;CHECK: ld2r.8b { v0, v1 }, [x0], x{{[0-9]+}}
2159 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002160 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002161 store i8* %tmp, i8** %ptr
2162 ret { <8 x i8>, <8 x i8> } %ld2
2163}
2164
2165declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0i8(i8*) nounwind readonly
2166
2167
2168define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld2r(i16* %A, i16** %ptr) nounwind {
2169;CHECK-LABEL: test_v8i16_post_imm_ld2r:
2170;CHECK: ld2r.8h { v0, v1 }, [x0], #4
2171 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002172 %tmp = getelementptr i16, i16* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002173 store i16* %tmp, i16** %ptr
2174 ret { <8 x i16>, <8 x i16> } %ld2
2175}
2176
2177define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld2r(i16* %A, i16** %ptr, i64 %inc) nounwind {
2178;CHECK-LABEL: test_v8i16_post_reg_ld2r:
2179;CHECK: ld2r.8h { v0, v1 }, [x0], x{{[0-9]+}}
2180 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002181 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002182 store i16* %tmp, i16** %ptr
2183 ret { <8 x i16>, <8 x i16> } %ld2
2184}
2185
2186declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0i16(i16*) nounwind readonly
2187
2188
2189define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld2r(i16* %A, i16** %ptr) nounwind {
2190;CHECK-LABEL: test_v4i16_post_imm_ld2r:
2191;CHECK: ld2r.4h { v0, v1 }, [x0], #4
2192 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002193 %tmp = getelementptr i16, i16* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002194 store i16* %tmp, i16** %ptr
2195 ret { <4 x i16>, <4 x i16> } %ld2
2196}
2197
2198define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld2r(i16* %A, i16** %ptr, i64 %inc) nounwind {
2199;CHECK-LABEL: test_v4i16_post_reg_ld2r:
2200;CHECK: ld2r.4h { v0, v1 }, [x0], x{{[0-9]+}}
2201 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002202 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002203 store i16* %tmp, i16** %ptr
2204 ret { <4 x i16>, <4 x i16> } %ld2
2205}
2206
2207declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0i16(i16*) nounwind readonly
2208
2209
2210define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld2r(i32* %A, i32** %ptr) nounwind {
2211;CHECK-LABEL: test_v4i32_post_imm_ld2r:
2212;CHECK: ld2r.4s { v0, v1 }, [x0], #8
2213 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002214 %tmp = getelementptr i32, i32* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002215 store i32* %tmp, i32** %ptr
2216 ret { <4 x i32>, <4 x i32> } %ld2
2217}
2218
2219define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld2r(i32* %A, i32** %ptr, i64 %inc) nounwind {
2220;CHECK-LABEL: test_v4i32_post_reg_ld2r:
2221;CHECK: ld2r.4s { v0, v1 }, [x0], x{{[0-9]+}}
2222 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002223 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002224 store i32* %tmp, i32** %ptr
2225 ret { <4 x i32>, <4 x i32> } %ld2
2226}
2227
2228declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0i32(i32*) nounwind readonly
2229
2230define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld2r(i32* %A, i32** %ptr) nounwind {
2231;CHECK-LABEL: test_v2i32_post_imm_ld2r:
2232;CHECK: ld2r.2s { v0, v1 }, [x0], #8
2233 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002234 %tmp = getelementptr i32, i32* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002235 store i32* %tmp, i32** %ptr
2236 ret { <2 x i32>, <2 x i32> } %ld2
2237}
2238
2239define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld2r(i32* %A, i32** %ptr, i64 %inc) nounwind {
2240;CHECK-LABEL: test_v2i32_post_reg_ld2r:
2241;CHECK: ld2r.2s { v0, v1 }, [x0], x{{[0-9]+}}
2242 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002243 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002244 store i32* %tmp, i32** %ptr
2245 ret { <2 x i32>, <2 x i32> } %ld2
2246}
2247
2248declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0i32(i32*) nounwind readonly
2249
2250
2251define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld2r(i64* %A, i64** %ptr) nounwind {
2252;CHECK-LABEL: test_v2i64_post_imm_ld2r:
2253;CHECK: ld2r.2d { v0, v1 }, [x0], #16
2254 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002255 %tmp = getelementptr i64, i64* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002256 store i64* %tmp, i64** %ptr
2257 ret { <2 x i64>, <2 x i64> } %ld2
2258}
2259
2260define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld2r(i64* %A, i64** %ptr, i64 %inc) nounwind {
2261;CHECK-LABEL: test_v2i64_post_reg_ld2r:
2262;CHECK: ld2r.2d { v0, v1 }, [x0], x{{[0-9]+}}
2263 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002264 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002265 store i64* %tmp, i64** %ptr
2266 ret { <2 x i64>, <2 x i64> } %ld2
2267}
2268
2269declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0i64(i64*) nounwind readonly
2270
2271define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld2r(i64* %A, i64** %ptr) nounwind {
2272;CHECK-LABEL: test_v1i64_post_imm_ld2r:
2273;CHECK: ld2r.1d { v0, v1 }, [x0], #16
2274 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002275 %tmp = getelementptr i64, i64* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002276 store i64* %tmp, i64** %ptr
2277 ret { <1 x i64>, <1 x i64> } %ld2
2278}
2279
2280define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld2r(i64* %A, i64** %ptr, i64 %inc) nounwind {
2281;CHECK-LABEL: test_v1i64_post_reg_ld2r:
2282;CHECK: ld2r.1d { v0, v1 }, [x0], x{{[0-9]+}}
2283 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002284 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002285 store i64* %tmp, i64** %ptr
2286 ret { <1 x i64>, <1 x i64> } %ld2
2287}
2288
2289declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0i64(i64*) nounwind readonly
2290
2291
2292define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld2r(float* %A, float** %ptr) nounwind {
2293;CHECK-LABEL: test_v4f32_post_imm_ld2r:
2294;CHECK: ld2r.4s { v0, v1 }, [x0], #8
2295 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2r.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002296 %tmp = getelementptr float, float* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002297 store float* %tmp, float** %ptr
2298 ret { <4 x float>, <4 x float> } %ld2
2299}
2300
2301define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld2r(float* %A, float** %ptr, i64 %inc) nounwind {
2302;CHECK-LABEL: test_v4f32_post_reg_ld2r:
2303;CHECK: ld2r.4s { v0, v1 }, [x0], x{{[0-9]+}}
2304 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2r.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002305 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002306 store float* %tmp, float** %ptr
2307 ret { <4 x float>, <4 x float> } %ld2
2308}
2309
2310declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2r.v4f32.p0f32(float*) nounwind readonly
2311
2312define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld2r(float* %A, float** %ptr) nounwind {
2313;CHECK-LABEL: test_v2f32_post_imm_ld2r:
2314;CHECK: ld2r.2s { v0, v1 }, [x0], #8
2315 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2r.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002316 %tmp = getelementptr float, float* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002317 store float* %tmp, float** %ptr
2318 ret { <2 x float>, <2 x float> } %ld2
2319}
2320
2321define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld2r(float* %A, float** %ptr, i64 %inc) nounwind {
2322;CHECK-LABEL: test_v2f32_post_reg_ld2r:
2323;CHECK: ld2r.2s { v0, v1 }, [x0], x{{[0-9]+}}
2324 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2r.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002325 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002326 store float* %tmp, float** %ptr
2327 ret { <2 x float>, <2 x float> } %ld2
2328}
2329
2330declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2r.v2f32.p0f32(float*) nounwind readonly
2331
2332
2333define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld2r(double* %A, double** %ptr) nounwind {
2334;CHECK-LABEL: test_v2f64_post_imm_ld2r:
2335;CHECK: ld2r.2d { v0, v1 }, [x0], #16
2336 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2r.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002337 %tmp = getelementptr double, double* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002338 store double* %tmp, double** %ptr
2339 ret { <2 x double>, <2 x double> } %ld2
2340}
2341
2342define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld2r(double* %A, double** %ptr, i64 %inc) nounwind {
2343;CHECK-LABEL: test_v2f64_post_reg_ld2r:
2344;CHECK: ld2r.2d { v0, v1 }, [x0], x{{[0-9]+}}
2345 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2r.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002346 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002347 store double* %tmp, double** %ptr
2348 ret { <2 x double>, <2 x double> } %ld2
2349}
2350
2351declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2r.v2f64.p0f64(double*) nounwind readonly
2352
2353define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld2r(double* %A, double** %ptr) nounwind {
2354;CHECK-LABEL: test_v1f64_post_imm_ld2r:
2355;CHECK: ld2r.1d { v0, v1 }, [x0], #16
2356 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2r.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002357 %tmp = getelementptr double, double* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002358 store double* %tmp, double** %ptr
2359 ret { <1 x double>, <1 x double> } %ld2
2360}
2361
2362define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld2r(double* %A, double** %ptr, i64 %inc) nounwind {
2363;CHECK-LABEL: test_v1f64_post_reg_ld2r:
2364;CHECK: ld2r.1d { v0, v1 }, [x0], x{{[0-9]+}}
2365 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2r.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002366 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002367 store double* %tmp, double** %ptr
2368 ret { <1 x double>, <1 x double> } %ld2
2369}
2370
2371declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2r.v1f64.p0f64(double*) nounwind readonly
2372
2373
2374define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld3r(i8* %A, i8** %ptr) nounwind {
2375;CHECK-LABEL: test_v16i8_post_imm_ld3r:
2376;CHECK: ld3r.16b { v0, v1, v2 }, [x0], #3
2377 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002378 %tmp = getelementptr i8, i8* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002379 store i8* %tmp, i8** %ptr
2380 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
2381}
2382
2383define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld3r(i8* %A, i8** %ptr, i64 %inc) nounwind {
2384;CHECK-LABEL: test_v16i8_post_reg_ld3r:
2385;CHECK: ld3r.16b { v0, v1, v2 }, [x0], x{{[0-9]+}}
2386 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002387 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002388 store i8* %tmp, i8** %ptr
2389 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
2390}
2391
2392declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0i8(i8*) nounwind readonly
2393
2394
2395define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld3r(i8* %A, i8** %ptr) nounwind {
2396;CHECK-LABEL: test_v8i8_post_imm_ld3r:
2397;CHECK: ld3r.8b { v0, v1, v2 }, [x0], #3
2398 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002399 %tmp = getelementptr i8, i8* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002400 store i8* %tmp, i8** %ptr
2401 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
2402}
2403
2404define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld3r(i8* %A, i8** %ptr, i64 %inc) nounwind {
2405;CHECK-LABEL: test_v8i8_post_reg_ld3r:
2406;CHECK: ld3r.8b { v0, v1, v2 }, [x0], x{{[0-9]+}}
2407 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002408 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002409 store i8* %tmp, i8** %ptr
2410 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
2411}
2412
2413declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0i8(i8*) nounwind readonly
2414
2415
2416define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld3r(i16* %A, i16** %ptr) nounwind {
2417;CHECK-LABEL: test_v8i16_post_imm_ld3r:
2418;CHECK: ld3r.8h { v0, v1, v2 }, [x0], #6
2419 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002420 %tmp = getelementptr i16, i16* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002421 store i16* %tmp, i16** %ptr
2422 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
2423}
2424
2425define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld3r(i16* %A, i16** %ptr, i64 %inc) nounwind {
2426;CHECK-LABEL: test_v8i16_post_reg_ld3r:
2427;CHECK: ld3r.8h { v0, v1, v2 }, [x0], x{{[0-9]+}}
2428 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002429 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002430 store i16* %tmp, i16** %ptr
2431 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
2432}
2433
2434declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0i16(i16*) nounwind readonly
2435
2436
2437define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld3r(i16* %A, i16** %ptr) nounwind {
2438;CHECK-LABEL: test_v4i16_post_imm_ld3r:
2439;CHECK: ld3r.4h { v0, v1, v2 }, [x0], #6
2440 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002441 %tmp = getelementptr i16, i16* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002442 store i16* %tmp, i16** %ptr
2443 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
2444}
2445
2446define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld3r(i16* %A, i16** %ptr, i64 %inc) nounwind {
2447;CHECK-LABEL: test_v4i16_post_reg_ld3r:
2448;CHECK: ld3r.4h { v0, v1, v2 }, [x0], x{{[0-9]+}}
2449 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002450 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002451 store i16* %tmp, i16** %ptr
2452 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
2453}
2454
2455declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0i16(i16*) nounwind readonly
2456
2457
2458define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld3r(i32* %A, i32** %ptr) nounwind {
2459;CHECK-LABEL: test_v4i32_post_imm_ld3r:
2460;CHECK: ld3r.4s { v0, v1, v2 }, [x0], #12
2461 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002462 %tmp = getelementptr i32, i32* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002463 store i32* %tmp, i32** %ptr
2464 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
2465}
2466
2467define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld3r(i32* %A, i32** %ptr, i64 %inc) nounwind {
2468;CHECK-LABEL: test_v4i32_post_reg_ld3r:
2469;CHECK: ld3r.4s { v0, v1, v2 }, [x0], x{{[0-9]+}}
2470 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002471 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002472 store i32* %tmp, i32** %ptr
2473 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
2474}
2475
2476declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0i32(i32*) nounwind readonly
2477
2478define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld3r(i32* %A, i32** %ptr) nounwind {
2479;CHECK-LABEL: test_v2i32_post_imm_ld3r:
2480;CHECK: ld3r.2s { v0, v1, v2 }, [x0], #12
2481 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002482 %tmp = getelementptr i32, i32* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002483 store i32* %tmp, i32** %ptr
2484 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
2485}
2486
2487define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld3r(i32* %A, i32** %ptr, i64 %inc) nounwind {
2488;CHECK-LABEL: test_v2i32_post_reg_ld3r:
2489;CHECK: ld3r.2s { v0, v1, v2 }, [x0], x{{[0-9]+}}
2490 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002491 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002492 store i32* %tmp, i32** %ptr
2493 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
2494}
2495
2496declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0i32(i32*) nounwind readonly
2497
2498
2499define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld3r(i64* %A, i64** %ptr) nounwind {
2500;CHECK-LABEL: test_v2i64_post_imm_ld3r:
2501;CHECK: ld3r.2d { v0, v1, v2 }, [x0], #24
2502 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002503 %tmp = getelementptr i64, i64* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002504 store i64* %tmp, i64** %ptr
2505 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
2506}
2507
2508define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld3r(i64* %A, i64** %ptr, i64 %inc) nounwind {
2509;CHECK-LABEL: test_v2i64_post_reg_ld3r:
2510;CHECK: ld3r.2d { v0, v1, v2 }, [x0], x{{[0-9]+}}
2511 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002512 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002513 store i64* %tmp, i64** %ptr
2514 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
2515}
2516
2517declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0i64(i64*) nounwind readonly
2518
2519define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld3r(i64* %A, i64** %ptr) nounwind {
2520;CHECK-LABEL: test_v1i64_post_imm_ld3r:
2521;CHECK: ld3r.1d { v0, v1, v2 }, [x0], #24
2522 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002523 %tmp = getelementptr i64, i64* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002524 store i64* %tmp, i64** %ptr
2525 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
2526}
2527
2528define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld3r(i64* %A, i64** %ptr, i64 %inc) nounwind {
2529;CHECK-LABEL: test_v1i64_post_reg_ld3r:
2530;CHECK: ld3r.1d { v0, v1, v2 }, [x0], x{{[0-9]+}}
2531 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002532 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002533 store i64* %tmp, i64** %ptr
2534 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
2535}
2536
2537declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0i64(i64*) nounwind readonly
2538
2539
2540define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld3r(float* %A, float** %ptr) nounwind {
2541;CHECK-LABEL: test_v4f32_post_imm_ld3r:
2542;CHECK: ld3r.4s { v0, v1, v2 }, [x0], #12
2543 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3r.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002544 %tmp = getelementptr float, float* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002545 store float* %tmp, float** %ptr
2546 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
2547}
2548
2549define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld3r(float* %A, float** %ptr, i64 %inc) nounwind {
2550;CHECK-LABEL: test_v4f32_post_reg_ld3r:
2551;CHECK: ld3r.4s { v0, v1, v2 }, [x0], x{{[0-9]+}}
2552 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3r.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002553 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002554 store float* %tmp, float** %ptr
2555 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
2556}
2557
2558declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3r.v4f32.p0f32(float*) nounwind readonly
2559
2560define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld3r(float* %A, float** %ptr) nounwind {
2561;CHECK-LABEL: test_v2f32_post_imm_ld3r:
2562;CHECK: ld3r.2s { v0, v1, v2 }, [x0], #12
2563 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3r.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002564 %tmp = getelementptr float, float* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002565 store float* %tmp, float** %ptr
2566 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
2567}
2568
2569define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld3r(float* %A, float** %ptr, i64 %inc) nounwind {
2570;CHECK-LABEL: test_v2f32_post_reg_ld3r:
2571;CHECK: ld3r.2s { v0, v1, v2 }, [x0], x{{[0-9]+}}
2572 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3r.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002573 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002574 store float* %tmp, float** %ptr
2575 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
2576}
2577
2578declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3r.v2f32.p0f32(float*) nounwind readonly
2579
2580
2581define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld3r(double* %A, double** %ptr) nounwind {
2582;CHECK-LABEL: test_v2f64_post_imm_ld3r:
2583;CHECK: ld3r.2d { v0, v1, v2 }, [x0], #24
2584 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3r.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002585 %tmp = getelementptr double, double* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002586 store double* %tmp, double** %ptr
2587 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
2588}
2589
2590define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld3r(double* %A, double** %ptr, i64 %inc) nounwind {
2591;CHECK-LABEL: test_v2f64_post_reg_ld3r:
2592;CHECK: ld3r.2d { v0, v1, v2 }, [x0], x{{[0-9]+}}
2593 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3r.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002594 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002595 store double* %tmp, double** %ptr
2596 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
2597}
2598
2599declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3r.v2f64.p0f64(double*) nounwind readonly
2600
2601define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld3r(double* %A, double** %ptr) nounwind {
2602;CHECK-LABEL: test_v1f64_post_imm_ld3r:
2603;CHECK: ld3r.1d { v0, v1, v2 }, [x0], #24
2604 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3r.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002605 %tmp = getelementptr double, double* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00002606 store double* %tmp, double** %ptr
2607 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
2608}
2609
2610define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld3r(double* %A, double** %ptr, i64 %inc) nounwind {
2611;CHECK-LABEL: test_v1f64_post_reg_ld3r:
2612;CHECK: ld3r.1d { v0, v1, v2 }, [x0], x{{[0-9]+}}
2613 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3r.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002614 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002615 store double* %tmp, double** %ptr
2616 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
2617}
2618
2619declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3r.v1f64.p0f64(double*) nounwind readonly
2620
2621
2622define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld4r(i8* %A, i8** %ptr) nounwind {
2623;CHECK-LABEL: test_v16i8_post_imm_ld4r:
2624;CHECK: ld4r.16b { v0, v1, v2, v3 }, [x0], #4
2625 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002626 %tmp = getelementptr i8, i8* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002627 store i8* %tmp, i8** %ptr
2628 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
2629}
2630
2631define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld4r(i8* %A, i8** %ptr, i64 %inc) nounwind {
2632;CHECK-LABEL: test_v16i8_post_reg_ld4r:
2633;CHECK: ld4r.16b { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2634 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002635 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002636 store i8* %tmp, i8** %ptr
2637 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
2638}
2639
2640declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0i8(i8*) nounwind readonly
2641
2642
2643define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld4r(i8* %A, i8** %ptr) nounwind {
2644;CHECK-LABEL: test_v8i8_post_imm_ld4r:
2645;CHECK: ld4r.8b { v0, v1, v2, v3 }, [x0], #4
2646 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002647 %tmp = getelementptr i8, i8* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002648 store i8* %tmp, i8** %ptr
2649 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
2650}
2651
2652define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld4r(i8* %A, i8** %ptr, i64 %inc) nounwind {
2653;CHECK-LABEL: test_v8i8_post_reg_ld4r:
2654;CHECK: ld4r.8b { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2655 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0i8(i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002656 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002657 store i8* %tmp, i8** %ptr
2658 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
2659}
2660
2661declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0i8(i8*) nounwind readonly
2662
2663
2664define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld4r(i16* %A, i16** %ptr) nounwind {
2665;CHECK-LABEL: test_v8i16_post_imm_ld4r:
2666;CHECK: ld4r.8h { v0, v1, v2, v3 }, [x0], #8
2667 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002668 %tmp = getelementptr i16, i16* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002669 store i16* %tmp, i16** %ptr
2670 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
2671}
2672
2673define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld4r(i16* %A, i16** %ptr, i64 %inc) nounwind {
2674;CHECK-LABEL: test_v8i16_post_reg_ld4r:
2675;CHECK: ld4r.8h { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2676 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002677 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002678 store i16* %tmp, i16** %ptr
2679 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
2680}
2681
2682declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0i16(i16*) nounwind readonly
2683
2684
2685define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld4r(i16* %A, i16** %ptr) nounwind {
2686;CHECK-LABEL: test_v4i16_post_imm_ld4r:
2687;CHECK: ld4r.4h { v0, v1, v2, v3 }, [x0], #8
2688 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002689 %tmp = getelementptr i16, i16* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002690 store i16* %tmp, i16** %ptr
2691 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
2692}
2693
2694define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld4r(i16* %A, i16** %ptr, i64 %inc) nounwind {
2695;CHECK-LABEL: test_v4i16_post_reg_ld4r:
2696;CHECK: ld4r.4h { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2697 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0i16(i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002698 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002699 store i16* %tmp, i16** %ptr
2700 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
2701}
2702
2703declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0i16(i16*) nounwind readonly
2704
2705
2706define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld4r(i32* %A, i32** %ptr) nounwind {
2707;CHECK-LABEL: test_v4i32_post_imm_ld4r:
2708;CHECK: ld4r.4s { v0, v1, v2, v3 }, [x0], #16
2709 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002710 %tmp = getelementptr i32, i32* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002711 store i32* %tmp, i32** %ptr
2712 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
2713}
2714
2715define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld4r(i32* %A, i32** %ptr, i64 %inc) nounwind {
2716;CHECK-LABEL: test_v4i32_post_reg_ld4r:
2717;CHECK: ld4r.4s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2718 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002719 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002720 store i32* %tmp, i32** %ptr
2721 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
2722}
2723
2724declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0i32(i32*) nounwind readonly
2725
2726define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld4r(i32* %A, i32** %ptr) nounwind {
2727;CHECK-LABEL: test_v2i32_post_imm_ld4r:
2728;CHECK: ld4r.2s { v0, v1, v2, v3 }, [x0], #16
2729 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002730 %tmp = getelementptr i32, i32* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002731 store i32* %tmp, i32** %ptr
2732 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
2733}
2734
2735define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld4r(i32* %A, i32** %ptr, i64 %inc) nounwind {
2736;CHECK-LABEL: test_v2i32_post_reg_ld4r:
2737;CHECK: ld4r.2s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2738 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0i32(i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002739 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002740 store i32* %tmp, i32** %ptr
2741 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
2742}
2743
2744declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0i32(i32*) nounwind readonly
2745
2746
2747define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld4r(i64* %A, i64** %ptr) nounwind {
2748;CHECK-LABEL: test_v2i64_post_imm_ld4r:
2749;CHECK: ld4r.2d { v0, v1, v2, v3 }, [x0], #32
2750 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002751 %tmp = getelementptr i64, i64* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002752 store i64* %tmp, i64** %ptr
2753 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
2754}
2755
2756define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld4r(i64* %A, i64** %ptr, i64 %inc) nounwind {
2757;CHECK-LABEL: test_v2i64_post_reg_ld4r:
2758;CHECK: ld4r.2d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2759 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002760 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002761 store i64* %tmp, i64** %ptr
2762 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
2763}
2764
2765declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0i64(i64*) nounwind readonly
2766
2767define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld4r(i64* %A, i64** %ptr) nounwind {
2768;CHECK-LABEL: test_v1i64_post_imm_ld4r:
2769;CHECK: ld4r.1d { v0, v1, v2, v3 }, [x0], #32
2770 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002771 %tmp = getelementptr i64, i64* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002772 store i64* %tmp, i64** %ptr
2773 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
2774}
2775
2776define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld4r(i64* %A, i64** %ptr, i64 %inc) nounwind {
2777;CHECK-LABEL: test_v1i64_post_reg_ld4r:
2778;CHECK: ld4r.1d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2779 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0i64(i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002780 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002781 store i64* %tmp, i64** %ptr
2782 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
2783}
2784
2785declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0i64(i64*) nounwind readonly
2786
2787
2788define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld4r(float* %A, float** %ptr) nounwind {
2789;CHECK-LABEL: test_v4f32_post_imm_ld4r:
2790;CHECK: ld4r.4s { v0, v1, v2, v3 }, [x0], #16
2791 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4r.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002792 %tmp = getelementptr float, float* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002793 store float* %tmp, float** %ptr
2794 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
2795}
2796
2797define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld4r(float* %A, float** %ptr, i64 %inc) nounwind {
2798;CHECK-LABEL: test_v4f32_post_reg_ld4r:
2799;CHECK: ld4r.4s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2800 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4r.v4f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002801 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002802 store float* %tmp, float** %ptr
2803 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
2804}
2805
2806declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4r.v4f32.p0f32(float*) nounwind readonly
2807
2808define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld4r(float* %A, float** %ptr) nounwind {
2809;CHECK-LABEL: test_v2f32_post_imm_ld4r:
2810;CHECK: ld4r.2s { v0, v1, v2, v3 }, [x0], #16
2811 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4r.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002812 %tmp = getelementptr float, float* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002813 store float* %tmp, float** %ptr
2814 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
2815}
2816
2817define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld4r(float* %A, float** %ptr, i64 %inc) nounwind {
2818;CHECK-LABEL: test_v2f32_post_reg_ld4r:
2819;CHECK: ld4r.2s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2820 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4r.v2f32.p0f32(float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002821 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002822 store float* %tmp, float** %ptr
2823 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
2824}
2825
2826declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4r.v2f32.p0f32(float*) nounwind readonly
2827
2828
2829define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld4r(double* %A, double** %ptr) nounwind {
2830;CHECK-LABEL: test_v2f64_post_imm_ld4r:
2831;CHECK: ld4r.2d { v0, v1, v2, v3 }, [x0], #32
2832 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4r.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002833 %tmp = getelementptr double, double* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002834 store double* %tmp, double** %ptr
2835 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
2836}
2837
2838define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld4r(double* %A, double** %ptr, i64 %inc) nounwind {
2839;CHECK-LABEL: test_v2f64_post_reg_ld4r:
2840;CHECK: ld4r.2d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2841 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4r.v2f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002842 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002843 store double* %tmp, double** %ptr
2844 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
2845}
2846
2847declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4r.v2f64.p0f64(double*) nounwind readonly
2848
2849define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld4r(double* %A, double** %ptr) nounwind {
2850;CHECK-LABEL: test_v1f64_post_imm_ld4r:
2851;CHECK: ld4r.1d { v0, v1, v2, v3 }, [x0], #32
2852 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4r.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002853 %tmp = getelementptr double, double* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00002854 store double* %tmp, double** %ptr
2855 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
2856}
2857
2858define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld4r(double* %A, double** %ptr, i64 %inc) nounwind {
2859;CHECK-LABEL: test_v1f64_post_reg_ld4r:
2860;CHECK: ld4r.1d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
2861 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4r.v1f64.p0f64(double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002862 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002863 store double* %tmp, double** %ptr
2864 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
2865}
2866
2867declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4r.v1f64.p0f64(double*) nounwind readonly
2868
2869
2870define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld2lane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
2871;CHECK-LABEL: test_v16i8_post_imm_ld2lane:
2872;CHECK: ld2.b { v0, v1 }[0], [x0], #2
2873 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002874 %tmp = getelementptr i8, i8* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002875 store i8* %tmp, i8** %ptr
2876 ret { <16 x i8>, <16 x i8> } %ld2
2877}
2878
2879define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld2lane(i8* %A, i8** %ptr, i64 %inc, <16 x i8> %B, <16 x i8> %C) nounwind {
2880;CHECK-LABEL: test_v16i8_post_reg_ld2lane:
2881;CHECK: ld2.b { v0, v1 }[0], [x0], x{{[0-9]+}}
2882 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002883 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002884 store i8* %tmp, i8** %ptr
2885 ret { <16 x i8>, <16 x i8> } %ld2
2886}
2887
2888declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0i8(<16 x i8>, <16 x i8>, i64, i8*) nounwind readonly
2889
2890
2891define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld2lane(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
2892;CHECK-LABEL: test_v8i8_post_imm_ld2lane:
2893;CHECK: ld2.b { v0, v1 }[0], [x0], #2
2894 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002895 %tmp = getelementptr i8, i8* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002896 store i8* %tmp, i8** %ptr
2897 ret { <8 x i8>, <8 x i8> } %ld2
2898}
2899
2900define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld2lane(i8* %A, i8** %ptr, i64 %inc, <8 x i8> %B, <8 x i8> %C) nounwind {
2901;CHECK-LABEL: test_v8i8_post_reg_ld2lane:
2902;CHECK: ld2.b { v0, v1 }[0], [x0], x{{[0-9]+}}
2903 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002904 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002905 store i8* %tmp, i8** %ptr
2906 ret { <8 x i8>, <8 x i8> } %ld2
2907}
2908
2909declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2lane.v8i8.p0i8(<8 x i8>, <8 x i8>, i64, i8*) nounwind readonly
2910
2911
2912define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld2lane(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
2913;CHECK-LABEL: test_v8i16_post_imm_ld2lane:
2914;CHECK: ld2.h { v0, v1 }[0], [x0], #4
2915 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002916 %tmp = getelementptr i16, i16* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002917 store i16* %tmp, i16** %ptr
2918 ret { <8 x i16>, <8 x i16> } %ld2
2919}
2920
2921define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld2lane(i16* %A, i16** %ptr, i64 %inc, <8 x i16> %B, <8 x i16> %C) nounwind {
2922;CHECK-LABEL: test_v8i16_post_reg_ld2lane:
2923;CHECK: ld2.h { v0, v1 }[0], [x0], x{{[0-9]+}}
2924 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002925 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002926 store i16* %tmp, i16** %ptr
2927 ret { <8 x i16>, <8 x i16> } %ld2
2928}
2929
2930declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0i16(<8 x i16>, <8 x i16>, i64, i16*) nounwind readonly
2931
2932
2933define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld2lane(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
2934;CHECK-LABEL: test_v4i16_post_imm_ld2lane:
2935;CHECK: ld2.h { v0, v1 }[0], [x0], #4
2936 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002937 %tmp = getelementptr i16, i16* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002938 store i16* %tmp, i16** %ptr
2939 ret { <4 x i16>, <4 x i16> } %ld2
2940}
2941
2942define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld2lane(i16* %A, i16** %ptr, i64 %inc, <4 x i16> %B, <4 x i16> %C) nounwind {
2943;CHECK-LABEL: test_v4i16_post_reg_ld2lane:
2944;CHECK: ld2.h { v0, v1 }[0], [x0], x{{[0-9]+}}
2945 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002946 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002947 store i16* %tmp, i16** %ptr
2948 ret { <4 x i16>, <4 x i16> } %ld2
2949}
2950
2951declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2lane.v4i16.p0i16(<4 x i16>, <4 x i16>, i64, i16*) nounwind readonly
2952
2953
2954define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld2lane(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
2955;CHECK-LABEL: test_v4i32_post_imm_ld2lane:
2956;CHECK: ld2.s { v0, v1 }[0], [x0], #8
2957 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002958 %tmp = getelementptr i32, i32* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002959 store i32* %tmp, i32** %ptr
2960 ret { <4 x i32>, <4 x i32> } %ld2
2961}
2962
2963define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld2lane(i32* %A, i32** %ptr, i64 %inc, <4 x i32> %B, <4 x i32> %C) nounwind {
2964;CHECK-LABEL: test_v4i32_post_reg_ld2lane:
2965;CHECK: ld2.s { v0, v1 }[0], [x0], x{{[0-9]+}}
2966 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002967 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002968 store i32* %tmp, i32** %ptr
2969 ret { <4 x i32>, <4 x i32> } %ld2
2970}
2971
2972declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0i32(<4 x i32>, <4 x i32>, i64, i32*) nounwind readonly
2973
2974
2975define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld2lane(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
2976;CHECK-LABEL: test_v2i32_post_imm_ld2lane:
2977;CHECK: ld2.s { v0, v1 }[0], [x0], #8
2978 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002979 %tmp = getelementptr i32, i32* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00002980 store i32* %tmp, i32** %ptr
2981 ret { <2 x i32>, <2 x i32> } %ld2
2982}
2983
2984define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld2lane(i32* %A, i32** %ptr, i64 %inc, <2 x i32> %B, <2 x i32> %C) nounwind {
2985;CHECK-LABEL: test_v2i32_post_reg_ld2lane:
2986;CHECK: ld2.s { v0, v1 }[0], [x0], x{{[0-9]+}}
2987 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00002988 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00002989 store i32* %tmp, i32** %ptr
2990 ret { <2 x i32>, <2 x i32> } %ld2
2991}
2992
2993declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2lane.v2i32.p0i32(<2 x i32>, <2 x i32>, i64, i32*) nounwind readonly
2994
2995
2996define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld2lane(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
2997;CHECK-LABEL: test_v2i64_post_imm_ld2lane:
2998;CHECK: ld2.d { v0, v1 }[0], [x0], #16
2999 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003000 %tmp = getelementptr i64, i64* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00003001 store i64* %tmp, i64** %ptr
3002 ret { <2 x i64>, <2 x i64> } %ld2
3003}
3004
3005define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld2lane(i64* %A, i64** %ptr, i64 %inc, <2 x i64> %B, <2 x i64> %C) nounwind {
3006;CHECK-LABEL: test_v2i64_post_reg_ld2lane:
3007;CHECK: ld2.d { v0, v1 }[0], [x0], x{{[0-9]+}}
3008 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003009 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003010 store i64* %tmp, i64** %ptr
3011 ret { <2 x i64>, <2 x i64> } %ld2
3012}
3013
3014declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0i64(<2 x i64>, <2 x i64>, i64, i64*) nounwind readonly
3015
3016
3017define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld2lane(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
3018;CHECK-LABEL: test_v1i64_post_imm_ld2lane:
3019;CHECK: ld2.d { v0, v1 }[0], [x0], #16
3020 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003021 %tmp = getelementptr i64, i64* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00003022 store i64* %tmp, i64** %ptr
3023 ret { <1 x i64>, <1 x i64> } %ld2
3024}
3025
3026define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld2lane(i64* %A, i64** %ptr, i64 %inc, <1 x i64> %B, <1 x i64> %C) nounwind {
3027;CHECK-LABEL: test_v1i64_post_reg_ld2lane:
3028;CHECK: ld2.d { v0, v1 }[0], [x0], x{{[0-9]+}}
3029 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003030 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003031 store i64* %tmp, i64** %ptr
3032 ret { <1 x i64>, <1 x i64> } %ld2
3033}
3034
3035declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2lane.v1i64.p0i64(<1 x i64>, <1 x i64>, i64, i64*) nounwind readonly
3036
3037
3038define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld2lane(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C) nounwind {
3039;CHECK-LABEL: test_v4f32_post_imm_ld2lane:
3040;CHECK: ld2.s { v0, v1 }[0], [x0], #8
3041 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003042 %tmp = getelementptr float, float* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00003043 store float* %tmp, float** %ptr
3044 ret { <4 x float>, <4 x float> } %ld2
3045}
3046
3047define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld2lane(float* %A, float** %ptr, i64 %inc, <4 x float> %B, <4 x float> %C) nounwind {
3048;CHECK-LABEL: test_v4f32_post_reg_ld2lane:
3049;CHECK: ld2.s { v0, v1 }[0], [x0], x{{[0-9]+}}
3050 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003051 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003052 store float* %tmp, float** %ptr
3053 ret { <4 x float>, <4 x float> } %ld2
3054}
3055
3056declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2lane.v4f32.p0f32(<4 x float>, <4 x float>, i64, float*) nounwind readonly
3057
3058
3059define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld2lane(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C) nounwind {
3060;CHECK-LABEL: test_v2f32_post_imm_ld2lane:
3061;CHECK: ld2.s { v0, v1 }[0], [x0], #8
3062 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003063 %tmp = getelementptr float, float* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00003064 store float* %tmp, float** %ptr
3065 ret { <2 x float>, <2 x float> } %ld2
3066}
3067
3068define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld2lane(float* %A, float** %ptr, i64 %inc, <2 x float> %B, <2 x float> %C) nounwind {
3069;CHECK-LABEL: test_v2f32_post_reg_ld2lane:
3070;CHECK: ld2.s { v0, v1 }[0], [x0], x{{[0-9]+}}
3071 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003072 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003073 store float* %tmp, float** %ptr
3074 ret { <2 x float>, <2 x float> } %ld2
3075}
3076
3077declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2lane.v2f32.p0f32(<2 x float>, <2 x float>, i64, float*) nounwind readonly
3078
3079
3080define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld2lane(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C) nounwind {
3081;CHECK-LABEL: test_v2f64_post_imm_ld2lane:
3082;CHECK: ld2.d { v0, v1 }[0], [x0], #16
3083 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003084 %tmp = getelementptr double, double* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00003085 store double* %tmp, double** %ptr
3086 ret { <2 x double>, <2 x double> } %ld2
3087}
3088
3089define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld2lane(double* %A, double** %ptr, i64 %inc, <2 x double> %B, <2 x double> %C) nounwind {
3090;CHECK-LABEL: test_v2f64_post_reg_ld2lane:
3091;CHECK: ld2.d { v0, v1 }[0], [x0], x{{[0-9]+}}
3092 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003093 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003094 store double* %tmp, double** %ptr
3095 ret { <2 x double>, <2 x double> } %ld2
3096}
3097
3098declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2lane.v2f64.p0f64(<2 x double>, <2 x double>, i64, double*) nounwind readonly
3099
3100
3101define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld2lane(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C) nounwind {
3102;CHECK-LABEL: test_v1f64_post_imm_ld2lane:
3103;CHECK: ld2.d { v0, v1 }[0], [x0], #16
3104 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003105 %tmp = getelementptr double, double* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00003106 store double* %tmp, double** %ptr
3107 ret { <1 x double>, <1 x double> } %ld2
3108}
3109
3110define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld2lane(double* %A, double** %ptr, i64 %inc, <1 x double> %B, <1 x double> %C) nounwind {
3111;CHECK-LABEL: test_v1f64_post_reg_ld2lane:
3112;CHECK: ld2.d { v0, v1 }[0], [x0], x{{[0-9]+}}
3113 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003114 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003115 store double* %tmp, double** %ptr
3116 ret { <1 x double>, <1 x double> } %ld2
3117}
3118
3119declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2lane.v1f64.p0f64(<1 x double>, <1 x double>, i64, double*) nounwind readonly
3120
3121
3122define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld3lane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
3123;CHECK-LABEL: test_v16i8_post_imm_ld3lane:
3124;CHECK: ld3.b { v0, v1, v2 }[0], [x0], #3
3125 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003126 %tmp = getelementptr i8, i8* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003127 store i8* %tmp, i8** %ptr
3128 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
3129}
3130
3131define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld3lane(i8* %A, i8** %ptr, i64 %inc, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
3132;CHECK-LABEL: test_v16i8_post_reg_ld3lane:
3133;CHECK: ld3.b { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3134 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003135 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003136 store i8* %tmp, i8** %ptr
3137 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
3138}
3139
3140declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, i64, i8*) nounwind readonly
3141
3142
3143define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld3lane(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
3144;CHECK-LABEL: test_v8i8_post_imm_ld3lane:
3145;CHECK: ld3.b { v0, v1, v2 }[0], [x0], #3
3146 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003147 %tmp = getelementptr i8, i8* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003148 store i8* %tmp, i8** %ptr
3149 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
3150}
3151
3152define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld3lane(i8* %A, i8** %ptr, i64 %inc, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
3153;CHECK-LABEL: test_v8i8_post_reg_ld3lane:
3154;CHECK: ld3.b { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3155 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003156 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003157 store i8* %tmp, i8** %ptr
3158 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
3159}
3160
3161declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3lane.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, i64, i8*) nounwind readonly
3162
3163
3164define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld3lane(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
3165;CHECK-LABEL: test_v8i16_post_imm_ld3lane:
3166;CHECK: ld3.h { v0, v1, v2 }[0], [x0], #6
3167 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003168 %tmp = getelementptr i16, i16* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003169 store i16* %tmp, i16** %ptr
3170 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
3171}
3172
3173define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld3lane(i16* %A, i16** %ptr, i64 %inc, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
3174;CHECK-LABEL: test_v8i16_post_reg_ld3lane:
3175;CHECK: ld3.h { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3176 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003177 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003178 store i16* %tmp, i16** %ptr
3179 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
3180}
3181
3182declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, i64, i16*) nounwind readonly
3183
3184
3185define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld3lane(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
3186;CHECK-LABEL: test_v4i16_post_imm_ld3lane:
3187;CHECK: ld3.h { v0, v1, v2 }[0], [x0], #6
3188 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003189 %tmp = getelementptr i16, i16* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003190 store i16* %tmp, i16** %ptr
3191 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
3192}
3193
3194define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld3lane(i16* %A, i16** %ptr, i64 %inc, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
3195;CHECK-LABEL: test_v4i16_post_reg_ld3lane:
3196;CHECK: ld3.h { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3197 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003198 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003199 store i16* %tmp, i16** %ptr
3200 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
3201}
3202
3203declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3lane.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>, i64, i16*) nounwind readonly
3204
3205
3206define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld3lane(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
3207;CHECK-LABEL: test_v4i32_post_imm_ld3lane:
3208;CHECK: ld3.s { v0, v1, v2 }[0], [x0], #12
3209 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003210 %tmp = getelementptr i32, i32* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003211 store i32* %tmp, i32** %ptr
3212 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
3213}
3214
3215define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld3lane(i32* %A, i32** %ptr, i64 %inc, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
3216;CHECK-LABEL: test_v4i32_post_reg_ld3lane:
3217;CHECK: ld3.s { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3218 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003219 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003220 store i32* %tmp, i32** %ptr
3221 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
3222}
3223
3224declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32>, i64, i32*) nounwind readonly
3225
3226
3227define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld3lane(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
3228;CHECK-LABEL: test_v2i32_post_imm_ld3lane:
3229;CHECK: ld3.s { v0, v1, v2 }[0], [x0], #12
3230 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003231 %tmp = getelementptr i32, i32* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003232 store i32* %tmp, i32** %ptr
3233 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
3234}
3235
3236define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld3lane(i32* %A, i32** %ptr, i64 %inc, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
3237;CHECK-LABEL: test_v2i32_post_reg_ld3lane:
3238;CHECK: ld3.s { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3239 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003240 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003241 store i32* %tmp, i32** %ptr
3242 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
3243}
3244
3245declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3lane.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, i64, i32*) nounwind readonly
3246
3247
3248define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld3lane(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
3249;CHECK-LABEL: test_v2i64_post_imm_ld3lane:
3250;CHECK: ld3.d { v0, v1, v2 }[0], [x0], #24
3251 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003252 %tmp = getelementptr i64, i64* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003253 store i64* %tmp, i64** %ptr
3254 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
3255}
3256
3257define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld3lane(i64* %A, i64** %ptr, i64 %inc, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
3258;CHECK-LABEL: test_v2i64_post_reg_ld3lane:
3259;CHECK: ld3.d { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3260 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003261 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003262 store i64* %tmp, i64** %ptr
3263 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
3264}
3265
3266declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0i64(<2 x i64>, <2 x i64>, <2 x i64>, i64, i64*) nounwind readonly
3267
3268
3269define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld3lane(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
3270;CHECK-LABEL: test_v1i64_post_imm_ld3lane:
3271;CHECK: ld3.d { v0, v1, v2 }[0], [x0], #24
3272 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003273 %tmp = getelementptr i64, i64* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003274 store i64* %tmp, i64** %ptr
3275 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
3276}
3277
3278define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld3lane(i64* %A, i64** %ptr, i64 %inc, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
3279;CHECK-LABEL: test_v1i64_post_reg_ld3lane:
3280;CHECK: ld3.d { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3281 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003282 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003283 store i64* %tmp, i64** %ptr
3284 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
3285}
3286
3287declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3lane.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>, i64, i64*) nounwind readonly
3288
3289
3290define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld3lane(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
3291;CHECK-LABEL: test_v4f32_post_imm_ld3lane:
3292;CHECK: ld3.s { v0, v1, v2 }[0], [x0], #12
3293 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003294 %tmp = getelementptr float, float* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003295 store float* %tmp, float** %ptr
3296 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
3297}
3298
3299define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld3lane(float* %A, float** %ptr, i64 %inc, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
3300;CHECK-LABEL: test_v4f32_post_reg_ld3lane:
3301;CHECK: ld3.s { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3302 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003303 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003304 store float* %tmp, float** %ptr
3305 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
3306}
3307
3308declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3lane.v4f32.p0f32(<4 x float>, <4 x float>, <4 x float>, i64, float*) nounwind readonly
3309
3310
3311define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld3lane(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
3312;CHECK-LABEL: test_v2f32_post_imm_ld3lane:
3313;CHECK: ld3.s { v0, v1, v2 }[0], [x0], #12
3314 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003315 %tmp = getelementptr float, float* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003316 store float* %tmp, float** %ptr
3317 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
3318}
3319
3320define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld3lane(float* %A, float** %ptr, i64 %inc, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
3321;CHECK-LABEL: test_v2f32_post_reg_ld3lane:
3322;CHECK: ld3.s { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3323 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003324 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003325 store float* %tmp, float** %ptr
3326 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
3327}
3328
3329declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3lane.v2f32.p0f32(<2 x float>, <2 x float>, <2 x float>, i64, float*) nounwind readonly
3330
3331
3332define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld3lane(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
3333;CHECK-LABEL: test_v2f64_post_imm_ld3lane:
3334;CHECK: ld3.d { v0, v1, v2 }[0], [x0], #24
3335 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003336 %tmp = getelementptr double, double* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003337 store double* %tmp, double** %ptr
3338 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
3339}
3340
3341define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld3lane(double* %A, double** %ptr, i64 %inc, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
3342;CHECK-LABEL: test_v2f64_post_reg_ld3lane:
3343;CHECK: ld3.d { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3344 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003345 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003346 store double* %tmp, double** %ptr
3347 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
3348}
3349
3350declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3lane.v2f64.p0f64(<2 x double>, <2 x double>, <2 x double>, i64, double*) nounwind readonly
3351
3352
3353define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld3lane(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
3354;CHECK-LABEL: test_v1f64_post_imm_ld3lane:
3355;CHECK: ld3.d { v0, v1, v2 }[0], [x0], #24
3356 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003357 %tmp = getelementptr double, double* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003358 store double* %tmp, double** %ptr
3359 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
3360}
3361
3362define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld3lane(double* %A, double** %ptr, i64 %inc, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
3363;CHECK-LABEL: test_v1f64_post_reg_ld3lane:
3364;CHECK: ld3.d { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
3365 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003366 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003367 store double* %tmp, double** %ptr
3368 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
3369}
3370
3371declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3lane.v1f64.p0f64(<1 x double>, <1 x double>, <1 x double>, i64, double*) nounwind readonly
3372
3373
3374define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld4lane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
3375;CHECK-LABEL: test_v16i8_post_imm_ld4lane:
3376;CHECK: ld4.b { v0, v1, v2, v3 }[0], [x0], #4
3377 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003378 %tmp = getelementptr i8, i8* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003379 store i8* %tmp, i8** %ptr
3380 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
3381}
3382
3383define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld4lane(i8* %A, i8** %ptr, i64 %inc, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
3384;CHECK-LABEL: test_v16i8_post_reg_ld4lane:
3385;CHECK: ld4.b { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3386 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003387 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003388 store i8* %tmp, i8** %ptr
3389 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
3390}
3391
3392declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i64, i8*) nounwind readonly
3393
3394
3395define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld4lane(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
3396;CHECK-LABEL: test_v8i8_post_imm_ld4lane:
3397;CHECK: ld4.b { v0, v1, v2, v3 }[0], [x0], #4
3398 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003399 %tmp = getelementptr i8, i8* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003400 store i8* %tmp, i8** %ptr
3401 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
3402}
3403
3404define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld4lane(i8* %A, i8** %ptr, i64 %inc, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
3405;CHECK-LABEL: test_v8i8_post_reg_ld4lane:
3406;CHECK: ld4.b { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3407 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003408 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003409 store i8* %tmp, i8** %ptr
3410 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
3411}
3412
3413declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4lane.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i64, i8*) nounwind readonly
3414
3415
3416define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld4lane(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
3417;CHECK-LABEL: test_v8i16_post_imm_ld4lane:
3418;CHECK: ld4.h { v0, v1, v2, v3 }[0], [x0], #8
3419 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003420 %tmp = getelementptr i16, i16* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003421 store i16* %tmp, i16** %ptr
3422 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
3423}
3424
3425define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld4lane(i16* %A, i16** %ptr, i64 %inc, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
3426;CHECK-LABEL: test_v8i16_post_reg_ld4lane:
3427;CHECK: ld4.h { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3428 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003429 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003430 store i16* %tmp, i16** %ptr
3431 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
3432}
3433
3434declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i64, i16*) nounwind readonly
3435
3436
3437define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld4lane(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
3438;CHECK-LABEL: test_v4i16_post_imm_ld4lane:
3439;CHECK: ld4.h { v0, v1, v2, v3 }[0], [x0], #8
3440 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003441 %tmp = getelementptr i16, i16* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003442 store i16* %tmp, i16** %ptr
3443 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
3444}
3445
3446define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld4lane(i16* %A, i16** %ptr, i64 %inc, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
3447;CHECK-LABEL: test_v4i16_post_reg_ld4lane:
3448;CHECK: ld4.h { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3449 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003450 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003451 store i16* %tmp, i16** %ptr
3452 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
3453}
3454
3455declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4lane.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i64, i16*) nounwind readonly
3456
3457
3458define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld4lane(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
3459;CHECK-LABEL: test_v4i32_post_imm_ld4lane:
3460;CHECK: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
3461 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003462 %tmp = getelementptr i32, i32* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003463 store i32* %tmp, i32** %ptr
3464 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
3465}
3466
3467define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld4lane(i32* %A, i32** %ptr, i64 %inc, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
3468;CHECK-LABEL: test_v4i32_post_reg_ld4lane:
3469;CHECK: ld4.s { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3470 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003471 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003472 store i32* %tmp, i32** %ptr
3473 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
3474}
3475
3476declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i64, i32*) nounwind readonly
3477
3478
3479define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld4lane(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
3480;CHECK-LABEL: test_v2i32_post_imm_ld4lane:
3481;CHECK: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
3482 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003483 %tmp = getelementptr i32, i32* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003484 store i32* %tmp, i32** %ptr
3485 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
3486}
3487
3488define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld4lane(i32* %A, i32** %ptr, i64 %inc, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
3489;CHECK-LABEL: test_v2i32_post_reg_ld4lane:
3490;CHECK: ld4.s { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3491 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003492 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003493 store i32* %tmp, i32** %ptr
3494 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
3495}
3496
3497declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4lane.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i64, i32*) nounwind readonly
3498
3499
3500define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld4lane(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
3501;CHECK-LABEL: test_v2i64_post_imm_ld4lane:
3502;CHECK: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
3503 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003504 %tmp = getelementptr i64, i64* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003505 store i64* %tmp, i64** %ptr
3506 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
3507}
3508
3509define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld4lane(i64* %A, i64** %ptr, i64 %inc, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
3510;CHECK-LABEL: test_v2i64_post_reg_ld4lane:
3511;CHECK: ld4.d { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3512 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003513 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003514 store i64* %tmp, i64** %ptr
3515 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
3516}
3517
3518declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0i64(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, i64*) nounwind readonly
3519
3520
3521define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld4lane(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
3522;CHECK-LABEL: test_v1i64_post_imm_ld4lane:
3523;CHECK: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
3524 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003525 %tmp = getelementptr i64, i64* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003526 store i64* %tmp, i64** %ptr
3527 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
3528}
3529
3530define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld4lane(i64* %A, i64** %ptr, i64 %inc, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
3531;CHECK-LABEL: test_v1i64_post_reg_ld4lane:
3532;CHECK: ld4.d { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3533 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003534 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003535 store i64* %tmp, i64** %ptr
3536 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
3537}
3538
3539declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4lane.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>, i64, i64*) nounwind readonly
3540
3541
3542define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld4lane(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
3543;CHECK-LABEL: test_v4f32_post_imm_ld4lane:
3544;CHECK: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
3545 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003546 %tmp = getelementptr float, float* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003547 store float* %tmp, float** %ptr
3548 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
3549}
3550
3551define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld4lane(float* %A, float** %ptr, i64 %inc, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
3552;CHECK-LABEL: test_v4f32_post_reg_ld4lane:
3553;CHECK: ld4.s { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3554 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003555 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003556 store float* %tmp, float** %ptr
3557 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
3558}
3559
3560declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4lane.v4f32.p0f32(<4 x float>, <4 x float>, <4 x float>, <4 x float>, i64, float*) nounwind readonly
3561
3562
3563define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld4lane(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
3564;CHECK-LABEL: test_v2f32_post_imm_ld4lane:
3565;CHECK: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
3566 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003567 %tmp = getelementptr float, float* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003568 store float* %tmp, float** %ptr
3569 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
3570}
3571
3572define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld4lane(float* %A, float** %ptr, i64 %inc, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
3573;CHECK-LABEL: test_v2f32_post_reg_ld4lane:
3574;CHECK: ld4.s { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3575 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003576 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003577 store float* %tmp, float** %ptr
3578 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
3579}
3580
3581declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4lane.v2f32.p0f32(<2 x float>, <2 x float>, <2 x float>, <2 x float>, i64, float*) nounwind readonly
3582
3583
3584define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld4lane(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
3585;CHECK-LABEL: test_v2f64_post_imm_ld4lane:
3586;CHECK: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
3587 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003588 %tmp = getelementptr double, double* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003589 store double* %tmp, double** %ptr
3590 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
3591}
3592
3593define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld4lane(double* %A, double** %ptr, i64 %inc, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
3594;CHECK-LABEL: test_v2f64_post_reg_ld4lane:
3595;CHECK: ld4.d { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3596 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003597 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003598 store double* %tmp, double** %ptr
3599 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
3600}
3601
3602declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4lane.v2f64.p0f64(<2 x double>, <2 x double>, <2 x double>, <2 x double>, i64, double*) nounwind readonly
3603
3604
3605define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld4lane(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
3606;CHECK-LABEL: test_v1f64_post_imm_ld4lane:
3607;CHECK: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
3608 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003609 %tmp = getelementptr double, double* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003610 store double* %tmp, double** %ptr
3611 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
3612}
3613
3614define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld4lane(double* %A, double** %ptr, i64 %inc, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
3615;CHECK-LABEL: test_v1f64_post_reg_ld4lane:
3616;CHECK: ld4.d { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
3617 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003618 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003619 store double* %tmp, double** %ptr
3620 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
3621}
3622
3623declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4lane.v1f64.p0f64(<1 x double>, <1 x double>, <1 x double>, <1 x double>, i64, double*) nounwind readonly
3624
3625
3626define i8* @test_v16i8_post_imm_st2(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
3627;CHECK-LABEL: test_v16i8_post_imm_st2:
3628;CHECK: st2.16b { v0, v1 }, [x0], #32
3629 call void @llvm.aarch64.neon.st2.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003630 %tmp = getelementptr i8, i8* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00003631 ret i8* %tmp
3632}
3633
3634define i8* @test_v16i8_post_reg_st2(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, i64 %inc) nounwind {
3635;CHECK-LABEL: test_v16i8_post_reg_st2:
3636;CHECK: st2.16b { v0, v1 }, [x0], x{{[0-9]+}}
3637 call void @llvm.aarch64.neon.st2.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003638 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003639 ret i8* %tmp
3640}
3641
3642declare void @llvm.aarch64.neon.st2.v16i8.p0i8(<16 x i8>, <16 x i8>, i8*)
3643
3644
3645define i8* @test_v8i8_post_imm_st2(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
3646;CHECK-LABEL: test_v8i8_post_imm_st2:
3647;CHECK: st2.8b { v0, v1 }, [x0], #16
3648 call void @llvm.aarch64.neon.st2.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003649 %tmp = getelementptr i8, i8* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00003650 ret i8* %tmp
3651}
3652
3653define i8* @test_v8i8_post_reg_st2(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, i64 %inc) nounwind {
3654;CHECK-LABEL: test_v8i8_post_reg_st2:
3655;CHECK: st2.8b { v0, v1 }, [x0], x{{[0-9]+}}
3656 call void @llvm.aarch64.neon.st2.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003657 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003658 ret i8* %tmp
3659}
3660
3661declare void @llvm.aarch64.neon.st2.v8i8.p0i8(<8 x i8>, <8 x i8>, i8*)
3662
3663
3664define i16* @test_v8i16_post_imm_st2(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
3665;CHECK-LABEL: test_v8i16_post_imm_st2:
3666;CHECK: st2.8h { v0, v1 }, [x0], #32
3667 call void @llvm.aarch64.neon.st2.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003668 %tmp = getelementptr i16, i16* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00003669 ret i16* %tmp
3670}
3671
3672define i16* @test_v8i16_post_reg_st2(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, i64 %inc) nounwind {
3673;CHECK-LABEL: test_v8i16_post_reg_st2:
3674;CHECK: st2.8h { v0, v1 }, [x0], x{{[0-9]+}}
3675 call void @llvm.aarch64.neon.st2.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003676 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003677 ret i16* %tmp
3678}
3679
3680declare void @llvm.aarch64.neon.st2.v8i16.p0i16(<8 x i16>, <8 x i16>, i16*)
3681
3682
3683define i16* @test_v4i16_post_imm_st2(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
3684;CHECK-LABEL: test_v4i16_post_imm_st2:
3685;CHECK: st2.4h { v0, v1 }, [x0], #16
3686 call void @llvm.aarch64.neon.st2.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003687 %tmp = getelementptr i16, i16* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00003688 ret i16* %tmp
3689}
3690
3691define i16* @test_v4i16_post_reg_st2(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, i64 %inc) nounwind {
3692;CHECK-LABEL: test_v4i16_post_reg_st2:
3693;CHECK: st2.4h { v0, v1 }, [x0], x{{[0-9]+}}
3694 call void @llvm.aarch64.neon.st2.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003695 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003696 ret i16* %tmp
3697}
3698
3699declare void @llvm.aarch64.neon.st2.v4i16.p0i16(<4 x i16>, <4 x i16>, i16*)
3700
3701
3702define i32* @test_v4i32_post_imm_st2(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
3703;CHECK-LABEL: test_v4i32_post_imm_st2:
3704;CHECK: st2.4s { v0, v1 }, [x0], #32
3705 call void @llvm.aarch64.neon.st2.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003706 %tmp = getelementptr i32, i32* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00003707 ret i32* %tmp
3708}
3709
3710define i32* @test_v4i32_post_reg_st2(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, i64 %inc) nounwind {
3711;CHECK-LABEL: test_v4i32_post_reg_st2:
3712;CHECK: st2.4s { v0, v1 }, [x0], x{{[0-9]+}}
3713 call void @llvm.aarch64.neon.st2.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003714 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003715 ret i32* %tmp
3716}
3717
3718declare void @llvm.aarch64.neon.st2.v4i32.p0i32(<4 x i32>, <4 x i32>, i32*)
3719
3720
3721define i32* @test_v2i32_post_imm_st2(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
3722;CHECK-LABEL: test_v2i32_post_imm_st2:
3723;CHECK: st2.2s { v0, v1 }, [x0], #16
3724 call void @llvm.aarch64.neon.st2.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003725 %tmp = getelementptr i32, i32* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003726 ret i32* %tmp
3727}
3728
3729define i32* @test_v2i32_post_reg_st2(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, i64 %inc) nounwind {
3730;CHECK-LABEL: test_v2i32_post_reg_st2:
3731;CHECK: st2.2s { v0, v1 }, [x0], x{{[0-9]+}}
3732 call void @llvm.aarch64.neon.st2.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003733 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003734 ret i32* %tmp
3735}
3736
3737declare void @llvm.aarch64.neon.st2.v2i32.p0i32(<2 x i32>, <2 x i32>, i32*)
3738
3739
3740define i64* @test_v2i64_post_imm_st2(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
3741;CHECK-LABEL: test_v2i64_post_imm_st2:
3742;CHECK: st2.2d { v0, v1 }, [x0], #32
3743 call void @llvm.aarch64.neon.st2.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003744 %tmp = getelementptr i64, i64* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003745 ret i64* %tmp
3746}
3747
3748define i64* @test_v2i64_post_reg_st2(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, i64 %inc) nounwind {
3749;CHECK-LABEL: test_v2i64_post_reg_st2:
3750;CHECK: st2.2d { v0, v1 }, [x0], x{{[0-9]+}}
3751 call void @llvm.aarch64.neon.st2.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003752 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003753 ret i64* %tmp
3754}
3755
3756declare void @llvm.aarch64.neon.st2.v2i64.p0i64(<2 x i64>, <2 x i64>, i64*)
3757
3758
3759define i64* @test_v1i64_post_imm_st2(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
3760;CHECK-LABEL: test_v1i64_post_imm_st2:
3761;CHECK: st1.1d { v0, v1 }, [x0], #16
3762 call void @llvm.aarch64.neon.st2.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003763 %tmp = getelementptr i64, i64* %A, i64 2
Tim Northover3b0846e2014-05-24 12:50:23 +00003764 ret i64* %tmp
3765}
3766
3767define i64* @test_v1i64_post_reg_st2(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, i64 %inc) nounwind {
3768;CHECK-LABEL: test_v1i64_post_reg_st2:
3769;CHECK: st1.1d { v0, v1 }, [x0], x{{[0-9]+}}
3770 call void @llvm.aarch64.neon.st2.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003771 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003772 ret i64* %tmp
3773}
3774
3775declare void @llvm.aarch64.neon.st2.v1i64.p0i64(<1 x i64>, <1 x i64>, i64*)
3776
3777
3778define float* @test_v4f32_post_imm_st2(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C) nounwind {
3779;CHECK-LABEL: test_v4f32_post_imm_st2:
3780;CHECK: st2.4s { v0, v1 }, [x0], #32
3781 call void @llvm.aarch64.neon.st2.v4f32.p0f32(<4 x float> %B, <4 x float> %C, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003782 %tmp = getelementptr float, float* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00003783 ret float* %tmp
3784}
3785
3786define float* @test_v4f32_post_reg_st2(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, i64 %inc) nounwind {
3787;CHECK-LABEL: test_v4f32_post_reg_st2:
3788;CHECK: st2.4s { v0, v1 }, [x0], x{{[0-9]+}}
3789 call void @llvm.aarch64.neon.st2.v4f32.p0f32(<4 x float> %B, <4 x float> %C, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003790 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003791 ret float* %tmp
3792}
3793
3794declare void @llvm.aarch64.neon.st2.v4f32.p0f32(<4 x float>, <4 x float>, float*)
3795
3796
3797define float* @test_v2f32_post_imm_st2(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C) nounwind {
3798;CHECK-LABEL: test_v2f32_post_imm_st2:
3799;CHECK: st2.2s { v0, v1 }, [x0], #16
3800 call void @llvm.aarch64.neon.st2.v2f32.p0f32(<2 x float> %B, <2 x float> %C, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003801 %tmp = getelementptr float, float* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003802 ret float* %tmp
3803}
3804
3805define float* @test_v2f32_post_reg_st2(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, i64 %inc) nounwind {
3806;CHECK-LABEL: test_v2f32_post_reg_st2:
3807;CHECK: st2.2s { v0, v1 }, [x0], x{{[0-9]+}}
3808 call void @llvm.aarch64.neon.st2.v2f32.p0f32(<2 x float> %B, <2 x float> %C, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003809 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003810 ret float* %tmp
3811}
3812
3813declare void @llvm.aarch64.neon.st2.v2f32.p0f32(<2 x float>, <2 x float>, float*)
3814
3815
3816define double* @test_v2f64_post_imm_st2(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C) nounwind {
3817;CHECK-LABEL: test_v2f64_post_imm_st2:
3818;CHECK: st2.2d { v0, v1 }, [x0], #32
3819 call void @llvm.aarch64.neon.st2.v2f64.p0f64(<2 x double> %B, <2 x double> %C, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003820 %tmp = getelementptr double, double* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00003821 ret double* %tmp
3822}
3823
3824define double* @test_v2f64_post_reg_st2(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, i64 %inc) nounwind {
3825;CHECK-LABEL: test_v2f64_post_reg_st2:
3826;CHECK: st2.2d { v0, v1 }, [x0], x{{[0-9]+}}
3827 call void @llvm.aarch64.neon.st2.v2f64.p0f64(<2 x double> %B, <2 x double> %C, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003828 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003829 ret double* %tmp
3830}
3831
3832declare void @llvm.aarch64.neon.st2.v2f64.p0f64(<2 x double>, <2 x double>, double*)
3833
3834
3835define double* @test_v1f64_post_imm_st2(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C) nounwind {
3836;CHECK-LABEL: test_v1f64_post_imm_st2:
3837;CHECK: st1.1d { v0, v1 }, [x0], #16
3838 call void @llvm.aarch64.neon.st2.v1f64.p0f64(<1 x double> %B, <1 x double> %C, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003839 %tmp = getelementptr double, double* %A, i64 2
Tim Northover3b0846e2014-05-24 12:50:23 +00003840 ret double* %tmp
3841}
3842
3843define double* @test_v1f64_post_reg_st2(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, i64 %inc) nounwind {
3844;CHECK-LABEL: test_v1f64_post_reg_st2:
3845;CHECK: st1.1d { v0, v1 }, [x0], x{{[0-9]+}}
3846 call void @llvm.aarch64.neon.st2.v1f64.p0f64(<1 x double> %B, <1 x double> %C, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003847 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003848 ret double* %tmp
3849}
3850
3851declare void @llvm.aarch64.neon.st2.v1f64.p0f64(<1 x double>, <1 x double>, double*)
3852
3853
3854define i8* @test_v16i8_post_imm_st3(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
3855;CHECK-LABEL: test_v16i8_post_imm_st3:
3856;CHECK: st3.16b { v0, v1, v2 }, [x0], #48
3857 call void @llvm.aarch64.neon.st3.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003858 %tmp = getelementptr i8, i8* %A, i32 48
Tim Northover3b0846e2014-05-24 12:50:23 +00003859 ret i8* %tmp
3860}
3861
3862define i8* @test_v16i8_post_reg_st3(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 %inc) nounwind {
3863;CHECK-LABEL: test_v16i8_post_reg_st3:
3864;CHECK: st3.16b { v0, v1, v2 }, [x0], x{{[0-9]+}}
3865 call void @llvm.aarch64.neon.st3.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003866 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003867 ret i8* %tmp
3868}
3869
3870declare void @llvm.aarch64.neon.st3.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, i8*)
3871
3872
3873define i8* @test_v8i8_post_imm_st3(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
3874;CHECK-LABEL: test_v8i8_post_imm_st3:
3875;CHECK: st3.8b { v0, v1, v2 }, [x0], #24
3876 call void @llvm.aarch64.neon.st3.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003877 %tmp = getelementptr i8, i8* %A, i32 24
Tim Northover3b0846e2014-05-24 12:50:23 +00003878 ret i8* %tmp
3879}
3880
3881define i8* @test_v8i8_post_reg_st3(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 %inc) nounwind {
3882;CHECK-LABEL: test_v8i8_post_reg_st3:
3883;CHECK: st3.8b { v0, v1, v2 }, [x0], x{{[0-9]+}}
3884 call void @llvm.aarch64.neon.st3.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003885 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003886 ret i8* %tmp
3887}
3888
3889declare void @llvm.aarch64.neon.st3.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, i8*)
3890
3891
3892define i16* @test_v8i16_post_imm_st3(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
3893;CHECK-LABEL: test_v8i16_post_imm_st3:
3894;CHECK: st3.8h { v0, v1, v2 }, [x0], #48
3895 call void @llvm.aarch64.neon.st3.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003896 %tmp = getelementptr i16, i16* %A, i32 24
Tim Northover3b0846e2014-05-24 12:50:23 +00003897 ret i16* %tmp
3898}
3899
3900define i16* @test_v8i16_post_reg_st3(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 %inc) nounwind {
3901;CHECK-LABEL: test_v8i16_post_reg_st3:
3902;CHECK: st3.8h { v0, v1, v2 }, [x0], x{{[0-9]+}}
3903 call void @llvm.aarch64.neon.st3.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003904 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003905 ret i16* %tmp
3906}
3907
3908declare void @llvm.aarch64.neon.st3.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, i16*)
3909
3910
3911define i16* @test_v4i16_post_imm_st3(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
3912;CHECK-LABEL: test_v4i16_post_imm_st3:
3913;CHECK: st3.4h { v0, v1, v2 }, [x0], #24
3914 call void @llvm.aarch64.neon.st3.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003915 %tmp = getelementptr i16, i16* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +00003916 ret i16* %tmp
3917}
3918
3919define i16* @test_v4i16_post_reg_st3(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 %inc) nounwind {
3920;CHECK-LABEL: test_v4i16_post_reg_st3:
3921;CHECK: st3.4h { v0, v1, v2 }, [x0], x{{[0-9]+}}
3922 call void @llvm.aarch64.neon.st3.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003923 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003924 ret i16* %tmp
3925}
3926
3927declare void @llvm.aarch64.neon.st3.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>, i16*)
3928
3929
3930define i32* @test_v4i32_post_imm_st3(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
3931;CHECK-LABEL: test_v4i32_post_imm_st3:
3932;CHECK: st3.4s { v0, v1, v2 }, [x0], #48
3933 call void @llvm.aarch64.neon.st3.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003934 %tmp = getelementptr i32, i32* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +00003935 ret i32* %tmp
3936}
3937
3938define i32* @test_v4i32_post_reg_st3(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 %inc) nounwind {
3939;CHECK-LABEL: test_v4i32_post_reg_st3:
3940;CHECK: st3.4s { v0, v1, v2 }, [x0], x{{[0-9]+}}
3941 call void @llvm.aarch64.neon.st3.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003942 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003943 ret i32* %tmp
3944}
3945
3946declare void @llvm.aarch64.neon.st3.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32>, i32*)
3947
3948
3949define i32* @test_v2i32_post_imm_st3(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
3950;CHECK-LABEL: test_v2i32_post_imm_st3:
3951;CHECK: st3.2s { v0, v1, v2 }, [x0], #24
3952 call void @llvm.aarch64.neon.st3.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003953 %tmp = getelementptr i32, i32* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +00003954 ret i32* %tmp
3955}
3956
3957define i32* @test_v2i32_post_reg_st3(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 %inc) nounwind {
3958;CHECK-LABEL: test_v2i32_post_reg_st3:
3959;CHECK: st3.2s { v0, v1, v2 }, [x0], x{{[0-9]+}}
3960 call void @llvm.aarch64.neon.st3.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003961 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003962 ret i32* %tmp
3963}
3964
3965declare void @llvm.aarch64.neon.st3.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, i32*)
3966
3967
3968define i64* @test_v2i64_post_imm_st3(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
3969;CHECK-LABEL: test_v2i64_post_imm_st3:
3970;CHECK: st3.2d { v0, v1, v2 }, [x0], #48
3971 call void @llvm.aarch64.neon.st3.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003972 %tmp = getelementptr i64, i64* %A, i64 6
Tim Northover3b0846e2014-05-24 12:50:23 +00003973 ret i64* %tmp
3974}
3975
3976define i64* @test_v2i64_post_reg_st3(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 %inc) nounwind {
3977;CHECK-LABEL: test_v2i64_post_reg_st3:
3978;CHECK: st3.2d { v0, v1, v2 }, [x0], x{{[0-9]+}}
3979 call void @llvm.aarch64.neon.st3.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003980 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00003981 ret i64* %tmp
3982}
3983
3984declare void @llvm.aarch64.neon.st3.v2i64.p0i64(<2 x i64>, <2 x i64>, <2 x i64>, i64*)
3985
3986
3987define i64* @test_v1i64_post_imm_st3(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
3988;CHECK-LABEL: test_v1i64_post_imm_st3:
3989;CHECK: st1.1d { v0, v1, v2 }, [x0], #24
3990 call void @llvm.aarch64.neon.st3.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003991 %tmp = getelementptr i64, i64* %A, i64 3
Tim Northover3b0846e2014-05-24 12:50:23 +00003992 ret i64* %tmp
3993}
3994
3995define i64* @test_v1i64_post_reg_st3(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 %inc) nounwind {
3996;CHECK-LABEL: test_v1i64_post_reg_st3:
3997;CHECK: st1.1d { v0, v1, v2 }, [x0], x{{[0-9]+}}
3998 call void @llvm.aarch64.neon.st3.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00003999 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004000 ret i64* %tmp
4001}
4002
4003declare void @llvm.aarch64.neon.st3.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>, i64*)
4004
4005
4006define float* @test_v4f32_post_imm_st3(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
4007;CHECK-LABEL: test_v4f32_post_imm_st3:
4008;CHECK: st3.4s { v0, v1, v2 }, [x0], #48
4009 call void @llvm.aarch64.neon.st3.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004010 %tmp = getelementptr float, float* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +00004011 ret float* %tmp
4012}
4013
4014define float* @test_v4f32_post_reg_st3(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, i64 %inc) nounwind {
4015;CHECK-LABEL: test_v4f32_post_reg_st3:
4016;CHECK: st3.4s { v0, v1, v2 }, [x0], x{{[0-9]+}}
4017 call void @llvm.aarch64.neon.st3.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004018 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004019 ret float* %tmp
4020}
4021
4022declare void @llvm.aarch64.neon.st3.v4f32.p0f32(<4 x float>, <4 x float>, <4 x float>, float*)
4023
4024
4025define float* @test_v2f32_post_imm_st3(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
4026;CHECK-LABEL: test_v2f32_post_imm_st3:
4027;CHECK: st3.2s { v0, v1, v2 }, [x0], #24
4028 call void @llvm.aarch64.neon.st3.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004029 %tmp = getelementptr float, float* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +00004030 ret float* %tmp
4031}
4032
4033define float* @test_v2f32_post_reg_st3(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, i64 %inc) nounwind {
4034;CHECK-LABEL: test_v2f32_post_reg_st3:
4035;CHECK: st3.2s { v0, v1, v2 }, [x0], x{{[0-9]+}}
4036 call void @llvm.aarch64.neon.st3.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004037 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004038 ret float* %tmp
4039}
4040
4041declare void @llvm.aarch64.neon.st3.v2f32.p0f32(<2 x float>, <2 x float>, <2 x float>, float*)
4042
4043
4044define double* @test_v2f64_post_imm_st3(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
4045;CHECK-LABEL: test_v2f64_post_imm_st3:
4046;CHECK: st3.2d { v0, v1, v2 }, [x0], #48
4047 call void @llvm.aarch64.neon.st3.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004048 %tmp = getelementptr double, double* %A, i64 6
Tim Northover3b0846e2014-05-24 12:50:23 +00004049 ret double* %tmp
4050}
4051
4052define double* @test_v2f64_post_reg_st3(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, i64 %inc) nounwind {
4053;CHECK-LABEL: test_v2f64_post_reg_st3:
4054;CHECK: st3.2d { v0, v1, v2 }, [x0], x{{[0-9]+}}
4055 call void @llvm.aarch64.neon.st3.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004056 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004057 ret double* %tmp
4058}
4059
4060declare void @llvm.aarch64.neon.st3.v2f64.p0f64(<2 x double>, <2 x double>, <2 x double>, double*)
4061
4062
4063define double* @test_v1f64_post_imm_st3(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
4064;CHECK-LABEL: test_v1f64_post_imm_st3:
4065;CHECK: st1.1d { v0, v1, v2 }, [x0], #24
4066 call void @llvm.aarch64.neon.st3.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004067 %tmp = getelementptr double, double* %A, i64 3
Tim Northover3b0846e2014-05-24 12:50:23 +00004068 ret double* %tmp
4069}
4070
4071define double* @test_v1f64_post_reg_st3(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, i64 %inc) nounwind {
4072;CHECK-LABEL: test_v1f64_post_reg_st3:
4073;CHECK: st1.1d { v0, v1, v2 }, [x0], x{{[0-9]+}}
4074 call void @llvm.aarch64.neon.st3.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004075 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004076 ret double* %tmp
4077}
4078
4079declare void @llvm.aarch64.neon.st3.v1f64.p0f64(<1 x double>, <1 x double>, <1 x double>, double*)
4080
4081
4082define i8* @test_v16i8_post_imm_st4(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
4083;CHECK-LABEL: test_v16i8_post_imm_st4:
4084;CHECK: st4.16b { v0, v1, v2, v3 }, [x0], #64
4085 call void @llvm.aarch64.neon.st4.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004086 %tmp = getelementptr i8, i8* %A, i32 64
Tim Northover3b0846e2014-05-24 12:50:23 +00004087 ret i8* %tmp
4088}
4089
4090define i8* @test_v16i8_post_reg_st4(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 %inc) nounwind {
4091;CHECK-LABEL: test_v16i8_post_reg_st4:
4092;CHECK: st4.16b { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4093 call void @llvm.aarch64.neon.st4.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004094 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004095 ret i8* %tmp
4096}
4097
4098declare void @llvm.aarch64.neon.st4.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i8*)
4099
4100
4101define i8* @test_v8i8_post_imm_st4(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
4102;CHECK-LABEL: test_v8i8_post_imm_st4:
4103;CHECK: st4.8b { v0, v1, v2, v3 }, [x0], #32
4104 call void @llvm.aarch64.neon.st4.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004105 %tmp = getelementptr i8, i8* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00004106 ret i8* %tmp
4107}
4108
4109define i8* @test_v8i8_post_reg_st4(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 %inc) nounwind {
4110;CHECK-LABEL: test_v8i8_post_reg_st4:
4111;CHECK: st4.8b { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4112 call void @llvm.aarch64.neon.st4.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004113 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004114 ret i8* %tmp
4115}
4116
4117declare void @llvm.aarch64.neon.st4.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i8*)
4118
4119
4120define i16* @test_v8i16_post_imm_st4(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
4121;CHECK-LABEL: test_v8i16_post_imm_st4:
4122;CHECK: st4.8h { v0, v1, v2, v3 }, [x0], #64
4123 call void @llvm.aarch64.neon.st4.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004124 %tmp = getelementptr i16, i16* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00004125 ret i16* %tmp
4126}
4127
4128define i16* @test_v8i16_post_reg_st4(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 %inc) nounwind {
4129;CHECK-LABEL: test_v8i16_post_reg_st4:
4130;CHECK: st4.8h { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4131 call void @llvm.aarch64.neon.st4.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004132 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004133 ret i16* %tmp
4134}
4135
4136declare void @llvm.aarch64.neon.st4.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i16*)
4137
4138
4139define i16* @test_v4i16_post_imm_st4(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
4140;CHECK-LABEL: test_v4i16_post_imm_st4:
4141;CHECK: st4.4h { v0, v1, v2, v3 }, [x0], #32
4142 call void @llvm.aarch64.neon.st4.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004143 %tmp = getelementptr i16, i16* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00004144 ret i16* %tmp
4145}
4146
4147define i16* @test_v4i16_post_reg_st4(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 %inc) nounwind {
4148;CHECK-LABEL: test_v4i16_post_reg_st4:
4149;CHECK: st4.4h { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4150 call void @llvm.aarch64.neon.st4.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004151 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004152 ret i16* %tmp
4153}
4154
4155declare void @llvm.aarch64.neon.st4.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>,<4 x i16>, i16*)
4156
4157
4158define i32* @test_v4i32_post_imm_st4(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
4159;CHECK-LABEL: test_v4i32_post_imm_st4:
4160;CHECK: st4.4s { v0, v1, v2, v3 }, [x0], #64
4161 call void @llvm.aarch64.neon.st4.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004162 %tmp = getelementptr i32, i32* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00004163 ret i32* %tmp
4164}
4165
4166define i32* @test_v4i32_post_reg_st4(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 %inc) nounwind {
4167;CHECK-LABEL: test_v4i32_post_reg_st4:
4168;CHECK: st4.4s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4169 call void @llvm.aarch64.neon.st4.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004170 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004171 ret i32* %tmp
4172}
4173
4174declare void @llvm.aarch64.neon.st4.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32>,<4 x i32>, i32*)
4175
4176
4177define i32* @test_v2i32_post_imm_st4(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
4178;CHECK-LABEL: test_v2i32_post_imm_st4:
4179;CHECK: st4.2s { v0, v1, v2, v3 }, [x0], #32
4180 call void @llvm.aarch64.neon.st4.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004181 %tmp = getelementptr i32, i32* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004182 ret i32* %tmp
4183}
4184
4185define i32* @test_v2i32_post_reg_st4(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 %inc) nounwind {
4186;CHECK-LABEL: test_v2i32_post_reg_st4:
4187;CHECK: st4.2s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4188 call void @llvm.aarch64.neon.st4.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004189 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004190 ret i32* %tmp
4191}
4192
4193declare void @llvm.aarch64.neon.st4.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32*)
4194
4195
4196define i64* @test_v2i64_post_imm_st4(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
4197;CHECK-LABEL: test_v2i64_post_imm_st4:
4198;CHECK: st4.2d { v0, v1, v2, v3 }, [x0], #64
4199 call void @llvm.aarch64.neon.st4.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004200 %tmp = getelementptr i64, i64* %A, i64 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004201 ret i64* %tmp
4202}
4203
4204define i64* @test_v2i64_post_reg_st4(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 %inc) nounwind {
4205;CHECK-LABEL: test_v2i64_post_reg_st4:
4206;CHECK: st4.2d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4207 call void @llvm.aarch64.neon.st4.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004208 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004209 ret i64* %tmp
4210}
4211
4212declare void @llvm.aarch64.neon.st4.v2i64.p0i64(<2 x i64>, <2 x i64>, <2 x i64>,<2 x i64>, i64*)
4213
4214
4215define i64* @test_v1i64_post_imm_st4(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
4216;CHECK-LABEL: test_v1i64_post_imm_st4:
4217;CHECK: st1.1d { v0, v1, v2, v3 }, [x0], #32
4218 call void @llvm.aarch64.neon.st4.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004219 %tmp = getelementptr i64, i64* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00004220 ret i64* %tmp
4221}
4222
4223define i64* @test_v1i64_post_reg_st4(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 %inc) nounwind {
4224;CHECK-LABEL: test_v1i64_post_reg_st4:
4225;CHECK: st1.1d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4226 call void @llvm.aarch64.neon.st4.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004227 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004228 ret i64* %tmp
4229}
4230
4231declare void @llvm.aarch64.neon.st4.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>,<1 x i64>, i64*)
4232
4233
4234define float* @test_v4f32_post_imm_st4(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
4235;CHECK-LABEL: test_v4f32_post_imm_st4:
4236;CHECK: st4.4s { v0, v1, v2, v3 }, [x0], #64
4237 call void @llvm.aarch64.neon.st4.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004238 %tmp = getelementptr float, float* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00004239 ret float* %tmp
4240}
4241
4242define float* @test_v4f32_post_reg_st4(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 %inc) nounwind {
4243;CHECK-LABEL: test_v4f32_post_reg_st4:
4244;CHECK: st4.4s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4245 call void @llvm.aarch64.neon.st4.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004246 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004247 ret float* %tmp
4248}
4249
4250declare void @llvm.aarch64.neon.st4.v4f32.p0f32(<4 x float>, <4 x float>, <4 x float>, <4 x float>, float*)
4251
4252
4253define float* @test_v2f32_post_imm_st4(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
4254;CHECK-LABEL: test_v2f32_post_imm_st4:
4255;CHECK: st4.2s { v0, v1, v2, v3 }, [x0], #32
4256 call void @llvm.aarch64.neon.st4.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004257 %tmp = getelementptr float, float* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004258 ret float* %tmp
4259}
4260
4261define float* @test_v2f32_post_reg_st4(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 %inc) nounwind {
4262;CHECK-LABEL: test_v2f32_post_reg_st4:
4263;CHECK: st4.2s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4264 call void @llvm.aarch64.neon.st4.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004265 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004266 ret float* %tmp
4267}
4268
4269declare void @llvm.aarch64.neon.st4.v2f32.p0f32(<2 x float>, <2 x float>, <2 x float>, <2 x float>, float*)
4270
4271
4272define double* @test_v2f64_post_imm_st4(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
4273;CHECK-LABEL: test_v2f64_post_imm_st4:
4274;CHECK: st4.2d { v0, v1, v2, v3 }, [x0], #64
4275 call void @llvm.aarch64.neon.st4.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004276 %tmp = getelementptr double, double* %A, i64 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004277 ret double* %tmp
4278}
4279
4280define double* @test_v2f64_post_reg_st4(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 %inc) nounwind {
4281;CHECK-LABEL: test_v2f64_post_reg_st4:
4282;CHECK: st4.2d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4283 call void @llvm.aarch64.neon.st4.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004284 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004285 ret double* %tmp
4286}
4287
4288declare void @llvm.aarch64.neon.st4.v2f64.p0f64(<2 x double>, <2 x double>, <2 x double>,<2 x double>, double*)
4289
4290
4291define double* @test_v1f64_post_imm_st4(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
4292;CHECK-LABEL: test_v1f64_post_imm_st4:
4293;CHECK: st1.1d { v0, v1, v2, v3 }, [x0], #32
4294 call void @llvm.aarch64.neon.st4.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004295 %tmp = getelementptr double, double* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00004296 ret double* %tmp
4297}
4298
4299define double* @test_v1f64_post_reg_st4(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 %inc) nounwind {
4300;CHECK-LABEL: test_v1f64_post_reg_st4:
4301;CHECK: st1.1d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4302 call void @llvm.aarch64.neon.st4.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004303 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004304 ret double* %tmp
4305}
4306
4307declare void @llvm.aarch64.neon.st4.v1f64.p0f64(<1 x double>, <1 x double>, <1 x double>, <1 x double>, double*)
4308
4309
4310define i8* @test_v16i8_post_imm_st1x2(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
4311;CHECK-LABEL: test_v16i8_post_imm_st1x2:
4312;CHECK: st1.16b { v0, v1 }, [x0], #32
4313 call void @llvm.aarch64.neon.st1x2.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004314 %tmp = getelementptr i8, i8* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00004315 ret i8* %tmp
4316}
4317
4318define i8* @test_v16i8_post_reg_st1x2(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, i64 %inc) nounwind {
4319;CHECK-LABEL: test_v16i8_post_reg_st1x2:
4320;CHECK: st1.16b { v0, v1 }, [x0], x{{[0-9]+}}
4321 call void @llvm.aarch64.neon.st1x2.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004322 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004323 ret i8* %tmp
4324}
4325
4326declare void @llvm.aarch64.neon.st1x2.v16i8.p0i8(<16 x i8>, <16 x i8>, i8*)
4327
4328
4329define i8* @test_v8i8_post_imm_st1x2(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
4330;CHECK-LABEL: test_v8i8_post_imm_st1x2:
4331;CHECK: st1.8b { v0, v1 }, [x0], #16
4332 call void @llvm.aarch64.neon.st1x2.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004333 %tmp = getelementptr i8, i8* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00004334 ret i8* %tmp
4335}
4336
4337define i8* @test_v8i8_post_reg_st1x2(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, i64 %inc) nounwind {
4338;CHECK-LABEL: test_v8i8_post_reg_st1x2:
4339;CHECK: st1.8b { v0, v1 }, [x0], x{{[0-9]+}}
4340 call void @llvm.aarch64.neon.st1x2.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004341 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004342 ret i8* %tmp
4343}
4344
4345declare void @llvm.aarch64.neon.st1x2.v8i8.p0i8(<8 x i8>, <8 x i8>, i8*)
4346
4347
4348define i16* @test_v8i16_post_imm_st1x2(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
4349;CHECK-LABEL: test_v8i16_post_imm_st1x2:
4350;CHECK: st1.8h { v0, v1 }, [x0], #32
4351 call void @llvm.aarch64.neon.st1x2.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004352 %tmp = getelementptr i16, i16* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00004353 ret i16* %tmp
4354}
4355
4356define i16* @test_v8i16_post_reg_st1x2(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, i64 %inc) nounwind {
4357;CHECK-LABEL: test_v8i16_post_reg_st1x2:
4358;CHECK: st1.8h { v0, v1 }, [x0], x{{[0-9]+}}
4359 call void @llvm.aarch64.neon.st1x2.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004360 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004361 ret i16* %tmp
4362}
4363
4364declare void @llvm.aarch64.neon.st1x2.v8i16.p0i16(<8 x i16>, <8 x i16>, i16*)
4365
4366
4367define i16* @test_v4i16_post_imm_st1x2(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
4368;CHECK-LABEL: test_v4i16_post_imm_st1x2:
4369;CHECK: st1.4h { v0, v1 }, [x0], #16
4370 call void @llvm.aarch64.neon.st1x2.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004371 %tmp = getelementptr i16, i16* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004372 ret i16* %tmp
4373}
4374
4375define i16* @test_v4i16_post_reg_st1x2(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, i64 %inc) nounwind {
4376;CHECK-LABEL: test_v4i16_post_reg_st1x2:
4377;CHECK: st1.4h { v0, v1 }, [x0], x{{[0-9]+}}
4378 call void @llvm.aarch64.neon.st1x2.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004379 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004380 ret i16* %tmp
4381}
4382
4383declare void @llvm.aarch64.neon.st1x2.v4i16.p0i16(<4 x i16>, <4 x i16>, i16*)
4384
4385
4386define i32* @test_v4i32_post_imm_st1x2(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
4387;CHECK-LABEL: test_v4i32_post_imm_st1x2:
4388;CHECK: st1.4s { v0, v1 }, [x0], #32
4389 call void @llvm.aarch64.neon.st1x2.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004390 %tmp = getelementptr i32, i32* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004391 ret i32* %tmp
4392}
4393
4394define i32* @test_v4i32_post_reg_st1x2(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, i64 %inc) nounwind {
4395;CHECK-LABEL: test_v4i32_post_reg_st1x2:
4396;CHECK: st1.4s { v0, v1 }, [x0], x{{[0-9]+}}
4397 call void @llvm.aarch64.neon.st1x2.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004398 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004399 ret i32* %tmp
4400}
4401
4402declare void @llvm.aarch64.neon.st1x2.v4i32.p0i32(<4 x i32>, <4 x i32>, i32*)
4403
4404
4405define i32* @test_v2i32_post_imm_st1x2(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
4406;CHECK-LABEL: test_v2i32_post_imm_st1x2:
4407;CHECK: st1.2s { v0, v1 }, [x0], #16
4408 call void @llvm.aarch64.neon.st1x2.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004409 %tmp = getelementptr i32, i32* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00004410 ret i32* %tmp
4411}
4412
4413define i32* @test_v2i32_post_reg_st1x2(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, i64 %inc) nounwind {
4414;CHECK-LABEL: test_v2i32_post_reg_st1x2:
4415;CHECK: st1.2s { v0, v1 }, [x0], x{{[0-9]+}}
4416 call void @llvm.aarch64.neon.st1x2.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004417 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004418 ret i32* %tmp
4419}
4420
4421declare void @llvm.aarch64.neon.st1x2.v2i32.p0i32(<2 x i32>, <2 x i32>, i32*)
4422
4423
4424define i64* @test_v2i64_post_imm_st1x2(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
4425;CHECK-LABEL: test_v2i64_post_imm_st1x2:
4426;CHECK: st1.2d { v0, v1 }, [x0], #32
4427 call void @llvm.aarch64.neon.st1x2.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004428 %tmp = getelementptr i64, i64* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00004429 ret i64* %tmp
4430}
4431
4432define i64* @test_v2i64_post_reg_st1x2(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, i64 %inc) nounwind {
4433;CHECK-LABEL: test_v2i64_post_reg_st1x2:
4434;CHECK: st1.2d { v0, v1 }, [x0], x{{[0-9]+}}
4435 call void @llvm.aarch64.neon.st1x2.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004436 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004437 ret i64* %tmp
4438}
4439
4440declare void @llvm.aarch64.neon.st1x2.v2i64.p0i64(<2 x i64>, <2 x i64>, i64*)
4441
4442
4443define i64* @test_v1i64_post_imm_st1x2(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
4444;CHECK-LABEL: test_v1i64_post_imm_st1x2:
4445;CHECK: st1.1d { v0, v1 }, [x0], #16
4446 call void @llvm.aarch64.neon.st1x2.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004447 %tmp = getelementptr i64, i64* %A, i64 2
Tim Northover3b0846e2014-05-24 12:50:23 +00004448 ret i64* %tmp
4449}
4450
4451define i64* @test_v1i64_post_reg_st1x2(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, i64 %inc) nounwind {
4452;CHECK-LABEL: test_v1i64_post_reg_st1x2:
4453;CHECK: st1.1d { v0, v1 }, [x0], x{{[0-9]+}}
4454 call void @llvm.aarch64.neon.st1x2.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004455 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004456 ret i64* %tmp
4457}
4458
4459declare void @llvm.aarch64.neon.st1x2.v1i64.p0i64(<1 x i64>, <1 x i64>, i64*)
4460
4461
4462define float* @test_v4f32_post_imm_st1x2(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C) nounwind {
4463;CHECK-LABEL: test_v4f32_post_imm_st1x2:
4464;CHECK: st1.4s { v0, v1 }, [x0], #32
4465 call void @llvm.aarch64.neon.st1x2.v4f32.p0f32(<4 x float> %B, <4 x float> %C, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004466 %tmp = getelementptr float, float* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004467 ret float* %tmp
4468}
4469
4470define float* @test_v4f32_post_reg_st1x2(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, i64 %inc) nounwind {
4471;CHECK-LABEL: test_v4f32_post_reg_st1x2:
4472;CHECK: st1.4s { v0, v1 }, [x0], x{{[0-9]+}}
4473 call void @llvm.aarch64.neon.st1x2.v4f32.p0f32(<4 x float> %B, <4 x float> %C, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004474 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004475 ret float* %tmp
4476}
4477
4478declare void @llvm.aarch64.neon.st1x2.v4f32.p0f32(<4 x float>, <4 x float>, float*)
4479
4480
4481define float* @test_v2f32_post_imm_st1x2(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C) nounwind {
4482;CHECK-LABEL: test_v2f32_post_imm_st1x2:
4483;CHECK: st1.2s { v0, v1 }, [x0], #16
4484 call void @llvm.aarch64.neon.st1x2.v2f32.p0f32(<2 x float> %B, <2 x float> %C, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004485 %tmp = getelementptr float, float* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00004486 ret float* %tmp
4487}
4488
4489define float* @test_v2f32_post_reg_st1x2(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, i64 %inc) nounwind {
4490;CHECK-LABEL: test_v2f32_post_reg_st1x2:
4491;CHECK: st1.2s { v0, v1 }, [x0], x{{[0-9]+}}
4492 call void @llvm.aarch64.neon.st1x2.v2f32.p0f32(<2 x float> %B, <2 x float> %C, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004493 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004494 ret float* %tmp
4495}
4496
4497declare void @llvm.aarch64.neon.st1x2.v2f32.p0f32(<2 x float>, <2 x float>, float*)
4498
4499
4500define double* @test_v2f64_post_imm_st1x2(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C) nounwind {
4501;CHECK-LABEL: test_v2f64_post_imm_st1x2:
4502;CHECK: st1.2d { v0, v1 }, [x0], #32
4503 call void @llvm.aarch64.neon.st1x2.v2f64.p0f64(<2 x double> %B, <2 x double> %C, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004504 %tmp = getelementptr double, double* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00004505 ret double* %tmp
4506}
4507
4508define double* @test_v2f64_post_reg_st1x2(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, i64 %inc) nounwind {
4509;CHECK-LABEL: test_v2f64_post_reg_st1x2:
4510;CHECK: st1.2d { v0, v1 }, [x0], x{{[0-9]+}}
4511 call void @llvm.aarch64.neon.st1x2.v2f64.p0f64(<2 x double> %B, <2 x double> %C, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004512 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004513 ret double* %tmp
4514}
4515
4516declare void @llvm.aarch64.neon.st1x2.v2f64.p0f64(<2 x double>, <2 x double>, double*)
4517
4518
4519define double* @test_v1f64_post_imm_st1x2(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C) nounwind {
4520;CHECK-LABEL: test_v1f64_post_imm_st1x2:
4521;CHECK: st1.1d { v0, v1 }, [x0], #16
4522 call void @llvm.aarch64.neon.st1x2.v1f64.p0f64(<1 x double> %B, <1 x double> %C, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004523 %tmp = getelementptr double, double* %A, i64 2
Tim Northover3b0846e2014-05-24 12:50:23 +00004524 ret double* %tmp
4525}
4526
4527define double* @test_v1f64_post_reg_st1x2(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, i64 %inc) nounwind {
4528;CHECK-LABEL: test_v1f64_post_reg_st1x2:
4529;CHECK: st1.1d { v0, v1 }, [x0], x{{[0-9]+}}
4530 call void @llvm.aarch64.neon.st1x2.v1f64.p0f64(<1 x double> %B, <1 x double> %C, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004531 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004532 ret double* %tmp
4533}
4534
4535declare void @llvm.aarch64.neon.st1x2.v1f64.p0f64(<1 x double>, <1 x double>, double*)
4536
4537
4538define i8* @test_v16i8_post_imm_st1x3(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
4539;CHECK-LABEL: test_v16i8_post_imm_st1x3:
4540;CHECK: st1.16b { v0, v1, v2 }, [x0], #48
4541 call void @llvm.aarch64.neon.st1x3.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004542 %tmp = getelementptr i8, i8* %A, i32 48
Tim Northover3b0846e2014-05-24 12:50:23 +00004543 ret i8* %tmp
4544}
4545
4546define i8* @test_v16i8_post_reg_st1x3(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 %inc) nounwind {
4547;CHECK-LABEL: test_v16i8_post_reg_st1x3:
4548;CHECK: st1.16b { v0, v1, v2 }, [x0], x{{[0-9]+}}
4549 call void @llvm.aarch64.neon.st1x3.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004550 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004551 ret i8* %tmp
4552}
4553
4554declare void @llvm.aarch64.neon.st1x3.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, i8*)
4555
4556
4557define i8* @test_v8i8_post_imm_st1x3(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
4558;CHECK-LABEL: test_v8i8_post_imm_st1x3:
4559;CHECK: st1.8b { v0, v1, v2 }, [x0], #24
4560 call void @llvm.aarch64.neon.st1x3.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004561 %tmp = getelementptr i8, i8* %A, i32 24
Tim Northover3b0846e2014-05-24 12:50:23 +00004562 ret i8* %tmp
4563}
4564
4565define i8* @test_v8i8_post_reg_st1x3(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 %inc) nounwind {
4566;CHECK-LABEL: test_v8i8_post_reg_st1x3:
4567;CHECK: st1.8b { v0, v1, v2 }, [x0], x{{[0-9]+}}
4568 call void @llvm.aarch64.neon.st1x3.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004569 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004570 ret i8* %tmp
4571}
4572
4573declare void @llvm.aarch64.neon.st1x3.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, i8*)
4574
4575
4576define i16* @test_v8i16_post_imm_st1x3(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
4577;CHECK-LABEL: test_v8i16_post_imm_st1x3:
4578;CHECK: st1.8h { v0, v1, v2 }, [x0], #48
4579 call void @llvm.aarch64.neon.st1x3.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004580 %tmp = getelementptr i16, i16* %A, i32 24
Tim Northover3b0846e2014-05-24 12:50:23 +00004581 ret i16* %tmp
4582}
4583
4584define i16* @test_v8i16_post_reg_st1x3(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 %inc) nounwind {
4585;CHECK-LABEL: test_v8i16_post_reg_st1x3:
4586;CHECK: st1.8h { v0, v1, v2 }, [x0], x{{[0-9]+}}
4587 call void @llvm.aarch64.neon.st1x3.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004588 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004589 ret i16* %tmp
4590}
4591
4592declare void @llvm.aarch64.neon.st1x3.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, i16*)
4593
4594
4595define i16* @test_v4i16_post_imm_st1x3(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
4596;CHECK-LABEL: test_v4i16_post_imm_st1x3:
4597;CHECK: st1.4h { v0, v1, v2 }, [x0], #24
4598 call void @llvm.aarch64.neon.st1x3.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004599 %tmp = getelementptr i16, i16* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +00004600 ret i16* %tmp
4601}
4602
4603define i16* @test_v4i16_post_reg_st1x3(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 %inc) nounwind {
4604;CHECK-LABEL: test_v4i16_post_reg_st1x3:
4605;CHECK: st1.4h { v0, v1, v2 }, [x0], x{{[0-9]+}}
4606 call void @llvm.aarch64.neon.st1x3.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004607 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004608 ret i16* %tmp
4609}
4610
4611declare void @llvm.aarch64.neon.st1x3.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>, i16*)
4612
4613
4614define i32* @test_v4i32_post_imm_st1x3(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
4615;CHECK-LABEL: test_v4i32_post_imm_st1x3:
4616;CHECK: st1.4s { v0, v1, v2 }, [x0], #48
4617 call void @llvm.aarch64.neon.st1x3.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004618 %tmp = getelementptr i32, i32* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +00004619 ret i32* %tmp
4620}
4621
4622define i32* @test_v4i32_post_reg_st1x3(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 %inc) nounwind {
4623;CHECK-LABEL: test_v4i32_post_reg_st1x3:
4624;CHECK: st1.4s { v0, v1, v2 }, [x0], x{{[0-9]+}}
4625 call void @llvm.aarch64.neon.st1x3.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004626 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004627 ret i32* %tmp
4628}
4629
4630declare void @llvm.aarch64.neon.st1x3.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32>, i32*)
4631
4632
4633define i32* @test_v2i32_post_imm_st1x3(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
4634;CHECK-LABEL: test_v2i32_post_imm_st1x3:
4635;CHECK: st1.2s { v0, v1, v2 }, [x0], #24
4636 call void @llvm.aarch64.neon.st1x3.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004637 %tmp = getelementptr i32, i32* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +00004638 ret i32* %tmp
4639}
4640
4641define i32* @test_v2i32_post_reg_st1x3(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 %inc) nounwind {
4642;CHECK-LABEL: test_v2i32_post_reg_st1x3:
4643;CHECK: st1.2s { v0, v1, v2 }, [x0], x{{[0-9]+}}
4644 call void @llvm.aarch64.neon.st1x3.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004645 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004646 ret i32* %tmp
4647}
4648
4649declare void @llvm.aarch64.neon.st1x3.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, i32*)
4650
4651
4652define i64* @test_v2i64_post_imm_st1x3(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
4653;CHECK-LABEL: test_v2i64_post_imm_st1x3:
4654;CHECK: st1.2d { v0, v1, v2 }, [x0], #48
4655 call void @llvm.aarch64.neon.st1x3.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004656 %tmp = getelementptr i64, i64* %A, i64 6
Tim Northover3b0846e2014-05-24 12:50:23 +00004657 ret i64* %tmp
4658}
4659
4660define i64* @test_v2i64_post_reg_st1x3(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 %inc) nounwind {
4661;CHECK-LABEL: test_v2i64_post_reg_st1x3:
4662;CHECK: st1.2d { v0, v1, v2 }, [x0], x{{[0-9]+}}
4663 call void @llvm.aarch64.neon.st1x3.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004664 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004665 ret i64* %tmp
4666}
4667
4668declare void @llvm.aarch64.neon.st1x3.v2i64.p0i64(<2 x i64>, <2 x i64>, <2 x i64>, i64*)
4669
4670
4671define i64* @test_v1i64_post_imm_st1x3(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
4672;CHECK-LABEL: test_v1i64_post_imm_st1x3:
4673;CHECK: st1.1d { v0, v1, v2 }, [x0], #24
4674 call void @llvm.aarch64.neon.st1x3.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004675 %tmp = getelementptr i64, i64* %A, i64 3
Tim Northover3b0846e2014-05-24 12:50:23 +00004676 ret i64* %tmp
4677}
4678
4679define i64* @test_v1i64_post_reg_st1x3(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 %inc) nounwind {
4680;CHECK-LABEL: test_v1i64_post_reg_st1x3:
4681;CHECK: st1.1d { v0, v1, v2 }, [x0], x{{[0-9]+}}
4682 call void @llvm.aarch64.neon.st1x3.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004683 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004684 ret i64* %tmp
4685}
4686
4687declare void @llvm.aarch64.neon.st1x3.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>, i64*)
4688
4689
4690define float* @test_v4f32_post_imm_st1x3(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
4691;CHECK-LABEL: test_v4f32_post_imm_st1x3:
4692;CHECK: st1.4s { v0, v1, v2 }, [x0], #48
4693 call void @llvm.aarch64.neon.st1x3.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004694 %tmp = getelementptr float, float* %A, i32 12
Tim Northover3b0846e2014-05-24 12:50:23 +00004695 ret float* %tmp
4696}
4697
4698define float* @test_v4f32_post_reg_st1x3(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, i64 %inc) nounwind {
4699;CHECK-LABEL: test_v4f32_post_reg_st1x3:
4700;CHECK: st1.4s { v0, v1, v2 }, [x0], x{{[0-9]+}}
4701 call void @llvm.aarch64.neon.st1x3.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004702 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004703 ret float* %tmp
4704}
4705
4706declare void @llvm.aarch64.neon.st1x3.v4f32.p0f32(<4 x float>, <4 x float>, <4 x float>, float*)
4707
4708
4709define float* @test_v2f32_post_imm_st1x3(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
4710;CHECK-LABEL: test_v2f32_post_imm_st1x3:
4711;CHECK: st1.2s { v0, v1, v2 }, [x0], #24
4712 call void @llvm.aarch64.neon.st1x3.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004713 %tmp = getelementptr float, float* %A, i32 6
Tim Northover3b0846e2014-05-24 12:50:23 +00004714 ret float* %tmp
4715}
4716
4717define float* @test_v2f32_post_reg_st1x3(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, i64 %inc) nounwind {
4718;CHECK-LABEL: test_v2f32_post_reg_st1x3:
4719;CHECK: st1.2s { v0, v1, v2 }, [x0], x{{[0-9]+}}
4720 call void @llvm.aarch64.neon.st1x3.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004721 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004722 ret float* %tmp
4723}
4724
4725declare void @llvm.aarch64.neon.st1x3.v2f32.p0f32(<2 x float>, <2 x float>, <2 x float>, float*)
4726
4727
4728define double* @test_v2f64_post_imm_st1x3(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
4729;CHECK-LABEL: test_v2f64_post_imm_st1x3:
4730;CHECK: st1.2d { v0, v1, v2 }, [x0], #48
4731 call void @llvm.aarch64.neon.st1x3.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004732 %tmp = getelementptr double, double* %A, i64 6
Tim Northover3b0846e2014-05-24 12:50:23 +00004733 ret double* %tmp
4734}
4735
4736define double* @test_v2f64_post_reg_st1x3(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, i64 %inc) nounwind {
4737;CHECK-LABEL: test_v2f64_post_reg_st1x3:
4738;CHECK: st1.2d { v0, v1, v2 }, [x0], x{{[0-9]+}}
4739 call void @llvm.aarch64.neon.st1x3.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004740 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004741 ret double* %tmp
4742}
4743
4744declare void @llvm.aarch64.neon.st1x3.v2f64.p0f64(<2 x double>, <2 x double>, <2 x double>, double*)
4745
4746
4747define double* @test_v1f64_post_imm_st1x3(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
4748;CHECK-LABEL: test_v1f64_post_imm_st1x3:
4749;CHECK: st1.1d { v0, v1, v2 }, [x0], #24
4750 call void @llvm.aarch64.neon.st1x3.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004751 %tmp = getelementptr double, double* %A, i64 3
Tim Northover3b0846e2014-05-24 12:50:23 +00004752 ret double* %tmp
4753}
4754
4755define double* @test_v1f64_post_reg_st1x3(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, i64 %inc) nounwind {
4756;CHECK-LABEL: test_v1f64_post_reg_st1x3:
4757;CHECK: st1.1d { v0, v1, v2 }, [x0], x{{[0-9]+}}
4758 call void @llvm.aarch64.neon.st1x3.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004759 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004760 ret double* %tmp
4761}
4762
4763declare void @llvm.aarch64.neon.st1x3.v1f64.p0f64(<1 x double>, <1 x double>, <1 x double>, double*)
4764
4765
4766define i8* @test_v16i8_post_imm_st1x4(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
4767;CHECK-LABEL: test_v16i8_post_imm_st1x4:
4768;CHECK: st1.16b { v0, v1, v2, v3 }, [x0], #64
4769 call void @llvm.aarch64.neon.st1x4.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004770 %tmp = getelementptr i8, i8* %A, i32 64
Tim Northover3b0846e2014-05-24 12:50:23 +00004771 ret i8* %tmp
4772}
4773
4774define i8* @test_v16i8_post_reg_st1x4(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 %inc) nounwind {
4775;CHECK-LABEL: test_v16i8_post_reg_st1x4:
4776;CHECK: st1.16b { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4777 call void @llvm.aarch64.neon.st1x4.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004778 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004779 ret i8* %tmp
4780}
4781
4782declare void @llvm.aarch64.neon.st1x4.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i8*)
4783
4784
4785define i8* @test_v8i8_post_imm_st1x4(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
4786;CHECK-LABEL: test_v8i8_post_imm_st1x4:
4787;CHECK: st1.8b { v0, v1, v2, v3 }, [x0], #32
4788 call void @llvm.aarch64.neon.st1x4.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004789 %tmp = getelementptr i8, i8* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00004790 ret i8* %tmp
4791}
4792
4793define i8* @test_v8i8_post_reg_st1x4(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 %inc) nounwind {
4794;CHECK-LABEL: test_v8i8_post_reg_st1x4:
4795;CHECK: st1.8b { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4796 call void @llvm.aarch64.neon.st1x4.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004797 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004798 ret i8* %tmp
4799}
4800
4801declare void @llvm.aarch64.neon.st1x4.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i8*)
4802
4803
4804define i16* @test_v8i16_post_imm_st1x4(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
4805;CHECK-LABEL: test_v8i16_post_imm_st1x4:
4806;CHECK: st1.8h { v0, v1, v2, v3 }, [x0], #64
4807 call void @llvm.aarch64.neon.st1x4.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004808 %tmp = getelementptr i16, i16* %A, i32 32
Tim Northover3b0846e2014-05-24 12:50:23 +00004809 ret i16* %tmp
4810}
4811
4812define i16* @test_v8i16_post_reg_st1x4(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 %inc) nounwind {
4813;CHECK-LABEL: test_v8i16_post_reg_st1x4:
4814;CHECK: st1.8h { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4815 call void @llvm.aarch64.neon.st1x4.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004816 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004817 ret i16* %tmp
4818}
4819
4820declare void @llvm.aarch64.neon.st1x4.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i16*)
4821
4822
4823define i16* @test_v4i16_post_imm_st1x4(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
4824;CHECK-LABEL: test_v4i16_post_imm_st1x4:
4825;CHECK: st1.4h { v0, v1, v2, v3 }, [x0], #32
4826 call void @llvm.aarch64.neon.st1x4.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004827 %tmp = getelementptr i16, i16* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00004828 ret i16* %tmp
4829}
4830
4831define i16* @test_v4i16_post_reg_st1x4(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 %inc) nounwind {
4832;CHECK-LABEL: test_v4i16_post_reg_st1x4:
4833;CHECK: st1.4h { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4834 call void @llvm.aarch64.neon.st1x4.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004835 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004836 ret i16* %tmp
4837}
4838
4839declare void @llvm.aarch64.neon.st1x4.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>,<4 x i16>, i16*)
4840
4841
4842define i32* @test_v4i32_post_imm_st1x4(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
4843;CHECK-LABEL: test_v4i32_post_imm_st1x4:
4844;CHECK: st1.4s { v0, v1, v2, v3 }, [x0], #64
4845 call void @llvm.aarch64.neon.st1x4.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004846 %tmp = getelementptr i32, i32* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00004847 ret i32* %tmp
4848}
4849
4850define i32* @test_v4i32_post_reg_st1x4(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 %inc) nounwind {
4851;CHECK-LABEL: test_v4i32_post_reg_st1x4:
4852;CHECK: st1.4s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4853 call void @llvm.aarch64.neon.st1x4.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004854 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004855 ret i32* %tmp
4856}
4857
4858declare void @llvm.aarch64.neon.st1x4.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32>,<4 x i32>, i32*)
4859
4860
4861define i32* @test_v2i32_post_imm_st1x4(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
4862;CHECK-LABEL: test_v2i32_post_imm_st1x4:
4863;CHECK: st1.2s { v0, v1, v2, v3 }, [x0], #32
4864 call void @llvm.aarch64.neon.st1x4.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004865 %tmp = getelementptr i32, i32* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004866 ret i32* %tmp
4867}
4868
4869define i32* @test_v2i32_post_reg_st1x4(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 %inc) nounwind {
4870;CHECK-LABEL: test_v2i32_post_reg_st1x4:
4871;CHECK: st1.2s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4872 call void @llvm.aarch64.neon.st1x4.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004873 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004874 ret i32* %tmp
4875}
4876
4877declare void @llvm.aarch64.neon.st1x4.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32*)
4878
4879
4880define i64* @test_v2i64_post_imm_st1x4(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
4881;CHECK-LABEL: test_v2i64_post_imm_st1x4:
4882;CHECK: st1.2d { v0, v1, v2, v3 }, [x0], #64
4883 call void @llvm.aarch64.neon.st1x4.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004884 %tmp = getelementptr i64, i64* %A, i64 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004885 ret i64* %tmp
4886}
4887
4888define i64* @test_v2i64_post_reg_st1x4(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 %inc) nounwind {
4889;CHECK-LABEL: test_v2i64_post_reg_st1x4:
4890;CHECK: st1.2d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4891 call void @llvm.aarch64.neon.st1x4.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004892 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004893 ret i64* %tmp
4894}
4895
4896declare void @llvm.aarch64.neon.st1x4.v2i64.p0i64(<2 x i64>, <2 x i64>, <2 x i64>,<2 x i64>, i64*)
4897
4898
4899define i64* @test_v1i64_post_imm_st1x4(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
4900;CHECK-LABEL: test_v1i64_post_imm_st1x4:
4901;CHECK: st1.1d { v0, v1, v2, v3 }, [x0], #32
4902 call void @llvm.aarch64.neon.st1x4.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004903 %tmp = getelementptr i64, i64* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00004904 ret i64* %tmp
4905}
4906
4907define i64* @test_v1i64_post_reg_st1x4(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 %inc) nounwind {
4908;CHECK-LABEL: test_v1i64_post_reg_st1x4:
4909;CHECK: st1.1d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4910 call void @llvm.aarch64.neon.st1x4.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004911 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004912 ret i64* %tmp
4913}
4914
4915declare void @llvm.aarch64.neon.st1x4.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>,<1 x i64>, i64*)
4916
4917
4918define float* @test_v4f32_post_imm_st1x4(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
4919;CHECK-LABEL: test_v4f32_post_imm_st1x4:
4920;CHECK: st1.4s { v0, v1, v2, v3 }, [x0], #64
4921 call void @llvm.aarch64.neon.st1x4.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004922 %tmp = getelementptr float, float* %A, i32 16
Tim Northover3b0846e2014-05-24 12:50:23 +00004923 ret float* %tmp
4924}
4925
4926define float* @test_v4f32_post_reg_st1x4(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 %inc) nounwind {
4927;CHECK-LABEL: test_v4f32_post_reg_st1x4:
4928;CHECK: st1.4s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4929 call void @llvm.aarch64.neon.st1x4.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004930 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004931 ret float* %tmp
4932}
4933
4934declare void @llvm.aarch64.neon.st1x4.v4f32.p0f32(<4 x float>, <4 x float>, <4 x float>, <4 x float>, float*)
4935
4936
4937define float* @test_v2f32_post_imm_st1x4(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
4938;CHECK-LABEL: test_v2f32_post_imm_st1x4:
4939;CHECK: st1.2s { v0, v1, v2, v3 }, [x0], #32
4940 call void @llvm.aarch64.neon.st1x4.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004941 %tmp = getelementptr float, float* %A, i32 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004942 ret float* %tmp
4943}
4944
4945define float* @test_v2f32_post_reg_st1x4(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 %inc) nounwind {
4946;CHECK-LABEL: test_v2f32_post_reg_st1x4:
4947;CHECK: st1.2s { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4948 call void @llvm.aarch64.neon.st1x4.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004949 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004950 ret float* %tmp
4951}
4952
4953declare void @llvm.aarch64.neon.st1x4.v2f32.p0f32(<2 x float>, <2 x float>, <2 x float>, <2 x float>, float*)
4954
4955
4956define double* @test_v2f64_post_imm_st1x4(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
4957;CHECK-LABEL: test_v2f64_post_imm_st1x4:
4958;CHECK: st1.2d { v0, v1, v2, v3 }, [x0], #64
4959 call void @llvm.aarch64.neon.st1x4.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004960 %tmp = getelementptr double, double* %A, i64 8
Tim Northover3b0846e2014-05-24 12:50:23 +00004961 ret double* %tmp
4962}
4963
4964define double* @test_v2f64_post_reg_st1x4(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 %inc) nounwind {
4965;CHECK-LABEL: test_v2f64_post_reg_st1x4:
4966;CHECK: st1.2d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4967 call void @llvm.aarch64.neon.st1x4.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004968 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004969 ret double* %tmp
4970}
4971
4972declare void @llvm.aarch64.neon.st1x4.v2f64.p0f64(<2 x double>, <2 x double>, <2 x double>,<2 x double>, double*)
4973
4974
4975define double* @test_v1f64_post_imm_st1x4(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
4976;CHECK-LABEL: test_v1f64_post_imm_st1x4:
4977;CHECK: st1.1d { v0, v1, v2, v3 }, [x0], #32
4978 call void @llvm.aarch64.neon.st1x4.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004979 %tmp = getelementptr double, double* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00004980 ret double* %tmp
4981}
4982
4983define double* @test_v1f64_post_reg_st1x4(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 %inc) nounwind {
4984;CHECK-LABEL: test_v1f64_post_reg_st1x4:
4985;CHECK: st1.1d { v0, v1, v2, v3 }, [x0], x{{[0-9]+}}
4986 call void @llvm.aarch64.neon.st1x4.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004987 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00004988 ret double* %tmp
4989}
4990
4991declare void @llvm.aarch64.neon.st1x4.v1f64.p0f64(<1 x double>, <1 x double>, <1 x double>, <1 x double>, double*)
4992
4993
4994define i8* @test_v16i8_post_imm_st2lanelane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C) {
4995 call void @llvm.aarch64.neon.st2lanelane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, i64 0, i64 1, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00004996 %tmp = getelementptr i8, i8* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00004997 ret i8* %tmp
4998}
4999
5000define i8* @test_v16i8_post_reg_st2lanelane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, i64 %inc) {
5001 call void @llvm.aarch64.neon.st2lanelane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, i64 0, i64 1, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005002 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005003 ret i8* %tmp
5004}
5005
5006declare void @llvm.aarch64.neon.st2lanelane.v16i8.p0i8(<16 x i8>, <16 x i8>, i64, i64, i8*) nounwind readnone
5007
5008
5009define i8* @test_v16i8_post_imm_st2lane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
5010;CHECK-LABEL: test_v16i8_post_imm_st2lane:
5011;CHECK: st2.b { v0, v1 }[0], [x0], #2
5012 call void @llvm.aarch64.neon.st2lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005013 %tmp = getelementptr i8, i8* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005014 ret i8* %tmp
5015}
5016
5017define i8* @test_v16i8_post_reg_st2lane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, i64 %inc) nounwind {
5018;CHECK-LABEL: test_v16i8_post_reg_st2lane:
5019;CHECK: st2.b { v0, v1 }[0], [x0], x{{[0-9]+}}
5020 call void @llvm.aarch64.neon.st2lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005021 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005022 ret i8* %tmp
5023}
5024
5025declare void @llvm.aarch64.neon.st2lane.v16i8.p0i8(<16 x i8>, <16 x i8>, i64, i8*)
5026
5027
5028define i8* @test_v8i8_post_imm_st2lane(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
5029;CHECK-LABEL: test_v8i8_post_imm_st2lane:
5030;CHECK: st2.b { v0, v1 }[0], [x0], #2
5031 call void @llvm.aarch64.neon.st2lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005032 %tmp = getelementptr i8, i8* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005033 ret i8* %tmp
5034}
5035
5036define i8* @test_v8i8_post_reg_st2lane(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, i64 %inc) nounwind {
5037;CHECK-LABEL: test_v8i8_post_reg_st2lane:
5038;CHECK: st2.b { v0, v1 }[0], [x0], x{{[0-9]+}}
5039 call void @llvm.aarch64.neon.st2lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005040 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005041 ret i8* %tmp
5042}
5043
5044declare void @llvm.aarch64.neon.st2lane.v8i8.p0i8(<8 x i8>, <8 x i8>, i64, i8*)
5045
5046
5047define i16* @test_v8i16_post_imm_st2lane(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
5048;CHECK-LABEL: test_v8i16_post_imm_st2lane:
5049;CHECK: st2.h { v0, v1 }[0], [x0], #4
5050 call void @llvm.aarch64.neon.st2lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005051 %tmp = getelementptr i16, i16* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005052 ret i16* %tmp
5053}
5054
5055define i16* @test_v8i16_post_reg_st2lane(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, i64 %inc) nounwind {
5056;CHECK-LABEL: test_v8i16_post_reg_st2lane:
5057;CHECK: st2.h { v0, v1 }[0], [x0], x{{[0-9]+}}
5058 call void @llvm.aarch64.neon.st2lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005059 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005060 ret i16* %tmp
5061}
5062
5063declare void @llvm.aarch64.neon.st2lane.v8i16.p0i16(<8 x i16>, <8 x i16>, i64, i16*)
5064
5065
5066define i16* @test_v4i16_post_imm_st2lane(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
5067;CHECK-LABEL: test_v4i16_post_imm_st2lane:
5068;CHECK: st2.h { v0, v1 }[0], [x0], #4
5069 call void @llvm.aarch64.neon.st2lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005070 %tmp = getelementptr i16, i16* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005071 ret i16* %tmp
5072}
5073
5074define i16* @test_v4i16_post_reg_st2lane(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, i64 %inc) nounwind {
5075;CHECK-LABEL: test_v4i16_post_reg_st2lane:
5076;CHECK: st2.h { v0, v1 }[0], [x0], x{{[0-9]+}}
5077 call void @llvm.aarch64.neon.st2lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005078 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005079 ret i16* %tmp
5080}
5081
5082declare void @llvm.aarch64.neon.st2lane.v4i16.p0i16(<4 x i16>, <4 x i16>, i64, i16*)
5083
5084
5085define i32* @test_v4i32_post_imm_st2lane(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
5086;CHECK-LABEL: test_v4i32_post_imm_st2lane:
5087;CHECK: st2.s { v0, v1 }[0], [x0], #8
5088 call void @llvm.aarch64.neon.st2lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005089 %tmp = getelementptr i32, i32* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005090 ret i32* %tmp
5091}
5092
5093define i32* @test_v4i32_post_reg_st2lane(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, i64 %inc) nounwind {
5094;CHECK-LABEL: test_v4i32_post_reg_st2lane:
5095;CHECK: st2.s { v0, v1 }[0], [x0], x{{[0-9]+}}
5096 call void @llvm.aarch64.neon.st2lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005097 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005098 ret i32* %tmp
5099}
5100
5101declare void @llvm.aarch64.neon.st2lane.v4i32.p0i32(<4 x i32>, <4 x i32>, i64, i32*)
5102
5103
5104define i32* @test_v2i32_post_imm_st2lane(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
5105;CHECK-LABEL: test_v2i32_post_imm_st2lane:
5106;CHECK: st2.s { v0, v1 }[0], [x0], #8
5107 call void @llvm.aarch64.neon.st2lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005108 %tmp = getelementptr i32, i32* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005109 ret i32* %tmp
5110}
5111
5112define i32* @test_v2i32_post_reg_st2lane(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, i64 %inc) nounwind {
5113;CHECK-LABEL: test_v2i32_post_reg_st2lane:
5114;CHECK: st2.s { v0, v1 }[0], [x0], x{{[0-9]+}}
5115 call void @llvm.aarch64.neon.st2lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005116 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005117 ret i32* %tmp
5118}
5119
5120declare void @llvm.aarch64.neon.st2lane.v2i32.p0i32(<2 x i32>, <2 x i32>, i64, i32*)
5121
5122
5123define i64* @test_v2i64_post_imm_st2lane(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
5124;CHECK-LABEL: test_v2i64_post_imm_st2lane:
5125;CHECK: st2.d { v0, v1 }[0], [x0], #16
5126 call void @llvm.aarch64.neon.st2lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005127 %tmp = getelementptr i64, i64* %A, i64 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005128 ret i64* %tmp
5129}
5130
5131define i64* @test_v2i64_post_reg_st2lane(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, i64 %inc) nounwind {
5132;CHECK-LABEL: test_v2i64_post_reg_st2lane:
5133;CHECK: st2.d { v0, v1 }[0], [x0], x{{[0-9]+}}
5134 call void @llvm.aarch64.neon.st2lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005135 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005136 ret i64* %tmp
5137}
5138
5139declare void @llvm.aarch64.neon.st2lane.v2i64.p0i64(<2 x i64>, <2 x i64>, i64, i64*)
5140
5141
5142define i64* @test_v1i64_post_imm_st2lane(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
5143;CHECK-LABEL: test_v1i64_post_imm_st2lane:
5144;CHECK: st2.d { v0, v1 }[0], [x0], #16
5145 call void @llvm.aarch64.neon.st2lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005146 %tmp = getelementptr i64, i64* %A, i64 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005147 ret i64* %tmp
5148}
5149
5150define i64* @test_v1i64_post_reg_st2lane(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, i64 %inc) nounwind {
5151;CHECK-LABEL: test_v1i64_post_reg_st2lane:
5152;CHECK: st2.d { v0, v1 }[0], [x0], x{{[0-9]+}}
5153 call void @llvm.aarch64.neon.st2lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005154 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005155 ret i64* %tmp
5156}
5157
5158declare void @llvm.aarch64.neon.st2lane.v1i64.p0i64(<1 x i64>, <1 x i64>, i64, i64*)
5159
5160
5161define float* @test_v4f32_post_imm_st2lane(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C) nounwind {
5162;CHECK-LABEL: test_v4f32_post_imm_st2lane:
5163;CHECK: st2.s { v0, v1 }[0], [x0], #8
5164 call void @llvm.aarch64.neon.st2lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005165 %tmp = getelementptr float, float* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005166 ret float* %tmp
5167}
5168
5169define float* @test_v4f32_post_reg_st2lane(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, i64 %inc) nounwind {
5170;CHECK-LABEL: test_v4f32_post_reg_st2lane:
5171;CHECK: st2.s { v0, v1 }[0], [x0], x{{[0-9]+}}
5172 call void @llvm.aarch64.neon.st2lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005173 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005174 ret float* %tmp
5175}
5176
5177declare void @llvm.aarch64.neon.st2lane.v4f32.p0f32(<4 x float>, <4 x float>, i64, float*)
5178
5179
5180define float* @test_v2f32_post_imm_st2lane(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C) nounwind {
5181;CHECK-LABEL: test_v2f32_post_imm_st2lane:
5182;CHECK: st2.s { v0, v1 }[0], [x0], #8
5183 call void @llvm.aarch64.neon.st2lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005184 %tmp = getelementptr float, float* %A, i32 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005185 ret float* %tmp
5186}
5187
5188define float* @test_v2f32_post_reg_st2lane(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, i64 %inc) nounwind {
5189;CHECK-LABEL: test_v2f32_post_reg_st2lane:
5190;CHECK: st2.s { v0, v1 }[0], [x0], x{{[0-9]+}}
5191 call void @llvm.aarch64.neon.st2lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005192 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005193 ret float* %tmp
5194}
5195
5196declare void @llvm.aarch64.neon.st2lane.v2f32.p0f32(<2 x float>, <2 x float>, i64, float*)
5197
5198
5199define double* @test_v2f64_post_imm_st2lane(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C) nounwind {
5200;CHECK-LABEL: test_v2f64_post_imm_st2lane:
5201;CHECK: st2.d { v0, v1 }[0], [x0], #16
5202 call void @llvm.aarch64.neon.st2lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005203 %tmp = getelementptr double, double* %A, i64 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005204 ret double* %tmp
5205}
5206
5207define double* @test_v2f64_post_reg_st2lane(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, i64 %inc) nounwind {
5208;CHECK-LABEL: test_v2f64_post_reg_st2lane:
5209;CHECK: st2.d { v0, v1 }[0], [x0], x{{[0-9]+}}
5210 call void @llvm.aarch64.neon.st2lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005211 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005212 ret double* %tmp
5213}
5214
5215declare void @llvm.aarch64.neon.st2lane.v2f64.p0f64(<2 x double>, <2 x double>, i64, double*)
5216
5217
5218define double* @test_v1f64_post_imm_st2lane(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C) nounwind {
5219;CHECK-LABEL: test_v1f64_post_imm_st2lane:
5220;CHECK: st2.d { v0, v1 }[0], [x0], #16
5221 call void @llvm.aarch64.neon.st2lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005222 %tmp = getelementptr double, double* %A, i64 2
Tim Northover3b0846e2014-05-24 12:50:23 +00005223 ret double* %tmp
5224}
5225
5226define double* @test_v1f64_post_reg_st2lane(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, i64 %inc) nounwind {
5227;CHECK-LABEL: test_v1f64_post_reg_st2lane:
5228;CHECK: st2.d { v0, v1 }[0], [x0], x{{[0-9]+}}
5229 call void @llvm.aarch64.neon.st2lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005230 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005231 ret double* %tmp
5232}
5233
5234declare void @llvm.aarch64.neon.st2lane.v1f64.p0f64(<1 x double>, <1 x double>, i64, double*)
5235
5236
5237define i8* @test_v16i8_post_imm_st3lane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
5238;CHECK-LABEL: test_v16i8_post_imm_st3lane:
5239;CHECK: st3.b { v0, v1, v2 }[0], [x0], #3
5240 call void @llvm.aarch64.neon.st3lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005241 %tmp = getelementptr i8, i8* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005242 ret i8* %tmp
5243}
5244
5245define i8* @test_v16i8_post_reg_st3lane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 %inc) nounwind {
5246;CHECK-LABEL: test_v16i8_post_reg_st3lane:
5247;CHECK: st3.b { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5248 call void @llvm.aarch64.neon.st3lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005249 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005250 ret i8* %tmp
5251}
5252
5253declare void @llvm.aarch64.neon.st3lane.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, i64, i8*)
5254
5255
5256define i8* @test_v8i8_post_imm_st3lane(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
5257;CHECK-LABEL: test_v8i8_post_imm_st3lane:
5258;CHECK: st3.b { v0, v1, v2 }[0], [x0], #3
5259 call void @llvm.aarch64.neon.st3lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005260 %tmp = getelementptr i8, i8* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005261 ret i8* %tmp
5262}
5263
5264define i8* @test_v8i8_post_reg_st3lane(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 %inc) nounwind {
5265;CHECK-LABEL: test_v8i8_post_reg_st3lane:
5266;CHECK: st3.b { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5267 call void @llvm.aarch64.neon.st3lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005268 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005269 ret i8* %tmp
5270}
5271
5272declare void @llvm.aarch64.neon.st3lane.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, i64, i8*)
5273
5274
5275define i16* @test_v8i16_post_imm_st3lane(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
5276;CHECK-LABEL: test_v8i16_post_imm_st3lane:
5277;CHECK: st3.h { v0, v1, v2 }[0], [x0], #6
5278 call void @llvm.aarch64.neon.st3lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005279 %tmp = getelementptr i16, i16* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005280 ret i16* %tmp
5281}
5282
5283define i16* @test_v8i16_post_reg_st3lane(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 %inc) nounwind {
5284;CHECK-LABEL: test_v8i16_post_reg_st3lane:
5285;CHECK: st3.h { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5286 call void @llvm.aarch64.neon.st3lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005287 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005288 ret i16* %tmp
5289}
5290
5291declare void @llvm.aarch64.neon.st3lane.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, i64, i16*)
5292
5293
5294define i16* @test_v4i16_post_imm_st3lane(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
5295;CHECK-LABEL: test_v4i16_post_imm_st3lane:
5296;CHECK: st3.h { v0, v1, v2 }[0], [x0], #6
5297 call void @llvm.aarch64.neon.st3lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005298 %tmp = getelementptr i16, i16* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005299 ret i16* %tmp
5300}
5301
5302define i16* @test_v4i16_post_reg_st3lane(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 %inc) nounwind {
5303;CHECK-LABEL: test_v4i16_post_reg_st3lane:
5304;CHECK: st3.h { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5305 call void @llvm.aarch64.neon.st3lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005306 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005307 ret i16* %tmp
5308}
5309
5310declare void @llvm.aarch64.neon.st3lane.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>, i64, i16*)
5311
5312
5313define i32* @test_v4i32_post_imm_st3lane(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
5314;CHECK-LABEL: test_v4i32_post_imm_st3lane:
5315;CHECK: st3.s { v0, v1, v2 }[0], [x0], #12
5316 call void @llvm.aarch64.neon.st3lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005317 %tmp = getelementptr i32, i32* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005318 ret i32* %tmp
5319}
5320
5321define i32* @test_v4i32_post_reg_st3lane(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 %inc) nounwind {
5322;CHECK-LABEL: test_v4i32_post_reg_st3lane:
5323;CHECK: st3.s { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5324 call void @llvm.aarch64.neon.st3lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005325 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005326 ret i32* %tmp
5327}
5328
5329declare void @llvm.aarch64.neon.st3lane.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32>, i64, i32*)
5330
5331
5332define i32* @test_v2i32_post_imm_st3lane(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
5333;CHECK-LABEL: test_v2i32_post_imm_st3lane:
5334;CHECK: st3.s { v0, v1, v2 }[0], [x0], #12
5335 call void @llvm.aarch64.neon.st3lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005336 %tmp = getelementptr i32, i32* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005337 ret i32* %tmp
5338}
5339
5340define i32* @test_v2i32_post_reg_st3lane(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 %inc) nounwind {
5341;CHECK-LABEL: test_v2i32_post_reg_st3lane:
5342;CHECK: st3.s { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5343 call void @llvm.aarch64.neon.st3lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005344 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005345 ret i32* %tmp
5346}
5347
5348declare void @llvm.aarch64.neon.st3lane.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, i64, i32*)
5349
5350
5351define i64* @test_v2i64_post_imm_st3lane(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
5352;CHECK-LABEL: test_v2i64_post_imm_st3lane:
5353;CHECK: st3.d { v0, v1, v2 }[0], [x0], #24
5354 call void @llvm.aarch64.neon.st3lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005355 %tmp = getelementptr i64, i64* %A, i64 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005356 ret i64* %tmp
5357}
5358
5359define i64* @test_v2i64_post_reg_st3lane(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 %inc) nounwind {
5360;CHECK-LABEL: test_v2i64_post_reg_st3lane:
5361;CHECK: st3.d { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5362 call void @llvm.aarch64.neon.st3lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005363 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005364 ret i64* %tmp
5365}
5366
5367declare void @llvm.aarch64.neon.st3lane.v2i64.p0i64(<2 x i64>, <2 x i64>, <2 x i64>, i64, i64*)
5368
5369
5370define i64* @test_v1i64_post_imm_st3lane(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
5371;CHECK-LABEL: test_v1i64_post_imm_st3lane:
5372;CHECK: st3.d { v0, v1, v2 }[0], [x0], #24
5373 call void @llvm.aarch64.neon.st3lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005374 %tmp = getelementptr i64, i64* %A, i64 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005375 ret i64* %tmp
5376}
5377
5378define i64* @test_v1i64_post_reg_st3lane(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 %inc) nounwind {
5379;CHECK-LABEL: test_v1i64_post_reg_st3lane:
5380;CHECK: st3.d { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5381 call void @llvm.aarch64.neon.st3lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005382 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005383 ret i64* %tmp
5384}
5385
5386declare void @llvm.aarch64.neon.st3lane.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>, i64, i64*)
5387
5388
5389define float* @test_v4f32_post_imm_st3lane(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
5390;CHECK-LABEL: test_v4f32_post_imm_st3lane:
5391;CHECK: st3.s { v0, v1, v2 }[0], [x0], #12
5392 call void @llvm.aarch64.neon.st3lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005393 %tmp = getelementptr float, float* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005394 ret float* %tmp
5395}
5396
5397define float* @test_v4f32_post_reg_st3lane(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, i64 %inc) nounwind {
5398;CHECK-LABEL: test_v4f32_post_reg_st3lane:
5399;CHECK: st3.s { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5400 call void @llvm.aarch64.neon.st3lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005401 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005402 ret float* %tmp
5403}
5404
5405declare void @llvm.aarch64.neon.st3lane.v4f32.p0f32(<4 x float>, <4 x float>, <4 x float>, i64, float*)
5406
5407
5408define float* @test_v2f32_post_imm_st3lane(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
5409;CHECK-LABEL: test_v2f32_post_imm_st3lane:
5410;CHECK: st3.s { v0, v1, v2 }[0], [x0], #12
5411 call void @llvm.aarch64.neon.st3lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005412 %tmp = getelementptr float, float* %A, i32 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005413 ret float* %tmp
5414}
5415
5416define float* @test_v2f32_post_reg_st3lane(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, i64 %inc) nounwind {
5417;CHECK-LABEL: test_v2f32_post_reg_st3lane:
5418;CHECK: st3.s { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5419 call void @llvm.aarch64.neon.st3lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005420 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005421 ret float* %tmp
5422}
5423
5424declare void @llvm.aarch64.neon.st3lane.v2f32.p0f32(<2 x float>, <2 x float>, <2 x float>, i64, float*)
5425
5426
5427define double* @test_v2f64_post_imm_st3lane(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
5428;CHECK-LABEL: test_v2f64_post_imm_st3lane:
5429;CHECK: st3.d { v0, v1, v2 }[0], [x0], #24
5430 call void @llvm.aarch64.neon.st3lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005431 %tmp = getelementptr double, double* %A, i64 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005432 ret double* %tmp
5433}
5434
5435define double* @test_v2f64_post_reg_st3lane(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, i64 %inc) nounwind {
5436;CHECK-LABEL: test_v2f64_post_reg_st3lane:
5437;CHECK: st3.d { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5438 call void @llvm.aarch64.neon.st3lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005439 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005440 ret double* %tmp
5441}
5442
5443declare void @llvm.aarch64.neon.st3lane.v2f64.p0f64(<2 x double>, <2 x double>, <2 x double>, i64, double*)
5444
5445
5446define double* @test_v1f64_post_imm_st3lane(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
5447;CHECK-LABEL: test_v1f64_post_imm_st3lane:
5448;CHECK: st3.d { v0, v1, v2 }[0], [x0], #24
5449 call void @llvm.aarch64.neon.st3lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005450 %tmp = getelementptr double, double* %A, i64 3
Tim Northover3b0846e2014-05-24 12:50:23 +00005451 ret double* %tmp
5452}
5453
5454define double* @test_v1f64_post_reg_st3lane(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, i64 %inc) nounwind {
5455;CHECK-LABEL: test_v1f64_post_reg_st3lane:
5456;CHECK: st3.d { v0, v1, v2 }[0], [x0], x{{[0-9]+}}
5457 call void @llvm.aarch64.neon.st3lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005458 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005459 ret double* %tmp
5460}
5461
5462declare void @llvm.aarch64.neon.st3lane.v1f64.p0f64(<1 x double>, <1 x double>, <1 x double>, i64, double*)
5463
5464
5465define i8* @test_v16i8_post_imm_st4lane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
5466;CHECK-LABEL: test_v16i8_post_imm_st4lane:
5467;CHECK: st4.b { v0, v1, v2, v3 }[0], [x0], #4
5468 call void @llvm.aarch64.neon.st4lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005469 %tmp = getelementptr i8, i8* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005470 ret i8* %tmp
5471}
5472
5473define i8* @test_v16i8_post_reg_st4lane(i8* %A, i8** %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 %inc) nounwind {
5474;CHECK-LABEL: test_v16i8_post_reg_st4lane:
5475;CHECK: st4.b { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5476 call void @llvm.aarch64.neon.st4lane.v16i8.p0i8(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005477 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005478 ret i8* %tmp
5479}
5480
5481declare void @llvm.aarch64.neon.st4lane.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i64, i8*)
5482
5483
5484define i8* @test_v8i8_post_imm_st4lane(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
5485;CHECK-LABEL: test_v8i8_post_imm_st4lane:
5486;CHECK: st4.b { v0, v1, v2, v3 }[0], [x0], #4
5487 call void @llvm.aarch64.neon.st4lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005488 %tmp = getelementptr i8, i8* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005489 ret i8* %tmp
5490}
5491
5492define i8* @test_v8i8_post_reg_st4lane(i8* %A, i8** %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 %inc) nounwind {
5493;CHECK-LABEL: test_v8i8_post_reg_st4lane:
5494;CHECK: st4.b { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5495 call void @llvm.aarch64.neon.st4lane.v8i8.p0i8(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, i8* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005496 %tmp = getelementptr i8, i8* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005497 ret i8* %tmp
5498}
5499
5500declare void @llvm.aarch64.neon.st4lane.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i64, i8*)
5501
5502
5503define i16* @test_v8i16_post_imm_st4lane(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
5504;CHECK-LABEL: test_v8i16_post_imm_st4lane:
5505;CHECK: st4.h { v0, v1, v2, v3 }[0], [x0], #8
5506 call void @llvm.aarch64.neon.st4lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005507 %tmp = getelementptr i16, i16* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005508 ret i16* %tmp
5509}
5510
5511define i16* @test_v8i16_post_reg_st4lane(i16* %A, i16** %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 %inc) nounwind {
5512;CHECK-LABEL: test_v8i16_post_reg_st4lane:
5513;CHECK: st4.h { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5514 call void @llvm.aarch64.neon.st4lane.v8i16.p0i16(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005515 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005516 ret i16* %tmp
5517}
5518
5519declare void @llvm.aarch64.neon.st4lane.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i64, i16*)
5520
5521
5522define i16* @test_v4i16_post_imm_st4lane(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
5523;CHECK-LABEL: test_v4i16_post_imm_st4lane:
5524;CHECK: st4.h { v0, v1, v2, v3 }[0], [x0], #8
5525 call void @llvm.aarch64.neon.st4lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005526 %tmp = getelementptr i16, i16* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005527 ret i16* %tmp
5528}
5529
5530define i16* @test_v4i16_post_reg_st4lane(i16* %A, i16** %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 %inc) nounwind {
5531;CHECK-LABEL: test_v4i16_post_reg_st4lane:
5532;CHECK: st4.h { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5533 call void @llvm.aarch64.neon.st4lane.v4i16.p0i16(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, i16* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005534 %tmp = getelementptr i16, i16* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005535 ret i16* %tmp
5536}
5537
5538declare void @llvm.aarch64.neon.st4lane.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i64, i16*)
5539
5540
5541define i32* @test_v4i32_post_imm_st4lane(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
5542;CHECK-LABEL: test_v4i32_post_imm_st4lane:
5543;CHECK: st4.s { v0, v1, v2, v3 }[0], [x0], #16
5544 call void @llvm.aarch64.neon.st4lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005545 %tmp = getelementptr i32, i32* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005546 ret i32* %tmp
5547}
5548
5549define i32* @test_v4i32_post_reg_st4lane(i32* %A, i32** %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 %inc) nounwind {
5550;CHECK-LABEL: test_v4i32_post_reg_st4lane:
5551;CHECK: st4.s { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5552 call void @llvm.aarch64.neon.st4lane.v4i32.p0i32(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005553 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005554 ret i32* %tmp
5555}
5556
5557declare void @llvm.aarch64.neon.st4lane.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i64, i32*)
5558
5559
5560define i32* @test_v2i32_post_imm_st4lane(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
5561;CHECK-LABEL: test_v2i32_post_imm_st4lane:
5562;CHECK: st4.s { v0, v1, v2, v3 }[0], [x0], #16
5563 call void @llvm.aarch64.neon.st4lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005564 %tmp = getelementptr i32, i32* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005565 ret i32* %tmp
5566}
5567
5568define i32* @test_v2i32_post_reg_st4lane(i32* %A, i32** %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 %inc) nounwind {
5569;CHECK-LABEL: test_v2i32_post_reg_st4lane:
5570;CHECK: st4.s { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5571 call void @llvm.aarch64.neon.st4lane.v2i32.p0i32(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, i32* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005572 %tmp = getelementptr i32, i32* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005573 ret i32* %tmp
5574}
5575
5576declare void @llvm.aarch64.neon.st4lane.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i64, i32*)
5577
5578
5579define i64* @test_v2i64_post_imm_st4lane(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
5580;CHECK-LABEL: test_v2i64_post_imm_st4lane:
5581;CHECK: st4.d { v0, v1, v2, v3 }[0], [x0], #32
5582 call void @llvm.aarch64.neon.st4lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005583 %tmp = getelementptr i64, i64* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005584 ret i64* %tmp
5585}
5586
5587define i64* @test_v2i64_post_reg_st4lane(i64* %A, i64** %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 %inc) nounwind {
5588;CHECK-LABEL: test_v2i64_post_reg_st4lane:
5589;CHECK: st4.d { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5590 call void @llvm.aarch64.neon.st4lane.v2i64.p0i64(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005591 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005592 ret i64* %tmp
5593}
5594
5595declare void @llvm.aarch64.neon.st4lane.v2i64.p0i64(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, i64*)
5596
5597
5598define i64* @test_v1i64_post_imm_st4lane(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
5599;CHECK-LABEL: test_v1i64_post_imm_st4lane:
5600;CHECK: st4.d { v0, v1, v2, v3 }[0], [x0], #32
5601 call void @llvm.aarch64.neon.st4lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005602 %tmp = getelementptr i64, i64* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005603 ret i64* %tmp
5604}
5605
5606define i64* @test_v1i64_post_reg_st4lane(i64* %A, i64** %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 %inc) nounwind {
5607;CHECK-LABEL: test_v1i64_post_reg_st4lane:
5608;CHECK: st4.d { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5609 call void @llvm.aarch64.neon.st4lane.v1i64.p0i64(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, i64* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005610 %tmp = getelementptr i64, i64* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005611 ret i64* %tmp
5612}
5613
5614declare void @llvm.aarch64.neon.st4lane.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>, i64, i64*)
5615
5616
5617define float* @test_v4f32_post_imm_st4lane(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
5618;CHECK-LABEL: test_v4f32_post_imm_st4lane:
5619;CHECK: st4.s { v0, v1, v2, v3 }[0], [x0], #16
5620 call void @llvm.aarch64.neon.st4lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005621 %tmp = getelementptr float, float* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005622 ret float* %tmp
5623}
5624
5625define float* @test_v4f32_post_reg_st4lane(float* %A, float** %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 %inc) nounwind {
5626;CHECK-LABEL: test_v4f32_post_reg_st4lane:
5627;CHECK: st4.s { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5628 call void @llvm.aarch64.neon.st4lane.v4f32.p0f32(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005629 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005630 ret float* %tmp
5631}
5632
5633declare void @llvm.aarch64.neon.st4lane.v4f32.p0f32(<4 x float>, <4 x float>, <4 x float>, <4 x float>, i64, float*)
5634
5635
5636define float* @test_v2f32_post_imm_st4lane(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
5637;CHECK-LABEL: test_v2f32_post_imm_st4lane:
5638;CHECK: st4.s { v0, v1, v2, v3 }[0], [x0], #16
5639 call void @llvm.aarch64.neon.st4lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005640 %tmp = getelementptr float, float* %A, i32 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005641 ret float* %tmp
5642}
5643
5644define float* @test_v2f32_post_reg_st4lane(float* %A, float** %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 %inc) nounwind {
5645;CHECK-LABEL: test_v2f32_post_reg_st4lane:
5646;CHECK: st4.s { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5647 call void @llvm.aarch64.neon.st4lane.v2f32.p0f32(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, float* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005648 %tmp = getelementptr float, float* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005649 ret float* %tmp
5650}
5651
5652declare void @llvm.aarch64.neon.st4lane.v2f32.p0f32(<2 x float>, <2 x float>, <2 x float>, <2 x float>, i64, float*)
5653
5654
5655define double* @test_v2f64_post_imm_st4lane(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
5656;CHECK-LABEL: test_v2f64_post_imm_st4lane:
5657;CHECK: st4.d { v0, v1, v2, v3 }[0], [x0], #32
5658 call void @llvm.aarch64.neon.st4lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005659 %tmp = getelementptr double, double* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005660 ret double* %tmp
5661}
5662
5663define double* @test_v2f64_post_reg_st4lane(double* %A, double** %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 %inc) nounwind {
5664;CHECK-LABEL: test_v2f64_post_reg_st4lane:
5665;CHECK: st4.d { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5666 call void @llvm.aarch64.neon.st4lane.v2f64.p0f64(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005667 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005668 ret double* %tmp
5669}
5670
5671declare void @llvm.aarch64.neon.st4lane.v2f64.p0f64(<2 x double>, <2 x double>, <2 x double>, <2 x double>, i64, double*)
5672
5673
5674define double* @test_v1f64_post_imm_st4lane(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
5675;CHECK-LABEL: test_v1f64_post_imm_st4lane:
5676;CHECK: st4.d { v0, v1, v2, v3 }[0], [x0], #32
5677 call void @llvm.aarch64.neon.st4lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005678 %tmp = getelementptr double, double* %A, i64 4
Tim Northover3b0846e2014-05-24 12:50:23 +00005679 ret double* %tmp
5680}
5681
5682define double* @test_v1f64_post_reg_st4lane(double* %A, double** %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 %inc) nounwind {
5683;CHECK-LABEL: test_v1f64_post_reg_st4lane:
5684;CHECK: st4.d { v0, v1, v2, v3 }[0], [x0], x{{[0-9]+}}
5685 call void @llvm.aarch64.neon.st4lane.v1f64.p0f64(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, double* %A)
David Blaikie79e6c742015-02-27 19:29:02 +00005686 %tmp = getelementptr double, double* %A, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005687 ret double* %tmp
5688}
5689
5690declare void @llvm.aarch64.neon.st4lane.v1f64.p0f64(<1 x double>, <1 x double>, <1 x double>, <1 x double>, i64, double*)
5691
5692define <16 x i8> @test_v16i8_post_imm_ld1r(i8* %bar, i8** %ptr) {
5693; CHECK-LABEL: test_v16i8_post_imm_ld1r:
5694; CHECK: ld1r.16b { v0 }, [x0], #1
David Blaikiea79ac142015-02-27 21:17:42 +00005695 %tmp1 = load i8, i8* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005696 %tmp2 = insertelement <16 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, i8 %tmp1, i32 0
5697 %tmp3 = insertelement <16 x i8> %tmp2, i8 %tmp1, i32 1
5698 %tmp4 = insertelement <16 x i8> %tmp3, i8 %tmp1, i32 2
5699 %tmp5 = insertelement <16 x i8> %tmp4, i8 %tmp1, i32 3
5700 %tmp6 = insertelement <16 x i8> %tmp5, i8 %tmp1, i32 4
5701 %tmp7 = insertelement <16 x i8> %tmp6, i8 %tmp1, i32 5
5702 %tmp8 = insertelement <16 x i8> %tmp7, i8 %tmp1, i32 6
5703 %tmp9 = insertelement <16 x i8> %tmp8, i8 %tmp1, i32 7
5704 %tmp10 = insertelement <16 x i8> %tmp9, i8 %tmp1, i32 8
5705 %tmp11 = insertelement <16 x i8> %tmp10, i8 %tmp1, i32 9
5706 %tmp12 = insertelement <16 x i8> %tmp11, i8 %tmp1, i32 10
5707 %tmp13 = insertelement <16 x i8> %tmp12, i8 %tmp1, i32 11
5708 %tmp14 = insertelement <16 x i8> %tmp13, i8 %tmp1, i32 12
5709 %tmp15 = insertelement <16 x i8> %tmp14, i8 %tmp1, i32 13
5710 %tmp16 = insertelement <16 x i8> %tmp15, i8 %tmp1, i32 14
5711 %tmp17 = insertelement <16 x i8> %tmp16, i8 %tmp1, i32 15
David Blaikie79e6c742015-02-27 19:29:02 +00005712 %tmp18 = getelementptr i8, i8* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005713 store i8* %tmp18, i8** %ptr
5714 ret <16 x i8> %tmp17
5715}
5716
5717define <16 x i8> @test_v16i8_post_reg_ld1r(i8* %bar, i8** %ptr, i64 %inc) {
5718; CHECK-LABEL: test_v16i8_post_reg_ld1r:
5719; CHECK: ld1r.16b { v0 }, [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005720 %tmp1 = load i8, i8* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005721 %tmp2 = insertelement <16 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, i8 %tmp1, i32 0
5722 %tmp3 = insertelement <16 x i8> %tmp2, i8 %tmp1, i32 1
5723 %tmp4 = insertelement <16 x i8> %tmp3, i8 %tmp1, i32 2
5724 %tmp5 = insertelement <16 x i8> %tmp4, i8 %tmp1, i32 3
5725 %tmp6 = insertelement <16 x i8> %tmp5, i8 %tmp1, i32 4
5726 %tmp7 = insertelement <16 x i8> %tmp6, i8 %tmp1, i32 5
5727 %tmp8 = insertelement <16 x i8> %tmp7, i8 %tmp1, i32 6
5728 %tmp9 = insertelement <16 x i8> %tmp8, i8 %tmp1, i32 7
5729 %tmp10 = insertelement <16 x i8> %tmp9, i8 %tmp1, i32 8
5730 %tmp11 = insertelement <16 x i8> %tmp10, i8 %tmp1, i32 9
5731 %tmp12 = insertelement <16 x i8> %tmp11, i8 %tmp1, i32 10
5732 %tmp13 = insertelement <16 x i8> %tmp12, i8 %tmp1, i32 11
5733 %tmp14 = insertelement <16 x i8> %tmp13, i8 %tmp1, i32 12
5734 %tmp15 = insertelement <16 x i8> %tmp14, i8 %tmp1, i32 13
5735 %tmp16 = insertelement <16 x i8> %tmp15, i8 %tmp1, i32 14
5736 %tmp17 = insertelement <16 x i8> %tmp16, i8 %tmp1, i32 15
David Blaikie79e6c742015-02-27 19:29:02 +00005737 %tmp18 = getelementptr i8, i8* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005738 store i8* %tmp18, i8** %ptr
5739 ret <16 x i8> %tmp17
5740}
5741
5742define <8 x i8> @test_v8i8_post_imm_ld1r(i8* %bar, i8** %ptr) {
5743; CHECK-LABEL: test_v8i8_post_imm_ld1r:
5744; CHECK: ld1r.8b { v0 }, [x0], #1
David Blaikiea79ac142015-02-27 21:17:42 +00005745 %tmp1 = load i8, i8* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005746 %tmp2 = insertelement <8 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, i8 %tmp1, i32 0
5747 %tmp3 = insertelement <8 x i8> %tmp2, i8 %tmp1, i32 1
5748 %tmp4 = insertelement <8 x i8> %tmp3, i8 %tmp1, i32 2
5749 %tmp5 = insertelement <8 x i8> %tmp4, i8 %tmp1, i32 3
5750 %tmp6 = insertelement <8 x i8> %tmp5, i8 %tmp1, i32 4
5751 %tmp7 = insertelement <8 x i8> %tmp6, i8 %tmp1, i32 5
5752 %tmp8 = insertelement <8 x i8> %tmp7, i8 %tmp1, i32 6
5753 %tmp9 = insertelement <8 x i8> %tmp8, i8 %tmp1, i32 7
David Blaikie79e6c742015-02-27 19:29:02 +00005754 %tmp10 = getelementptr i8, i8* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005755 store i8* %tmp10, i8** %ptr
5756 ret <8 x i8> %tmp9
5757}
5758
5759define <8 x i8> @test_v8i8_post_reg_ld1r(i8* %bar, i8** %ptr, i64 %inc) {
5760; CHECK-LABEL: test_v8i8_post_reg_ld1r:
5761; CHECK: ld1r.8b { v0 }, [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005762 %tmp1 = load i8, i8* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005763 %tmp2 = insertelement <8 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, i8 %tmp1, i32 0
5764 %tmp3 = insertelement <8 x i8> %tmp2, i8 %tmp1, i32 1
5765 %tmp4 = insertelement <8 x i8> %tmp3, i8 %tmp1, i32 2
5766 %tmp5 = insertelement <8 x i8> %tmp4, i8 %tmp1, i32 3
5767 %tmp6 = insertelement <8 x i8> %tmp5, i8 %tmp1, i32 4
5768 %tmp7 = insertelement <8 x i8> %tmp6, i8 %tmp1, i32 5
5769 %tmp8 = insertelement <8 x i8> %tmp7, i8 %tmp1, i32 6
5770 %tmp9 = insertelement <8 x i8> %tmp8, i8 %tmp1, i32 7
David Blaikie79e6c742015-02-27 19:29:02 +00005771 %tmp10 = getelementptr i8, i8* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005772 store i8* %tmp10, i8** %ptr
5773 ret <8 x i8> %tmp9
5774}
5775
5776define <8 x i16> @test_v8i16_post_imm_ld1r(i16* %bar, i16** %ptr) {
5777; CHECK-LABEL: test_v8i16_post_imm_ld1r:
5778; CHECK: ld1r.8h { v0 }, [x0], #2
David Blaikiea79ac142015-02-27 21:17:42 +00005779 %tmp1 = load i16, i16* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005780 %tmp2 = insertelement <8 x i16> <i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0
5781 %tmp3 = insertelement <8 x i16> %tmp2, i16 %tmp1, i32 1
5782 %tmp4 = insertelement <8 x i16> %tmp3, i16 %tmp1, i32 2
5783 %tmp5 = insertelement <8 x i16> %tmp4, i16 %tmp1, i32 3
5784 %tmp6 = insertelement <8 x i16> %tmp5, i16 %tmp1, i32 4
5785 %tmp7 = insertelement <8 x i16> %tmp6, i16 %tmp1, i32 5
5786 %tmp8 = insertelement <8 x i16> %tmp7, i16 %tmp1, i32 6
5787 %tmp9 = insertelement <8 x i16> %tmp8, i16 %tmp1, i32 7
David Blaikie79e6c742015-02-27 19:29:02 +00005788 %tmp10 = getelementptr i16, i16* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005789 store i16* %tmp10, i16** %ptr
5790 ret <8 x i16> %tmp9
5791}
5792
5793define <8 x i16> @test_v8i16_post_reg_ld1r(i16* %bar, i16** %ptr, i64 %inc) {
5794; CHECK-LABEL: test_v8i16_post_reg_ld1r:
5795; CHECK: ld1r.8h { v0 }, [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005796 %tmp1 = load i16, i16* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005797 %tmp2 = insertelement <8 x i16> <i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0
5798 %tmp3 = insertelement <8 x i16> %tmp2, i16 %tmp1, i32 1
5799 %tmp4 = insertelement <8 x i16> %tmp3, i16 %tmp1, i32 2
5800 %tmp5 = insertelement <8 x i16> %tmp4, i16 %tmp1, i32 3
5801 %tmp6 = insertelement <8 x i16> %tmp5, i16 %tmp1, i32 4
5802 %tmp7 = insertelement <8 x i16> %tmp6, i16 %tmp1, i32 5
5803 %tmp8 = insertelement <8 x i16> %tmp7, i16 %tmp1, i32 6
5804 %tmp9 = insertelement <8 x i16> %tmp8, i16 %tmp1, i32 7
David Blaikie79e6c742015-02-27 19:29:02 +00005805 %tmp10 = getelementptr i16, i16* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005806 store i16* %tmp10, i16** %ptr
5807 ret <8 x i16> %tmp9
5808}
5809
5810define <4 x i16> @test_v4i16_post_imm_ld1r(i16* %bar, i16** %ptr) {
5811; CHECK-LABEL: test_v4i16_post_imm_ld1r:
5812; CHECK: ld1r.4h { v0 }, [x0], #2
David Blaikiea79ac142015-02-27 21:17:42 +00005813 %tmp1 = load i16, i16* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005814 %tmp2 = insertelement <4 x i16> <i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0
5815 %tmp3 = insertelement <4 x i16> %tmp2, i16 %tmp1, i32 1
5816 %tmp4 = insertelement <4 x i16> %tmp3, i16 %tmp1, i32 2
5817 %tmp5 = insertelement <4 x i16> %tmp4, i16 %tmp1, i32 3
David Blaikie79e6c742015-02-27 19:29:02 +00005818 %tmp6 = getelementptr i16, i16* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005819 store i16* %tmp6, i16** %ptr
5820 ret <4 x i16> %tmp5
5821}
5822
5823define <4 x i16> @test_v4i16_post_reg_ld1r(i16* %bar, i16** %ptr, i64 %inc) {
5824; CHECK-LABEL: test_v4i16_post_reg_ld1r:
5825; CHECK: ld1r.4h { v0 }, [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005826 %tmp1 = load i16, i16* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005827 %tmp2 = insertelement <4 x i16> <i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0
5828 %tmp3 = insertelement <4 x i16> %tmp2, i16 %tmp1, i32 1
5829 %tmp4 = insertelement <4 x i16> %tmp3, i16 %tmp1, i32 2
5830 %tmp5 = insertelement <4 x i16> %tmp4, i16 %tmp1, i32 3
David Blaikie79e6c742015-02-27 19:29:02 +00005831 %tmp6 = getelementptr i16, i16* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005832 store i16* %tmp6, i16** %ptr
5833 ret <4 x i16> %tmp5
5834}
5835
5836define <4 x i32> @test_v4i32_post_imm_ld1r(i32* %bar, i32** %ptr) {
5837; CHECK-LABEL: test_v4i32_post_imm_ld1r:
5838; CHECK: ld1r.4s { v0 }, [x0], #4
David Blaikiea79ac142015-02-27 21:17:42 +00005839 %tmp1 = load i32, i32* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005840 %tmp2 = insertelement <4 x i32> <i32 undef, i32 undef, i32 undef, i32 undef>, i32 %tmp1, i32 0
5841 %tmp3 = insertelement <4 x i32> %tmp2, i32 %tmp1, i32 1
5842 %tmp4 = insertelement <4 x i32> %tmp3, i32 %tmp1, i32 2
5843 %tmp5 = insertelement <4 x i32> %tmp4, i32 %tmp1, i32 3
David Blaikie79e6c742015-02-27 19:29:02 +00005844 %tmp6 = getelementptr i32, i32* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005845 store i32* %tmp6, i32** %ptr
5846 ret <4 x i32> %tmp5
5847}
5848
5849define <4 x i32> @test_v4i32_post_reg_ld1r(i32* %bar, i32** %ptr, i64 %inc) {
5850; CHECK-LABEL: test_v4i32_post_reg_ld1r:
5851; CHECK: ld1r.4s { v0 }, [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005852 %tmp1 = load i32, i32* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005853 %tmp2 = insertelement <4 x i32> <i32 undef, i32 undef, i32 undef, i32 undef>, i32 %tmp1, i32 0
5854 %tmp3 = insertelement <4 x i32> %tmp2, i32 %tmp1, i32 1
5855 %tmp4 = insertelement <4 x i32> %tmp3, i32 %tmp1, i32 2
5856 %tmp5 = insertelement <4 x i32> %tmp4, i32 %tmp1, i32 3
David Blaikie79e6c742015-02-27 19:29:02 +00005857 %tmp6 = getelementptr i32, i32* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005858 store i32* %tmp6, i32** %ptr
5859 ret <4 x i32> %tmp5
5860}
5861
5862define <2 x i32> @test_v2i32_post_imm_ld1r(i32* %bar, i32** %ptr) {
5863; CHECK-LABEL: test_v2i32_post_imm_ld1r:
5864; CHECK: ld1r.2s { v0 }, [x0], #4
David Blaikiea79ac142015-02-27 21:17:42 +00005865 %tmp1 = load i32, i32* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005866 %tmp2 = insertelement <2 x i32> <i32 undef, i32 undef>, i32 %tmp1, i32 0
5867 %tmp3 = insertelement <2 x i32> %tmp2, i32 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00005868 %tmp4 = getelementptr i32, i32* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005869 store i32* %tmp4, i32** %ptr
5870 ret <2 x i32> %tmp3
5871}
5872
5873define <2 x i32> @test_v2i32_post_reg_ld1r(i32* %bar, i32** %ptr, i64 %inc) {
5874; CHECK-LABEL: test_v2i32_post_reg_ld1r:
5875; CHECK: ld1r.2s { v0 }, [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005876 %tmp1 = load i32, i32* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005877 %tmp2 = insertelement <2 x i32> <i32 undef, i32 undef>, i32 %tmp1, i32 0
5878 %tmp3 = insertelement <2 x i32> %tmp2, i32 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00005879 %tmp4 = getelementptr i32, i32* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005880 store i32* %tmp4, i32** %ptr
5881 ret <2 x i32> %tmp3
5882}
5883
5884define <2 x i64> @test_v2i64_post_imm_ld1r(i64* %bar, i64** %ptr) {
5885; CHECK-LABEL: test_v2i64_post_imm_ld1r:
5886; CHECK: ld1r.2d { v0 }, [x0], #8
David Blaikiea79ac142015-02-27 21:17:42 +00005887 %tmp1 = load i64, i64* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005888 %tmp2 = insertelement <2 x i64> <i64 undef, i64 undef>, i64 %tmp1, i32 0
5889 %tmp3 = insertelement <2 x i64> %tmp2, i64 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00005890 %tmp4 = getelementptr i64, i64* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005891 store i64* %tmp4, i64** %ptr
5892 ret <2 x i64> %tmp3
5893}
5894
5895define <2 x i64> @test_v2i64_post_reg_ld1r(i64* %bar, i64** %ptr, i64 %inc) {
5896; CHECK-LABEL: test_v2i64_post_reg_ld1r:
5897; CHECK: ld1r.2d { v0 }, [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005898 %tmp1 = load i64, i64* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005899 %tmp2 = insertelement <2 x i64> <i64 undef, i64 undef>, i64 %tmp1, i32 0
5900 %tmp3 = insertelement <2 x i64> %tmp2, i64 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00005901 %tmp4 = getelementptr i64, i64* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005902 store i64* %tmp4, i64** %ptr
5903 ret <2 x i64> %tmp3
5904}
5905
5906define <4 x float> @test_v4f32_post_imm_ld1r(float* %bar, float** %ptr) {
5907; CHECK-LABEL: test_v4f32_post_imm_ld1r:
5908; CHECK: ld1r.4s { v0 }, [x0], #4
David Blaikiea79ac142015-02-27 21:17:42 +00005909 %tmp1 = load float, float* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005910 %tmp2 = insertelement <4 x float> <float undef, float undef, float undef, float undef>, float %tmp1, i32 0
5911 %tmp3 = insertelement <4 x float> %tmp2, float %tmp1, i32 1
5912 %tmp4 = insertelement <4 x float> %tmp3, float %tmp1, i32 2
5913 %tmp5 = insertelement <4 x float> %tmp4, float %tmp1, i32 3
David Blaikie79e6c742015-02-27 19:29:02 +00005914 %tmp6 = getelementptr float, float* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005915 store float* %tmp6, float** %ptr
5916 ret <4 x float> %tmp5
5917}
5918
5919define <4 x float> @test_v4f32_post_reg_ld1r(float* %bar, float** %ptr, i64 %inc) {
5920; CHECK-LABEL: test_v4f32_post_reg_ld1r:
5921; CHECK: ld1r.4s { v0 }, [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005922 %tmp1 = load float, float* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005923 %tmp2 = insertelement <4 x float> <float undef, float undef, float undef, float undef>, float %tmp1, i32 0
5924 %tmp3 = insertelement <4 x float> %tmp2, float %tmp1, i32 1
5925 %tmp4 = insertelement <4 x float> %tmp3, float %tmp1, i32 2
5926 %tmp5 = insertelement <4 x float> %tmp4, float %tmp1, i32 3
David Blaikie79e6c742015-02-27 19:29:02 +00005927 %tmp6 = getelementptr float, float* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005928 store float* %tmp6, float** %ptr
5929 ret <4 x float> %tmp5
5930}
5931
5932define <2 x float> @test_v2f32_post_imm_ld1r(float* %bar, float** %ptr) {
5933; CHECK-LABEL: test_v2f32_post_imm_ld1r:
5934; CHECK: ld1r.2s { v0 }, [x0], #4
David Blaikiea79ac142015-02-27 21:17:42 +00005935 %tmp1 = load float, float* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005936 %tmp2 = insertelement <2 x float> <float undef, float undef>, float %tmp1, i32 0
5937 %tmp3 = insertelement <2 x float> %tmp2, float %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00005938 %tmp4 = getelementptr float, float* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005939 store float* %tmp4, float** %ptr
5940 ret <2 x float> %tmp3
5941}
5942
5943define <2 x float> @test_v2f32_post_reg_ld1r(float* %bar, float** %ptr, i64 %inc) {
5944; CHECK-LABEL: test_v2f32_post_reg_ld1r:
5945; CHECK: ld1r.2s { v0 }, [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005946 %tmp1 = load float, float* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005947 %tmp2 = insertelement <2 x float> <float undef, float undef>, float %tmp1, i32 0
5948 %tmp3 = insertelement <2 x float> %tmp2, float %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00005949 %tmp4 = getelementptr float, float* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005950 store float* %tmp4, float** %ptr
5951 ret <2 x float> %tmp3
5952}
5953
5954define <2 x double> @test_v2f64_post_imm_ld1r(double* %bar, double** %ptr) {
5955; CHECK-LABEL: test_v2f64_post_imm_ld1r:
5956; CHECK: ld1r.2d { v0 }, [x0], #8
David Blaikiea79ac142015-02-27 21:17:42 +00005957 %tmp1 = load double, double* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005958 %tmp2 = insertelement <2 x double> <double undef, double undef>, double %tmp1, i32 0
5959 %tmp3 = insertelement <2 x double> %tmp2, double %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00005960 %tmp4 = getelementptr double, double* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005961 store double* %tmp4, double** %ptr
5962 ret <2 x double> %tmp3
5963}
5964
5965define <2 x double> @test_v2f64_post_reg_ld1r(double* %bar, double** %ptr, i64 %inc) {
5966; CHECK-LABEL: test_v2f64_post_reg_ld1r:
5967; CHECK: ld1r.2d { v0 }, [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005968 %tmp1 = load double, double* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005969 %tmp2 = insertelement <2 x double> <double undef, double undef>, double %tmp1, i32 0
5970 %tmp3 = insertelement <2 x double> %tmp2, double %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00005971 %tmp4 = getelementptr double, double* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005972 store double* %tmp4, double** %ptr
5973 ret <2 x double> %tmp3
5974}
5975
5976define <16 x i8> @test_v16i8_post_imm_ld1lane(i8* %bar, i8** %ptr, <16 x i8> %A) {
5977; CHECK-LABEL: test_v16i8_post_imm_ld1lane:
5978; CHECK: ld1.b { v0 }[1], [x0], #1
David Blaikiea79ac142015-02-27 21:17:42 +00005979 %tmp1 = load i8, i8* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005980 %tmp2 = insertelement <16 x i8> %A, i8 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00005981 %tmp3 = getelementptr i8, i8* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00005982 store i8* %tmp3, i8** %ptr
5983 ret <16 x i8> %tmp2
5984}
5985
5986define <16 x i8> @test_v16i8_post_reg_ld1lane(i8* %bar, i8** %ptr, i64 %inc, <16 x i8> %A) {
5987; CHECK-LABEL: test_v16i8_post_reg_ld1lane:
5988; CHECK: ld1.b { v0 }[1], [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00005989 %tmp1 = load i8, i8* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00005990 %tmp2 = insertelement <16 x i8> %A, i8 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00005991 %tmp3 = getelementptr i8, i8* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00005992 store i8* %tmp3, i8** %ptr
5993 ret <16 x i8> %tmp2
5994}
5995
5996define <8 x i8> @test_v8i8_post_imm_ld1lane(i8* %bar, i8** %ptr, <8 x i8> %A) {
5997; CHECK-LABEL: test_v8i8_post_imm_ld1lane:
5998; CHECK: ld1.b { v0 }[1], [x0], #1
David Blaikiea79ac142015-02-27 21:17:42 +00005999 %tmp1 = load i8, i8* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006000 %tmp2 = insertelement <8 x i8> %A, i8 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006001 %tmp3 = getelementptr i8, i8* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00006002 store i8* %tmp3, i8** %ptr
6003 ret <8 x i8> %tmp2
6004}
6005
6006define <8 x i8> @test_v8i8_post_reg_ld1lane(i8* %bar, i8** %ptr, i64 %inc, <8 x i8> %A) {
6007; CHECK-LABEL: test_v8i8_post_reg_ld1lane:
6008; CHECK: ld1.b { v0 }[1], [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00006009 %tmp1 = load i8, i8* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006010 %tmp2 = insertelement <8 x i8> %A, i8 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006011 %tmp3 = getelementptr i8, i8* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00006012 store i8* %tmp3, i8** %ptr
6013 ret <8 x i8> %tmp2
6014}
6015
6016define <8 x i16> @test_v8i16_post_imm_ld1lane(i16* %bar, i16** %ptr, <8 x i16> %A) {
6017; CHECK-LABEL: test_v8i16_post_imm_ld1lane:
6018; CHECK: ld1.h { v0 }[1], [x0], #2
David Blaikiea79ac142015-02-27 21:17:42 +00006019 %tmp1 = load i16, i16* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006020 %tmp2 = insertelement <8 x i16> %A, i16 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006021 %tmp3 = getelementptr i16, i16* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00006022 store i16* %tmp3, i16** %ptr
6023 ret <8 x i16> %tmp2
6024}
6025
6026define <8 x i16> @test_v8i16_post_reg_ld1lane(i16* %bar, i16** %ptr, i64 %inc, <8 x i16> %A) {
6027; CHECK-LABEL: test_v8i16_post_reg_ld1lane:
6028; CHECK: ld1.h { v0 }[1], [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00006029 %tmp1 = load i16, i16* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006030 %tmp2 = insertelement <8 x i16> %A, i16 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006031 %tmp3 = getelementptr i16, i16* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00006032 store i16* %tmp3, i16** %ptr
6033 ret <8 x i16> %tmp2
6034}
6035
6036define <4 x i16> @test_v4i16_post_imm_ld1lane(i16* %bar, i16** %ptr, <4 x i16> %A) {
6037; CHECK-LABEL: test_v4i16_post_imm_ld1lane:
6038; CHECK: ld1.h { v0 }[1], [x0], #2
David Blaikiea79ac142015-02-27 21:17:42 +00006039 %tmp1 = load i16, i16* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006040 %tmp2 = insertelement <4 x i16> %A, i16 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006041 %tmp3 = getelementptr i16, i16* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00006042 store i16* %tmp3, i16** %ptr
6043 ret <4 x i16> %tmp2
6044}
6045
6046define <4 x i16> @test_v4i16_post_reg_ld1lane(i16* %bar, i16** %ptr, i64 %inc, <4 x i16> %A) {
6047; CHECK-LABEL: test_v4i16_post_reg_ld1lane:
6048; CHECK: ld1.h { v0 }[1], [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00006049 %tmp1 = load i16, i16* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006050 %tmp2 = insertelement <4 x i16> %A, i16 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006051 %tmp3 = getelementptr i16, i16* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00006052 store i16* %tmp3, i16** %ptr
6053 ret <4 x i16> %tmp2
6054}
6055
6056define <4 x i32> @test_v4i32_post_imm_ld1lane(i32* %bar, i32** %ptr, <4 x i32> %A) {
6057; CHECK-LABEL: test_v4i32_post_imm_ld1lane:
6058; CHECK: ld1.s { v0 }[1], [x0], #4
David Blaikiea79ac142015-02-27 21:17:42 +00006059 %tmp1 = load i32, i32* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006060 %tmp2 = insertelement <4 x i32> %A, i32 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006061 %tmp3 = getelementptr i32, i32* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00006062 store i32* %tmp3, i32** %ptr
6063 ret <4 x i32> %tmp2
6064}
6065
6066define <4 x i32> @test_v4i32_post_reg_ld1lane(i32* %bar, i32** %ptr, i64 %inc, <4 x i32> %A) {
6067; CHECK-LABEL: test_v4i32_post_reg_ld1lane:
6068; CHECK: ld1.s { v0 }[1], [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00006069 %tmp1 = load i32, i32* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006070 %tmp2 = insertelement <4 x i32> %A, i32 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006071 %tmp3 = getelementptr i32, i32* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00006072 store i32* %tmp3, i32** %ptr
6073 ret <4 x i32> %tmp2
6074}
6075
6076define <2 x i32> @test_v2i32_post_imm_ld1lane(i32* %bar, i32** %ptr, <2 x i32> %A) {
6077; CHECK-LABEL: test_v2i32_post_imm_ld1lane:
6078; CHECK: ld1.s { v0 }[1], [x0], #4
David Blaikiea79ac142015-02-27 21:17:42 +00006079 %tmp1 = load i32, i32* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006080 %tmp2 = insertelement <2 x i32> %A, i32 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006081 %tmp3 = getelementptr i32, i32* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00006082 store i32* %tmp3, i32** %ptr
6083 ret <2 x i32> %tmp2
6084}
6085
6086define <2 x i32> @test_v2i32_post_reg_ld1lane(i32* %bar, i32** %ptr, i64 %inc, <2 x i32> %A) {
6087; CHECK-LABEL: test_v2i32_post_reg_ld1lane:
6088; CHECK: ld1.s { v0 }[1], [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00006089 %tmp1 = load i32, i32* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006090 %tmp2 = insertelement <2 x i32> %A, i32 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006091 %tmp3 = getelementptr i32, i32* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00006092 store i32* %tmp3, i32** %ptr
6093 ret <2 x i32> %tmp2
6094}
6095
6096define <2 x i64> @test_v2i64_post_imm_ld1lane(i64* %bar, i64** %ptr, <2 x i64> %A) {
6097; CHECK-LABEL: test_v2i64_post_imm_ld1lane:
6098; CHECK: ld1.d { v0 }[1], [x0], #8
David Blaikiea79ac142015-02-27 21:17:42 +00006099 %tmp1 = load i64, i64* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006100 %tmp2 = insertelement <2 x i64> %A, i64 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006101 %tmp3 = getelementptr i64, i64* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00006102 store i64* %tmp3, i64** %ptr
6103 ret <2 x i64> %tmp2
6104}
6105
6106define <2 x i64> @test_v2i64_post_reg_ld1lane(i64* %bar, i64** %ptr, i64 %inc, <2 x i64> %A) {
6107; CHECK-LABEL: test_v2i64_post_reg_ld1lane:
6108; CHECK: ld1.d { v0 }[1], [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00006109 %tmp1 = load i64, i64* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006110 %tmp2 = insertelement <2 x i64> %A, i64 %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006111 %tmp3 = getelementptr i64, i64* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00006112 store i64* %tmp3, i64** %ptr
6113 ret <2 x i64> %tmp2
6114}
6115
6116define <4 x float> @test_v4f32_post_imm_ld1lane(float* %bar, float** %ptr, <4 x float> %A) {
6117; CHECK-LABEL: test_v4f32_post_imm_ld1lane:
6118; CHECK: ld1.s { v0 }[1], [x0], #4
David Blaikiea79ac142015-02-27 21:17:42 +00006119 %tmp1 = load float, float* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006120 %tmp2 = insertelement <4 x float> %A, float %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006121 %tmp3 = getelementptr float, float* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00006122 store float* %tmp3, float** %ptr
6123 ret <4 x float> %tmp2
6124}
6125
6126define <4 x float> @test_v4f32_post_reg_ld1lane(float* %bar, float** %ptr, i64 %inc, <4 x float> %A) {
6127; CHECK-LABEL: test_v4f32_post_reg_ld1lane:
6128; CHECK: ld1.s { v0 }[1], [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00006129 %tmp1 = load float, float* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006130 %tmp2 = insertelement <4 x float> %A, float %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006131 %tmp3 = getelementptr float, float* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00006132 store float* %tmp3, float** %ptr
6133 ret <4 x float> %tmp2
6134}
6135
6136define <2 x float> @test_v2f32_post_imm_ld1lane(float* %bar, float** %ptr, <2 x float> %A) {
6137; CHECK-LABEL: test_v2f32_post_imm_ld1lane:
6138; CHECK: ld1.s { v0 }[1], [x0], #4
David Blaikiea79ac142015-02-27 21:17:42 +00006139 %tmp1 = load float, float* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006140 %tmp2 = insertelement <2 x float> %A, float %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006141 %tmp3 = getelementptr float, float* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00006142 store float* %tmp3, float** %ptr
6143 ret <2 x float> %tmp2
6144}
6145
6146define <2 x float> @test_v2f32_post_reg_ld1lane(float* %bar, float** %ptr, i64 %inc, <2 x float> %A) {
6147; CHECK-LABEL: test_v2f32_post_reg_ld1lane:
6148; CHECK: ld1.s { v0 }[1], [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00006149 %tmp1 = load float, float* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006150 %tmp2 = insertelement <2 x float> %A, float %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006151 %tmp3 = getelementptr float, float* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00006152 store float* %tmp3, float** %ptr
6153 ret <2 x float> %tmp2
6154}
6155
6156define <2 x double> @test_v2f64_post_imm_ld1lane(double* %bar, double** %ptr, <2 x double> %A) {
6157; CHECK-LABEL: test_v2f64_post_imm_ld1lane:
6158; CHECK: ld1.d { v0 }[1], [x0], #8
David Blaikiea79ac142015-02-27 21:17:42 +00006159 %tmp1 = load double, double* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006160 %tmp2 = insertelement <2 x double> %A, double %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006161 %tmp3 = getelementptr double, double* %bar, i64 1
Tim Northover3b0846e2014-05-24 12:50:23 +00006162 store double* %tmp3, double** %ptr
6163 ret <2 x double> %tmp2
6164}
6165
6166define <2 x double> @test_v2f64_post_reg_ld1lane(double* %bar, double** %ptr, i64 %inc, <2 x double> %A) {
6167; CHECK-LABEL: test_v2f64_post_reg_ld1lane:
6168; CHECK: ld1.d { v0 }[1], [x0], x{{[0-9]+}}
David Blaikiea79ac142015-02-27 21:17:42 +00006169 %tmp1 = load double, double* %bar
Tim Northover3b0846e2014-05-24 12:50:23 +00006170 %tmp2 = insertelement <2 x double> %A, double %tmp1, i32 1
David Blaikie79e6c742015-02-27 19:29:02 +00006171 %tmp3 = getelementptr double, double* %bar, i64 %inc
Tim Northover3b0846e2014-05-24 12:50:23 +00006172 store double* %tmp3, double** %ptr
6173 ret <2 x double> %tmp2
Ahmed Bougacha2448ef52015-04-17 21:02:30 +00006174}
6175
Ahmed Bougacha84b801f2015-04-17 21:11:58 +00006176; Check for dependencies between the vector and the scalar load.
Ahmed Bougacha2448ef52015-04-17 21:02:30 +00006177define <4 x float> @test_v4f32_post_reg_ld1lane_dep_vec_on_load(float* %bar, float** %ptr, i64 %inc, <4 x float>* %dep_ptr_1, <4 x float>* %dep_ptr_2) {
6178; CHECK-LABEL: test_v4f32_post_reg_ld1lane_dep_vec_on_load:
Ahmed Bougacha28fc7ca2015-04-17 23:38:46 +00006179; CHECK: BB#0:
6180; CHECK-NEXT: ldr s[[LD:[0-9]+]], [x0]
6181; CHECK-NEXT: movi.2d v0, #0000000000000000
6182; CHECK-NEXT: str q0, [x3]
6183; CHECK-NEXT: ldr q0, [x4]
6184; CHECK-NEXT: ins.s v0[1], v[[LD]][0]
6185; CHECK-NEXT: add [[POST:x[0-9]]], x0, x2, lsl #2
6186; CHECK-NEXT: str [[POST]], [x1]
6187; CHECK-NEXT: ret
Ahmed Bougacha2448ef52015-04-17 21:02:30 +00006188 %tmp1 = load float, float* %bar
6189 store <4 x float> zeroinitializer, <4 x float>* %dep_ptr_1, align 16
6190 %A = load <4 x float>, <4 x float>* %dep_ptr_2, align 16
6191 %tmp2 = insertelement <4 x float> %A, float %tmp1, i32 1
6192 %tmp3 = getelementptr float, float* %bar, i64 %inc
6193 store float* %tmp3, float** %ptr
6194 ret <4 x float> %tmp2
6195}
Ahmed Bougachae14a4d42015-04-17 23:43:33 +00006196
6197; Make sure that we test the narrow V64 code path.
6198; The tests above don't, because there, 64-bit insert_vector_elt nodes will be
6199; widened to 128-bit before the LD1LANEpost combine has the chance to run,
6200; making it avoid narrow vector types.
6201; One way to trick that combine into running early is to force the vector ops
6202; legalizer to run. We achieve that using the ctpop.
6203; PR23265
6204define <4 x i16> @test_v4i16_post_reg_ld1lane_forced_narrow(i16* %bar, i16** %ptr, i64 %inc, <4 x i16> %A, <2 x i32>* %d) {
6205; CHECK-LABEL: test_v4i16_post_reg_ld1lane_forced_narrow:
6206; CHECK: ld1.h { v0 }[1], [x0], x{{[0-9]+}}
6207 %tmp1 = load i16, i16* %bar
6208 %tmp2 = insertelement <4 x i16> %A, i16 %tmp1, i32 1
6209 %tmp3 = getelementptr i16, i16* %bar, i64 %inc
6210 store i16* %tmp3, i16** %ptr
6211 %dl = load <2 x i32>, <2 x i32>* %d
6212 %dr = call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %dl)
6213 store <2 x i32> %dr, <2 x i32>* %d
6214 ret <4 x i16> %tmp2
6215}
6216
6217declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32>)
Matthias Braun0acbd082015-08-31 18:25:15 +00006218
6219; CHECK-LABEL: test_ld1lane_build:
6220; CHECK-DAG: ld1.s { [[REG0:v[0-9]+]] }[0], [x0]
6221; CHECK-DAG: ld1.s { [[REG0:v[0-9]+]] }[1], [x1]
6222; CHECK-DAG: ld1.s { [[REG1:v[0-9]+]] }[0], [x2]
6223; CHECK-DAG: ld1.s { [[REG1:v[0-9]+]] }[1], [x3]
6224; CHECK: sub.2s v[[REGNUM2:[0-9]+]], [[REG0]], [[REG1]]
6225; CHECK-NEXT: str d[[REGNUM2]], [x4]
6226; CHECK-NEXT: ret
6227define void @test_ld1lane_build(i32* %ptr0, i32* %ptr1, i32* %ptr2, i32* %ptr3, <2 x i32>* %out) {
6228 %load0 = load i32, i32* %ptr0, align 4
6229 %load1 = load i32, i32* %ptr1, align 4
6230 %vec0_0 = insertelement <2 x i32> undef, i32 %load0, i32 0
6231 %vec0_1 = insertelement <2 x i32> %vec0_0, i32 %load1, i32 1
6232
6233 %load2 = load i32, i32* %ptr2, align 4
6234 %load3 = load i32, i32* %ptr3, align 4
6235 %vec1_0 = insertelement <2 x i32> undef, i32 %load2, i32 0
6236 %vec1_1 = insertelement <2 x i32> %vec1_0, i32 %load3, i32 1
6237
6238 %sub = sub nsw <2 x i32> %vec0_1, %vec1_1
6239 store <2 x i32> %sub, <2 x i32>* %out, align 16
6240 ret void
6241}