1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=arm64-apple-ios7.0 -o - %s | FileCheck %s --check-prefixes=CHECK,SDAG
3 ; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=arm64-apple-ios7.0 -o - %s 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GISEL
5 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_pre_load
6 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_load
7 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_pre_store
8 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_store
9 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_pre_load
10 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_load
11 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_pre_store
12 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_store
13 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_pre_load
14 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_load
15 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_pre_store
16 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_store
17 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_pre_load
18 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_load
19 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_pre_store
20 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_store
21 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_pre_load
22 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_load
23 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_pre_store
24 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_store
25 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_pre_load
26 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_load
27 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_pre_store
28 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_store
29 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_pre_load
30 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_load
31 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_pre_store
32 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_store
33 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_pre_load
34 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_load
35 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_pre_store
36 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_store
37 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_pre_load
38 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_load
39 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_pre_store
40 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_store
41 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_pre_load
42 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_load
43 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_pre_store
44 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_store
45 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_pre_load
46 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_load
47 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_pre_store
48 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_store
49 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_st1_lane
50 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_st1_lane
51 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_st1_lane
52 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_st1_lane
53 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_st1_lane
54 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_st1_lane
55 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_st1_lane
56 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_st1_lane
57 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_st1_lane
58 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_st1_lane
59 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_st1_lane
60 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_st1_lane
61 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_st1_lane
62 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_st1_lane
63 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_st1_lane
64 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_st1_lane
65 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_st1_lane
66 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_st1_lane
67 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_st1_lane
68 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_st1_lane
69 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld2
70 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld2
71 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld2
72 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld2
73 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld2
74 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld2
75 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld2
76 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld2
77 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld2
78 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld2
79 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld2
80 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld2
81 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld2
82 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld2
83 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld2
84 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld2
85 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld2
86 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld2
87 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld2
88 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld2
89 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld2
90 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld2
91 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld2
92 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld2
93 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld3
94 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld3
95 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld3
96 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld3
97 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld3
98 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld3
99 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld3
100 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld3
101 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld3
102 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld3
103 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld3
104 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld3
105 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld3
106 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld3
107 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld3
108 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld3
109 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld3
110 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld3
111 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld3
112 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld3
113 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld3
114 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld3
115 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld3
116 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld3
117 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld4
118 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld4
119 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld4
120 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld4
121 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld4
122 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld4
123 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld4
124 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld4
125 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld4
126 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld4
127 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld4
128 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld4
129 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld4
130 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld4
131 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld4
132 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld4
133 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld4
134 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld4
135 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld4
136 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld4
137 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld4
138 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld4
139 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld4
140 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld4
141 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld1x2
142 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld1x2
143 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld1x2
144 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld1x2
145 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld1x2
146 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld1x2
147 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld1x2
148 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld1x2
149 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld1x2
150 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld1x2
151 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld1x2
152 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld1x2
153 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld1x2
154 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld1x2
155 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld1x2
156 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld1x2
157 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld1x2
158 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld1x2
159 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld1x2
160 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld1x2
161 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld1x2
162 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld1x2
163 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld1x2
164 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld1x2
165 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld1x3
166 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld1x3
167 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld1x3
168 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld1x3
169 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld1x3
170 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld1x3
171 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld1x3
172 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld1x3
173 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld1x3
174 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld1x3
175 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld1x3
176 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld1x3
177 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld1x3
178 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld1x3
179 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld1x3
180 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld1x3
181 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld1x3
182 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld1x3
183 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld1x3
184 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld1x3
185 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld1x3
186 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld1x3
187 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld1x3
188 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld1x3
189 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld1x4
190 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld1x4
191 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld1x4
192 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld1x4
193 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld1x4
194 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld1x4
195 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld1x4
196 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld1x4
197 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld1x4
198 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld1x4
199 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld1x4
200 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld1x4
201 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld1x4
202 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld1x4
203 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld1x4
204 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld1x4
205 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld1x4
206 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld1x4
207 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld1x4
208 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld1x4
209 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld1x4
210 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld1x4
211 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld1x4
212 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld1x4
213 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld2r
214 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld2r
215 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld2r
216 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld2r
217 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld2r
218 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld2r
219 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld2r
220 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld2r
221 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld2r
222 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld2r
223 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld2r
224 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld2r
225 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld2r
226 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld2r
227 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld2r
228 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld2r
229 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld2r
230 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld2r
231 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld2r
232 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld2r
233 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld2r
234 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld2r
235 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld2r
236 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld2r
237 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld3r
238 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld3r
239 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld3r
240 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld3r
241 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld3r
242 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld3r
243 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld3r
244 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld3r
245 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld3r
246 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld3r
247 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld3r
248 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld3r
249 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld3r
250 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld3r
251 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld3r
252 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld3r
253 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld3r
254 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld3r
255 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld3r
256 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld3r
257 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld3r
258 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld3r
259 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld3r
260 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld3r
261 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld4r
262 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld4r
263 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld4r
264 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld4r
265 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld4r
266 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld4r
267 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld4r
268 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld4r
269 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld4r
270 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld4r
271 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld4r
272 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld4r
273 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld4r
274 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld4r
275 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld4r
276 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld4r
277 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld4r
278 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld4r
279 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld4r
280 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld4r
281 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld4r
282 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld4r
283 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld4r
284 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld4r
285 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld2lane
286 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld2lane
287 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld2lane
288 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld2lane
289 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld2lane
290 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld2lane
291 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld2lane
292 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld2lane
293 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld2lane
294 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld2lane
295 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld2lane
296 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld2lane
297 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld2lane
298 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld2lane
299 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld2lane
300 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld2lane
301 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld2lane
302 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld2lane
303 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld2lane
304 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld2lane
305 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld2lane
306 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld2lane
307 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld2lane
308 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld2lane
309 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld3lane
310 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld3lane
311 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld3lane
312 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld3lane
313 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld3lane
314 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld3lane
315 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld3lane
316 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld3lane
317 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld3lane
318 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld3lane
319 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld3lane
320 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld3lane
321 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld3lane
322 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld3lane
323 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld3lane
324 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld3lane
325 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld3lane
326 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld3lane
327 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld3lane
328 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld3lane
329 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld3lane
330 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld3lane
331 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld3lane
332 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld3lane
333 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld4lane
334 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld4lane
335 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld4lane
336 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld4lane
337 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld4lane
338 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld4lane
339 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld4lane
340 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld4lane
341 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld4lane
342 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld4lane
343 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld4lane
344 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld4lane
345 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld4lane
346 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld4lane
347 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_ld4lane
348 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_ld4lane
349 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld4lane
350 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld4lane
351 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld4lane
352 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld4lane
353 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld4lane
354 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld4lane
355 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_ld4lane
356 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_ld4lane
357 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_st2
358 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_st2
359 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_st2
360 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_st2
361 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_st2
362 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_st2
363 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_st2
364 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_st2
365 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_st2
366 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_st2
367 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_st2
368 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_st2
369 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_st2
370 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_st2
371 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_st2
372 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_st2
373 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_st2
374 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_st2
375 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_st2
376 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_st2
377 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_st2
378 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_st2
379 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_st2
380 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_st2
381 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_st3
382 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_st3
383 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_st3
384 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_st3
385 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_st3
386 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_st3
387 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_st3
388 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_st3
389 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_st3
390 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_st3
391 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_st3
392 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_st3
393 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_st3
394 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_st3
395 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_st3
396 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_st3
397 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_st3
398 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_st3
399 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_st3
400 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_st3
401 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_st3
402 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_st3
403 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_st3
404 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_st3
405 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_st4
406 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_st4
407 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_st4
408 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_st4
409 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_st4
410 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_st4
411 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_st4
412 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_st4
413 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_st4
414 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_st4
415 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_st4
416 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_st4
417 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_st4
418 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_st4
419 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_st4
420 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_st4
421 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_st4
422 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_st4
423 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_st4
424 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_st4
425 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_st4
426 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_st4
427 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_st4
428 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_st4
429 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_st1x2
430 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_st1x2
431 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_st1x2
432 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_st1x2
433 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_st1x2
434 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_st1x2
435 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_st1x2
436 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_st1x2
437 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_st1x2
438 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_st1x2
439 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_st1x2
440 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_st1x2
441 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_st1x2
442 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_st1x2
443 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_st1x2
444 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_st1x2
445 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_st1x2
446 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_st1x2
447 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_st1x2
448 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_st1x2
449 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_st1x2
450 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_st1x2
451 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_st1x2
452 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_st1x2
453 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_st1x3
454 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_st1x3
455 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_st1x3
456 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_st1x3
457 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_st1x3
458 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_st1x3
459 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_st1x3
460 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_st1x3
461 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_st1x3
462 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_st1x3
463 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_st1x3
464 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_st1x3
465 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_st1x3
466 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_st1x3
467 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_st1x3
468 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_st1x3
469 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_st1x3
470 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_st1x3
471 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_st1x3
472 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_st1x3
473 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_st1x3
474 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_st1x3
475 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_st1x3
476 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_st1x3
477 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_st1x4
478 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_st1x4
479 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_st1x4
480 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_st1x4
481 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_st1x4
482 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_st1x4
483 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_st1x4
484 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_st1x4
485 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_st1x4
486 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_st1x4
487 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_st1x4
488 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_st1x4
489 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_st1x4
490 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_st1x4
491 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_st1x4
492 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_st1x4
493 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_st1x4
494 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_st1x4
495 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_st1x4
496 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_st1x4
497 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_st1x4
498 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_st1x4
499 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_st1x4
500 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_st1x4
501 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_st2lane
502 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_st2lane
503 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_st2lane
504 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_st2lane
505 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_st2lane
506 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_st2lane
507 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_st2lane
508 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_st2lane
509 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_st2lane
510 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_st2lane
511 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_st2lane
512 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_st2lane
513 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_st2lane
514 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_st2lane
515 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_st2lane
516 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_st2lane
517 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_st2lane
518 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_st2lane
519 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_st2lane
520 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_st2lane
521 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_st2lane
522 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_st2lane
523 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_st2lane
524 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_st2lane
525 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_st3lane
526 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_st3lane
527 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_st3lane
528 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_st3lane
529 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_st3lane
530 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_st3lane
531 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_st3lane
532 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_st3lane
533 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_st3lane
534 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_st3lane
535 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_st3lane
536 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_st3lane
537 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_st3lane
538 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_st3lane
539 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_st3lane
540 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_st3lane
541 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_st3lane
542 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_st3lane
543 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_st3lane
544 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_st3lane
545 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_st3lane
546 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_st3lane
547 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_st3lane
548 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_st3lane
549 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_st4lane
550 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_st4lane
551 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_st4lane
552 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_st4lane
553 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_st4lane
554 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_st4lane
555 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_st4lane
556 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_st4lane
557 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_st4lane
558 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_st4lane
559 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_st4lane
560 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_st4lane
561 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_st4lane
562 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_st4lane
563 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_imm_st4lane
564 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1i64_post_reg_st4lane
565 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_st4lane
566 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_st4lane
567 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_st4lane
568 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_st4lane
569 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_st4lane
570 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_st4lane
571 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_imm_st4lane
572 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v1f64_post_reg_st4lane
573 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld1r
574 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld1r
575 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld1r
576 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld1r
577 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld1r
578 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld1r
579 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld1r
580 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld1r
581 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld1r
582 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld1r
583 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld1r
584 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld1r
585 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld1r
586 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld1r
587 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld1r
588 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld1r
589 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld1r
590 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld1r
591 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld1r
592 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld1r
593 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_imm_ld1lane
594 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v16i8_post_reg_ld1lane
595 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_imm_ld1lane
596 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i8_post_reg_ld1lane
597 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_imm_ld1lane
598 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v8i16_post_reg_ld1lane
599 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_imm_ld1lane
600 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld1lane
601 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_imm_ld1lane
602 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i32_post_reg_ld1lane
603 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_imm_ld1lane
604 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i32_post_reg_ld1lane
605 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_imm_ld1lane
606 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2i64_post_reg_ld1lane
607 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_imm_ld1lane
608 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld1lane
609 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_imm_ld1lane
610 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f32_post_reg_ld1lane
611 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_imm_ld1lane
612 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v2f64_post_reg_ld1lane
613 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4f32_post_reg_ld1lane_dep_vec_on_load
614 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_v4i16_post_reg_ld1lane_forced_narrow
615 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_ld1lane_build
616 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_ld1lane_build_i16
617 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_ld1lane_build_half
618 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_ld1lane_build_i8
619 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for test_inc_cycle
620 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for load_single_extract_variable_index_i8
621 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for load_single_extract_variable_index_i16
622 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for load_single_extract_variable_index_i32
623 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for load_single_extract_variable_index_masked_i32
624 ; CHECK-GISEL-NOT: warning: Instruction selection used fallback path for load_single_extract_variable_index_masked2_i32
626 @ptr = global ptr null
628 define <8 x i8> @test_v8i8_pre_load(ptr %addr) {
629 ; CHECK-LABEL: test_v8i8_pre_load:
631 ; CHECK-NEXT: ldr d0, [x0, #40]!
632 ; CHECK-NEXT: adrp x8, _ptr@PAGE
633 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
635 %newaddr = getelementptr <8 x i8>, ptr %addr, i32 5
636 %val = load <8 x i8>, ptr %newaddr, align 8
637 store ptr %newaddr, ptr @ptr
641 define <8 x i8> @test_v8i8_post_load(ptr %addr) {
642 ; CHECK-LABEL: test_v8i8_post_load:
644 ; CHECK-NEXT: ldr d0, [x0], #40
645 ; CHECK-NEXT: adrp x8, _ptr@PAGE
646 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
648 %newaddr = getelementptr <8 x i8>, ptr %addr, i32 5
649 %val = load <8 x i8>, ptr %addr, align 8
650 store ptr %newaddr, ptr @ptr
654 define void @test_v8i8_pre_store(<8 x i8> %in, ptr %addr) {
655 ; CHECK-LABEL: test_v8i8_pre_store:
657 ; CHECK-NEXT: adrp x8, _ptr@PAGE
658 ; CHECK-NEXT: str d0, [x0, #40]!
659 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
661 %newaddr = getelementptr <8 x i8>, ptr %addr, i32 5
662 store <8 x i8> %in, ptr %newaddr, align 8
663 store ptr %newaddr, ptr @ptr
667 define void @test_v8i8_post_store(<8 x i8> %in, ptr %addr) {
668 ; CHECK-LABEL: test_v8i8_post_store:
670 ; CHECK-NEXT: adrp x8, _ptr@PAGE
671 ; CHECK-NEXT: str d0, [x0], #40
672 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
674 %newaddr = getelementptr <8 x i8>, ptr %addr, i32 5
675 store <8 x i8> %in, ptr %addr, align 8
676 store ptr %newaddr, ptr @ptr
680 define <4 x i16> @test_v4i16_pre_load(ptr %addr) {
681 ; CHECK-LABEL: test_v4i16_pre_load:
683 ; CHECK-NEXT: ldr d0, [x0, #40]!
684 ; CHECK-NEXT: adrp x8, _ptr@PAGE
685 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
687 %newaddr = getelementptr <4 x i16>, ptr %addr, i32 5
688 %val = load <4 x i16>, ptr %newaddr, align 8
689 store ptr %newaddr, ptr @ptr
693 define <4 x i16> @test_v4i16_post_load(ptr %addr) {
694 ; CHECK-LABEL: test_v4i16_post_load:
696 ; CHECK-NEXT: ldr d0, [x0], #40
697 ; CHECK-NEXT: adrp x8, _ptr@PAGE
698 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
700 %newaddr = getelementptr <4 x i16>, ptr %addr, i32 5
701 %val = load <4 x i16>, ptr %addr, align 8
702 store ptr %newaddr, ptr @ptr
706 define void @test_v4i16_pre_store(<4 x i16> %in, ptr %addr) {
707 ; CHECK-LABEL: test_v4i16_pre_store:
709 ; CHECK-NEXT: adrp x8, _ptr@PAGE
710 ; CHECK-NEXT: str d0, [x0, #40]!
711 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
713 %newaddr = getelementptr <4 x i16>, ptr %addr, i32 5
714 store <4 x i16> %in, ptr %newaddr, align 8
715 store ptr %newaddr, ptr @ptr
719 define void @test_v4i16_post_store(<4 x i16> %in, ptr %addr) {
720 ; CHECK-LABEL: test_v4i16_post_store:
722 ; CHECK-NEXT: adrp x8, _ptr@PAGE
723 ; CHECK-NEXT: str d0, [x0], #40
724 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
726 %newaddr = getelementptr <4 x i16>, ptr %addr, i32 5
727 store <4 x i16> %in, ptr %addr, align 8
728 store ptr %newaddr, ptr @ptr
732 define <2 x i32> @test_v2i32_pre_load(ptr %addr) {
733 ; CHECK-LABEL: test_v2i32_pre_load:
735 ; CHECK-NEXT: ldr d0, [x0, #40]!
736 ; CHECK-NEXT: adrp x8, _ptr@PAGE
737 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
739 %newaddr = getelementptr <2 x i32>, ptr %addr, i32 5
740 %val = load <2 x i32>, ptr %newaddr, align 8
741 store ptr %newaddr, ptr @ptr
745 define <2 x i32> @test_v2i32_post_load(ptr %addr) {
746 ; CHECK-LABEL: test_v2i32_post_load:
748 ; CHECK-NEXT: ldr d0, [x0], #40
749 ; CHECK-NEXT: adrp x8, _ptr@PAGE
750 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
752 %newaddr = getelementptr <2 x i32>, ptr %addr, i32 5
753 %val = load <2 x i32>, ptr %addr, align 8
754 store ptr %newaddr, ptr @ptr
758 define void @test_v2i32_pre_store(<2 x i32> %in, ptr %addr) {
759 ; CHECK-LABEL: test_v2i32_pre_store:
761 ; CHECK-NEXT: adrp x8, _ptr@PAGE
762 ; CHECK-NEXT: str d0, [x0, #40]!
763 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
765 %newaddr = getelementptr <2 x i32>, ptr %addr, i32 5
766 store <2 x i32> %in, ptr %newaddr, align 8
767 store ptr %newaddr, ptr @ptr
771 define void @test_v2i32_post_store(<2 x i32> %in, ptr %addr) {
772 ; CHECK-LABEL: test_v2i32_post_store:
774 ; CHECK-NEXT: adrp x8, _ptr@PAGE
775 ; CHECK-NEXT: str d0, [x0], #40
776 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
778 %newaddr = getelementptr <2 x i32>, ptr %addr, i32 5
779 store <2 x i32> %in, ptr %addr, align 8
780 store ptr %newaddr, ptr @ptr
784 define <2 x float> @test_v2f32_pre_load(ptr %addr) {
785 ; CHECK-LABEL: test_v2f32_pre_load:
787 ; CHECK-NEXT: ldr d0, [x0, #40]!
788 ; CHECK-NEXT: adrp x8, _ptr@PAGE
789 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
791 %newaddr = getelementptr <2 x float>, ptr %addr, i32 5
792 %val = load <2 x float>, ptr %newaddr, align 8
793 store ptr %newaddr, ptr @ptr
797 define <2 x float> @test_v2f32_post_load(ptr %addr) {
798 ; CHECK-LABEL: test_v2f32_post_load:
800 ; CHECK-NEXT: ldr d0, [x0], #40
801 ; CHECK-NEXT: adrp x8, _ptr@PAGE
802 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
804 %newaddr = getelementptr <2 x float>, ptr %addr, i32 5
805 %val = load <2 x float>, ptr %addr, align 8
806 store ptr %newaddr, ptr @ptr
810 define void @test_v2f32_pre_store(<2 x float> %in, ptr %addr) {
811 ; CHECK-LABEL: test_v2f32_pre_store:
813 ; CHECK-NEXT: adrp x8, _ptr@PAGE
814 ; CHECK-NEXT: str d0, [x0, #40]!
815 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
817 %newaddr = getelementptr <2 x float>, ptr %addr, i32 5
818 store <2 x float> %in, ptr %newaddr, align 8
819 store ptr %newaddr, ptr @ptr
823 define void @test_v2f32_post_store(<2 x float> %in, ptr %addr) {
824 ; CHECK-LABEL: test_v2f32_post_store:
826 ; CHECK-NEXT: adrp x8, _ptr@PAGE
827 ; CHECK-NEXT: str d0, [x0], #40
828 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
830 %newaddr = getelementptr <2 x float>, ptr %addr, i32 5
831 store <2 x float> %in, ptr %addr, align 8
832 store ptr %newaddr, ptr @ptr
836 define <1 x i64> @test_v1i64_pre_load(ptr %addr) {
837 ; SDAG-LABEL: test_v1i64_pre_load:
839 ; SDAG-NEXT: ldr d0, [x0, #40]!
840 ; SDAG-NEXT: adrp x8, _ptr@PAGE
841 ; SDAG-NEXT: str x0, [x8, _ptr@PAGEOFF]
844 ; CHECK-GISEL-LABEL: test_v1i64_pre_load:
845 ; CHECK-GISEL: ; %bb.0:
846 ; CHECK-GISEL-NEXT: ldr x8, [x0, #40]!
847 ; CHECK-GISEL-NEXT: adrp x9, _ptr@PAGE
848 ; CHECK-GISEL-NEXT: str x0, [x9, _ptr@PAGEOFF]
849 ; CHECK-GISEL-NEXT: fmov d0, x8
850 ; CHECK-GISEL-NEXT: ret
851 %newaddr = getelementptr <1 x i64>, ptr %addr, i32 5
852 %val = load <1 x i64>, ptr %newaddr, align 8
853 store ptr %newaddr, ptr @ptr
857 define <1 x i64> @test_v1i64_post_load(ptr %addr) {
858 ; SDAG-LABEL: test_v1i64_post_load:
860 ; SDAG-NEXT: ldr d0, [x0], #40
861 ; SDAG-NEXT: adrp x8, _ptr@PAGE
862 ; SDAG-NEXT: str x0, [x8, _ptr@PAGEOFF]
865 ; CHECK-GISEL-LABEL: test_v1i64_post_load:
866 ; CHECK-GISEL: ; %bb.0:
867 ; CHECK-GISEL-NEXT: ldr x8, [x0], #40
868 ; CHECK-GISEL-NEXT: adrp x9, _ptr@PAGE
869 ; CHECK-GISEL-NEXT: str x0, [x9, _ptr@PAGEOFF]
870 ; CHECK-GISEL-NEXT: fmov d0, x8
871 ; CHECK-GISEL-NEXT: ret
872 %newaddr = getelementptr <1 x i64>, ptr %addr, i32 5
873 %val = load <1 x i64>, ptr %addr, align 8
874 store ptr %newaddr, ptr @ptr
878 define void @test_v1i64_pre_store(<1 x i64> %in, ptr %addr) {
879 ; CHECK-LABEL: test_v1i64_pre_store:
881 ; CHECK-NEXT: adrp x8, _ptr@PAGE
882 ; CHECK-NEXT: str d0, [x0, #40]!
883 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
885 %newaddr = getelementptr <1 x i64>, ptr %addr, i32 5
886 store <1 x i64> %in, ptr %newaddr, align 8
887 store ptr %newaddr, ptr @ptr
891 define void @test_v1i64_post_store(<1 x i64> %in, ptr %addr) {
892 ; CHECK-LABEL: test_v1i64_post_store:
894 ; CHECK-NEXT: adrp x8, _ptr@PAGE
895 ; CHECK-NEXT: str d0, [x0], #40
896 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
898 %newaddr = getelementptr <1 x i64>, ptr %addr, i32 5
899 store <1 x i64> %in, ptr %addr, align 8
900 store ptr %newaddr, ptr @ptr
904 define <16 x i8> @test_v16i8_pre_load(ptr %addr) {
905 ; CHECK-LABEL: test_v16i8_pre_load:
907 ; CHECK-NEXT: ldr q0, [x0, #80]!
908 ; CHECK-NEXT: adrp x8, _ptr@PAGE
909 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
911 %newaddr = getelementptr <16 x i8>, ptr %addr, i32 5
912 %val = load <16 x i8>, ptr %newaddr, align 8
913 store ptr %newaddr, ptr @ptr
917 define <16 x i8> @test_v16i8_post_load(ptr %addr) {
918 ; CHECK-LABEL: test_v16i8_post_load:
920 ; CHECK-NEXT: ldr q0, [x0], #80
921 ; CHECK-NEXT: adrp x8, _ptr@PAGE
922 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
924 %newaddr = getelementptr <16 x i8>, ptr %addr, i32 5
925 %val = load <16 x i8>, ptr %addr, align 8
926 store ptr %newaddr, ptr @ptr
930 define void @test_v16i8_pre_store(<16 x i8> %in, ptr %addr) {
931 ; CHECK-LABEL: test_v16i8_pre_store:
933 ; CHECK-NEXT: adrp x8, _ptr@PAGE
934 ; CHECK-NEXT: str q0, [x0, #80]!
935 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
937 %newaddr = getelementptr <16 x i8>, ptr %addr, i32 5
938 store <16 x i8> %in, ptr %newaddr, align 8
939 store ptr %newaddr, ptr @ptr
943 define void @test_v16i8_post_store(<16 x i8> %in, ptr %addr) {
944 ; CHECK-LABEL: test_v16i8_post_store:
946 ; CHECK-NEXT: adrp x8, _ptr@PAGE
947 ; CHECK-NEXT: str q0, [x0], #80
948 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
950 %newaddr = getelementptr <16 x i8>, ptr %addr, i32 5
951 store <16 x i8> %in, ptr %addr, align 8
952 store ptr %newaddr, ptr @ptr
956 define <8 x i16> @test_v8i16_pre_load(ptr %addr) {
957 ; CHECK-LABEL: test_v8i16_pre_load:
959 ; CHECK-NEXT: ldr q0, [x0, #80]!
960 ; CHECK-NEXT: adrp x8, _ptr@PAGE
961 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
963 %newaddr = getelementptr <8 x i16>, ptr %addr, i32 5
964 %val = load <8 x i16>, ptr %newaddr, align 8
965 store ptr %newaddr, ptr @ptr
969 define <8 x i16> @test_v8i16_post_load(ptr %addr) {
970 ; CHECK-LABEL: test_v8i16_post_load:
972 ; CHECK-NEXT: ldr q0, [x0], #80
973 ; CHECK-NEXT: adrp x8, _ptr@PAGE
974 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
976 %newaddr = getelementptr <8 x i16>, ptr %addr, i32 5
977 %val = load <8 x i16>, ptr %addr, align 8
978 store ptr %newaddr, ptr @ptr
982 define void @test_v8i16_pre_store(<8 x i16> %in, ptr %addr) {
983 ; CHECK-LABEL: test_v8i16_pre_store:
985 ; CHECK-NEXT: adrp x8, _ptr@PAGE
986 ; CHECK-NEXT: str q0, [x0, #80]!
987 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
989 %newaddr = getelementptr <8 x i16>, ptr %addr, i32 5
990 store <8 x i16> %in, ptr %newaddr, align 8
991 store ptr %newaddr, ptr @ptr
995 define void @test_v8i16_post_store(<8 x i16> %in, ptr %addr) {
996 ; CHECK-LABEL: test_v8i16_post_store:
998 ; CHECK-NEXT: adrp x8, _ptr@PAGE
999 ; CHECK-NEXT: str q0, [x0], #80
1000 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1002 %newaddr = getelementptr <8 x i16>, ptr %addr, i32 5
1003 store <8 x i16> %in, ptr %addr, align 8
1004 store ptr %newaddr, ptr @ptr
1008 define <4 x i32> @test_v4i32_pre_load(ptr %addr) {
1009 ; CHECK-LABEL: test_v4i32_pre_load:
1011 ; CHECK-NEXT: ldr q0, [x0, #80]!
1012 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1013 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1015 %newaddr = getelementptr <4 x i32>, ptr %addr, i32 5
1016 %val = load <4 x i32>, ptr %newaddr, align 8
1017 store ptr %newaddr, ptr @ptr
1021 define <4 x i32> @test_v4i32_post_load(ptr %addr) {
1022 ; CHECK-LABEL: test_v4i32_post_load:
1024 ; CHECK-NEXT: ldr q0, [x0], #80
1025 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1026 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1028 %newaddr = getelementptr <4 x i32>, ptr %addr, i32 5
1029 %val = load <4 x i32>, ptr %addr, align 8
1030 store ptr %newaddr, ptr @ptr
1034 define void @test_v4i32_pre_store(<4 x i32> %in, ptr %addr) {
1035 ; CHECK-LABEL: test_v4i32_pre_store:
1037 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1038 ; CHECK-NEXT: str q0, [x0, #80]!
1039 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1041 %newaddr = getelementptr <4 x i32>, ptr %addr, i32 5
1042 store <4 x i32> %in, ptr %newaddr, align 8
1043 store ptr %newaddr, ptr @ptr
1047 define void @test_v4i32_post_store(<4 x i32> %in, ptr %addr) {
1048 ; CHECK-LABEL: test_v4i32_post_store:
1050 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1051 ; CHECK-NEXT: str q0, [x0], #80
1052 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1054 %newaddr = getelementptr <4 x i32>, ptr %addr, i32 5
1055 store <4 x i32> %in, ptr %addr, align 8
1056 store ptr %newaddr, ptr @ptr
1061 define <4 x float> @test_v4f32_pre_load(ptr %addr) {
1062 ; CHECK-LABEL: test_v4f32_pre_load:
1064 ; CHECK-NEXT: ldr q0, [x0, #80]!
1065 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1066 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1068 %newaddr = getelementptr <4 x float>, ptr %addr, i32 5
1069 %val = load <4 x float>, ptr %newaddr, align 8
1070 store ptr %newaddr, ptr @ptr
1071 ret <4 x float> %val
1074 define <4 x float> @test_v4f32_post_load(ptr %addr) {
1075 ; CHECK-LABEL: test_v4f32_post_load:
1077 ; CHECK-NEXT: ldr q0, [x0], #80
1078 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1079 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1081 %newaddr = getelementptr <4 x float>, ptr %addr, i32 5
1082 %val = load <4 x float>, ptr %addr, align 8
1083 store ptr %newaddr, ptr @ptr
1084 ret <4 x float> %val
1087 define void @test_v4f32_pre_store(<4 x float> %in, ptr %addr) {
1088 ; CHECK-LABEL: test_v4f32_pre_store:
1090 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1091 ; CHECK-NEXT: str q0, [x0, #80]!
1092 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1094 %newaddr = getelementptr <4 x float>, ptr %addr, i32 5
1095 store <4 x float> %in, ptr %newaddr, align 8
1096 store ptr %newaddr, ptr @ptr
1100 define void @test_v4f32_post_store(<4 x float> %in, ptr %addr) {
1101 ; CHECK-LABEL: test_v4f32_post_store:
1103 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1104 ; CHECK-NEXT: str q0, [x0], #80
1105 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1107 %newaddr = getelementptr <4 x float>, ptr %addr, i32 5
1108 store <4 x float> %in, ptr %addr, align 8
1109 store ptr %newaddr, ptr @ptr
1114 define <2 x i64> @test_v2i64_pre_load(ptr %addr) {
1115 ; CHECK-LABEL: test_v2i64_pre_load:
1117 ; CHECK-NEXT: ldr q0, [x0, #80]!
1118 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1119 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1121 %newaddr = getelementptr <2 x i64>, ptr %addr, i32 5
1122 %val = load <2 x i64>, ptr %newaddr, align 8
1123 store ptr %newaddr, ptr @ptr
1127 define <2 x i64> @test_v2i64_post_load(ptr %addr) {
1128 ; CHECK-LABEL: test_v2i64_post_load:
1130 ; CHECK-NEXT: ldr q0, [x0], #80
1131 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1132 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1134 %newaddr = getelementptr <2 x i64>, ptr %addr, i32 5
1135 %val = load <2 x i64>, ptr %addr, align 8
1136 store ptr %newaddr, ptr @ptr
1140 define void @test_v2i64_pre_store(<2 x i64> %in, ptr %addr) {
1141 ; CHECK-LABEL: test_v2i64_pre_store:
1143 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1144 ; CHECK-NEXT: str q0, [x0, #80]!
1145 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1147 %newaddr = getelementptr <2 x i64>, ptr %addr, i32 5
1148 store <2 x i64> %in, ptr %newaddr, align 8
1149 store ptr %newaddr, ptr @ptr
1153 define void @test_v2i64_post_store(<2 x i64> %in, ptr %addr) {
1154 ; CHECK-LABEL: test_v2i64_post_store:
1156 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1157 ; CHECK-NEXT: str q0, [x0], #80
1158 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1160 %newaddr = getelementptr <2 x i64>, ptr %addr, i32 5
1161 store <2 x i64> %in, ptr %addr, align 8
1162 store ptr %newaddr, ptr @ptr
1167 define <2 x double> @test_v2f64_pre_load(ptr %addr) {
1168 ; CHECK-LABEL: test_v2f64_pre_load:
1170 ; CHECK-NEXT: ldr q0, [x0, #80]!
1171 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1172 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1174 %newaddr = getelementptr <2 x double>, ptr %addr, i32 5
1175 %val = load <2 x double>, ptr %newaddr, align 8
1176 store ptr %newaddr, ptr @ptr
1177 ret <2 x double> %val
1180 define <2 x double> @test_v2f64_post_load(ptr %addr) {
1181 ; CHECK-LABEL: test_v2f64_post_load:
1183 ; CHECK-NEXT: ldr q0, [x0], #80
1184 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1185 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1187 %newaddr = getelementptr <2 x double>, ptr %addr, i32 5
1188 %val = load <2 x double>, ptr %addr, align 8
1189 store ptr %newaddr, ptr @ptr
1190 ret <2 x double> %val
1193 define void @test_v2f64_pre_store(<2 x double> %in, ptr %addr) {
1194 ; CHECK-LABEL: test_v2f64_pre_store:
1196 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1197 ; CHECK-NEXT: str q0, [x0, #80]!
1198 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1200 %newaddr = getelementptr <2 x double>, ptr %addr, i32 5
1201 store <2 x double> %in, ptr %newaddr, align 8
1202 store ptr %newaddr, ptr @ptr
1206 define void @test_v2f64_post_store(<2 x double> %in, ptr %addr) {
1207 ; CHECK-LABEL: test_v2f64_post_store:
1209 ; CHECK-NEXT: adrp x8, _ptr@PAGE
1210 ; CHECK-NEXT: str q0, [x0], #80
1211 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
1213 %newaddr = getelementptr <2 x double>, ptr %addr, i32 5
1214 store <2 x double> %in, ptr %addr, align 8
1215 store ptr %newaddr, ptr @ptr
1219 define ptr @test_v16i8_post_imm_st1_lane(<16 x i8> %in, ptr %addr) {
1220 ; SDAG-LABEL: test_v16i8_post_imm_st1_lane:
1222 ; SDAG-NEXT: st1.b { v0 }[3], [x0], #1
1225 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_st1_lane:
1226 ; CHECK-GISEL: ; %bb.0:
1227 ; CHECK-GISEL-NEXT: mov b0, v0[3]
1228 ; CHECK-GISEL-NEXT: str b0, [x0], #1
1229 ; CHECK-GISEL-NEXT: ret
1230 %elt = extractelement <16 x i8> %in, i32 3
1231 store i8 %elt, ptr %addr
1233 %newaddr = getelementptr i8, ptr %addr, i32 1
1237 define ptr @test_v16i8_post_reg_st1_lane(<16 x i8> %in, ptr %addr) {
1238 ; SDAG-LABEL: test_v16i8_post_reg_st1_lane:
1240 ; SDAG-NEXT: mov w8, #2 ; =0x2
1241 ; SDAG-NEXT: st1.b { v0 }[3], [x0], x8
1244 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_st1_lane:
1245 ; CHECK-GISEL: ; %bb.0:
1246 ; CHECK-GISEL-NEXT: mov b0, v0[3]
1247 ; CHECK-GISEL-NEXT: str b0, [x0], #2
1248 ; CHECK-GISEL-NEXT: ret
1249 %elt = extractelement <16 x i8> %in, i32 3
1250 store i8 %elt, ptr %addr
1252 %newaddr = getelementptr i8, ptr %addr, i32 2
1257 define ptr @test_v8i16_post_imm_st1_lane(<8 x i16> %in, ptr %addr) {
1258 ; SDAG-LABEL: test_v8i16_post_imm_st1_lane:
1260 ; SDAG-NEXT: st1.h { v0 }[3], [x0], #2
1263 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_st1_lane:
1264 ; CHECK-GISEL: ; %bb.0:
1265 ; CHECK-GISEL-NEXT: mov h0, v0[3]
1266 ; CHECK-GISEL-NEXT: str h0, [x0], #2
1267 ; CHECK-GISEL-NEXT: ret
1268 %elt = extractelement <8 x i16> %in, i32 3
1269 store i16 %elt, ptr %addr
1271 %newaddr = getelementptr i16, ptr %addr, i32 1
1275 define ptr @test_v8i16_post_reg_st1_lane(<8 x i16> %in, ptr %addr) {
1276 ; SDAG-LABEL: test_v8i16_post_reg_st1_lane:
1278 ; SDAG-NEXT: mov w8, #4 ; =0x4
1279 ; SDAG-NEXT: st1.h { v0 }[3], [x0], x8
1282 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_st1_lane:
1283 ; CHECK-GISEL: ; %bb.0:
1284 ; CHECK-GISEL-NEXT: mov h0, v0[3]
1285 ; CHECK-GISEL-NEXT: str h0, [x0], #4
1286 ; CHECK-GISEL-NEXT: ret
1287 %elt = extractelement <8 x i16> %in, i32 3
1288 store i16 %elt, ptr %addr
1290 %newaddr = getelementptr i16, ptr %addr, i32 2
1294 define ptr @test_v4i32_post_imm_st1_lane(<4 x i32> %in, ptr %addr) {
1295 ; SDAG-LABEL: test_v4i32_post_imm_st1_lane:
1297 ; SDAG-NEXT: st1.s { v0 }[3], [x0], #4
1300 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_st1_lane:
1301 ; CHECK-GISEL: ; %bb.0:
1302 ; CHECK-GISEL-NEXT: mov s0, v0[3]
1303 ; CHECK-GISEL-NEXT: str s0, [x0], #4
1304 ; CHECK-GISEL-NEXT: ret
1305 %elt = extractelement <4 x i32> %in, i32 3
1306 store i32 %elt, ptr %addr
1308 %newaddr = getelementptr i32, ptr %addr, i32 1
1312 define ptr @test_v4i32_post_reg_st1_lane(<4 x i32> %in, ptr %addr) {
1313 ; SDAG-LABEL: test_v4i32_post_reg_st1_lane:
1315 ; SDAG-NEXT: mov w8, #8 ; =0x8
1316 ; SDAG-NEXT: st1.s { v0 }[3], [x0], x8
1319 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_st1_lane:
1320 ; CHECK-GISEL: ; %bb.0:
1321 ; CHECK-GISEL-NEXT: mov s0, v0[3]
1322 ; CHECK-GISEL-NEXT: str s0, [x0], #8
1323 ; CHECK-GISEL-NEXT: ret
1324 %elt = extractelement <4 x i32> %in, i32 3
1325 store i32 %elt, ptr %addr
1327 %newaddr = getelementptr i32, ptr %addr, i32 2
1331 define ptr @test_v4f32_post_imm_st1_lane(<4 x float> %in, ptr %addr) {
1332 ; SDAG-LABEL: test_v4f32_post_imm_st1_lane:
1334 ; SDAG-NEXT: st1.s { v0 }[3], [x0], #4
1337 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_st1_lane:
1338 ; CHECK-GISEL: ; %bb.0:
1339 ; CHECK-GISEL-NEXT: mov s0, v0[3]
1340 ; CHECK-GISEL-NEXT: str s0, [x0], #4
1341 ; CHECK-GISEL-NEXT: ret
1342 %elt = extractelement <4 x float> %in, i32 3
1343 store float %elt, ptr %addr
1345 %newaddr = getelementptr float, ptr %addr, i32 1
1349 define ptr @test_v4f32_post_reg_st1_lane(<4 x float> %in, ptr %addr) {
1350 ; SDAG-LABEL: test_v4f32_post_reg_st1_lane:
1352 ; SDAG-NEXT: mov w8, #8 ; =0x8
1353 ; SDAG-NEXT: st1.s { v0 }[3], [x0], x8
1356 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_st1_lane:
1357 ; CHECK-GISEL: ; %bb.0:
1358 ; CHECK-GISEL-NEXT: mov s0, v0[3]
1359 ; CHECK-GISEL-NEXT: str s0, [x0], #8
1360 ; CHECK-GISEL-NEXT: ret
1361 %elt = extractelement <4 x float> %in, i32 3
1362 store float %elt, ptr %addr
1364 %newaddr = getelementptr float, ptr %addr, i32 2
1368 define ptr @test_v2i64_post_imm_st1_lane(<2 x i64> %in, ptr %addr) {
1369 ; SDAG-LABEL: test_v2i64_post_imm_st1_lane:
1371 ; SDAG-NEXT: st1.d { v0 }[1], [x0], #8
1374 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_st1_lane:
1375 ; CHECK-GISEL: ; %bb.0:
1376 ; CHECK-GISEL-NEXT: mov d0, v0[1]
1377 ; CHECK-GISEL-NEXT: str d0, [x0], #8
1378 ; CHECK-GISEL-NEXT: ret
1379 %elt = extractelement <2 x i64> %in, i64 1
1380 store i64 %elt, ptr %addr
1382 %newaddr = getelementptr i64, ptr %addr, i64 1
1386 define ptr @test_v2i64_post_reg_st1_lane(<2 x i64> %in, ptr %addr) {
1387 ; SDAG-LABEL: test_v2i64_post_reg_st1_lane:
1389 ; SDAG-NEXT: mov w8, #16 ; =0x10
1390 ; SDAG-NEXT: st1.d { v0 }[1], [x0], x8
1393 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_st1_lane:
1394 ; CHECK-GISEL: ; %bb.0:
1395 ; CHECK-GISEL-NEXT: mov d0, v0[1]
1396 ; CHECK-GISEL-NEXT: str d0, [x0], #16
1397 ; CHECK-GISEL-NEXT: ret
1398 %elt = extractelement <2 x i64> %in, i64 1
1399 store i64 %elt, ptr %addr
1401 %newaddr = getelementptr i64, ptr %addr, i64 2
1405 define ptr @test_v2f64_post_imm_st1_lane(<2 x double> %in, ptr %addr) {
1406 ; SDAG-LABEL: test_v2f64_post_imm_st1_lane:
1408 ; SDAG-NEXT: st1.d { v0 }[1], [x0], #8
1411 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_st1_lane:
1412 ; CHECK-GISEL: ; %bb.0:
1413 ; CHECK-GISEL-NEXT: mov d0, v0[1]
1414 ; CHECK-GISEL-NEXT: str d0, [x0], #8
1415 ; CHECK-GISEL-NEXT: ret
1416 %elt = extractelement <2 x double> %in, i32 1
1417 store double %elt, ptr %addr
1419 %newaddr = getelementptr double, ptr %addr, i32 1
1423 define ptr @test_v2f64_post_reg_st1_lane(<2 x double> %in, ptr %addr) {
1424 ; SDAG-LABEL: test_v2f64_post_reg_st1_lane:
1426 ; SDAG-NEXT: mov w8, #16 ; =0x10
1427 ; SDAG-NEXT: st1.d { v0 }[1], [x0], x8
1430 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_st1_lane:
1431 ; CHECK-GISEL: ; %bb.0:
1432 ; CHECK-GISEL-NEXT: mov d0, v0[1]
1433 ; CHECK-GISEL-NEXT: str d0, [x0], #16
1434 ; CHECK-GISEL-NEXT: ret
1435 %elt = extractelement <2 x double> %in, i32 1
1436 store double %elt, ptr %addr
1438 %newaddr = getelementptr double, ptr %addr, i32 2
1442 define ptr @test_v8i8_post_imm_st1_lane(<8 x i8> %in, ptr %addr) {
1443 ; SDAG-LABEL: test_v8i8_post_imm_st1_lane:
1445 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
1446 ; SDAG-NEXT: st1.b { v0 }[3], [x0], #1
1449 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_st1_lane:
1450 ; CHECK-GISEL: ; %bb.0:
1451 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
1452 ; CHECK-GISEL-NEXT: mov b0, v0[3]
1453 ; CHECK-GISEL-NEXT: str b0, [x0], #1
1454 ; CHECK-GISEL-NEXT: ret
1455 %elt = extractelement <8 x i8> %in, i32 3
1456 store i8 %elt, ptr %addr
1458 %newaddr = getelementptr i8, ptr %addr, i32 1
1462 define ptr @test_v8i8_post_reg_st1_lane(<8 x i8> %in, ptr %addr) {
1463 ; SDAG-LABEL: test_v8i8_post_reg_st1_lane:
1465 ; SDAG-NEXT: mov w8, #2 ; =0x2
1466 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
1467 ; SDAG-NEXT: st1.b { v0 }[3], [x0], x8
1470 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_st1_lane:
1471 ; CHECK-GISEL: ; %bb.0:
1472 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
1473 ; CHECK-GISEL-NEXT: mov b0, v0[3]
1474 ; CHECK-GISEL-NEXT: str b0, [x0], #2
1475 ; CHECK-GISEL-NEXT: ret
1476 %elt = extractelement <8 x i8> %in, i32 3
1477 store i8 %elt, ptr %addr
1479 %newaddr = getelementptr i8, ptr %addr, i32 2
1483 define ptr @test_v4i16_post_imm_st1_lane(<4 x i16> %in, ptr %addr) {
1484 ; SDAG-LABEL: test_v4i16_post_imm_st1_lane:
1486 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
1487 ; SDAG-NEXT: st1.h { v0 }[3], [x0], #2
1490 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_st1_lane:
1491 ; CHECK-GISEL: ; %bb.0:
1492 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
1493 ; CHECK-GISEL-NEXT: mov h0, v0[3]
1494 ; CHECK-GISEL-NEXT: str h0, [x0], #2
1495 ; CHECK-GISEL-NEXT: ret
1496 %elt = extractelement <4 x i16> %in, i32 3
1497 store i16 %elt, ptr %addr
1499 %newaddr = getelementptr i16, ptr %addr, i32 1
1503 define ptr @test_v4i16_post_reg_st1_lane(<4 x i16> %in, ptr %addr) {
1504 ; SDAG-LABEL: test_v4i16_post_reg_st1_lane:
1506 ; SDAG-NEXT: mov w8, #4 ; =0x4
1507 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
1508 ; SDAG-NEXT: st1.h { v0 }[3], [x0], x8
1511 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_st1_lane:
1512 ; CHECK-GISEL: ; %bb.0:
1513 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
1514 ; CHECK-GISEL-NEXT: mov h0, v0[3]
1515 ; CHECK-GISEL-NEXT: str h0, [x0], #4
1516 ; CHECK-GISEL-NEXT: ret
1517 %elt = extractelement <4 x i16> %in, i32 3
1518 store i16 %elt, ptr %addr
1520 %newaddr = getelementptr i16, ptr %addr, i32 2
1524 define ptr @test_v2i32_post_imm_st1_lane(<2 x i32> %in, ptr %addr) {
1525 ; SDAG-LABEL: test_v2i32_post_imm_st1_lane:
1527 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
1528 ; SDAG-NEXT: st1.s { v0 }[1], [x0], #4
1531 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_st1_lane:
1532 ; CHECK-GISEL: ; %bb.0:
1533 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
1534 ; CHECK-GISEL-NEXT: mov s0, v0[1]
1535 ; CHECK-GISEL-NEXT: str s0, [x0], #4
1536 ; CHECK-GISEL-NEXT: ret
1537 %elt = extractelement <2 x i32> %in, i32 1
1538 store i32 %elt, ptr %addr
1540 %newaddr = getelementptr i32, ptr %addr, i32 1
1544 define ptr @test_v2i32_post_reg_st1_lane(<2 x i32> %in, ptr %addr) {
1545 ; SDAG-LABEL: test_v2i32_post_reg_st1_lane:
1547 ; SDAG-NEXT: mov w8, #8 ; =0x8
1548 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
1549 ; SDAG-NEXT: st1.s { v0 }[1], [x0], x8
1552 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_st1_lane:
1553 ; CHECK-GISEL: ; %bb.0:
1554 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
1555 ; CHECK-GISEL-NEXT: mov s0, v0[1]
1556 ; CHECK-GISEL-NEXT: str s0, [x0], #8
1557 ; CHECK-GISEL-NEXT: ret
1558 %elt = extractelement <2 x i32> %in, i32 1
1559 store i32 %elt, ptr %addr
1561 %newaddr = getelementptr i32, ptr %addr, i32 2
1565 define ptr @test_v2f32_post_imm_st1_lane(<2 x float> %in, ptr %addr) {
1566 ; SDAG-LABEL: test_v2f32_post_imm_st1_lane:
1568 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
1569 ; SDAG-NEXT: st1.s { v0 }[1], [x0], #4
1572 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_st1_lane:
1573 ; CHECK-GISEL: ; %bb.0:
1574 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
1575 ; CHECK-GISEL-NEXT: mov s0, v0[1]
1576 ; CHECK-GISEL-NEXT: str s0, [x0], #4
1577 ; CHECK-GISEL-NEXT: ret
1578 %elt = extractelement <2 x float> %in, i32 1
1579 store float %elt, ptr %addr
1581 %newaddr = getelementptr float, ptr %addr, i32 1
1585 define ptr @test_v2f32_post_reg_st1_lane(<2 x float> %in, ptr %addr) {
1586 ; SDAG-LABEL: test_v2f32_post_reg_st1_lane:
1588 ; SDAG-NEXT: mov w8, #8 ; =0x8
1589 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
1590 ; SDAG-NEXT: st1.s { v0 }[1], [x0], x8
1593 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_st1_lane:
1594 ; CHECK-GISEL: ; %bb.0:
1595 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
1596 ; CHECK-GISEL-NEXT: mov s0, v0[1]
1597 ; CHECK-GISEL-NEXT: str s0, [x0], #8
1598 ; CHECK-GISEL-NEXT: ret
1599 %elt = extractelement <2 x float> %in, i32 1
1600 store float %elt, ptr %addr
1602 %newaddr = getelementptr float, ptr %addr, i32 2
1606 define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld2(ptr %A, ptr %ptr) {
1607 ; SDAG-LABEL: test_v16i8_post_imm_ld2:
1609 ; SDAG-NEXT: ld2.16b { v0, v1 }, [x0], #32
1610 ; SDAG-NEXT: str x0, [x1]
1613 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld2:
1614 ; CHECK-GISEL: ; %bb.0:
1615 ; CHECK-GISEL-NEXT: ld2.16b { v0, v1 }, [x0]
1616 ; CHECK-GISEL-NEXT: add x8, x0, #32
1617 ; CHECK-GISEL-NEXT: str x8, [x1]
1618 ; CHECK-GISEL-NEXT: ret
1619 %ld2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0(ptr %A)
1620 %tmp = getelementptr i8, ptr %A, i32 32
1621 store ptr %tmp, ptr %ptr
1622 ret { <16 x i8>, <16 x i8> } %ld2
1625 define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1626 ; SDAG-LABEL: test_v16i8_post_reg_ld2:
1628 ; SDAG-NEXT: ld2.16b { v0, v1 }, [x0], x2
1629 ; SDAG-NEXT: str x0, [x1]
1632 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld2:
1633 ; CHECK-GISEL: ; %bb.0:
1634 ; CHECK-GISEL-NEXT: ld2.16b { v0, v1 }, [x0]
1635 ; CHECK-GISEL-NEXT: add x8, x0, x2
1636 ; CHECK-GISEL-NEXT: str x8, [x1]
1637 ; CHECK-GISEL-NEXT: ret
1638 %ld2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0(ptr %A)
1639 %tmp = getelementptr i8, ptr %A, i64 %inc
1640 store ptr %tmp, ptr %ptr
1641 ret { <16 x i8>, <16 x i8> } %ld2
1644 declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0(ptr)
1647 define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld2(ptr %A, ptr %ptr) {
1648 ; SDAG-LABEL: test_v8i8_post_imm_ld2:
1650 ; SDAG-NEXT: ld2.8b { v0, v1 }, [x0], #16
1651 ; SDAG-NEXT: str x0, [x1]
1654 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld2:
1655 ; CHECK-GISEL: ; %bb.0:
1656 ; CHECK-GISEL-NEXT: ld2.8b { v0, v1 }, [x0]
1657 ; CHECK-GISEL-NEXT: add x8, x0, #16
1658 ; CHECK-GISEL-NEXT: str x8, [x1]
1659 ; CHECK-GISEL-NEXT: ret
1660 %ld2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0(ptr %A)
1661 %tmp = getelementptr i8, ptr %A, i32 16
1662 store ptr %tmp, ptr %ptr
1663 ret { <8 x i8>, <8 x i8> } %ld2
1666 define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1667 ; SDAG-LABEL: test_v8i8_post_reg_ld2:
1669 ; SDAG-NEXT: ld2.8b { v0, v1 }, [x0], x2
1670 ; SDAG-NEXT: str x0, [x1]
1673 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld2:
1674 ; CHECK-GISEL: ; %bb.0:
1675 ; CHECK-GISEL-NEXT: ld2.8b { v0, v1 }, [x0]
1676 ; CHECK-GISEL-NEXT: add x8, x0, x2
1677 ; CHECK-GISEL-NEXT: str x8, [x1]
1678 ; CHECK-GISEL-NEXT: ret
1679 %ld2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0(ptr %A)
1680 %tmp = getelementptr i8, ptr %A, i64 %inc
1681 store ptr %tmp, ptr %ptr
1682 ret { <8 x i8>, <8 x i8> } %ld2
1685 declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0(ptr)
1688 define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld2(ptr %A, ptr %ptr) {
1689 ; SDAG-LABEL: test_v8i16_post_imm_ld2:
1691 ; SDAG-NEXT: ld2.8h { v0, v1 }, [x0], #32
1692 ; SDAG-NEXT: str x0, [x1]
1695 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld2:
1696 ; CHECK-GISEL: ; %bb.0:
1697 ; CHECK-GISEL-NEXT: ld2.8h { v0, v1 }, [x0]
1698 ; CHECK-GISEL-NEXT: add x8, x0, #32
1699 ; CHECK-GISEL-NEXT: str x8, [x1]
1700 ; CHECK-GISEL-NEXT: ret
1701 %ld2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0(ptr %A)
1702 %tmp = getelementptr i16, ptr %A, i32 16
1703 store ptr %tmp, ptr %ptr
1704 ret { <8 x i16>, <8 x i16> } %ld2
1707 define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1708 ; SDAG-LABEL: test_v8i16_post_reg_ld2:
1710 ; SDAG-NEXT: lsl x8, x2, #1
1711 ; SDAG-NEXT: ld2.8h { v0, v1 }, [x0], x8
1712 ; SDAG-NEXT: str x0, [x1]
1715 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld2:
1716 ; CHECK-GISEL: ; %bb.0:
1717 ; CHECK-GISEL-NEXT: ld2.8h { v0, v1 }, [x0]
1718 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
1719 ; CHECK-GISEL-NEXT: str x8, [x1]
1720 ; CHECK-GISEL-NEXT: ret
1721 %ld2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0(ptr %A)
1722 %tmp = getelementptr i16, ptr %A, i64 %inc
1723 store ptr %tmp, ptr %ptr
1724 ret { <8 x i16>, <8 x i16> } %ld2
1727 declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0(ptr)
1730 define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld2(ptr %A, ptr %ptr) {
1731 ; SDAG-LABEL: test_v4i16_post_imm_ld2:
1733 ; SDAG-NEXT: ld2.4h { v0, v1 }, [x0], #16
1734 ; SDAG-NEXT: str x0, [x1]
1737 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld2:
1738 ; CHECK-GISEL: ; %bb.0:
1739 ; CHECK-GISEL-NEXT: ld2.4h { v0, v1 }, [x0]
1740 ; CHECK-GISEL-NEXT: add x8, x0, #16
1741 ; CHECK-GISEL-NEXT: str x8, [x1]
1742 ; CHECK-GISEL-NEXT: ret
1743 %ld2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0(ptr %A)
1744 %tmp = getelementptr i16, ptr %A, i32 8
1745 store ptr %tmp, ptr %ptr
1746 ret { <4 x i16>, <4 x i16> } %ld2
1749 define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1750 ; SDAG-LABEL: test_v4i16_post_reg_ld2:
1752 ; SDAG-NEXT: lsl x8, x2, #1
1753 ; SDAG-NEXT: ld2.4h { v0, v1 }, [x0], x8
1754 ; SDAG-NEXT: str x0, [x1]
1757 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld2:
1758 ; CHECK-GISEL: ; %bb.0:
1759 ; CHECK-GISEL-NEXT: ld2.4h { v0, v1 }, [x0]
1760 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
1761 ; CHECK-GISEL-NEXT: str x8, [x1]
1762 ; CHECK-GISEL-NEXT: ret
1763 %ld2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0(ptr %A)
1764 %tmp = getelementptr i16, ptr %A, i64 %inc
1765 store ptr %tmp, ptr %ptr
1766 ret { <4 x i16>, <4 x i16> } %ld2
1769 declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0(ptr)
1772 define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld2(ptr %A, ptr %ptr) {
1773 ; SDAG-LABEL: test_v4i32_post_imm_ld2:
1775 ; SDAG-NEXT: ld2.4s { v0, v1 }, [x0], #32
1776 ; SDAG-NEXT: str x0, [x1]
1779 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld2:
1780 ; CHECK-GISEL: ; %bb.0:
1781 ; CHECK-GISEL-NEXT: ld2.4s { v0, v1 }, [x0]
1782 ; CHECK-GISEL-NEXT: add x8, x0, #32
1783 ; CHECK-GISEL-NEXT: str x8, [x1]
1784 ; CHECK-GISEL-NEXT: ret
1785 %ld2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0(ptr %A)
1786 %tmp = getelementptr i32, ptr %A, i32 8
1787 store ptr %tmp, ptr %ptr
1788 ret { <4 x i32>, <4 x i32> } %ld2
1791 define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1792 ; SDAG-LABEL: test_v4i32_post_reg_ld2:
1794 ; SDAG-NEXT: lsl x8, x2, #2
1795 ; SDAG-NEXT: ld2.4s { v0, v1 }, [x0], x8
1796 ; SDAG-NEXT: str x0, [x1]
1799 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld2:
1800 ; CHECK-GISEL: ; %bb.0:
1801 ; CHECK-GISEL-NEXT: ld2.4s { v0, v1 }, [x0]
1802 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
1803 ; CHECK-GISEL-NEXT: str x8, [x1]
1804 ; CHECK-GISEL-NEXT: ret
1805 %ld2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0(ptr %A)
1806 %tmp = getelementptr i32, ptr %A, i64 %inc
1807 store ptr %tmp, ptr %ptr
1808 ret { <4 x i32>, <4 x i32> } %ld2
1811 declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0(ptr)
1814 define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld2(ptr %A, ptr %ptr) {
1815 ; SDAG-LABEL: test_v2i32_post_imm_ld2:
1817 ; SDAG-NEXT: ld2.2s { v0, v1 }, [x0], #16
1818 ; SDAG-NEXT: str x0, [x1]
1821 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld2:
1822 ; CHECK-GISEL: ; %bb.0:
1823 ; CHECK-GISEL-NEXT: ld2.2s { v0, v1 }, [x0]
1824 ; CHECK-GISEL-NEXT: add x8, x0, #16
1825 ; CHECK-GISEL-NEXT: str x8, [x1]
1826 ; CHECK-GISEL-NEXT: ret
1827 %ld2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0(ptr %A)
1828 %tmp = getelementptr i32, ptr %A, i32 4
1829 store ptr %tmp, ptr %ptr
1830 ret { <2 x i32>, <2 x i32> } %ld2
1833 define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1834 ; SDAG-LABEL: test_v2i32_post_reg_ld2:
1836 ; SDAG-NEXT: lsl x8, x2, #2
1837 ; SDAG-NEXT: ld2.2s { v0, v1 }, [x0], x8
1838 ; SDAG-NEXT: str x0, [x1]
1841 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld2:
1842 ; CHECK-GISEL: ; %bb.0:
1843 ; CHECK-GISEL-NEXT: ld2.2s { v0, v1 }, [x0]
1844 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
1845 ; CHECK-GISEL-NEXT: str x8, [x1]
1846 ; CHECK-GISEL-NEXT: ret
1847 %ld2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0(ptr %A)
1848 %tmp = getelementptr i32, ptr %A, i64 %inc
1849 store ptr %tmp, ptr %ptr
1850 ret { <2 x i32>, <2 x i32> } %ld2
1853 declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0(ptr)
1856 define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld2(ptr %A, ptr %ptr) {
1857 ; SDAG-LABEL: test_v2i64_post_imm_ld2:
1859 ; SDAG-NEXT: ld2.2d { v0, v1 }, [x0], #32
1860 ; SDAG-NEXT: str x0, [x1]
1863 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld2:
1864 ; CHECK-GISEL: ; %bb.0:
1865 ; CHECK-GISEL-NEXT: ld2.2d { v0, v1 }, [x0]
1866 ; CHECK-GISEL-NEXT: add x8, x0, #32
1867 ; CHECK-GISEL-NEXT: str x8, [x1]
1868 ; CHECK-GISEL-NEXT: ret
1869 %ld2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0(ptr %A)
1870 %tmp = getelementptr i64, ptr %A, i32 4
1871 store ptr %tmp, ptr %ptr
1872 ret { <2 x i64>, <2 x i64> } %ld2
1875 define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1876 ; SDAG-LABEL: test_v2i64_post_reg_ld2:
1878 ; SDAG-NEXT: lsl x8, x2, #3
1879 ; SDAG-NEXT: ld2.2d { v0, v1 }, [x0], x8
1880 ; SDAG-NEXT: str x0, [x1]
1883 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld2:
1884 ; CHECK-GISEL: ; %bb.0:
1885 ; CHECK-GISEL-NEXT: ld2.2d { v0, v1 }, [x0]
1886 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
1887 ; CHECK-GISEL-NEXT: str x8, [x1]
1888 ; CHECK-GISEL-NEXT: ret
1889 %ld2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0(ptr %A)
1890 %tmp = getelementptr i64, ptr %A, i64 %inc
1891 store ptr %tmp, ptr %ptr
1892 ret { <2 x i64>, <2 x i64> } %ld2
1895 declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0(ptr)
1898 define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld2(ptr %A, ptr %ptr) {
1899 ; SDAG-LABEL: test_v1i64_post_imm_ld2:
1901 ; SDAG-NEXT: ld1.1d { v0, v1 }, [x0], #16
1902 ; SDAG-NEXT: str x0, [x1]
1905 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld2:
1906 ; CHECK-GISEL: ; %bb.0:
1907 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1 }, [x0]
1908 ; CHECK-GISEL-NEXT: add x8, x0, #16
1909 ; CHECK-GISEL-NEXT: str x8, [x1]
1910 ; CHECK-GISEL-NEXT: ret
1911 %ld2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0(ptr %A)
1912 %tmp = getelementptr i64, ptr %A, i32 2
1913 store ptr %tmp, ptr %ptr
1914 ret { <1 x i64>, <1 x i64> } %ld2
1917 define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1918 ; SDAG-LABEL: test_v1i64_post_reg_ld2:
1920 ; SDAG-NEXT: lsl x8, x2, #3
1921 ; SDAG-NEXT: ld1.1d { v0, v1 }, [x0], x8
1922 ; SDAG-NEXT: str x0, [x1]
1925 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld2:
1926 ; CHECK-GISEL: ; %bb.0:
1927 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1 }, [x0]
1928 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
1929 ; CHECK-GISEL-NEXT: str x8, [x1]
1930 ; CHECK-GISEL-NEXT: ret
1931 %ld2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0(ptr %A)
1932 %tmp = getelementptr i64, ptr %A, i64 %inc
1933 store ptr %tmp, ptr %ptr
1934 ret { <1 x i64>, <1 x i64> } %ld2
1937 declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0(ptr)
1940 define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld2(ptr %A, ptr %ptr) {
1941 ; SDAG-LABEL: test_v4f32_post_imm_ld2:
1943 ; SDAG-NEXT: ld2.4s { v0, v1 }, [x0], #32
1944 ; SDAG-NEXT: str x0, [x1]
1947 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld2:
1948 ; CHECK-GISEL: ; %bb.0:
1949 ; CHECK-GISEL-NEXT: ld2.4s { v0, v1 }, [x0]
1950 ; CHECK-GISEL-NEXT: add x8, x0, #32
1951 ; CHECK-GISEL-NEXT: str x8, [x1]
1952 ; CHECK-GISEL-NEXT: ret
1953 %ld2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2.v4f32.p0(ptr %A)
1954 %tmp = getelementptr float, ptr %A, i32 8
1955 store ptr %tmp, ptr %ptr
1956 ret { <4 x float>, <4 x float> } %ld2
1959 define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1960 ; SDAG-LABEL: test_v4f32_post_reg_ld2:
1962 ; SDAG-NEXT: lsl x8, x2, #2
1963 ; SDAG-NEXT: ld2.4s { v0, v1 }, [x0], x8
1964 ; SDAG-NEXT: str x0, [x1]
1967 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld2:
1968 ; CHECK-GISEL: ; %bb.0:
1969 ; CHECK-GISEL-NEXT: ld2.4s { v0, v1 }, [x0]
1970 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
1971 ; CHECK-GISEL-NEXT: str x8, [x1]
1972 ; CHECK-GISEL-NEXT: ret
1973 %ld2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2.v4f32.p0(ptr %A)
1974 %tmp = getelementptr float, ptr %A, i64 %inc
1975 store ptr %tmp, ptr %ptr
1976 ret { <4 x float>, <4 x float> } %ld2
1979 declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2.v4f32.p0(ptr)
1982 define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld2(ptr %A, ptr %ptr) {
1983 ; SDAG-LABEL: test_v2f32_post_imm_ld2:
1985 ; SDAG-NEXT: ld2.2s { v0, v1 }, [x0], #16
1986 ; SDAG-NEXT: str x0, [x1]
1989 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld2:
1990 ; CHECK-GISEL: ; %bb.0:
1991 ; CHECK-GISEL-NEXT: ld2.2s { v0, v1 }, [x0]
1992 ; CHECK-GISEL-NEXT: add x8, x0, #16
1993 ; CHECK-GISEL-NEXT: str x8, [x1]
1994 ; CHECK-GISEL-NEXT: ret
1995 %ld2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2.v2f32.p0(ptr %A)
1996 %tmp = getelementptr float, ptr %A, i32 4
1997 store ptr %tmp, ptr %ptr
1998 ret { <2 x float>, <2 x float> } %ld2
2001 define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
2002 ; SDAG-LABEL: test_v2f32_post_reg_ld2:
2004 ; SDAG-NEXT: lsl x8, x2, #2
2005 ; SDAG-NEXT: ld2.2s { v0, v1 }, [x0], x8
2006 ; SDAG-NEXT: str x0, [x1]
2009 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld2:
2010 ; CHECK-GISEL: ; %bb.0:
2011 ; CHECK-GISEL-NEXT: ld2.2s { v0, v1 }, [x0]
2012 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
2013 ; CHECK-GISEL-NEXT: str x8, [x1]
2014 ; CHECK-GISEL-NEXT: ret
2015 %ld2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2.v2f32.p0(ptr %A)
2016 %tmp = getelementptr float, ptr %A, i64 %inc
2017 store ptr %tmp, ptr %ptr
2018 ret { <2 x float>, <2 x float> } %ld2
2021 declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2.v2f32.p0(ptr)
2024 define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld2(ptr %A, ptr %ptr) {
2025 ; SDAG-LABEL: test_v2f64_post_imm_ld2:
2027 ; SDAG-NEXT: ld2.2d { v0, v1 }, [x0], #32
2028 ; SDAG-NEXT: str x0, [x1]
2031 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld2:
2032 ; CHECK-GISEL: ; %bb.0:
2033 ; CHECK-GISEL-NEXT: ld2.2d { v0, v1 }, [x0]
2034 ; CHECK-GISEL-NEXT: add x8, x0, #32
2035 ; CHECK-GISEL-NEXT: str x8, [x1]
2036 ; CHECK-GISEL-NEXT: ret
2037 %ld2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2.v2f64.p0(ptr %A)
2038 %tmp = getelementptr double, ptr %A, i32 4
2039 store ptr %tmp, ptr %ptr
2040 ret { <2 x double>, <2 x double> } %ld2
2043 define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
2044 ; SDAG-LABEL: test_v2f64_post_reg_ld2:
2046 ; SDAG-NEXT: lsl x8, x2, #3
2047 ; SDAG-NEXT: ld2.2d { v0, v1 }, [x0], x8
2048 ; SDAG-NEXT: str x0, [x1]
2051 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld2:
2052 ; CHECK-GISEL: ; %bb.0:
2053 ; CHECK-GISEL-NEXT: ld2.2d { v0, v1 }, [x0]
2054 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
2055 ; CHECK-GISEL-NEXT: str x8, [x1]
2056 ; CHECK-GISEL-NEXT: ret
2057 %ld2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2.v2f64.p0(ptr %A)
2058 %tmp = getelementptr double, ptr %A, i64 %inc
2059 store ptr %tmp, ptr %ptr
2060 ret { <2 x double>, <2 x double> } %ld2
2063 declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2.v2f64.p0(ptr)
2066 define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld2(ptr %A, ptr %ptr) {
2067 ; SDAG-LABEL: test_v1f64_post_imm_ld2:
2069 ; SDAG-NEXT: ld1.1d { v0, v1 }, [x0], #16
2070 ; SDAG-NEXT: str x0, [x1]
2073 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld2:
2074 ; CHECK-GISEL: ; %bb.0:
2075 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1 }, [x0]
2076 ; CHECK-GISEL-NEXT: add x8, x0, #16
2077 ; CHECK-GISEL-NEXT: str x8, [x1]
2078 ; CHECK-GISEL-NEXT: ret
2079 %ld2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2.v1f64.p0(ptr %A)
2080 %tmp = getelementptr double, ptr %A, i32 2
2081 store ptr %tmp, ptr %ptr
2082 ret { <1 x double>, <1 x double> } %ld2
2085 define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
2086 ; SDAG-LABEL: test_v1f64_post_reg_ld2:
2088 ; SDAG-NEXT: lsl x8, x2, #3
2089 ; SDAG-NEXT: ld1.1d { v0, v1 }, [x0], x8
2090 ; SDAG-NEXT: str x0, [x1]
2093 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld2:
2094 ; CHECK-GISEL: ; %bb.0:
2095 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1 }, [x0]
2096 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
2097 ; CHECK-GISEL-NEXT: str x8, [x1]
2098 ; CHECK-GISEL-NEXT: ret
2099 %ld2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2.v1f64.p0(ptr %A)
2100 %tmp = getelementptr double, ptr %A, i64 %inc
2101 store ptr %tmp, ptr %ptr
2102 ret { <1 x double>, <1 x double> } %ld2
2105 declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2.v1f64.p0(ptr)
2108 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld3(ptr %A, ptr %ptr) {
2109 ; SDAG-LABEL: test_v16i8_post_imm_ld3:
2111 ; SDAG-NEXT: ld3.16b { v0, v1, v2 }, [x0], #48
2112 ; SDAG-NEXT: str x0, [x1]
2115 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld3:
2116 ; CHECK-GISEL: ; %bb.0:
2117 ; CHECK-GISEL-NEXT: ld3.16b { v0, v1, v2 }, [x0]
2118 ; CHECK-GISEL-NEXT: add x8, x0, #48
2119 ; CHECK-GISEL-NEXT: str x8, [x1]
2120 ; CHECK-GISEL-NEXT: ret
2121 %ld3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0(ptr %A)
2122 %tmp = getelementptr i8, ptr %A, i32 48
2123 store ptr %tmp, ptr %ptr
2124 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
2127 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2128 ; SDAG-LABEL: test_v16i8_post_reg_ld3:
2130 ; SDAG-NEXT: ld3.16b { v0, v1, v2 }, [x0], x2
2131 ; SDAG-NEXT: str x0, [x1]
2134 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld3:
2135 ; CHECK-GISEL: ; %bb.0:
2136 ; CHECK-GISEL-NEXT: ld3.16b { v0, v1, v2 }, [x0]
2137 ; CHECK-GISEL-NEXT: add x8, x0, x2
2138 ; CHECK-GISEL-NEXT: str x8, [x1]
2139 ; CHECK-GISEL-NEXT: ret
2140 %ld3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0(ptr %A)
2141 %tmp = getelementptr i8, ptr %A, i64 %inc
2142 store ptr %tmp, ptr %ptr
2143 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
2146 declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0(ptr)
2149 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld3(ptr %A, ptr %ptr) {
2150 ; SDAG-LABEL: test_v8i8_post_imm_ld3:
2152 ; SDAG-NEXT: ld3.8b { v0, v1, v2 }, [x0], #24
2153 ; SDAG-NEXT: str x0, [x1]
2156 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld3:
2157 ; CHECK-GISEL: ; %bb.0:
2158 ; CHECK-GISEL-NEXT: ld3.8b { v0, v1, v2 }, [x0]
2159 ; CHECK-GISEL-NEXT: add x8, x0, #24
2160 ; CHECK-GISEL-NEXT: str x8, [x1]
2161 ; CHECK-GISEL-NEXT: ret
2162 %ld3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0(ptr %A)
2163 %tmp = getelementptr i8, ptr %A, i32 24
2164 store ptr %tmp, ptr %ptr
2165 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
2168 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2169 ; SDAG-LABEL: test_v8i8_post_reg_ld3:
2171 ; SDAG-NEXT: ld3.8b { v0, v1, v2 }, [x0], x2
2172 ; SDAG-NEXT: str x0, [x1]
2175 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld3:
2176 ; CHECK-GISEL: ; %bb.0:
2177 ; CHECK-GISEL-NEXT: ld3.8b { v0, v1, v2 }, [x0]
2178 ; CHECK-GISEL-NEXT: add x8, x0, x2
2179 ; CHECK-GISEL-NEXT: str x8, [x1]
2180 ; CHECK-GISEL-NEXT: ret
2181 %ld3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0(ptr %A)
2182 %tmp = getelementptr i8, ptr %A, i64 %inc
2183 store ptr %tmp, ptr %ptr
2184 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
2187 declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0(ptr)
2190 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld3(ptr %A, ptr %ptr) {
2191 ; SDAG-LABEL: test_v8i16_post_imm_ld3:
2193 ; SDAG-NEXT: ld3.8h { v0, v1, v2 }, [x0], #48
2194 ; SDAG-NEXT: str x0, [x1]
2197 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld3:
2198 ; CHECK-GISEL: ; %bb.0:
2199 ; CHECK-GISEL-NEXT: ld3.8h { v0, v1, v2 }, [x0]
2200 ; CHECK-GISEL-NEXT: add x8, x0, #48
2201 ; CHECK-GISEL-NEXT: str x8, [x1]
2202 ; CHECK-GISEL-NEXT: ret
2203 %ld3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0(ptr %A)
2204 %tmp = getelementptr i16, ptr %A, i32 24
2205 store ptr %tmp, ptr %ptr
2206 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
2209 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2210 ; SDAG-LABEL: test_v8i16_post_reg_ld3:
2212 ; SDAG-NEXT: lsl x8, x2, #1
2213 ; SDAG-NEXT: ld3.8h { v0, v1, v2 }, [x0], x8
2214 ; SDAG-NEXT: str x0, [x1]
2217 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld3:
2218 ; CHECK-GISEL: ; %bb.0:
2219 ; CHECK-GISEL-NEXT: ld3.8h { v0, v1, v2 }, [x0]
2220 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
2221 ; CHECK-GISEL-NEXT: str x8, [x1]
2222 ; CHECK-GISEL-NEXT: ret
2223 %ld3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0(ptr %A)
2224 %tmp = getelementptr i16, ptr %A, i64 %inc
2225 store ptr %tmp, ptr %ptr
2226 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
2229 declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0(ptr)
2232 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld3(ptr %A, ptr %ptr) {
2233 ; SDAG-LABEL: test_v4i16_post_imm_ld3:
2235 ; SDAG-NEXT: ld3.4h { v0, v1, v2 }, [x0], #24
2236 ; SDAG-NEXT: str x0, [x1]
2239 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld3:
2240 ; CHECK-GISEL: ; %bb.0:
2241 ; CHECK-GISEL-NEXT: ld3.4h { v0, v1, v2 }, [x0]
2242 ; CHECK-GISEL-NEXT: add x8, x0, #24
2243 ; CHECK-GISEL-NEXT: str x8, [x1]
2244 ; CHECK-GISEL-NEXT: ret
2245 %ld3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0(ptr %A)
2246 %tmp = getelementptr i16, ptr %A, i32 12
2247 store ptr %tmp, ptr %ptr
2248 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
2251 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2252 ; SDAG-LABEL: test_v4i16_post_reg_ld3:
2254 ; SDAG-NEXT: lsl x8, x2, #1
2255 ; SDAG-NEXT: ld3.4h { v0, v1, v2 }, [x0], x8
2256 ; SDAG-NEXT: str x0, [x1]
2259 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld3:
2260 ; CHECK-GISEL: ; %bb.0:
2261 ; CHECK-GISEL-NEXT: ld3.4h { v0, v1, v2 }, [x0]
2262 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
2263 ; CHECK-GISEL-NEXT: str x8, [x1]
2264 ; CHECK-GISEL-NEXT: ret
2265 %ld3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0(ptr %A)
2266 %tmp = getelementptr i16, ptr %A, i64 %inc
2267 store ptr %tmp, ptr %ptr
2268 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
2271 declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0(ptr)
2274 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld3(ptr %A, ptr %ptr) {
2275 ; SDAG-LABEL: test_v4i32_post_imm_ld3:
2277 ; SDAG-NEXT: ld3.4s { v0, v1, v2 }, [x0], #48
2278 ; SDAG-NEXT: str x0, [x1]
2281 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld3:
2282 ; CHECK-GISEL: ; %bb.0:
2283 ; CHECK-GISEL-NEXT: ld3.4s { v0, v1, v2 }, [x0]
2284 ; CHECK-GISEL-NEXT: add x8, x0, #48
2285 ; CHECK-GISEL-NEXT: str x8, [x1]
2286 ; CHECK-GISEL-NEXT: ret
2287 %ld3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0(ptr %A)
2288 %tmp = getelementptr i32, ptr %A, i32 12
2289 store ptr %tmp, ptr %ptr
2290 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
2293 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2294 ; SDAG-LABEL: test_v4i32_post_reg_ld3:
2296 ; SDAG-NEXT: lsl x8, x2, #2
2297 ; SDAG-NEXT: ld3.4s { v0, v1, v2 }, [x0], x8
2298 ; SDAG-NEXT: str x0, [x1]
2301 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld3:
2302 ; CHECK-GISEL: ; %bb.0:
2303 ; CHECK-GISEL-NEXT: ld3.4s { v0, v1, v2 }, [x0]
2304 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
2305 ; CHECK-GISEL-NEXT: str x8, [x1]
2306 ; CHECK-GISEL-NEXT: ret
2307 %ld3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0(ptr %A)
2308 %tmp = getelementptr i32, ptr %A, i64 %inc
2309 store ptr %tmp, ptr %ptr
2310 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
2313 declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0(ptr)
2316 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld3(ptr %A, ptr %ptr) {
2317 ; SDAG-LABEL: test_v2i32_post_imm_ld3:
2319 ; SDAG-NEXT: ld3.2s { v0, v1, v2 }, [x0], #24
2320 ; SDAG-NEXT: str x0, [x1]
2323 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld3:
2324 ; CHECK-GISEL: ; %bb.0:
2325 ; CHECK-GISEL-NEXT: ld3.2s { v0, v1, v2 }, [x0]
2326 ; CHECK-GISEL-NEXT: add x8, x0, #24
2327 ; CHECK-GISEL-NEXT: str x8, [x1]
2328 ; CHECK-GISEL-NEXT: ret
2329 %ld3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0(ptr %A)
2330 %tmp = getelementptr i32, ptr %A, i32 6
2331 store ptr %tmp, ptr %ptr
2332 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
2335 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2336 ; SDAG-LABEL: test_v2i32_post_reg_ld3:
2338 ; SDAG-NEXT: lsl x8, x2, #2
2339 ; SDAG-NEXT: ld3.2s { v0, v1, v2 }, [x0], x8
2340 ; SDAG-NEXT: str x0, [x1]
2343 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld3:
2344 ; CHECK-GISEL: ; %bb.0:
2345 ; CHECK-GISEL-NEXT: ld3.2s { v0, v1, v2 }, [x0]
2346 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
2347 ; CHECK-GISEL-NEXT: str x8, [x1]
2348 ; CHECK-GISEL-NEXT: ret
2349 %ld3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0(ptr %A)
2350 %tmp = getelementptr i32, ptr %A, i64 %inc
2351 store ptr %tmp, ptr %ptr
2352 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
2355 declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0(ptr)
2358 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld3(ptr %A, ptr %ptr) {
2359 ; SDAG-LABEL: test_v2i64_post_imm_ld3:
2361 ; SDAG-NEXT: ld3.2d { v0, v1, v2 }, [x0], #48
2362 ; SDAG-NEXT: str x0, [x1]
2365 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld3:
2366 ; CHECK-GISEL: ; %bb.0:
2367 ; CHECK-GISEL-NEXT: ld3.2d { v0, v1, v2 }, [x0]
2368 ; CHECK-GISEL-NEXT: add x8, x0, #48
2369 ; CHECK-GISEL-NEXT: str x8, [x1]
2370 ; CHECK-GISEL-NEXT: ret
2371 %ld3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0(ptr %A)
2372 %tmp = getelementptr i64, ptr %A, i32 6
2373 store ptr %tmp, ptr %ptr
2374 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
2377 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2378 ; SDAG-LABEL: test_v2i64_post_reg_ld3:
2380 ; SDAG-NEXT: lsl x8, x2, #3
2381 ; SDAG-NEXT: ld3.2d { v0, v1, v2 }, [x0], x8
2382 ; SDAG-NEXT: str x0, [x1]
2385 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld3:
2386 ; CHECK-GISEL: ; %bb.0:
2387 ; CHECK-GISEL-NEXT: ld3.2d { v0, v1, v2 }, [x0]
2388 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
2389 ; CHECK-GISEL-NEXT: str x8, [x1]
2390 ; CHECK-GISEL-NEXT: ret
2391 %ld3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0(ptr %A)
2392 %tmp = getelementptr i64, ptr %A, i64 %inc
2393 store ptr %tmp, ptr %ptr
2394 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
2397 declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0(ptr)
2400 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld3(ptr %A, ptr %ptr) {
2401 ; SDAG-LABEL: test_v1i64_post_imm_ld3:
2403 ; SDAG-NEXT: ld1.1d { v0, v1, v2 }, [x0], #24
2404 ; SDAG-NEXT: str x0, [x1]
2407 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld3:
2408 ; CHECK-GISEL: ; %bb.0:
2409 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2 }, [x0]
2410 ; CHECK-GISEL-NEXT: add x8, x0, #24
2411 ; CHECK-GISEL-NEXT: str x8, [x1]
2412 ; CHECK-GISEL-NEXT: ret
2413 %ld3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0(ptr %A)
2414 %tmp = getelementptr i64, ptr %A, i32 3
2415 store ptr %tmp, ptr %ptr
2416 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
2419 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2420 ; SDAG-LABEL: test_v1i64_post_reg_ld3:
2422 ; SDAG-NEXT: lsl x8, x2, #3
2423 ; SDAG-NEXT: ld1.1d { v0, v1, v2 }, [x0], x8
2424 ; SDAG-NEXT: str x0, [x1]
2427 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld3:
2428 ; CHECK-GISEL: ; %bb.0:
2429 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2 }, [x0]
2430 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
2431 ; CHECK-GISEL-NEXT: str x8, [x1]
2432 ; CHECK-GISEL-NEXT: ret
2433 %ld3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0(ptr %A)
2434 %tmp = getelementptr i64, ptr %A, i64 %inc
2435 store ptr %tmp, ptr %ptr
2436 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
2439 declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0(ptr)
2442 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld3(ptr %A, ptr %ptr) {
2443 ; SDAG-LABEL: test_v4f32_post_imm_ld3:
2445 ; SDAG-NEXT: ld3.4s { v0, v1, v2 }, [x0], #48
2446 ; SDAG-NEXT: str x0, [x1]
2449 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld3:
2450 ; CHECK-GISEL: ; %bb.0:
2451 ; CHECK-GISEL-NEXT: ld3.4s { v0, v1, v2 }, [x0]
2452 ; CHECK-GISEL-NEXT: add x8, x0, #48
2453 ; CHECK-GISEL-NEXT: str x8, [x1]
2454 ; CHECK-GISEL-NEXT: ret
2455 %ld3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3.v4f32.p0(ptr %A)
2456 %tmp = getelementptr float, ptr %A, i32 12
2457 store ptr %tmp, ptr %ptr
2458 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
2461 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2462 ; SDAG-LABEL: test_v4f32_post_reg_ld3:
2464 ; SDAG-NEXT: lsl x8, x2, #2
2465 ; SDAG-NEXT: ld3.4s { v0, v1, v2 }, [x0], x8
2466 ; SDAG-NEXT: str x0, [x1]
2469 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld3:
2470 ; CHECK-GISEL: ; %bb.0:
2471 ; CHECK-GISEL-NEXT: ld3.4s { v0, v1, v2 }, [x0]
2472 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
2473 ; CHECK-GISEL-NEXT: str x8, [x1]
2474 ; CHECK-GISEL-NEXT: ret
2475 %ld3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3.v4f32.p0(ptr %A)
2476 %tmp = getelementptr float, ptr %A, i64 %inc
2477 store ptr %tmp, ptr %ptr
2478 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
2481 declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3.v4f32.p0(ptr)
2484 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld3(ptr %A, ptr %ptr) {
2485 ; SDAG-LABEL: test_v2f32_post_imm_ld3:
2487 ; SDAG-NEXT: ld3.2s { v0, v1, v2 }, [x0], #24
2488 ; SDAG-NEXT: str x0, [x1]
2491 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld3:
2492 ; CHECK-GISEL: ; %bb.0:
2493 ; CHECK-GISEL-NEXT: ld3.2s { v0, v1, v2 }, [x0]
2494 ; CHECK-GISEL-NEXT: add x8, x0, #24
2495 ; CHECK-GISEL-NEXT: str x8, [x1]
2496 ; CHECK-GISEL-NEXT: ret
2497 %ld3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3.v2f32.p0(ptr %A)
2498 %tmp = getelementptr float, ptr %A, i32 6
2499 store ptr %tmp, ptr %ptr
2500 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
2503 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2504 ; SDAG-LABEL: test_v2f32_post_reg_ld3:
2506 ; SDAG-NEXT: lsl x8, x2, #2
2507 ; SDAG-NEXT: ld3.2s { v0, v1, v2 }, [x0], x8
2508 ; SDAG-NEXT: str x0, [x1]
2511 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld3:
2512 ; CHECK-GISEL: ; %bb.0:
2513 ; CHECK-GISEL-NEXT: ld3.2s { v0, v1, v2 }, [x0]
2514 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
2515 ; CHECK-GISEL-NEXT: str x8, [x1]
2516 ; CHECK-GISEL-NEXT: ret
2517 %ld3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3.v2f32.p0(ptr %A)
2518 %tmp = getelementptr float, ptr %A, i64 %inc
2519 store ptr %tmp, ptr %ptr
2520 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
2523 declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3.v2f32.p0(ptr)
2526 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld3(ptr %A, ptr %ptr) {
2527 ; SDAG-LABEL: test_v2f64_post_imm_ld3:
2529 ; SDAG-NEXT: ld3.2d { v0, v1, v2 }, [x0], #48
2530 ; SDAG-NEXT: str x0, [x1]
2533 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld3:
2534 ; CHECK-GISEL: ; %bb.0:
2535 ; CHECK-GISEL-NEXT: ld3.2d { v0, v1, v2 }, [x0]
2536 ; CHECK-GISEL-NEXT: add x8, x0, #48
2537 ; CHECK-GISEL-NEXT: str x8, [x1]
2538 ; CHECK-GISEL-NEXT: ret
2539 %ld3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3.v2f64.p0(ptr %A)
2540 %tmp = getelementptr double, ptr %A, i32 6
2541 store ptr %tmp, ptr %ptr
2542 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
2545 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2546 ; SDAG-LABEL: test_v2f64_post_reg_ld3:
2548 ; SDAG-NEXT: lsl x8, x2, #3
2549 ; SDAG-NEXT: ld3.2d { v0, v1, v2 }, [x0], x8
2550 ; SDAG-NEXT: str x0, [x1]
2553 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld3:
2554 ; CHECK-GISEL: ; %bb.0:
2555 ; CHECK-GISEL-NEXT: ld3.2d { v0, v1, v2 }, [x0]
2556 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
2557 ; CHECK-GISEL-NEXT: str x8, [x1]
2558 ; CHECK-GISEL-NEXT: ret
2559 %ld3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3.v2f64.p0(ptr %A)
2560 %tmp = getelementptr double, ptr %A, i64 %inc
2561 store ptr %tmp, ptr %ptr
2562 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
2565 declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3.v2f64.p0(ptr)
2568 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld3(ptr %A, ptr %ptr) {
2569 ; SDAG-LABEL: test_v1f64_post_imm_ld3:
2571 ; SDAG-NEXT: ld1.1d { v0, v1, v2 }, [x0], #24
2572 ; SDAG-NEXT: str x0, [x1]
2575 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld3:
2576 ; CHECK-GISEL: ; %bb.0:
2577 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2 }, [x0]
2578 ; CHECK-GISEL-NEXT: add x8, x0, #24
2579 ; CHECK-GISEL-NEXT: str x8, [x1]
2580 ; CHECK-GISEL-NEXT: ret
2581 %ld3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3.v1f64.p0(ptr %A)
2582 %tmp = getelementptr double, ptr %A, i32 3
2583 store ptr %tmp, ptr %ptr
2584 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
2587 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
2588 ; SDAG-LABEL: test_v1f64_post_reg_ld3:
2590 ; SDAG-NEXT: lsl x8, x2, #3
2591 ; SDAG-NEXT: ld1.1d { v0, v1, v2 }, [x0], x8
2592 ; SDAG-NEXT: str x0, [x1]
2595 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld3:
2596 ; CHECK-GISEL: ; %bb.0:
2597 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2 }, [x0]
2598 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
2599 ; CHECK-GISEL-NEXT: str x8, [x1]
2600 ; CHECK-GISEL-NEXT: ret
2601 %ld3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3.v1f64.p0(ptr %A)
2602 %tmp = getelementptr double, ptr %A, i64 %inc
2603 store ptr %tmp, ptr %ptr
2604 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
2607 declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3.v1f64.p0(ptr)
2610 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld4(ptr %A, ptr %ptr) {
2611 ; SDAG-LABEL: test_v16i8_post_imm_ld4:
2613 ; SDAG-NEXT: ld4.16b { v0, v1, v2, v3 }, [x0], #64
2614 ; SDAG-NEXT: str x0, [x1]
2617 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld4:
2618 ; CHECK-GISEL: ; %bb.0:
2619 ; CHECK-GISEL-NEXT: ld4.16b { v0, v1, v2, v3 }, [x0]
2620 ; CHECK-GISEL-NEXT: add x8, x0, #64
2621 ; CHECK-GISEL-NEXT: str x8, [x1]
2622 ; CHECK-GISEL-NEXT: ret
2623 %ld4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0(ptr %A)
2624 %tmp = getelementptr i8, ptr %A, i32 64
2625 store ptr %tmp, ptr %ptr
2626 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
2629 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
2630 ; SDAG-LABEL: test_v16i8_post_reg_ld4:
2632 ; SDAG-NEXT: ld4.16b { v0, v1, v2, v3 }, [x0], x2
2633 ; SDAG-NEXT: str x0, [x1]
2636 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld4:
2637 ; CHECK-GISEL: ; %bb.0:
2638 ; CHECK-GISEL-NEXT: ld4.16b { v0, v1, v2, v3 }, [x0]
2639 ; CHECK-GISEL-NEXT: add x8, x0, x2
2640 ; CHECK-GISEL-NEXT: str x8, [x1]
2641 ; CHECK-GISEL-NEXT: ret
2642 %ld4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0(ptr %A)
2643 %tmp = getelementptr i8, ptr %A, i64 %inc
2644 store ptr %tmp, ptr %ptr
2645 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
2648 declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0(ptr)
2651 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld4(ptr %A, ptr %ptr) {
2652 ; SDAG-LABEL: test_v8i8_post_imm_ld4:
2654 ; SDAG-NEXT: ld4.8b { v0, v1, v2, v3 }, [x0], #32
2655 ; SDAG-NEXT: str x0, [x1]
2658 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld4:
2659 ; CHECK-GISEL: ; %bb.0:
2660 ; CHECK-GISEL-NEXT: ld4.8b { v0, v1, v2, v3 }, [x0]
2661 ; CHECK-GISEL-NEXT: add x8, x0, #32
2662 ; CHECK-GISEL-NEXT: str x8, [x1]
2663 ; CHECK-GISEL-NEXT: ret
2664 %ld4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr %A)
2665 %tmp = getelementptr i8, ptr %A, i32 32
2666 store ptr %tmp, ptr %ptr
2667 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
2670 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
2671 ; SDAG-LABEL: test_v8i8_post_reg_ld4:
2673 ; SDAG-NEXT: ld4.8b { v0, v1, v2, v3 }, [x0], x2
2674 ; SDAG-NEXT: str x0, [x1]
2677 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld4:
2678 ; CHECK-GISEL: ; %bb.0:
2679 ; CHECK-GISEL-NEXT: ld4.8b { v0, v1, v2, v3 }, [x0]
2680 ; CHECK-GISEL-NEXT: add x8, x0, x2
2681 ; CHECK-GISEL-NEXT: str x8, [x1]
2682 ; CHECK-GISEL-NEXT: ret
2683 %ld4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr %A)
2684 %tmp = getelementptr i8, ptr %A, i64 %inc
2685 store ptr %tmp, ptr %ptr
2686 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
2689 declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr)
2692 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld4(ptr %A, ptr %ptr) {
2693 ; SDAG-LABEL: test_v8i16_post_imm_ld4:
2695 ; SDAG-NEXT: ld4.8h { v0, v1, v2, v3 }, [x0], #64
2696 ; SDAG-NEXT: str x0, [x1]
2699 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld4:
2700 ; CHECK-GISEL: ; %bb.0:
2701 ; CHECK-GISEL-NEXT: ld4.8h { v0, v1, v2, v3 }, [x0]
2702 ; CHECK-GISEL-NEXT: add x8, x0, #64
2703 ; CHECK-GISEL-NEXT: str x8, [x1]
2704 ; CHECK-GISEL-NEXT: ret
2705 %ld4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0(ptr %A)
2706 %tmp = getelementptr i16, ptr %A, i32 32
2707 store ptr %tmp, ptr %ptr
2708 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
2711 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
2712 ; SDAG-LABEL: test_v8i16_post_reg_ld4:
2714 ; SDAG-NEXT: lsl x8, x2, #1
2715 ; SDAG-NEXT: ld4.8h { v0, v1, v2, v3 }, [x0], x8
2716 ; SDAG-NEXT: str x0, [x1]
2719 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld4:
2720 ; CHECK-GISEL: ; %bb.0:
2721 ; CHECK-GISEL-NEXT: ld4.8h { v0, v1, v2, v3 }, [x0]
2722 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
2723 ; CHECK-GISEL-NEXT: str x8, [x1]
2724 ; CHECK-GISEL-NEXT: ret
2725 %ld4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0(ptr %A)
2726 %tmp = getelementptr i16, ptr %A, i64 %inc
2727 store ptr %tmp, ptr %ptr
2728 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
2731 declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0(ptr)
2734 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld4(ptr %A, ptr %ptr) {
2735 ; SDAG-LABEL: test_v4i16_post_imm_ld4:
2737 ; SDAG-NEXT: ld4.4h { v0, v1, v2, v3 }, [x0], #32
2738 ; SDAG-NEXT: str x0, [x1]
2741 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld4:
2742 ; CHECK-GISEL: ; %bb.0:
2743 ; CHECK-GISEL-NEXT: ld4.4h { v0, v1, v2, v3 }, [x0]
2744 ; CHECK-GISEL-NEXT: add x8, x0, #32
2745 ; CHECK-GISEL-NEXT: str x8, [x1]
2746 ; CHECK-GISEL-NEXT: ret
2747 %ld4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0(ptr %A)
2748 %tmp = getelementptr i16, ptr %A, i32 16
2749 store ptr %tmp, ptr %ptr
2750 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
2753 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
2754 ; SDAG-LABEL: test_v4i16_post_reg_ld4:
2756 ; SDAG-NEXT: lsl x8, x2, #1
2757 ; SDAG-NEXT: ld4.4h { v0, v1, v2, v3 }, [x0], x8
2758 ; SDAG-NEXT: str x0, [x1]
2761 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld4:
2762 ; CHECK-GISEL: ; %bb.0:
2763 ; CHECK-GISEL-NEXT: ld4.4h { v0, v1, v2, v3 }, [x0]
2764 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
2765 ; CHECK-GISEL-NEXT: str x8, [x1]
2766 ; CHECK-GISEL-NEXT: ret
2767 %ld4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0(ptr %A)
2768 %tmp = getelementptr i16, ptr %A, i64 %inc
2769 store ptr %tmp, ptr %ptr
2770 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
2773 declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0(ptr)
2776 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld4(ptr %A, ptr %ptr) {
2777 ; SDAG-LABEL: test_v4i32_post_imm_ld4:
2779 ; SDAG-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0], #64
2780 ; SDAG-NEXT: str x0, [x1]
2783 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld4:
2784 ; CHECK-GISEL: ; %bb.0:
2785 ; CHECK-GISEL-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0]
2786 ; CHECK-GISEL-NEXT: add x8, x0, #64
2787 ; CHECK-GISEL-NEXT: str x8, [x1]
2788 ; CHECK-GISEL-NEXT: ret
2789 %ld4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0(ptr %A)
2790 %tmp = getelementptr i32, ptr %A, i32 16
2791 store ptr %tmp, ptr %ptr
2792 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
2795 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
2796 ; SDAG-LABEL: test_v4i32_post_reg_ld4:
2798 ; SDAG-NEXT: lsl x8, x2, #2
2799 ; SDAG-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0], x8
2800 ; SDAG-NEXT: str x0, [x1]
2803 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld4:
2804 ; CHECK-GISEL: ; %bb.0:
2805 ; CHECK-GISEL-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0]
2806 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
2807 ; CHECK-GISEL-NEXT: str x8, [x1]
2808 ; CHECK-GISEL-NEXT: ret
2809 %ld4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0(ptr %A)
2810 %tmp = getelementptr i32, ptr %A, i64 %inc
2811 store ptr %tmp, ptr %ptr
2812 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
2815 declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0(ptr)
2818 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld4(ptr %A, ptr %ptr) {
2819 ; SDAG-LABEL: test_v2i32_post_imm_ld4:
2821 ; SDAG-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0], #32
2822 ; SDAG-NEXT: str x0, [x1]
2825 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld4:
2826 ; CHECK-GISEL: ; %bb.0:
2827 ; CHECK-GISEL-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0]
2828 ; CHECK-GISEL-NEXT: add x8, x0, #32
2829 ; CHECK-GISEL-NEXT: str x8, [x1]
2830 ; CHECK-GISEL-NEXT: ret
2831 %ld4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0(ptr %A)
2832 %tmp = getelementptr i32, ptr %A, i32 8
2833 store ptr %tmp, ptr %ptr
2834 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
2837 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
2838 ; SDAG-LABEL: test_v2i32_post_reg_ld4:
2840 ; SDAG-NEXT: lsl x8, x2, #2
2841 ; SDAG-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0], x8
2842 ; SDAG-NEXT: str x0, [x1]
2845 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld4:
2846 ; CHECK-GISEL: ; %bb.0:
2847 ; CHECK-GISEL-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0]
2848 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
2849 ; CHECK-GISEL-NEXT: str x8, [x1]
2850 ; CHECK-GISEL-NEXT: ret
2851 %ld4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0(ptr %A)
2852 %tmp = getelementptr i32, ptr %A, i64 %inc
2853 store ptr %tmp, ptr %ptr
2854 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
2857 declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0(ptr)
2860 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld4(ptr %A, ptr %ptr) {
2861 ; SDAG-LABEL: test_v2i64_post_imm_ld4:
2863 ; SDAG-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0], #64
2864 ; SDAG-NEXT: str x0, [x1]
2867 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld4:
2868 ; CHECK-GISEL: ; %bb.0:
2869 ; CHECK-GISEL-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0]
2870 ; CHECK-GISEL-NEXT: add x8, x0, #64
2871 ; CHECK-GISEL-NEXT: str x8, [x1]
2872 ; CHECK-GISEL-NEXT: ret
2873 %ld4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0(ptr %A)
2874 %tmp = getelementptr i64, ptr %A, i32 8
2875 store ptr %tmp, ptr %ptr
2876 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
2879 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
2880 ; SDAG-LABEL: test_v2i64_post_reg_ld4:
2882 ; SDAG-NEXT: lsl x8, x2, #3
2883 ; SDAG-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0], x8
2884 ; SDAG-NEXT: str x0, [x1]
2887 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld4:
2888 ; CHECK-GISEL: ; %bb.0:
2889 ; CHECK-GISEL-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0]
2890 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
2891 ; CHECK-GISEL-NEXT: str x8, [x1]
2892 ; CHECK-GISEL-NEXT: ret
2893 %ld4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0(ptr %A)
2894 %tmp = getelementptr i64, ptr %A, i64 %inc
2895 store ptr %tmp, ptr %ptr
2896 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
2899 declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0(ptr)
2902 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld4(ptr %A, ptr %ptr) {
2903 ; SDAG-LABEL: test_v1i64_post_imm_ld4:
2905 ; SDAG-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], #32
2906 ; SDAG-NEXT: str x0, [x1]
2909 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld4:
2910 ; CHECK-GISEL: ; %bb.0:
2911 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0]
2912 ; CHECK-GISEL-NEXT: add x8, x0, #32
2913 ; CHECK-GISEL-NEXT: str x8, [x1]
2914 ; CHECK-GISEL-NEXT: ret
2915 %ld4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0(ptr %A)
2916 %tmp = getelementptr i64, ptr %A, i32 4
2917 store ptr %tmp, ptr %ptr
2918 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
2921 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
2922 ; SDAG-LABEL: test_v1i64_post_reg_ld4:
2924 ; SDAG-NEXT: lsl x8, x2, #3
2925 ; SDAG-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], x8
2926 ; SDAG-NEXT: str x0, [x1]
2929 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld4:
2930 ; CHECK-GISEL: ; %bb.0:
2931 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0]
2932 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
2933 ; CHECK-GISEL-NEXT: str x8, [x1]
2934 ; CHECK-GISEL-NEXT: ret
2935 %ld4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0(ptr %A)
2936 %tmp = getelementptr i64, ptr %A, i64 %inc
2937 store ptr %tmp, ptr %ptr
2938 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
2941 declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0(ptr)
2944 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld4(ptr %A, ptr %ptr) {
2945 ; SDAG-LABEL: test_v4f32_post_imm_ld4:
2947 ; SDAG-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0], #64
2948 ; SDAG-NEXT: str x0, [x1]
2951 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld4:
2952 ; CHECK-GISEL: ; %bb.0:
2953 ; CHECK-GISEL-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0]
2954 ; CHECK-GISEL-NEXT: add x8, x0, #64
2955 ; CHECK-GISEL-NEXT: str x8, [x1]
2956 ; CHECK-GISEL-NEXT: ret
2957 %ld4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4.v4f32.p0(ptr %A)
2958 %tmp = getelementptr float, ptr %A, i32 16
2959 store ptr %tmp, ptr %ptr
2960 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
2963 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
2964 ; SDAG-LABEL: test_v4f32_post_reg_ld4:
2966 ; SDAG-NEXT: lsl x8, x2, #2
2967 ; SDAG-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0], x8
2968 ; SDAG-NEXT: str x0, [x1]
2971 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld4:
2972 ; CHECK-GISEL: ; %bb.0:
2973 ; CHECK-GISEL-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0]
2974 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
2975 ; CHECK-GISEL-NEXT: str x8, [x1]
2976 ; CHECK-GISEL-NEXT: ret
2977 %ld4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4.v4f32.p0(ptr %A)
2978 %tmp = getelementptr float, ptr %A, i64 %inc
2979 store ptr %tmp, ptr %ptr
2980 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
2983 declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4.v4f32.p0(ptr)
2986 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld4(ptr %A, ptr %ptr) {
2987 ; SDAG-LABEL: test_v2f32_post_imm_ld4:
2989 ; SDAG-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0], #32
2990 ; SDAG-NEXT: str x0, [x1]
2993 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld4:
2994 ; CHECK-GISEL: ; %bb.0:
2995 ; CHECK-GISEL-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0]
2996 ; CHECK-GISEL-NEXT: add x8, x0, #32
2997 ; CHECK-GISEL-NEXT: str x8, [x1]
2998 ; CHECK-GISEL-NEXT: ret
2999 %ld4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4.v2f32.p0(ptr %A)
3000 %tmp = getelementptr float, ptr %A, i32 8
3001 store ptr %tmp, ptr %ptr
3002 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
3005 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
3006 ; SDAG-LABEL: test_v2f32_post_reg_ld4:
3008 ; SDAG-NEXT: lsl x8, x2, #2
3009 ; SDAG-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0], x8
3010 ; SDAG-NEXT: str x0, [x1]
3013 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld4:
3014 ; CHECK-GISEL: ; %bb.0:
3015 ; CHECK-GISEL-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0]
3016 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
3017 ; CHECK-GISEL-NEXT: str x8, [x1]
3018 ; CHECK-GISEL-NEXT: ret
3019 %ld4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4.v2f32.p0(ptr %A)
3020 %tmp = getelementptr float, ptr %A, i64 %inc
3021 store ptr %tmp, ptr %ptr
3022 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
3025 declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4.v2f32.p0(ptr)
3028 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld4(ptr %A, ptr %ptr) {
3029 ; SDAG-LABEL: test_v2f64_post_imm_ld4:
3031 ; SDAG-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0], #64
3032 ; SDAG-NEXT: str x0, [x1]
3035 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld4:
3036 ; CHECK-GISEL: ; %bb.0:
3037 ; CHECK-GISEL-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0]
3038 ; CHECK-GISEL-NEXT: add x8, x0, #64
3039 ; CHECK-GISEL-NEXT: str x8, [x1]
3040 ; CHECK-GISEL-NEXT: ret
3041 %ld4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4.v2f64.p0(ptr %A)
3042 %tmp = getelementptr double, ptr %A, i32 8
3043 store ptr %tmp, ptr %ptr
3044 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
3047 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
3048 ; SDAG-LABEL: test_v2f64_post_reg_ld4:
3050 ; SDAG-NEXT: lsl x8, x2, #3
3051 ; SDAG-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0], x8
3052 ; SDAG-NEXT: str x0, [x1]
3055 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld4:
3056 ; CHECK-GISEL: ; %bb.0:
3057 ; CHECK-GISEL-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0]
3058 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
3059 ; CHECK-GISEL-NEXT: str x8, [x1]
3060 ; CHECK-GISEL-NEXT: ret
3061 %ld4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4.v2f64.p0(ptr %A)
3062 %tmp = getelementptr double, ptr %A, i64 %inc
3063 store ptr %tmp, ptr %ptr
3064 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
3067 declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4.v2f64.p0(ptr)
3070 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld4(ptr %A, ptr %ptr) {
3071 ; SDAG-LABEL: test_v1f64_post_imm_ld4:
3073 ; SDAG-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], #32
3074 ; SDAG-NEXT: str x0, [x1]
3077 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld4:
3078 ; CHECK-GISEL: ; %bb.0:
3079 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0]
3080 ; CHECK-GISEL-NEXT: add x8, x0, #32
3081 ; CHECK-GISEL-NEXT: str x8, [x1]
3082 ; CHECK-GISEL-NEXT: ret
3083 %ld4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4.v1f64.p0(ptr %A)
3084 %tmp = getelementptr double, ptr %A, i32 4
3085 store ptr %tmp, ptr %ptr
3086 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
3089 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
3090 ; SDAG-LABEL: test_v1f64_post_reg_ld4:
3092 ; SDAG-NEXT: lsl x8, x2, #3
3093 ; SDAG-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], x8
3094 ; SDAG-NEXT: str x0, [x1]
3097 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld4:
3098 ; CHECK-GISEL: ; %bb.0:
3099 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0]
3100 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
3101 ; CHECK-GISEL-NEXT: str x8, [x1]
3102 ; CHECK-GISEL-NEXT: ret
3103 %ld4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4.v1f64.p0(ptr %A)
3104 %tmp = getelementptr double, ptr %A, i64 %inc
3105 store ptr %tmp, ptr %ptr
3106 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
3109 declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4.v1f64.p0(ptr)
3111 define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld1x2(ptr %A, ptr %ptr) {
3112 ; SDAG-LABEL: test_v16i8_post_imm_ld1x2:
3114 ; SDAG-NEXT: ld1.16b { v0, v1 }, [x0], #32
3115 ; SDAG-NEXT: str x0, [x1]
3118 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld1x2:
3119 ; CHECK-GISEL: ; %bb.0:
3120 ; CHECK-GISEL-NEXT: ld1.16b { v0, v1 }, [x0]
3121 ; CHECK-GISEL-NEXT: add x8, x0, #32
3122 ; CHECK-GISEL-NEXT: str x8, [x1]
3123 ; CHECK-GISEL-NEXT: ret
3124 %ld1x2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr %A)
3125 %tmp = getelementptr i8, ptr %A, i32 32
3126 store ptr %tmp, ptr %ptr
3127 ret { <16 x i8>, <16 x i8> } %ld1x2
3130 define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3131 ; SDAG-LABEL: test_v16i8_post_reg_ld1x2:
3133 ; SDAG-NEXT: ld1.16b { v0, v1 }, [x0], x2
3134 ; SDAG-NEXT: str x0, [x1]
3137 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld1x2:
3138 ; CHECK-GISEL: ; %bb.0:
3139 ; CHECK-GISEL-NEXT: ld1.16b { v0, v1 }, [x0]
3140 ; CHECK-GISEL-NEXT: add x8, x0, x2
3141 ; CHECK-GISEL-NEXT: str x8, [x1]
3142 ; CHECK-GISEL-NEXT: ret
3143 %ld1x2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr %A)
3144 %tmp = getelementptr i8, ptr %A, i64 %inc
3145 store ptr %tmp, ptr %ptr
3146 ret { <16 x i8>, <16 x i8> } %ld1x2
3149 declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr)
3152 define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld1x2(ptr %A, ptr %ptr) {
3153 ; SDAG-LABEL: test_v8i8_post_imm_ld1x2:
3155 ; SDAG-NEXT: ld1.8b { v0, v1 }, [x0], #16
3156 ; SDAG-NEXT: str x0, [x1]
3159 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld1x2:
3160 ; CHECK-GISEL: ; %bb.0:
3161 ; CHECK-GISEL-NEXT: ld1.8b { v0, v1 }, [x0]
3162 ; CHECK-GISEL-NEXT: add x8, x0, #16
3163 ; CHECK-GISEL-NEXT: str x8, [x1]
3164 ; CHECK-GISEL-NEXT: ret
3165 %ld1x2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr %A)
3166 %tmp = getelementptr i8, ptr %A, i32 16
3167 store ptr %tmp, ptr %ptr
3168 ret { <8 x i8>, <8 x i8> } %ld1x2
3171 define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3172 ; SDAG-LABEL: test_v8i8_post_reg_ld1x2:
3174 ; SDAG-NEXT: ld1.8b { v0, v1 }, [x0], x2
3175 ; SDAG-NEXT: str x0, [x1]
3178 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld1x2:
3179 ; CHECK-GISEL: ; %bb.0:
3180 ; CHECK-GISEL-NEXT: ld1.8b { v0, v1 }, [x0]
3181 ; CHECK-GISEL-NEXT: add x8, x0, x2
3182 ; CHECK-GISEL-NEXT: str x8, [x1]
3183 ; CHECK-GISEL-NEXT: ret
3184 %ld1x2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr %A)
3185 %tmp = getelementptr i8, ptr %A, i64 %inc
3186 store ptr %tmp, ptr %ptr
3187 ret { <8 x i8>, <8 x i8> } %ld1x2
3190 declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr)
3193 define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld1x2(ptr %A, ptr %ptr) {
3194 ; SDAG-LABEL: test_v8i16_post_imm_ld1x2:
3196 ; SDAG-NEXT: ld1.8h { v0, v1 }, [x0], #32
3197 ; SDAG-NEXT: str x0, [x1]
3200 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld1x2:
3201 ; CHECK-GISEL: ; %bb.0:
3202 ; CHECK-GISEL-NEXT: ld1.8h { v0, v1 }, [x0]
3203 ; CHECK-GISEL-NEXT: add x8, x0, #32
3204 ; CHECK-GISEL-NEXT: str x8, [x1]
3205 ; CHECK-GISEL-NEXT: ret
3206 %ld1x2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr %A)
3207 %tmp = getelementptr i16, ptr %A, i32 16
3208 store ptr %tmp, ptr %ptr
3209 ret { <8 x i16>, <8 x i16> } %ld1x2
3212 define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3213 ; SDAG-LABEL: test_v8i16_post_reg_ld1x2:
3215 ; SDAG-NEXT: lsl x8, x2, #1
3216 ; SDAG-NEXT: ld1.8h { v0, v1 }, [x0], x8
3217 ; SDAG-NEXT: str x0, [x1]
3220 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld1x2:
3221 ; CHECK-GISEL: ; %bb.0:
3222 ; CHECK-GISEL-NEXT: ld1.8h { v0, v1 }, [x0]
3223 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
3224 ; CHECK-GISEL-NEXT: str x8, [x1]
3225 ; CHECK-GISEL-NEXT: ret
3226 %ld1x2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr %A)
3227 %tmp = getelementptr i16, ptr %A, i64 %inc
3228 store ptr %tmp, ptr %ptr
3229 ret { <8 x i16>, <8 x i16> } %ld1x2
3232 declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr)
3235 define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld1x2(ptr %A, ptr %ptr) {
3236 ; SDAG-LABEL: test_v4i16_post_imm_ld1x2:
3238 ; SDAG-NEXT: ld1.4h { v0, v1 }, [x0], #16
3239 ; SDAG-NEXT: str x0, [x1]
3242 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld1x2:
3243 ; CHECK-GISEL: ; %bb.0:
3244 ; CHECK-GISEL-NEXT: ld1.4h { v0, v1 }, [x0]
3245 ; CHECK-GISEL-NEXT: add x8, x0, #16
3246 ; CHECK-GISEL-NEXT: str x8, [x1]
3247 ; CHECK-GISEL-NEXT: ret
3248 %ld1x2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr %A)
3249 %tmp = getelementptr i16, ptr %A, i32 8
3250 store ptr %tmp, ptr %ptr
3251 ret { <4 x i16>, <4 x i16> } %ld1x2
3254 define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3255 ; SDAG-LABEL: test_v4i16_post_reg_ld1x2:
3257 ; SDAG-NEXT: lsl x8, x2, #1
3258 ; SDAG-NEXT: ld1.4h { v0, v1 }, [x0], x8
3259 ; SDAG-NEXT: str x0, [x1]
3262 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld1x2:
3263 ; CHECK-GISEL: ; %bb.0:
3264 ; CHECK-GISEL-NEXT: ld1.4h { v0, v1 }, [x0]
3265 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
3266 ; CHECK-GISEL-NEXT: str x8, [x1]
3267 ; CHECK-GISEL-NEXT: ret
3268 %ld1x2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr %A)
3269 %tmp = getelementptr i16, ptr %A, i64 %inc
3270 store ptr %tmp, ptr %ptr
3271 ret { <4 x i16>, <4 x i16> } %ld1x2
3274 declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr)
3277 define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld1x2(ptr %A, ptr %ptr) {
3278 ; SDAG-LABEL: test_v4i32_post_imm_ld1x2:
3280 ; SDAG-NEXT: ld1.4s { v0, v1 }, [x0], #32
3281 ; SDAG-NEXT: str x0, [x1]
3284 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld1x2:
3285 ; CHECK-GISEL: ; %bb.0:
3286 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1 }, [x0]
3287 ; CHECK-GISEL-NEXT: add x8, x0, #32
3288 ; CHECK-GISEL-NEXT: str x8, [x1]
3289 ; CHECK-GISEL-NEXT: ret
3290 %ld1x2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr %A)
3291 %tmp = getelementptr i32, ptr %A, i32 8
3292 store ptr %tmp, ptr %ptr
3293 ret { <4 x i32>, <4 x i32> } %ld1x2
3296 define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3297 ; SDAG-LABEL: test_v4i32_post_reg_ld1x2:
3299 ; SDAG-NEXT: lsl x8, x2, #2
3300 ; SDAG-NEXT: ld1.4s { v0, v1 }, [x0], x8
3301 ; SDAG-NEXT: str x0, [x1]
3304 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld1x2:
3305 ; CHECK-GISEL: ; %bb.0:
3306 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1 }, [x0]
3307 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
3308 ; CHECK-GISEL-NEXT: str x8, [x1]
3309 ; CHECK-GISEL-NEXT: ret
3310 %ld1x2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr %A)
3311 %tmp = getelementptr i32, ptr %A, i64 %inc
3312 store ptr %tmp, ptr %ptr
3313 ret { <4 x i32>, <4 x i32> } %ld1x2
3316 declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr)
3319 define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld1x2(ptr %A, ptr %ptr) {
3320 ; SDAG-LABEL: test_v2i32_post_imm_ld1x2:
3322 ; SDAG-NEXT: ld1.2s { v0, v1 }, [x0], #16
3323 ; SDAG-NEXT: str x0, [x1]
3326 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld1x2:
3327 ; CHECK-GISEL: ; %bb.0:
3328 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1 }, [x0]
3329 ; CHECK-GISEL-NEXT: add x8, x0, #16
3330 ; CHECK-GISEL-NEXT: str x8, [x1]
3331 ; CHECK-GISEL-NEXT: ret
3332 %ld1x2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr %A)
3333 %tmp = getelementptr i32, ptr %A, i32 4
3334 store ptr %tmp, ptr %ptr
3335 ret { <2 x i32>, <2 x i32> } %ld1x2
3338 define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3339 ; SDAG-LABEL: test_v2i32_post_reg_ld1x2:
3341 ; SDAG-NEXT: lsl x8, x2, #2
3342 ; SDAG-NEXT: ld1.2s { v0, v1 }, [x0], x8
3343 ; SDAG-NEXT: str x0, [x1]
3346 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld1x2:
3347 ; CHECK-GISEL: ; %bb.0:
3348 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1 }, [x0]
3349 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
3350 ; CHECK-GISEL-NEXT: str x8, [x1]
3351 ; CHECK-GISEL-NEXT: ret
3352 %ld1x2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr %A)
3353 %tmp = getelementptr i32, ptr %A, i64 %inc
3354 store ptr %tmp, ptr %ptr
3355 ret { <2 x i32>, <2 x i32> } %ld1x2
3358 declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr)
3361 define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld1x2(ptr %A, ptr %ptr) {
3362 ; SDAG-LABEL: test_v2i64_post_imm_ld1x2:
3364 ; SDAG-NEXT: ld1.2d { v0, v1 }, [x0], #32
3365 ; SDAG-NEXT: str x0, [x1]
3368 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld1x2:
3369 ; CHECK-GISEL: ; %bb.0:
3370 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1 }, [x0]
3371 ; CHECK-GISEL-NEXT: add x8, x0, #32
3372 ; CHECK-GISEL-NEXT: str x8, [x1]
3373 ; CHECK-GISEL-NEXT: ret
3374 %ld1x2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr %A)
3375 %tmp = getelementptr i64, ptr %A, i32 4
3376 store ptr %tmp, ptr %ptr
3377 ret { <2 x i64>, <2 x i64> } %ld1x2
3380 define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3381 ; SDAG-LABEL: test_v2i64_post_reg_ld1x2:
3383 ; SDAG-NEXT: lsl x8, x2, #3
3384 ; SDAG-NEXT: ld1.2d { v0, v1 }, [x0], x8
3385 ; SDAG-NEXT: str x0, [x1]
3388 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld1x2:
3389 ; CHECK-GISEL: ; %bb.0:
3390 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1 }, [x0]
3391 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
3392 ; CHECK-GISEL-NEXT: str x8, [x1]
3393 ; CHECK-GISEL-NEXT: ret
3394 %ld1x2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr %A)
3395 %tmp = getelementptr i64, ptr %A, i64 %inc
3396 store ptr %tmp, ptr %ptr
3397 ret { <2 x i64>, <2 x i64> } %ld1x2
3400 declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr)
3403 define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld1x2(ptr %A, ptr %ptr) {
3404 ; SDAG-LABEL: test_v1i64_post_imm_ld1x2:
3406 ; SDAG-NEXT: ld1.1d { v0, v1 }, [x0], #16
3407 ; SDAG-NEXT: str x0, [x1]
3410 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld1x2:
3411 ; CHECK-GISEL: ; %bb.0:
3412 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1 }, [x0]
3413 ; CHECK-GISEL-NEXT: add x8, x0, #16
3414 ; CHECK-GISEL-NEXT: str x8, [x1]
3415 ; CHECK-GISEL-NEXT: ret
3416 %ld1x2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr %A)
3417 %tmp = getelementptr i64, ptr %A, i32 2
3418 store ptr %tmp, ptr %ptr
3419 ret { <1 x i64>, <1 x i64> } %ld1x2
3422 define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3423 ; SDAG-LABEL: test_v1i64_post_reg_ld1x2:
3425 ; SDAG-NEXT: lsl x8, x2, #3
3426 ; SDAG-NEXT: ld1.1d { v0, v1 }, [x0], x8
3427 ; SDAG-NEXT: str x0, [x1]
3430 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld1x2:
3431 ; CHECK-GISEL: ; %bb.0:
3432 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1 }, [x0]
3433 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
3434 ; CHECK-GISEL-NEXT: str x8, [x1]
3435 ; CHECK-GISEL-NEXT: ret
3436 %ld1x2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr %A)
3437 %tmp = getelementptr i64, ptr %A, i64 %inc
3438 store ptr %tmp, ptr %ptr
3439 ret { <1 x i64>, <1 x i64> } %ld1x2
3442 declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr)
3445 define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld1x2(ptr %A, ptr %ptr) {
3446 ; SDAG-LABEL: test_v4f32_post_imm_ld1x2:
3448 ; SDAG-NEXT: ld1.4s { v0, v1 }, [x0], #32
3449 ; SDAG-NEXT: str x0, [x1]
3452 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld1x2:
3453 ; CHECK-GISEL: ; %bb.0:
3454 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1 }, [x0]
3455 ; CHECK-GISEL-NEXT: add x8, x0, #32
3456 ; CHECK-GISEL-NEXT: str x8, [x1]
3457 ; CHECK-GISEL-NEXT: ret
3458 %ld1x2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr %A)
3459 %tmp = getelementptr float, ptr %A, i32 8
3460 store ptr %tmp, ptr %ptr
3461 ret { <4 x float>, <4 x float> } %ld1x2
3464 define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3465 ; SDAG-LABEL: test_v4f32_post_reg_ld1x2:
3467 ; SDAG-NEXT: lsl x8, x2, #2
3468 ; SDAG-NEXT: ld1.4s { v0, v1 }, [x0], x8
3469 ; SDAG-NEXT: str x0, [x1]
3472 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld1x2:
3473 ; CHECK-GISEL: ; %bb.0:
3474 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1 }, [x0]
3475 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
3476 ; CHECK-GISEL-NEXT: str x8, [x1]
3477 ; CHECK-GISEL-NEXT: ret
3478 %ld1x2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr %A)
3479 %tmp = getelementptr float, ptr %A, i64 %inc
3480 store ptr %tmp, ptr %ptr
3481 ret { <4 x float>, <4 x float> } %ld1x2
3484 declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr)
3487 define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld1x2(ptr %A, ptr %ptr) {
3488 ; SDAG-LABEL: test_v2f32_post_imm_ld1x2:
3490 ; SDAG-NEXT: ld1.2s { v0, v1 }, [x0], #16
3491 ; SDAG-NEXT: str x0, [x1]
3494 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld1x2:
3495 ; CHECK-GISEL: ; %bb.0:
3496 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1 }, [x0]
3497 ; CHECK-GISEL-NEXT: add x8, x0, #16
3498 ; CHECK-GISEL-NEXT: str x8, [x1]
3499 ; CHECK-GISEL-NEXT: ret
3500 %ld1x2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr %A)
3501 %tmp = getelementptr float, ptr %A, i32 4
3502 store ptr %tmp, ptr %ptr
3503 ret { <2 x float>, <2 x float> } %ld1x2
3506 define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3507 ; SDAG-LABEL: test_v2f32_post_reg_ld1x2:
3509 ; SDAG-NEXT: lsl x8, x2, #2
3510 ; SDAG-NEXT: ld1.2s { v0, v1 }, [x0], x8
3511 ; SDAG-NEXT: str x0, [x1]
3514 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld1x2:
3515 ; CHECK-GISEL: ; %bb.0:
3516 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1 }, [x0]
3517 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
3518 ; CHECK-GISEL-NEXT: str x8, [x1]
3519 ; CHECK-GISEL-NEXT: ret
3520 %ld1x2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr %A)
3521 %tmp = getelementptr float, ptr %A, i64 %inc
3522 store ptr %tmp, ptr %ptr
3523 ret { <2 x float>, <2 x float> } %ld1x2
3526 declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr)
3529 define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld1x2(ptr %A, ptr %ptr) {
3530 ; SDAG-LABEL: test_v2f64_post_imm_ld1x2:
3532 ; SDAG-NEXT: ld1.2d { v0, v1 }, [x0], #32
3533 ; SDAG-NEXT: str x0, [x1]
3536 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld1x2:
3537 ; CHECK-GISEL: ; %bb.0:
3538 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1 }, [x0]
3539 ; CHECK-GISEL-NEXT: add x8, x0, #32
3540 ; CHECK-GISEL-NEXT: str x8, [x1]
3541 ; CHECK-GISEL-NEXT: ret
3542 %ld1x2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr %A)
3543 %tmp = getelementptr double, ptr %A, i32 4
3544 store ptr %tmp, ptr %ptr
3545 ret { <2 x double>, <2 x double> } %ld1x2
3548 define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3549 ; SDAG-LABEL: test_v2f64_post_reg_ld1x2:
3551 ; SDAG-NEXT: lsl x8, x2, #3
3552 ; SDAG-NEXT: ld1.2d { v0, v1 }, [x0], x8
3553 ; SDAG-NEXT: str x0, [x1]
3556 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld1x2:
3557 ; CHECK-GISEL: ; %bb.0:
3558 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1 }, [x0]
3559 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
3560 ; CHECK-GISEL-NEXT: str x8, [x1]
3561 ; CHECK-GISEL-NEXT: ret
3562 %ld1x2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr %A)
3563 %tmp = getelementptr double, ptr %A, i64 %inc
3564 store ptr %tmp, ptr %ptr
3565 ret { <2 x double>, <2 x double> } %ld1x2
3568 declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr)
3571 define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld1x2(ptr %A, ptr %ptr) {
3572 ; SDAG-LABEL: test_v1f64_post_imm_ld1x2:
3574 ; SDAG-NEXT: ld1.1d { v0, v1 }, [x0], #16
3575 ; SDAG-NEXT: str x0, [x1]
3578 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld1x2:
3579 ; CHECK-GISEL: ; %bb.0:
3580 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1 }, [x0]
3581 ; CHECK-GISEL-NEXT: add x8, x0, #16
3582 ; CHECK-GISEL-NEXT: str x8, [x1]
3583 ; CHECK-GISEL-NEXT: ret
3584 %ld1x2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr %A)
3585 %tmp = getelementptr double, ptr %A, i32 2
3586 store ptr %tmp, ptr %ptr
3587 ret { <1 x double>, <1 x double> } %ld1x2
3590 define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
3591 ; SDAG-LABEL: test_v1f64_post_reg_ld1x2:
3593 ; SDAG-NEXT: lsl x8, x2, #3
3594 ; SDAG-NEXT: ld1.1d { v0, v1 }, [x0], x8
3595 ; SDAG-NEXT: str x0, [x1]
3598 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld1x2:
3599 ; CHECK-GISEL: ; %bb.0:
3600 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1 }, [x0]
3601 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
3602 ; CHECK-GISEL-NEXT: str x8, [x1]
3603 ; CHECK-GISEL-NEXT: ret
3604 %ld1x2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr %A)
3605 %tmp = getelementptr double, ptr %A, i64 %inc
3606 store ptr %tmp, ptr %ptr
3607 ret { <1 x double>, <1 x double> } %ld1x2
3610 declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr)
3613 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld1x3(ptr %A, ptr %ptr) {
3614 ; SDAG-LABEL: test_v16i8_post_imm_ld1x3:
3616 ; SDAG-NEXT: ld1.16b { v0, v1, v2 }, [x0], #48
3617 ; SDAG-NEXT: str x0, [x1]
3620 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld1x3:
3621 ; CHECK-GISEL: ; %bb.0:
3622 ; CHECK-GISEL-NEXT: ld1.16b { v0, v1, v2 }, [x0]
3623 ; CHECK-GISEL-NEXT: add x8, x0, #48
3624 ; CHECK-GISEL-NEXT: str x8, [x1]
3625 ; CHECK-GISEL-NEXT: ret
3626 %ld1x3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr %A)
3627 %tmp = getelementptr i8, ptr %A, i32 48
3628 store ptr %tmp, ptr %ptr
3629 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld1x3
3632 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
3633 ; SDAG-LABEL: test_v16i8_post_reg_ld1x3:
3635 ; SDAG-NEXT: ld1.16b { v0, v1, v2 }, [x0], x2
3636 ; SDAG-NEXT: str x0, [x1]
3639 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld1x3:
3640 ; CHECK-GISEL: ; %bb.0:
3641 ; CHECK-GISEL-NEXT: ld1.16b { v0, v1, v2 }, [x0]
3642 ; CHECK-GISEL-NEXT: add x8, x0, x2
3643 ; CHECK-GISEL-NEXT: str x8, [x1]
3644 ; CHECK-GISEL-NEXT: ret
3645 %ld1x3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr %A)
3646 %tmp = getelementptr i8, ptr %A, i64 %inc
3647 store ptr %tmp, ptr %ptr
3648 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld1x3
3651 declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr)
3654 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld1x3(ptr %A, ptr %ptr) {
3655 ; SDAG-LABEL: test_v8i8_post_imm_ld1x3:
3657 ; SDAG-NEXT: ld1.8b { v0, v1, v2 }, [x0], #24
3658 ; SDAG-NEXT: str x0, [x1]
3661 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld1x3:
3662 ; CHECK-GISEL: ; %bb.0:
3663 ; CHECK-GISEL-NEXT: ld1.8b { v0, v1, v2 }, [x0]
3664 ; CHECK-GISEL-NEXT: add x8, x0, #24
3665 ; CHECK-GISEL-NEXT: str x8, [x1]
3666 ; CHECK-GISEL-NEXT: ret
3667 %ld1x3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr %A)
3668 %tmp = getelementptr i8, ptr %A, i32 24
3669 store ptr %tmp, ptr %ptr
3670 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld1x3
3673 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
3674 ; SDAG-LABEL: test_v8i8_post_reg_ld1x3:
3676 ; SDAG-NEXT: ld1.8b { v0, v1, v2 }, [x0], x2
3677 ; SDAG-NEXT: str x0, [x1]
3680 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld1x3:
3681 ; CHECK-GISEL: ; %bb.0:
3682 ; CHECK-GISEL-NEXT: ld1.8b { v0, v1, v2 }, [x0]
3683 ; CHECK-GISEL-NEXT: add x8, x0, x2
3684 ; CHECK-GISEL-NEXT: str x8, [x1]
3685 ; CHECK-GISEL-NEXT: ret
3686 %ld1x3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr %A)
3687 %tmp = getelementptr i8, ptr %A, i64 %inc
3688 store ptr %tmp, ptr %ptr
3689 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld1x3
3692 declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr)
3695 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld1x3(ptr %A, ptr %ptr) {
3696 ; SDAG-LABEL: test_v8i16_post_imm_ld1x3:
3698 ; SDAG-NEXT: ld1.8h { v0, v1, v2 }, [x0], #48
3699 ; SDAG-NEXT: str x0, [x1]
3702 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld1x3:
3703 ; CHECK-GISEL: ; %bb.0:
3704 ; CHECK-GISEL-NEXT: ld1.8h { v0, v1, v2 }, [x0]
3705 ; CHECK-GISEL-NEXT: add x8, x0, #48
3706 ; CHECK-GISEL-NEXT: str x8, [x1]
3707 ; CHECK-GISEL-NEXT: ret
3708 %ld1x3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr %A)
3709 %tmp = getelementptr i16, ptr %A, i32 24
3710 store ptr %tmp, ptr %ptr
3711 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld1x3
3714 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
3715 ; SDAG-LABEL: test_v8i16_post_reg_ld1x3:
3717 ; SDAG-NEXT: lsl x8, x2, #1
3718 ; SDAG-NEXT: ld1.8h { v0, v1, v2 }, [x0], x8
3719 ; SDAG-NEXT: str x0, [x1]
3722 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld1x3:
3723 ; CHECK-GISEL: ; %bb.0:
3724 ; CHECK-GISEL-NEXT: ld1.8h { v0, v1, v2 }, [x0]
3725 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
3726 ; CHECK-GISEL-NEXT: str x8, [x1]
3727 ; CHECK-GISEL-NEXT: ret
3728 %ld1x3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr %A)
3729 %tmp = getelementptr i16, ptr %A, i64 %inc
3730 store ptr %tmp, ptr %ptr
3731 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld1x3
3734 declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr)
3737 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld1x3(ptr %A, ptr %ptr) {
3738 ; SDAG-LABEL: test_v4i16_post_imm_ld1x3:
3740 ; SDAG-NEXT: ld1.4h { v0, v1, v2 }, [x0], #24
3741 ; SDAG-NEXT: str x0, [x1]
3744 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld1x3:
3745 ; CHECK-GISEL: ; %bb.0:
3746 ; CHECK-GISEL-NEXT: ld1.4h { v0, v1, v2 }, [x0]
3747 ; CHECK-GISEL-NEXT: add x8, x0, #24
3748 ; CHECK-GISEL-NEXT: str x8, [x1]
3749 ; CHECK-GISEL-NEXT: ret
3750 %ld1x3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr %A)
3751 %tmp = getelementptr i16, ptr %A, i32 12
3752 store ptr %tmp, ptr %ptr
3753 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld1x3
3756 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
3757 ; SDAG-LABEL: test_v4i16_post_reg_ld1x3:
3759 ; SDAG-NEXT: lsl x8, x2, #1
3760 ; SDAG-NEXT: ld1.4h { v0, v1, v2 }, [x0], x8
3761 ; SDAG-NEXT: str x0, [x1]
3764 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld1x3:
3765 ; CHECK-GISEL: ; %bb.0:
3766 ; CHECK-GISEL-NEXT: ld1.4h { v0, v1, v2 }, [x0]
3767 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
3768 ; CHECK-GISEL-NEXT: str x8, [x1]
3769 ; CHECK-GISEL-NEXT: ret
3770 %ld1x3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr %A)
3771 %tmp = getelementptr i16, ptr %A, i64 %inc
3772 store ptr %tmp, ptr %ptr
3773 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld1x3
3776 declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr)
3779 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld1x3(ptr %A, ptr %ptr) {
3780 ; SDAG-LABEL: test_v4i32_post_imm_ld1x3:
3782 ; SDAG-NEXT: ld1.4s { v0, v1, v2 }, [x0], #48
3783 ; SDAG-NEXT: str x0, [x1]
3786 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld1x3:
3787 ; CHECK-GISEL: ; %bb.0:
3788 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1, v2 }, [x0]
3789 ; CHECK-GISEL-NEXT: add x8, x0, #48
3790 ; CHECK-GISEL-NEXT: str x8, [x1]
3791 ; CHECK-GISEL-NEXT: ret
3792 %ld1x3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr %A)
3793 %tmp = getelementptr i32, ptr %A, i32 12
3794 store ptr %tmp, ptr %ptr
3795 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld1x3
3798 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
3799 ; SDAG-LABEL: test_v4i32_post_reg_ld1x3:
3801 ; SDAG-NEXT: lsl x8, x2, #2
3802 ; SDAG-NEXT: ld1.4s { v0, v1, v2 }, [x0], x8
3803 ; SDAG-NEXT: str x0, [x1]
3806 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld1x3:
3807 ; CHECK-GISEL: ; %bb.0:
3808 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1, v2 }, [x0]
3809 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
3810 ; CHECK-GISEL-NEXT: str x8, [x1]
3811 ; CHECK-GISEL-NEXT: ret
3812 %ld1x3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr %A)
3813 %tmp = getelementptr i32, ptr %A, i64 %inc
3814 store ptr %tmp, ptr %ptr
3815 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld1x3
3818 declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr)
3821 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld1x3(ptr %A, ptr %ptr) {
3822 ; SDAG-LABEL: test_v2i32_post_imm_ld1x3:
3824 ; SDAG-NEXT: ld1.2s { v0, v1, v2 }, [x0], #24
3825 ; SDAG-NEXT: str x0, [x1]
3828 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld1x3:
3829 ; CHECK-GISEL: ; %bb.0:
3830 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1, v2 }, [x0]
3831 ; CHECK-GISEL-NEXT: add x8, x0, #24
3832 ; CHECK-GISEL-NEXT: str x8, [x1]
3833 ; CHECK-GISEL-NEXT: ret
3834 %ld1x3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr %A)
3835 %tmp = getelementptr i32, ptr %A, i32 6
3836 store ptr %tmp, ptr %ptr
3837 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld1x3
3840 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
3841 ; SDAG-LABEL: test_v2i32_post_reg_ld1x3:
3843 ; SDAG-NEXT: lsl x8, x2, #2
3844 ; SDAG-NEXT: ld1.2s { v0, v1, v2 }, [x0], x8
3845 ; SDAG-NEXT: str x0, [x1]
3848 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld1x3:
3849 ; CHECK-GISEL: ; %bb.0:
3850 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1, v2 }, [x0]
3851 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
3852 ; CHECK-GISEL-NEXT: str x8, [x1]
3853 ; CHECK-GISEL-NEXT: ret
3854 %ld1x3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr %A)
3855 %tmp = getelementptr i32, ptr %A, i64 %inc
3856 store ptr %tmp, ptr %ptr
3857 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld1x3
3860 declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr)
3863 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld1x3(ptr %A, ptr %ptr) {
3864 ; SDAG-LABEL: test_v2i64_post_imm_ld1x3:
3866 ; SDAG-NEXT: ld1.2d { v0, v1, v2 }, [x0], #48
3867 ; SDAG-NEXT: str x0, [x1]
3870 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld1x3:
3871 ; CHECK-GISEL: ; %bb.0:
3872 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1, v2 }, [x0]
3873 ; CHECK-GISEL-NEXT: add x8, x0, #48
3874 ; CHECK-GISEL-NEXT: str x8, [x1]
3875 ; CHECK-GISEL-NEXT: ret
3876 %ld1x3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr %A)
3877 %tmp = getelementptr i64, ptr %A, i32 6
3878 store ptr %tmp, ptr %ptr
3879 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld1x3
3882 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
3883 ; SDAG-LABEL: test_v2i64_post_reg_ld1x3:
3885 ; SDAG-NEXT: lsl x8, x2, #3
3886 ; SDAG-NEXT: ld1.2d { v0, v1, v2 }, [x0], x8
3887 ; SDAG-NEXT: str x0, [x1]
3890 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld1x3:
3891 ; CHECK-GISEL: ; %bb.0:
3892 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1, v2 }, [x0]
3893 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
3894 ; CHECK-GISEL-NEXT: str x8, [x1]
3895 ; CHECK-GISEL-NEXT: ret
3896 %ld1x3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr %A)
3897 %tmp = getelementptr i64, ptr %A, i64 %inc
3898 store ptr %tmp, ptr %ptr
3899 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld1x3
3902 declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr)
3905 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld1x3(ptr %A, ptr %ptr) {
3906 ; SDAG-LABEL: test_v1i64_post_imm_ld1x3:
3908 ; SDAG-NEXT: ld1.1d { v0, v1, v2 }, [x0], #24
3909 ; SDAG-NEXT: str x0, [x1]
3912 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld1x3:
3913 ; CHECK-GISEL: ; %bb.0:
3914 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2 }, [x0]
3915 ; CHECK-GISEL-NEXT: add x8, x0, #24
3916 ; CHECK-GISEL-NEXT: str x8, [x1]
3917 ; CHECK-GISEL-NEXT: ret
3918 %ld1x3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr %A)
3919 %tmp = getelementptr i64, ptr %A, i32 3
3920 store ptr %tmp, ptr %ptr
3921 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld1x3
3924 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
3925 ; SDAG-LABEL: test_v1i64_post_reg_ld1x3:
3927 ; SDAG-NEXT: lsl x8, x2, #3
3928 ; SDAG-NEXT: ld1.1d { v0, v1, v2 }, [x0], x8
3929 ; SDAG-NEXT: str x0, [x1]
3932 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld1x3:
3933 ; CHECK-GISEL: ; %bb.0:
3934 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2 }, [x0]
3935 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
3936 ; CHECK-GISEL-NEXT: str x8, [x1]
3937 ; CHECK-GISEL-NEXT: ret
3938 %ld1x3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr %A)
3939 %tmp = getelementptr i64, ptr %A, i64 %inc
3940 store ptr %tmp, ptr %ptr
3941 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld1x3
3944 declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr)
3947 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld1x3(ptr %A, ptr %ptr) {
3948 ; SDAG-LABEL: test_v4f32_post_imm_ld1x3:
3950 ; SDAG-NEXT: ld1.4s { v0, v1, v2 }, [x0], #48
3951 ; SDAG-NEXT: str x0, [x1]
3954 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld1x3:
3955 ; CHECK-GISEL: ; %bb.0:
3956 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1, v2 }, [x0]
3957 ; CHECK-GISEL-NEXT: add x8, x0, #48
3958 ; CHECK-GISEL-NEXT: str x8, [x1]
3959 ; CHECK-GISEL-NEXT: ret
3960 %ld1x3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr %A)
3961 %tmp = getelementptr float, ptr %A, i32 12
3962 store ptr %tmp, ptr %ptr
3963 ret { <4 x float>, <4 x float>, <4 x float> } %ld1x3
3966 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
3967 ; SDAG-LABEL: test_v4f32_post_reg_ld1x3:
3969 ; SDAG-NEXT: lsl x8, x2, #2
3970 ; SDAG-NEXT: ld1.4s { v0, v1, v2 }, [x0], x8
3971 ; SDAG-NEXT: str x0, [x1]
3974 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld1x3:
3975 ; CHECK-GISEL: ; %bb.0:
3976 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1, v2 }, [x0]
3977 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
3978 ; CHECK-GISEL-NEXT: str x8, [x1]
3979 ; CHECK-GISEL-NEXT: ret
3980 %ld1x3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr %A)
3981 %tmp = getelementptr float, ptr %A, i64 %inc
3982 store ptr %tmp, ptr %ptr
3983 ret { <4 x float>, <4 x float>, <4 x float> } %ld1x3
3986 declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr)
3989 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld1x3(ptr %A, ptr %ptr) {
3990 ; SDAG-LABEL: test_v2f32_post_imm_ld1x3:
3992 ; SDAG-NEXT: ld1.2s { v0, v1, v2 }, [x0], #24
3993 ; SDAG-NEXT: str x0, [x1]
3996 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld1x3:
3997 ; CHECK-GISEL: ; %bb.0:
3998 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1, v2 }, [x0]
3999 ; CHECK-GISEL-NEXT: add x8, x0, #24
4000 ; CHECK-GISEL-NEXT: str x8, [x1]
4001 ; CHECK-GISEL-NEXT: ret
4002 %ld1x3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr %A)
4003 %tmp = getelementptr float, ptr %A, i32 6
4004 store ptr %tmp, ptr %ptr
4005 ret { <2 x float>, <2 x float>, <2 x float> } %ld1x3
4008 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
4009 ; SDAG-LABEL: test_v2f32_post_reg_ld1x3:
4011 ; SDAG-NEXT: lsl x8, x2, #2
4012 ; SDAG-NEXT: ld1.2s { v0, v1, v2 }, [x0], x8
4013 ; SDAG-NEXT: str x0, [x1]
4016 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld1x3:
4017 ; CHECK-GISEL: ; %bb.0:
4018 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1, v2 }, [x0]
4019 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
4020 ; CHECK-GISEL-NEXT: str x8, [x1]
4021 ; CHECK-GISEL-NEXT: ret
4022 %ld1x3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr %A)
4023 %tmp = getelementptr float, ptr %A, i64 %inc
4024 store ptr %tmp, ptr %ptr
4025 ret { <2 x float>, <2 x float>, <2 x float> } %ld1x3
4028 declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr)
4031 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld1x3(ptr %A, ptr %ptr) {
4032 ; SDAG-LABEL: test_v2f64_post_imm_ld1x3:
4034 ; SDAG-NEXT: ld1.2d { v0, v1, v2 }, [x0], #48
4035 ; SDAG-NEXT: str x0, [x1]
4038 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld1x3:
4039 ; CHECK-GISEL: ; %bb.0:
4040 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1, v2 }, [x0]
4041 ; CHECK-GISEL-NEXT: add x8, x0, #48
4042 ; CHECK-GISEL-NEXT: str x8, [x1]
4043 ; CHECK-GISEL-NEXT: ret
4044 %ld1x3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr %A)
4045 %tmp = getelementptr double, ptr %A, i32 6
4046 store ptr %tmp, ptr %ptr
4047 ret { <2 x double>, <2 x double>, <2 x double> } %ld1x3
4050 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
4051 ; SDAG-LABEL: test_v2f64_post_reg_ld1x3:
4053 ; SDAG-NEXT: lsl x8, x2, #3
4054 ; SDAG-NEXT: ld1.2d { v0, v1, v2 }, [x0], x8
4055 ; SDAG-NEXT: str x0, [x1]
4058 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld1x3:
4059 ; CHECK-GISEL: ; %bb.0:
4060 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1, v2 }, [x0]
4061 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
4062 ; CHECK-GISEL-NEXT: str x8, [x1]
4063 ; CHECK-GISEL-NEXT: ret
4064 %ld1x3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr %A)
4065 %tmp = getelementptr double, ptr %A, i64 %inc
4066 store ptr %tmp, ptr %ptr
4067 ret { <2 x double>, <2 x double>, <2 x double> } %ld1x3
4070 declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr)
4073 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld1x3(ptr %A, ptr %ptr) {
4074 ; SDAG-LABEL: test_v1f64_post_imm_ld1x3:
4076 ; SDAG-NEXT: ld1.1d { v0, v1, v2 }, [x0], #24
4077 ; SDAG-NEXT: str x0, [x1]
4080 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld1x3:
4081 ; CHECK-GISEL: ; %bb.0:
4082 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2 }, [x0]
4083 ; CHECK-GISEL-NEXT: add x8, x0, #24
4084 ; CHECK-GISEL-NEXT: str x8, [x1]
4085 ; CHECK-GISEL-NEXT: ret
4086 %ld1x3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr %A)
4087 %tmp = getelementptr double, ptr %A, i32 3
4088 store ptr %tmp, ptr %ptr
4089 ret { <1 x double>, <1 x double>, <1 x double> } %ld1x3
4092 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
4093 ; SDAG-LABEL: test_v1f64_post_reg_ld1x3:
4095 ; SDAG-NEXT: lsl x8, x2, #3
4096 ; SDAG-NEXT: ld1.1d { v0, v1, v2 }, [x0], x8
4097 ; SDAG-NEXT: str x0, [x1]
4100 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld1x3:
4101 ; CHECK-GISEL: ; %bb.0:
4102 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2 }, [x0]
4103 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
4104 ; CHECK-GISEL-NEXT: str x8, [x1]
4105 ; CHECK-GISEL-NEXT: ret
4106 %ld1x3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr %A)
4107 %tmp = getelementptr double, ptr %A, i64 %inc
4108 store ptr %tmp, ptr %ptr
4109 ret { <1 x double>, <1 x double>, <1 x double> } %ld1x3
4112 declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr)
4115 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld1x4(ptr %A, ptr %ptr) {
4116 ; SDAG-LABEL: test_v16i8_post_imm_ld1x4:
4118 ; SDAG-NEXT: ld1.16b { v0, v1, v2, v3 }, [x0], #64
4119 ; SDAG-NEXT: str x0, [x1]
4122 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld1x4:
4123 ; CHECK-GISEL: ; %bb.0:
4124 ; CHECK-GISEL-NEXT: ld1.16b { v0, v1, v2, v3 }, [x0]
4125 ; CHECK-GISEL-NEXT: add x8, x0, #64
4126 ; CHECK-GISEL-NEXT: str x8, [x1]
4127 ; CHECK-GISEL-NEXT: ret
4128 %ld1x4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr %A)
4129 %tmp = getelementptr i8, ptr %A, i32 64
4130 store ptr %tmp, ptr %ptr
4131 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld1x4
4134 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4135 ; SDAG-LABEL: test_v16i8_post_reg_ld1x4:
4137 ; SDAG-NEXT: ld1.16b { v0, v1, v2, v3 }, [x0], x2
4138 ; SDAG-NEXT: str x0, [x1]
4141 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld1x4:
4142 ; CHECK-GISEL: ; %bb.0:
4143 ; CHECK-GISEL-NEXT: ld1.16b { v0, v1, v2, v3 }, [x0]
4144 ; CHECK-GISEL-NEXT: add x8, x0, x2
4145 ; CHECK-GISEL-NEXT: str x8, [x1]
4146 ; CHECK-GISEL-NEXT: ret
4147 %ld1x4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr %A)
4148 %tmp = getelementptr i8, ptr %A, i64 %inc
4149 store ptr %tmp, ptr %ptr
4150 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld1x4
4153 declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr)
4156 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld1x4(ptr %A, ptr %ptr) {
4157 ; SDAG-LABEL: test_v8i8_post_imm_ld1x4:
4159 ; SDAG-NEXT: ld1.8b { v0, v1, v2, v3 }, [x0], #32
4160 ; SDAG-NEXT: str x0, [x1]
4163 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld1x4:
4164 ; CHECK-GISEL: ; %bb.0:
4165 ; CHECK-GISEL-NEXT: ld1.8b { v0, v1, v2, v3 }, [x0]
4166 ; CHECK-GISEL-NEXT: add x8, x0, #32
4167 ; CHECK-GISEL-NEXT: str x8, [x1]
4168 ; CHECK-GISEL-NEXT: ret
4169 %ld1x4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr %A)
4170 %tmp = getelementptr i8, ptr %A, i32 32
4171 store ptr %tmp, ptr %ptr
4172 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld1x4
4175 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4176 ; SDAG-LABEL: test_v8i8_post_reg_ld1x4:
4178 ; SDAG-NEXT: ld1.8b { v0, v1, v2, v3 }, [x0], x2
4179 ; SDAG-NEXT: str x0, [x1]
4182 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld1x4:
4183 ; CHECK-GISEL: ; %bb.0:
4184 ; CHECK-GISEL-NEXT: ld1.8b { v0, v1, v2, v3 }, [x0]
4185 ; CHECK-GISEL-NEXT: add x8, x0, x2
4186 ; CHECK-GISEL-NEXT: str x8, [x1]
4187 ; CHECK-GISEL-NEXT: ret
4188 %ld1x4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr %A)
4189 %tmp = getelementptr i8, ptr %A, i64 %inc
4190 store ptr %tmp, ptr %ptr
4191 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld1x4
4194 declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr)
4197 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld1x4(ptr %A, ptr %ptr) {
4198 ; SDAG-LABEL: test_v8i16_post_imm_ld1x4:
4200 ; SDAG-NEXT: ld1.8h { v0, v1, v2, v3 }, [x0], #64
4201 ; SDAG-NEXT: str x0, [x1]
4204 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld1x4:
4205 ; CHECK-GISEL: ; %bb.0:
4206 ; CHECK-GISEL-NEXT: ld1.8h { v0, v1, v2, v3 }, [x0]
4207 ; CHECK-GISEL-NEXT: add x8, x0, #64
4208 ; CHECK-GISEL-NEXT: str x8, [x1]
4209 ; CHECK-GISEL-NEXT: ret
4210 %ld1x4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr %A)
4211 %tmp = getelementptr i16, ptr %A, i32 32
4212 store ptr %tmp, ptr %ptr
4213 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld1x4
4216 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4217 ; SDAG-LABEL: test_v8i16_post_reg_ld1x4:
4219 ; SDAG-NEXT: lsl x8, x2, #1
4220 ; SDAG-NEXT: ld1.8h { v0, v1, v2, v3 }, [x0], x8
4221 ; SDAG-NEXT: str x0, [x1]
4224 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld1x4:
4225 ; CHECK-GISEL: ; %bb.0:
4226 ; CHECK-GISEL-NEXT: ld1.8h { v0, v1, v2, v3 }, [x0]
4227 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
4228 ; CHECK-GISEL-NEXT: str x8, [x1]
4229 ; CHECK-GISEL-NEXT: ret
4230 %ld1x4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr %A)
4231 %tmp = getelementptr i16, ptr %A, i64 %inc
4232 store ptr %tmp, ptr %ptr
4233 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld1x4
4236 declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr)
4239 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld1x4(ptr %A, ptr %ptr) {
4240 ; SDAG-LABEL: test_v4i16_post_imm_ld1x4:
4242 ; SDAG-NEXT: ld1.4h { v0, v1, v2, v3 }, [x0], #32
4243 ; SDAG-NEXT: str x0, [x1]
4246 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld1x4:
4247 ; CHECK-GISEL: ; %bb.0:
4248 ; CHECK-GISEL-NEXT: ld1.4h { v0, v1, v2, v3 }, [x0]
4249 ; CHECK-GISEL-NEXT: add x8, x0, #32
4250 ; CHECK-GISEL-NEXT: str x8, [x1]
4251 ; CHECK-GISEL-NEXT: ret
4252 %ld1x4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr %A)
4253 %tmp = getelementptr i16, ptr %A, i32 16
4254 store ptr %tmp, ptr %ptr
4255 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld1x4
4258 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4259 ; SDAG-LABEL: test_v4i16_post_reg_ld1x4:
4261 ; SDAG-NEXT: lsl x8, x2, #1
4262 ; SDAG-NEXT: ld1.4h { v0, v1, v2, v3 }, [x0], x8
4263 ; SDAG-NEXT: str x0, [x1]
4266 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld1x4:
4267 ; CHECK-GISEL: ; %bb.0:
4268 ; CHECK-GISEL-NEXT: ld1.4h { v0, v1, v2, v3 }, [x0]
4269 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
4270 ; CHECK-GISEL-NEXT: str x8, [x1]
4271 ; CHECK-GISEL-NEXT: ret
4272 %ld1x4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr %A)
4273 %tmp = getelementptr i16, ptr %A, i64 %inc
4274 store ptr %tmp, ptr %ptr
4275 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld1x4
4278 declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr)
4281 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld1x4(ptr %A, ptr %ptr) {
4282 ; SDAG-LABEL: test_v4i32_post_imm_ld1x4:
4284 ; SDAG-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0], #64
4285 ; SDAG-NEXT: str x0, [x1]
4288 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld1x4:
4289 ; CHECK-GISEL: ; %bb.0:
4290 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0]
4291 ; CHECK-GISEL-NEXT: add x8, x0, #64
4292 ; CHECK-GISEL-NEXT: str x8, [x1]
4293 ; CHECK-GISEL-NEXT: ret
4294 %ld1x4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr %A)
4295 %tmp = getelementptr i32, ptr %A, i32 16
4296 store ptr %tmp, ptr %ptr
4297 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld1x4
4300 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4301 ; SDAG-LABEL: test_v4i32_post_reg_ld1x4:
4303 ; SDAG-NEXT: lsl x8, x2, #2
4304 ; SDAG-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0], x8
4305 ; SDAG-NEXT: str x0, [x1]
4308 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld1x4:
4309 ; CHECK-GISEL: ; %bb.0:
4310 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0]
4311 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
4312 ; CHECK-GISEL-NEXT: str x8, [x1]
4313 ; CHECK-GISEL-NEXT: ret
4314 %ld1x4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr %A)
4315 %tmp = getelementptr i32, ptr %A, i64 %inc
4316 store ptr %tmp, ptr %ptr
4317 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld1x4
4320 declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr)
4323 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld1x4(ptr %A, ptr %ptr) {
4324 ; SDAG-LABEL: test_v2i32_post_imm_ld1x4:
4326 ; SDAG-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0], #32
4327 ; SDAG-NEXT: str x0, [x1]
4330 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld1x4:
4331 ; CHECK-GISEL: ; %bb.0:
4332 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0]
4333 ; CHECK-GISEL-NEXT: add x8, x0, #32
4334 ; CHECK-GISEL-NEXT: str x8, [x1]
4335 ; CHECK-GISEL-NEXT: ret
4336 %ld1x4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr %A)
4337 %tmp = getelementptr i32, ptr %A, i32 8
4338 store ptr %tmp, ptr %ptr
4339 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld1x4
4342 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4343 ; SDAG-LABEL: test_v2i32_post_reg_ld1x4:
4345 ; SDAG-NEXT: lsl x8, x2, #2
4346 ; SDAG-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0], x8
4347 ; SDAG-NEXT: str x0, [x1]
4350 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld1x4:
4351 ; CHECK-GISEL: ; %bb.0:
4352 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0]
4353 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
4354 ; CHECK-GISEL-NEXT: str x8, [x1]
4355 ; CHECK-GISEL-NEXT: ret
4356 %ld1x4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr %A)
4357 %tmp = getelementptr i32, ptr %A, i64 %inc
4358 store ptr %tmp, ptr %ptr
4359 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld1x4
4362 declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr)
4365 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld1x4(ptr %A, ptr %ptr) {
4366 ; SDAG-LABEL: test_v2i64_post_imm_ld1x4:
4368 ; SDAG-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0], #64
4369 ; SDAG-NEXT: str x0, [x1]
4372 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld1x4:
4373 ; CHECK-GISEL: ; %bb.0:
4374 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0]
4375 ; CHECK-GISEL-NEXT: add x8, x0, #64
4376 ; CHECK-GISEL-NEXT: str x8, [x1]
4377 ; CHECK-GISEL-NEXT: ret
4378 %ld1x4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr %A)
4379 %tmp = getelementptr i64, ptr %A, i32 8
4380 store ptr %tmp, ptr %ptr
4381 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld1x4
4384 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4385 ; SDAG-LABEL: test_v2i64_post_reg_ld1x4:
4387 ; SDAG-NEXT: lsl x8, x2, #3
4388 ; SDAG-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0], x8
4389 ; SDAG-NEXT: str x0, [x1]
4392 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld1x4:
4393 ; CHECK-GISEL: ; %bb.0:
4394 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0]
4395 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
4396 ; CHECK-GISEL-NEXT: str x8, [x1]
4397 ; CHECK-GISEL-NEXT: ret
4398 %ld1x4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr %A)
4399 %tmp = getelementptr i64, ptr %A, i64 %inc
4400 store ptr %tmp, ptr %ptr
4401 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld1x4
4404 declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr)
4407 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld1x4(ptr %A, ptr %ptr) {
4408 ; SDAG-LABEL: test_v1i64_post_imm_ld1x4:
4410 ; SDAG-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], #32
4411 ; SDAG-NEXT: str x0, [x1]
4414 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld1x4:
4415 ; CHECK-GISEL: ; %bb.0:
4416 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0]
4417 ; CHECK-GISEL-NEXT: add x8, x0, #32
4418 ; CHECK-GISEL-NEXT: str x8, [x1]
4419 ; CHECK-GISEL-NEXT: ret
4420 %ld1x4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr %A)
4421 %tmp = getelementptr i64, ptr %A, i32 4
4422 store ptr %tmp, ptr %ptr
4423 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld1x4
4426 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4427 ; SDAG-LABEL: test_v1i64_post_reg_ld1x4:
4429 ; SDAG-NEXT: lsl x8, x2, #3
4430 ; SDAG-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], x8
4431 ; SDAG-NEXT: str x0, [x1]
4434 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld1x4:
4435 ; CHECK-GISEL: ; %bb.0:
4436 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0]
4437 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
4438 ; CHECK-GISEL-NEXT: str x8, [x1]
4439 ; CHECK-GISEL-NEXT: ret
4440 %ld1x4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr %A)
4441 %tmp = getelementptr i64, ptr %A, i64 %inc
4442 store ptr %tmp, ptr %ptr
4443 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld1x4
4446 declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr)
4449 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld1x4(ptr %A, ptr %ptr) {
4450 ; SDAG-LABEL: test_v4f32_post_imm_ld1x4:
4452 ; SDAG-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0], #64
4453 ; SDAG-NEXT: str x0, [x1]
4456 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld1x4:
4457 ; CHECK-GISEL: ; %bb.0:
4458 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0]
4459 ; CHECK-GISEL-NEXT: add x8, x0, #64
4460 ; CHECK-GISEL-NEXT: str x8, [x1]
4461 ; CHECK-GISEL-NEXT: ret
4462 %ld1x4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr %A)
4463 %tmp = getelementptr float, ptr %A, i32 16
4464 store ptr %tmp, ptr %ptr
4465 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld1x4
4468 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4469 ; SDAG-LABEL: test_v4f32_post_reg_ld1x4:
4471 ; SDAG-NEXT: lsl x8, x2, #2
4472 ; SDAG-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0], x8
4473 ; SDAG-NEXT: str x0, [x1]
4476 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld1x4:
4477 ; CHECK-GISEL: ; %bb.0:
4478 ; CHECK-GISEL-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0]
4479 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
4480 ; CHECK-GISEL-NEXT: str x8, [x1]
4481 ; CHECK-GISEL-NEXT: ret
4482 %ld1x4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr %A)
4483 %tmp = getelementptr float, ptr %A, i64 %inc
4484 store ptr %tmp, ptr %ptr
4485 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld1x4
4488 declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr)
4491 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld1x4(ptr %A, ptr %ptr) {
4492 ; SDAG-LABEL: test_v2f32_post_imm_ld1x4:
4494 ; SDAG-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0], #32
4495 ; SDAG-NEXT: str x0, [x1]
4498 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld1x4:
4499 ; CHECK-GISEL: ; %bb.0:
4500 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0]
4501 ; CHECK-GISEL-NEXT: add x8, x0, #32
4502 ; CHECK-GISEL-NEXT: str x8, [x1]
4503 ; CHECK-GISEL-NEXT: ret
4504 %ld1x4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr %A)
4505 %tmp = getelementptr float, ptr %A, i32 8
4506 store ptr %tmp, ptr %ptr
4507 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld1x4
4510 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4511 ; SDAG-LABEL: test_v2f32_post_reg_ld1x4:
4513 ; SDAG-NEXT: lsl x8, x2, #2
4514 ; SDAG-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0], x8
4515 ; SDAG-NEXT: str x0, [x1]
4518 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld1x4:
4519 ; CHECK-GISEL: ; %bb.0:
4520 ; CHECK-GISEL-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0]
4521 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
4522 ; CHECK-GISEL-NEXT: str x8, [x1]
4523 ; CHECK-GISEL-NEXT: ret
4524 %ld1x4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr %A)
4525 %tmp = getelementptr float, ptr %A, i64 %inc
4526 store ptr %tmp, ptr %ptr
4527 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld1x4
4530 declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr)
4533 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld1x4(ptr %A, ptr %ptr) {
4534 ; SDAG-LABEL: test_v2f64_post_imm_ld1x4:
4536 ; SDAG-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0], #64
4537 ; SDAG-NEXT: str x0, [x1]
4540 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld1x4:
4541 ; CHECK-GISEL: ; %bb.0:
4542 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0]
4543 ; CHECK-GISEL-NEXT: add x8, x0, #64
4544 ; CHECK-GISEL-NEXT: str x8, [x1]
4545 ; CHECK-GISEL-NEXT: ret
4546 %ld1x4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr %A)
4547 %tmp = getelementptr double, ptr %A, i32 8
4548 store ptr %tmp, ptr %ptr
4549 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld1x4
4552 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4553 ; SDAG-LABEL: test_v2f64_post_reg_ld1x4:
4555 ; SDAG-NEXT: lsl x8, x2, #3
4556 ; SDAG-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0], x8
4557 ; SDAG-NEXT: str x0, [x1]
4560 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld1x4:
4561 ; CHECK-GISEL: ; %bb.0:
4562 ; CHECK-GISEL-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0]
4563 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
4564 ; CHECK-GISEL-NEXT: str x8, [x1]
4565 ; CHECK-GISEL-NEXT: ret
4566 %ld1x4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr %A)
4567 %tmp = getelementptr double, ptr %A, i64 %inc
4568 store ptr %tmp, ptr %ptr
4569 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld1x4
4572 declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr)
4575 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld1x4(ptr %A, ptr %ptr) {
4576 ; SDAG-LABEL: test_v1f64_post_imm_ld1x4:
4578 ; SDAG-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], #32
4579 ; SDAG-NEXT: str x0, [x1]
4582 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld1x4:
4583 ; CHECK-GISEL: ; %bb.0:
4584 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0]
4585 ; CHECK-GISEL-NEXT: add x8, x0, #32
4586 ; CHECK-GISEL-NEXT: str x8, [x1]
4587 ; CHECK-GISEL-NEXT: ret
4588 %ld1x4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr %A)
4589 %tmp = getelementptr double, ptr %A, i32 4
4590 store ptr %tmp, ptr %ptr
4591 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld1x4
4594 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
4595 ; SDAG-LABEL: test_v1f64_post_reg_ld1x4:
4597 ; SDAG-NEXT: lsl x8, x2, #3
4598 ; SDAG-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], x8
4599 ; SDAG-NEXT: str x0, [x1]
4602 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld1x4:
4603 ; CHECK-GISEL: ; %bb.0:
4604 ; CHECK-GISEL-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0]
4605 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
4606 ; CHECK-GISEL-NEXT: str x8, [x1]
4607 ; CHECK-GISEL-NEXT: ret
4608 %ld1x4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr %A)
4609 %tmp = getelementptr double, ptr %A, i64 %inc
4610 store ptr %tmp, ptr %ptr
4611 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld1x4
4614 declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr)
4617 define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
4618 ; SDAG-LABEL: test_v16i8_post_imm_ld2r:
4620 ; SDAG-NEXT: ld2r.16b { v0, v1 }, [x0], #2
4621 ; SDAG-NEXT: str x0, [x1]
4624 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld2r:
4625 ; CHECK-GISEL: ; %bb.0:
4626 ; CHECK-GISEL-NEXT: ld2r.16b { v0, v1 }, [x0]
4627 ; CHECK-GISEL-NEXT: add x8, x0, #2
4628 ; CHECK-GISEL-NEXT: str x8, [x1]
4629 ; CHECK-GISEL-NEXT: ret
4630 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0(ptr %A)
4631 %tmp = getelementptr i8, ptr %A, i32 2
4632 store ptr %tmp, ptr %ptr
4633 ret { <16 x i8>, <16 x i8> } %ld2
4636 define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
4637 ; SDAG-LABEL: test_v16i8_post_reg_ld2r:
4639 ; SDAG-NEXT: ld2r.16b { v0, v1 }, [x0], x2
4640 ; SDAG-NEXT: str x0, [x1]
4643 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld2r:
4644 ; CHECK-GISEL: ; %bb.0:
4645 ; CHECK-GISEL-NEXT: ld2r.16b { v0, v1 }, [x0]
4646 ; CHECK-GISEL-NEXT: add x8, x0, x2
4647 ; CHECK-GISEL-NEXT: str x8, [x1]
4648 ; CHECK-GISEL-NEXT: ret
4649 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0(ptr %A)
4650 %tmp = getelementptr i8, ptr %A, i64 %inc
4651 store ptr %tmp, ptr %ptr
4652 ret { <16 x i8>, <16 x i8> } %ld2
4655 declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0(ptr) nounwind readonly
4658 define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
4659 ; SDAG-LABEL: test_v8i8_post_imm_ld2r:
4661 ; SDAG-NEXT: ld2r.8b { v0, v1 }, [x0], #2
4662 ; SDAG-NEXT: str x0, [x1]
4665 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld2r:
4666 ; CHECK-GISEL: ; %bb.0:
4667 ; CHECK-GISEL-NEXT: ld2r.8b { v0, v1 }, [x0]
4668 ; CHECK-GISEL-NEXT: add x8, x0, #2
4669 ; CHECK-GISEL-NEXT: str x8, [x1]
4670 ; CHECK-GISEL-NEXT: ret
4671 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0(ptr %A)
4672 %tmp = getelementptr i8, ptr %A, i32 2
4673 store ptr %tmp, ptr %ptr
4674 ret { <8 x i8>, <8 x i8> } %ld2
4677 define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
4678 ; SDAG-LABEL: test_v8i8_post_reg_ld2r:
4680 ; SDAG-NEXT: ld2r.8b { v0, v1 }, [x0], x2
4681 ; SDAG-NEXT: str x0, [x1]
4684 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld2r:
4685 ; CHECK-GISEL: ; %bb.0:
4686 ; CHECK-GISEL-NEXT: ld2r.8b { v0, v1 }, [x0]
4687 ; CHECK-GISEL-NEXT: add x8, x0, x2
4688 ; CHECK-GISEL-NEXT: str x8, [x1]
4689 ; CHECK-GISEL-NEXT: ret
4690 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0(ptr %A)
4691 %tmp = getelementptr i8, ptr %A, i64 %inc
4692 store ptr %tmp, ptr %ptr
4693 ret { <8 x i8>, <8 x i8> } %ld2
4696 declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0(ptr) nounwind readonly
4699 define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
4700 ; SDAG-LABEL: test_v8i16_post_imm_ld2r:
4702 ; SDAG-NEXT: ld2r.8h { v0, v1 }, [x0], #4
4703 ; SDAG-NEXT: str x0, [x1]
4706 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld2r:
4707 ; CHECK-GISEL: ; %bb.0:
4708 ; CHECK-GISEL-NEXT: ld2r.8h { v0, v1 }, [x0]
4709 ; CHECK-GISEL-NEXT: add x8, x0, #4
4710 ; CHECK-GISEL-NEXT: str x8, [x1]
4711 ; CHECK-GISEL-NEXT: ret
4712 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0(ptr %A)
4713 %tmp = getelementptr i16, ptr %A, i32 2
4714 store ptr %tmp, ptr %ptr
4715 ret { <8 x i16>, <8 x i16> } %ld2
4718 define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
4719 ; SDAG-LABEL: test_v8i16_post_reg_ld2r:
4721 ; SDAG-NEXT: lsl x8, x2, #1
4722 ; SDAG-NEXT: ld2r.8h { v0, v1 }, [x0], x8
4723 ; SDAG-NEXT: str x0, [x1]
4726 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld2r:
4727 ; CHECK-GISEL: ; %bb.0:
4728 ; CHECK-GISEL-NEXT: ld2r.8h { v0, v1 }, [x0]
4729 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
4730 ; CHECK-GISEL-NEXT: str x8, [x1]
4731 ; CHECK-GISEL-NEXT: ret
4732 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0(ptr %A)
4733 %tmp = getelementptr i16, ptr %A, i64 %inc
4734 store ptr %tmp, ptr %ptr
4735 ret { <8 x i16>, <8 x i16> } %ld2
4738 declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0(ptr) nounwind readonly
4741 define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
4742 ; SDAG-LABEL: test_v4i16_post_imm_ld2r:
4744 ; SDAG-NEXT: ld2r.4h { v0, v1 }, [x0], #4
4745 ; SDAG-NEXT: str x0, [x1]
4748 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld2r:
4749 ; CHECK-GISEL: ; %bb.0:
4750 ; CHECK-GISEL-NEXT: ld2r.4h { v0, v1 }, [x0]
4751 ; CHECK-GISEL-NEXT: add x8, x0, #4
4752 ; CHECK-GISEL-NEXT: str x8, [x1]
4753 ; CHECK-GISEL-NEXT: ret
4754 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0(ptr %A)
4755 %tmp = getelementptr i16, ptr %A, i32 2
4756 store ptr %tmp, ptr %ptr
4757 ret { <4 x i16>, <4 x i16> } %ld2
4760 define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
4761 ; SDAG-LABEL: test_v4i16_post_reg_ld2r:
4763 ; SDAG-NEXT: lsl x8, x2, #1
4764 ; SDAG-NEXT: ld2r.4h { v0, v1 }, [x0], x8
4765 ; SDAG-NEXT: str x0, [x1]
4768 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld2r:
4769 ; CHECK-GISEL: ; %bb.0:
4770 ; CHECK-GISEL-NEXT: ld2r.4h { v0, v1 }, [x0]
4771 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
4772 ; CHECK-GISEL-NEXT: str x8, [x1]
4773 ; CHECK-GISEL-NEXT: ret
4774 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0(ptr %A)
4775 %tmp = getelementptr i16, ptr %A, i64 %inc
4776 store ptr %tmp, ptr %ptr
4777 ret { <4 x i16>, <4 x i16> } %ld2
4780 declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0(ptr) nounwind readonly
4783 define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
4784 ; SDAG-LABEL: test_v4i32_post_imm_ld2r:
4786 ; SDAG-NEXT: ld2r.4s { v0, v1 }, [x0], #8
4787 ; SDAG-NEXT: str x0, [x1]
4790 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld2r:
4791 ; CHECK-GISEL: ; %bb.0:
4792 ; CHECK-GISEL-NEXT: ld2r.4s { v0, v1 }, [x0]
4793 ; CHECK-GISEL-NEXT: add x8, x0, #8
4794 ; CHECK-GISEL-NEXT: str x8, [x1]
4795 ; CHECK-GISEL-NEXT: ret
4796 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0(ptr %A)
4797 %tmp = getelementptr i32, ptr %A, i32 2
4798 store ptr %tmp, ptr %ptr
4799 ret { <4 x i32>, <4 x i32> } %ld2
4802 define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
4803 ; SDAG-LABEL: test_v4i32_post_reg_ld2r:
4805 ; SDAG-NEXT: lsl x8, x2, #2
4806 ; SDAG-NEXT: ld2r.4s { v0, v1 }, [x0], x8
4807 ; SDAG-NEXT: str x0, [x1]
4810 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld2r:
4811 ; CHECK-GISEL: ; %bb.0:
4812 ; CHECK-GISEL-NEXT: ld2r.4s { v0, v1 }, [x0]
4813 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
4814 ; CHECK-GISEL-NEXT: str x8, [x1]
4815 ; CHECK-GISEL-NEXT: ret
4816 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0(ptr %A)
4817 %tmp = getelementptr i32, ptr %A, i64 %inc
4818 store ptr %tmp, ptr %ptr
4819 ret { <4 x i32>, <4 x i32> } %ld2
4822 declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0(ptr) nounwind readonly
4824 define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
4825 ; SDAG-LABEL: test_v2i32_post_imm_ld2r:
4827 ; SDAG-NEXT: ld2r.2s { v0, v1 }, [x0], #8
4828 ; SDAG-NEXT: str x0, [x1]
4831 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld2r:
4832 ; CHECK-GISEL: ; %bb.0:
4833 ; CHECK-GISEL-NEXT: ld2r.2s { v0, v1 }, [x0]
4834 ; CHECK-GISEL-NEXT: add x8, x0, #8
4835 ; CHECK-GISEL-NEXT: str x8, [x1]
4836 ; CHECK-GISEL-NEXT: ret
4837 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0(ptr %A)
4838 %tmp = getelementptr i32, ptr %A, i32 2
4839 store ptr %tmp, ptr %ptr
4840 ret { <2 x i32>, <2 x i32> } %ld2
4843 define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
4844 ; SDAG-LABEL: test_v2i32_post_reg_ld2r:
4846 ; SDAG-NEXT: lsl x8, x2, #2
4847 ; SDAG-NEXT: ld2r.2s { v0, v1 }, [x0], x8
4848 ; SDAG-NEXT: str x0, [x1]
4851 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld2r:
4852 ; CHECK-GISEL: ; %bb.0:
4853 ; CHECK-GISEL-NEXT: ld2r.2s { v0, v1 }, [x0]
4854 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
4855 ; CHECK-GISEL-NEXT: str x8, [x1]
4856 ; CHECK-GISEL-NEXT: ret
4857 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0(ptr %A)
4858 %tmp = getelementptr i32, ptr %A, i64 %inc
4859 store ptr %tmp, ptr %ptr
4860 ret { <2 x i32>, <2 x i32> } %ld2
4863 declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0(ptr) nounwind readonly
4866 define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
4867 ; SDAG-LABEL: test_v2i64_post_imm_ld2r:
4869 ; SDAG-NEXT: ld2r.2d { v0, v1 }, [x0], #16
4870 ; SDAG-NEXT: str x0, [x1]
4873 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld2r:
4874 ; CHECK-GISEL: ; %bb.0:
4875 ; CHECK-GISEL-NEXT: ld2r.2d { v0, v1 }, [x0]
4876 ; CHECK-GISEL-NEXT: add x8, x0, #16
4877 ; CHECK-GISEL-NEXT: str x8, [x1]
4878 ; CHECK-GISEL-NEXT: ret
4879 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0(ptr %A)
4880 %tmp = getelementptr i64, ptr %A, i32 2
4881 store ptr %tmp, ptr %ptr
4882 ret { <2 x i64>, <2 x i64> } %ld2
4885 define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
4886 ; SDAG-LABEL: test_v2i64_post_reg_ld2r:
4888 ; SDAG-NEXT: lsl x8, x2, #3
4889 ; SDAG-NEXT: ld2r.2d { v0, v1 }, [x0], x8
4890 ; SDAG-NEXT: str x0, [x1]
4893 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld2r:
4894 ; CHECK-GISEL: ; %bb.0:
4895 ; CHECK-GISEL-NEXT: ld2r.2d { v0, v1 }, [x0]
4896 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
4897 ; CHECK-GISEL-NEXT: str x8, [x1]
4898 ; CHECK-GISEL-NEXT: ret
4899 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0(ptr %A)
4900 %tmp = getelementptr i64, ptr %A, i64 %inc
4901 store ptr %tmp, ptr %ptr
4902 ret { <2 x i64>, <2 x i64> } %ld2
4905 declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0(ptr) nounwind readonly
4907 define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
4908 ; SDAG-LABEL: test_v1i64_post_imm_ld2r:
4910 ; SDAG-NEXT: ld2r.1d { v0, v1 }, [x0], #16
4911 ; SDAG-NEXT: str x0, [x1]
4914 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld2r:
4915 ; CHECK-GISEL: ; %bb.0:
4916 ; CHECK-GISEL-NEXT: ld2r.1d { v0, v1 }, [x0]
4917 ; CHECK-GISEL-NEXT: add x8, x0, #16
4918 ; CHECK-GISEL-NEXT: str x8, [x1]
4919 ; CHECK-GISEL-NEXT: ret
4920 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0(ptr %A)
4921 %tmp = getelementptr i64, ptr %A, i32 2
4922 store ptr %tmp, ptr %ptr
4923 ret { <1 x i64>, <1 x i64> } %ld2
4926 define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
4927 ; SDAG-LABEL: test_v1i64_post_reg_ld2r:
4929 ; SDAG-NEXT: lsl x8, x2, #3
4930 ; SDAG-NEXT: ld2r.1d { v0, v1 }, [x0], x8
4931 ; SDAG-NEXT: str x0, [x1]
4934 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld2r:
4935 ; CHECK-GISEL: ; %bb.0:
4936 ; CHECK-GISEL-NEXT: ld2r.1d { v0, v1 }, [x0]
4937 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
4938 ; CHECK-GISEL-NEXT: str x8, [x1]
4939 ; CHECK-GISEL-NEXT: ret
4940 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0(ptr %A)
4941 %tmp = getelementptr i64, ptr %A, i64 %inc
4942 store ptr %tmp, ptr %ptr
4943 ret { <1 x i64>, <1 x i64> } %ld2
4946 declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0(ptr) nounwind readonly
4949 define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
4950 ; SDAG-LABEL: test_v4f32_post_imm_ld2r:
4952 ; SDAG-NEXT: ld2r.4s { v0, v1 }, [x0], #8
4953 ; SDAG-NEXT: str x0, [x1]
4956 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld2r:
4957 ; CHECK-GISEL: ; %bb.0:
4958 ; CHECK-GISEL-NEXT: ld2r.4s { v0, v1 }, [x0]
4959 ; CHECK-GISEL-NEXT: add x8, x0, #8
4960 ; CHECK-GISEL-NEXT: str x8, [x1]
4961 ; CHECK-GISEL-NEXT: ret
4962 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2r.v4f32.p0(ptr %A)
4963 %tmp = getelementptr float, ptr %A, i32 2
4964 store ptr %tmp, ptr %ptr
4965 ret { <4 x float>, <4 x float> } %ld2
4968 define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
4969 ; SDAG-LABEL: test_v4f32_post_reg_ld2r:
4971 ; SDAG-NEXT: lsl x8, x2, #2
4972 ; SDAG-NEXT: ld2r.4s { v0, v1 }, [x0], x8
4973 ; SDAG-NEXT: str x0, [x1]
4976 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld2r:
4977 ; CHECK-GISEL: ; %bb.0:
4978 ; CHECK-GISEL-NEXT: ld2r.4s { v0, v1 }, [x0]
4979 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
4980 ; CHECK-GISEL-NEXT: str x8, [x1]
4981 ; CHECK-GISEL-NEXT: ret
4982 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2r.v4f32.p0(ptr %A)
4983 %tmp = getelementptr float, ptr %A, i64 %inc
4984 store ptr %tmp, ptr %ptr
4985 ret { <4 x float>, <4 x float> } %ld2
4988 declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2r.v4f32.p0(ptr) nounwind readonly
4990 define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
4991 ; SDAG-LABEL: test_v2f32_post_imm_ld2r:
4993 ; SDAG-NEXT: ld2r.2s { v0, v1 }, [x0], #8
4994 ; SDAG-NEXT: str x0, [x1]
4997 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld2r:
4998 ; CHECK-GISEL: ; %bb.0:
4999 ; CHECK-GISEL-NEXT: ld2r.2s { v0, v1 }, [x0]
5000 ; CHECK-GISEL-NEXT: add x8, x0, #8
5001 ; CHECK-GISEL-NEXT: str x8, [x1]
5002 ; CHECK-GISEL-NEXT: ret
5003 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2r.v2f32.p0(ptr %A)
5004 %tmp = getelementptr float, ptr %A, i32 2
5005 store ptr %tmp, ptr %ptr
5006 ret { <2 x float>, <2 x float> } %ld2
5009 define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5010 ; SDAG-LABEL: test_v2f32_post_reg_ld2r:
5012 ; SDAG-NEXT: lsl x8, x2, #2
5013 ; SDAG-NEXT: ld2r.2s { v0, v1 }, [x0], x8
5014 ; SDAG-NEXT: str x0, [x1]
5017 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld2r:
5018 ; CHECK-GISEL: ; %bb.0:
5019 ; CHECK-GISEL-NEXT: ld2r.2s { v0, v1 }, [x0]
5020 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
5021 ; CHECK-GISEL-NEXT: str x8, [x1]
5022 ; CHECK-GISEL-NEXT: ret
5023 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2r.v2f32.p0(ptr %A)
5024 %tmp = getelementptr float, ptr %A, i64 %inc
5025 store ptr %tmp, ptr %ptr
5026 ret { <2 x float>, <2 x float> } %ld2
5029 declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2r.v2f32.p0(ptr) nounwind readonly
5032 define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
5033 ; SDAG-LABEL: test_v2f64_post_imm_ld2r:
5035 ; SDAG-NEXT: ld2r.2d { v0, v1 }, [x0], #16
5036 ; SDAG-NEXT: str x0, [x1]
5039 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld2r:
5040 ; CHECK-GISEL: ; %bb.0:
5041 ; CHECK-GISEL-NEXT: ld2r.2d { v0, v1 }, [x0]
5042 ; CHECK-GISEL-NEXT: add x8, x0, #16
5043 ; CHECK-GISEL-NEXT: str x8, [x1]
5044 ; CHECK-GISEL-NEXT: ret
5045 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2r.v2f64.p0(ptr %A)
5046 %tmp = getelementptr double, ptr %A, i32 2
5047 store ptr %tmp, ptr %ptr
5048 ret { <2 x double>, <2 x double> } %ld2
5051 define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5052 ; SDAG-LABEL: test_v2f64_post_reg_ld2r:
5054 ; SDAG-NEXT: lsl x8, x2, #3
5055 ; SDAG-NEXT: ld2r.2d { v0, v1 }, [x0], x8
5056 ; SDAG-NEXT: str x0, [x1]
5059 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld2r:
5060 ; CHECK-GISEL: ; %bb.0:
5061 ; CHECK-GISEL-NEXT: ld2r.2d { v0, v1 }, [x0]
5062 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
5063 ; CHECK-GISEL-NEXT: str x8, [x1]
5064 ; CHECK-GISEL-NEXT: ret
5065 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2r.v2f64.p0(ptr %A)
5066 %tmp = getelementptr double, ptr %A, i64 %inc
5067 store ptr %tmp, ptr %ptr
5068 ret { <2 x double>, <2 x double> } %ld2
5071 declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2r.v2f64.p0(ptr) nounwind readonly
5073 define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
5074 ; SDAG-LABEL: test_v1f64_post_imm_ld2r:
5076 ; SDAG-NEXT: ld2r.1d { v0, v1 }, [x0], #16
5077 ; SDAG-NEXT: str x0, [x1]
5080 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld2r:
5081 ; CHECK-GISEL: ; %bb.0:
5082 ; CHECK-GISEL-NEXT: ld2r.1d { v0, v1 }, [x0]
5083 ; CHECK-GISEL-NEXT: add x8, x0, #16
5084 ; CHECK-GISEL-NEXT: str x8, [x1]
5085 ; CHECK-GISEL-NEXT: ret
5086 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2r.v1f64.p0(ptr %A)
5087 %tmp = getelementptr double, ptr %A, i32 2
5088 store ptr %tmp, ptr %ptr
5089 ret { <1 x double>, <1 x double> } %ld2
5092 define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5093 ; SDAG-LABEL: test_v1f64_post_reg_ld2r:
5095 ; SDAG-NEXT: lsl x8, x2, #3
5096 ; SDAG-NEXT: ld2r.1d { v0, v1 }, [x0], x8
5097 ; SDAG-NEXT: str x0, [x1]
5100 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld2r:
5101 ; CHECK-GISEL: ; %bb.0:
5102 ; CHECK-GISEL-NEXT: ld2r.1d { v0, v1 }, [x0]
5103 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
5104 ; CHECK-GISEL-NEXT: str x8, [x1]
5105 ; CHECK-GISEL-NEXT: ret
5106 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2r.v1f64.p0(ptr %A)
5107 %tmp = getelementptr double, ptr %A, i64 %inc
5108 store ptr %tmp, ptr %ptr
5109 ret { <1 x double>, <1 x double> } %ld2
5112 declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2r.v1f64.p0(ptr) nounwind readonly
5115 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5116 ; SDAG-LABEL: test_v16i8_post_imm_ld3r:
5118 ; SDAG-NEXT: ld3r.16b { v0, v1, v2 }, [x0], #3
5119 ; SDAG-NEXT: str x0, [x1]
5122 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld3r:
5123 ; CHECK-GISEL: ; %bb.0:
5124 ; CHECK-GISEL-NEXT: ld3r.16b { v0, v1, v2 }, [x0]
5125 ; CHECK-GISEL-NEXT: add x8, x0, #3
5126 ; CHECK-GISEL-NEXT: str x8, [x1]
5127 ; CHECK-GISEL-NEXT: ret
5128 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0(ptr %A)
5129 %tmp = getelementptr i8, ptr %A, i32 3
5130 store ptr %tmp, ptr %ptr
5131 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
5134 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5135 ; SDAG-LABEL: test_v16i8_post_reg_ld3r:
5137 ; SDAG-NEXT: ld3r.16b { v0, v1, v2 }, [x0], x2
5138 ; SDAG-NEXT: str x0, [x1]
5141 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld3r:
5142 ; CHECK-GISEL: ; %bb.0:
5143 ; CHECK-GISEL-NEXT: ld3r.16b { v0, v1, v2 }, [x0]
5144 ; CHECK-GISEL-NEXT: add x8, x0, x2
5145 ; CHECK-GISEL-NEXT: str x8, [x1]
5146 ; CHECK-GISEL-NEXT: ret
5147 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0(ptr %A)
5148 %tmp = getelementptr i8, ptr %A, i64 %inc
5149 store ptr %tmp, ptr %ptr
5150 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
5153 declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0(ptr) nounwind readonly
5156 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5157 ; SDAG-LABEL: test_v8i8_post_imm_ld3r:
5159 ; SDAG-NEXT: ld3r.8b { v0, v1, v2 }, [x0], #3
5160 ; SDAG-NEXT: str x0, [x1]
5163 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld3r:
5164 ; CHECK-GISEL: ; %bb.0:
5165 ; CHECK-GISEL-NEXT: ld3r.8b { v0, v1, v2 }, [x0]
5166 ; CHECK-GISEL-NEXT: add x8, x0, #3
5167 ; CHECK-GISEL-NEXT: str x8, [x1]
5168 ; CHECK-GISEL-NEXT: ret
5169 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0(ptr %A)
5170 %tmp = getelementptr i8, ptr %A, i32 3
5171 store ptr %tmp, ptr %ptr
5172 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
5175 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5176 ; SDAG-LABEL: test_v8i8_post_reg_ld3r:
5178 ; SDAG-NEXT: ld3r.8b { v0, v1, v2 }, [x0], x2
5179 ; SDAG-NEXT: str x0, [x1]
5182 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld3r:
5183 ; CHECK-GISEL: ; %bb.0:
5184 ; CHECK-GISEL-NEXT: ld3r.8b { v0, v1, v2 }, [x0]
5185 ; CHECK-GISEL-NEXT: add x8, x0, x2
5186 ; CHECK-GISEL-NEXT: str x8, [x1]
5187 ; CHECK-GISEL-NEXT: ret
5188 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0(ptr %A)
5189 %tmp = getelementptr i8, ptr %A, i64 %inc
5190 store ptr %tmp, ptr %ptr
5191 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
5194 declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0(ptr) nounwind readonly
5197 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5198 ; SDAG-LABEL: test_v8i16_post_imm_ld3r:
5200 ; SDAG-NEXT: ld3r.8h { v0, v1, v2 }, [x0], #6
5201 ; SDAG-NEXT: str x0, [x1]
5204 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld3r:
5205 ; CHECK-GISEL: ; %bb.0:
5206 ; CHECK-GISEL-NEXT: ld3r.8h { v0, v1, v2 }, [x0]
5207 ; CHECK-GISEL-NEXT: add x8, x0, #6
5208 ; CHECK-GISEL-NEXT: str x8, [x1]
5209 ; CHECK-GISEL-NEXT: ret
5210 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0(ptr %A)
5211 %tmp = getelementptr i16, ptr %A, i32 3
5212 store ptr %tmp, ptr %ptr
5213 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
5216 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5217 ; SDAG-LABEL: test_v8i16_post_reg_ld3r:
5219 ; SDAG-NEXT: lsl x8, x2, #1
5220 ; SDAG-NEXT: ld3r.8h { v0, v1, v2 }, [x0], x8
5221 ; SDAG-NEXT: str x0, [x1]
5224 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld3r:
5225 ; CHECK-GISEL: ; %bb.0:
5226 ; CHECK-GISEL-NEXT: ld3r.8h { v0, v1, v2 }, [x0]
5227 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
5228 ; CHECK-GISEL-NEXT: str x8, [x1]
5229 ; CHECK-GISEL-NEXT: ret
5230 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0(ptr %A)
5231 %tmp = getelementptr i16, ptr %A, i64 %inc
5232 store ptr %tmp, ptr %ptr
5233 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
5236 declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0(ptr) nounwind readonly
5239 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5240 ; SDAG-LABEL: test_v4i16_post_imm_ld3r:
5242 ; SDAG-NEXT: ld3r.4h { v0, v1, v2 }, [x0], #6
5243 ; SDAG-NEXT: str x0, [x1]
5246 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld3r:
5247 ; CHECK-GISEL: ; %bb.0:
5248 ; CHECK-GISEL-NEXT: ld3r.4h { v0, v1, v2 }, [x0]
5249 ; CHECK-GISEL-NEXT: add x8, x0, #6
5250 ; CHECK-GISEL-NEXT: str x8, [x1]
5251 ; CHECK-GISEL-NEXT: ret
5252 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0(ptr %A)
5253 %tmp = getelementptr i16, ptr %A, i32 3
5254 store ptr %tmp, ptr %ptr
5255 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
5258 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5259 ; SDAG-LABEL: test_v4i16_post_reg_ld3r:
5261 ; SDAG-NEXT: lsl x8, x2, #1
5262 ; SDAG-NEXT: ld3r.4h { v0, v1, v2 }, [x0], x8
5263 ; SDAG-NEXT: str x0, [x1]
5266 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld3r:
5267 ; CHECK-GISEL: ; %bb.0:
5268 ; CHECK-GISEL-NEXT: ld3r.4h { v0, v1, v2 }, [x0]
5269 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
5270 ; CHECK-GISEL-NEXT: str x8, [x1]
5271 ; CHECK-GISEL-NEXT: ret
5272 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0(ptr %A)
5273 %tmp = getelementptr i16, ptr %A, i64 %inc
5274 store ptr %tmp, ptr %ptr
5275 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
5278 declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0(ptr) nounwind readonly
5281 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5282 ; SDAG-LABEL: test_v4i32_post_imm_ld3r:
5284 ; SDAG-NEXT: ld3r.4s { v0, v1, v2 }, [x0], #12
5285 ; SDAG-NEXT: str x0, [x1]
5288 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld3r:
5289 ; CHECK-GISEL: ; %bb.0:
5290 ; CHECK-GISEL-NEXT: ld3r.4s { v0, v1, v2 }, [x0]
5291 ; CHECK-GISEL-NEXT: add x8, x0, #12
5292 ; CHECK-GISEL-NEXT: str x8, [x1]
5293 ; CHECK-GISEL-NEXT: ret
5294 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0(ptr %A)
5295 %tmp = getelementptr i32, ptr %A, i32 3
5296 store ptr %tmp, ptr %ptr
5297 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
5300 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5301 ; SDAG-LABEL: test_v4i32_post_reg_ld3r:
5303 ; SDAG-NEXT: lsl x8, x2, #2
5304 ; SDAG-NEXT: ld3r.4s { v0, v1, v2 }, [x0], x8
5305 ; SDAG-NEXT: str x0, [x1]
5308 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld3r:
5309 ; CHECK-GISEL: ; %bb.0:
5310 ; CHECK-GISEL-NEXT: ld3r.4s { v0, v1, v2 }, [x0]
5311 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
5312 ; CHECK-GISEL-NEXT: str x8, [x1]
5313 ; CHECK-GISEL-NEXT: ret
5314 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0(ptr %A)
5315 %tmp = getelementptr i32, ptr %A, i64 %inc
5316 store ptr %tmp, ptr %ptr
5317 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
5320 declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0(ptr) nounwind readonly
5322 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5323 ; SDAG-LABEL: test_v2i32_post_imm_ld3r:
5325 ; SDAG-NEXT: ld3r.2s { v0, v1, v2 }, [x0], #12
5326 ; SDAG-NEXT: str x0, [x1]
5329 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld3r:
5330 ; CHECK-GISEL: ; %bb.0:
5331 ; CHECK-GISEL-NEXT: ld3r.2s { v0, v1, v2 }, [x0]
5332 ; CHECK-GISEL-NEXT: add x8, x0, #12
5333 ; CHECK-GISEL-NEXT: str x8, [x1]
5334 ; CHECK-GISEL-NEXT: ret
5335 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0(ptr %A)
5336 %tmp = getelementptr i32, ptr %A, i32 3
5337 store ptr %tmp, ptr %ptr
5338 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
5341 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5342 ; SDAG-LABEL: test_v2i32_post_reg_ld3r:
5344 ; SDAG-NEXT: lsl x8, x2, #2
5345 ; SDAG-NEXT: ld3r.2s { v0, v1, v2 }, [x0], x8
5346 ; SDAG-NEXT: str x0, [x1]
5349 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld3r:
5350 ; CHECK-GISEL: ; %bb.0:
5351 ; CHECK-GISEL-NEXT: ld3r.2s { v0, v1, v2 }, [x0]
5352 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
5353 ; CHECK-GISEL-NEXT: str x8, [x1]
5354 ; CHECK-GISEL-NEXT: ret
5355 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0(ptr %A)
5356 %tmp = getelementptr i32, ptr %A, i64 %inc
5357 store ptr %tmp, ptr %ptr
5358 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
5361 declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0(ptr) nounwind readonly
5364 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5365 ; SDAG-LABEL: test_v2i64_post_imm_ld3r:
5367 ; SDAG-NEXT: ld3r.2d { v0, v1, v2 }, [x0], #24
5368 ; SDAG-NEXT: str x0, [x1]
5371 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld3r:
5372 ; CHECK-GISEL: ; %bb.0:
5373 ; CHECK-GISEL-NEXT: ld3r.2d { v0, v1, v2 }, [x0]
5374 ; CHECK-GISEL-NEXT: add x8, x0, #24
5375 ; CHECK-GISEL-NEXT: str x8, [x1]
5376 ; CHECK-GISEL-NEXT: ret
5377 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0(ptr %A)
5378 %tmp = getelementptr i64, ptr %A, i32 3
5379 store ptr %tmp, ptr %ptr
5380 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
5383 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5384 ; SDAG-LABEL: test_v2i64_post_reg_ld3r:
5386 ; SDAG-NEXT: lsl x8, x2, #3
5387 ; SDAG-NEXT: ld3r.2d { v0, v1, v2 }, [x0], x8
5388 ; SDAG-NEXT: str x0, [x1]
5391 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld3r:
5392 ; CHECK-GISEL: ; %bb.0:
5393 ; CHECK-GISEL-NEXT: ld3r.2d { v0, v1, v2 }, [x0]
5394 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
5395 ; CHECK-GISEL-NEXT: str x8, [x1]
5396 ; CHECK-GISEL-NEXT: ret
5397 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0(ptr %A)
5398 %tmp = getelementptr i64, ptr %A, i64 %inc
5399 store ptr %tmp, ptr %ptr
5400 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
5403 declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0(ptr) nounwind readonly
5405 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5406 ; SDAG-LABEL: test_v1i64_post_imm_ld3r:
5408 ; SDAG-NEXT: ld3r.1d { v0, v1, v2 }, [x0], #24
5409 ; SDAG-NEXT: str x0, [x1]
5412 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld3r:
5413 ; CHECK-GISEL: ; %bb.0:
5414 ; CHECK-GISEL-NEXT: ld3r.1d { v0, v1, v2 }, [x0]
5415 ; CHECK-GISEL-NEXT: add x8, x0, #24
5416 ; CHECK-GISEL-NEXT: str x8, [x1]
5417 ; CHECK-GISEL-NEXT: ret
5418 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0(ptr %A)
5419 %tmp = getelementptr i64, ptr %A, i32 3
5420 store ptr %tmp, ptr %ptr
5421 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
5424 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5425 ; SDAG-LABEL: test_v1i64_post_reg_ld3r:
5427 ; SDAG-NEXT: lsl x8, x2, #3
5428 ; SDAG-NEXT: ld3r.1d { v0, v1, v2 }, [x0], x8
5429 ; SDAG-NEXT: str x0, [x1]
5432 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld3r:
5433 ; CHECK-GISEL: ; %bb.0:
5434 ; CHECK-GISEL-NEXT: ld3r.1d { v0, v1, v2 }, [x0]
5435 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
5436 ; CHECK-GISEL-NEXT: str x8, [x1]
5437 ; CHECK-GISEL-NEXT: ret
5438 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0(ptr %A)
5439 %tmp = getelementptr i64, ptr %A, i64 %inc
5440 store ptr %tmp, ptr %ptr
5441 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
5444 declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0(ptr) nounwind readonly
5447 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5448 ; SDAG-LABEL: test_v4f32_post_imm_ld3r:
5450 ; SDAG-NEXT: ld3r.4s { v0, v1, v2 }, [x0], #12
5451 ; SDAG-NEXT: str x0, [x1]
5454 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld3r:
5455 ; CHECK-GISEL: ; %bb.0:
5456 ; CHECK-GISEL-NEXT: ld3r.4s { v0, v1, v2 }, [x0]
5457 ; CHECK-GISEL-NEXT: add x8, x0, #12
5458 ; CHECK-GISEL-NEXT: str x8, [x1]
5459 ; CHECK-GISEL-NEXT: ret
5460 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3r.v4f32.p0(ptr %A)
5461 %tmp = getelementptr float, ptr %A, i32 3
5462 store ptr %tmp, ptr %ptr
5463 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
5466 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5467 ; SDAG-LABEL: test_v4f32_post_reg_ld3r:
5469 ; SDAG-NEXT: lsl x8, x2, #2
5470 ; SDAG-NEXT: ld3r.4s { v0, v1, v2 }, [x0], x8
5471 ; SDAG-NEXT: str x0, [x1]
5474 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld3r:
5475 ; CHECK-GISEL: ; %bb.0:
5476 ; CHECK-GISEL-NEXT: ld3r.4s { v0, v1, v2 }, [x0]
5477 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
5478 ; CHECK-GISEL-NEXT: str x8, [x1]
5479 ; CHECK-GISEL-NEXT: ret
5480 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3r.v4f32.p0(ptr %A)
5481 %tmp = getelementptr float, ptr %A, i64 %inc
5482 store ptr %tmp, ptr %ptr
5483 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
5486 declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3r.v4f32.p0(ptr) nounwind readonly
5488 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5489 ; SDAG-LABEL: test_v2f32_post_imm_ld3r:
5491 ; SDAG-NEXT: ld3r.2s { v0, v1, v2 }, [x0], #12
5492 ; SDAG-NEXT: str x0, [x1]
5495 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld3r:
5496 ; CHECK-GISEL: ; %bb.0:
5497 ; CHECK-GISEL-NEXT: ld3r.2s { v0, v1, v2 }, [x0]
5498 ; CHECK-GISEL-NEXT: add x8, x0, #12
5499 ; CHECK-GISEL-NEXT: str x8, [x1]
5500 ; CHECK-GISEL-NEXT: ret
5501 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3r.v2f32.p0(ptr %A)
5502 %tmp = getelementptr float, ptr %A, i32 3
5503 store ptr %tmp, ptr %ptr
5504 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
5507 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5508 ; SDAG-LABEL: test_v2f32_post_reg_ld3r:
5510 ; SDAG-NEXT: lsl x8, x2, #2
5511 ; SDAG-NEXT: ld3r.2s { v0, v1, v2 }, [x0], x8
5512 ; SDAG-NEXT: str x0, [x1]
5515 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld3r:
5516 ; CHECK-GISEL: ; %bb.0:
5517 ; CHECK-GISEL-NEXT: ld3r.2s { v0, v1, v2 }, [x0]
5518 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
5519 ; CHECK-GISEL-NEXT: str x8, [x1]
5520 ; CHECK-GISEL-NEXT: ret
5521 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3r.v2f32.p0(ptr %A)
5522 %tmp = getelementptr float, ptr %A, i64 %inc
5523 store ptr %tmp, ptr %ptr
5524 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
5527 declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3r.v2f32.p0(ptr) nounwind readonly
5530 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5531 ; SDAG-LABEL: test_v2f64_post_imm_ld3r:
5533 ; SDAG-NEXT: ld3r.2d { v0, v1, v2 }, [x0], #24
5534 ; SDAG-NEXT: str x0, [x1]
5537 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld3r:
5538 ; CHECK-GISEL: ; %bb.0:
5539 ; CHECK-GISEL-NEXT: ld3r.2d { v0, v1, v2 }, [x0]
5540 ; CHECK-GISEL-NEXT: add x8, x0, #24
5541 ; CHECK-GISEL-NEXT: str x8, [x1]
5542 ; CHECK-GISEL-NEXT: ret
5543 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3r.v2f64.p0(ptr %A)
5544 %tmp = getelementptr double, ptr %A, i32 3
5545 store ptr %tmp, ptr %ptr
5546 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
5549 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5550 ; SDAG-LABEL: test_v2f64_post_reg_ld3r:
5552 ; SDAG-NEXT: lsl x8, x2, #3
5553 ; SDAG-NEXT: ld3r.2d { v0, v1, v2 }, [x0], x8
5554 ; SDAG-NEXT: str x0, [x1]
5557 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld3r:
5558 ; CHECK-GISEL: ; %bb.0:
5559 ; CHECK-GISEL-NEXT: ld3r.2d { v0, v1, v2 }, [x0]
5560 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
5561 ; CHECK-GISEL-NEXT: str x8, [x1]
5562 ; CHECK-GISEL-NEXT: ret
5563 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3r.v2f64.p0(ptr %A)
5564 %tmp = getelementptr double, ptr %A, i64 %inc
5565 store ptr %tmp, ptr %ptr
5566 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
5569 declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3r.v2f64.p0(ptr) nounwind readonly
5571 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
5572 ; SDAG-LABEL: test_v1f64_post_imm_ld3r:
5574 ; SDAG-NEXT: ld3r.1d { v0, v1, v2 }, [x0], #24
5575 ; SDAG-NEXT: str x0, [x1]
5578 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld3r:
5579 ; CHECK-GISEL: ; %bb.0:
5580 ; CHECK-GISEL-NEXT: ld3r.1d { v0, v1, v2 }, [x0]
5581 ; CHECK-GISEL-NEXT: add x8, x0, #24
5582 ; CHECK-GISEL-NEXT: str x8, [x1]
5583 ; CHECK-GISEL-NEXT: ret
5584 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3r.v1f64.p0(ptr %A)
5585 %tmp = getelementptr double, ptr %A, i32 3
5586 store ptr %tmp, ptr %ptr
5587 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
5590 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5591 ; SDAG-LABEL: test_v1f64_post_reg_ld3r:
5593 ; SDAG-NEXT: lsl x8, x2, #3
5594 ; SDAG-NEXT: ld3r.1d { v0, v1, v2 }, [x0], x8
5595 ; SDAG-NEXT: str x0, [x1]
5598 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld3r:
5599 ; CHECK-GISEL: ; %bb.0:
5600 ; CHECK-GISEL-NEXT: ld3r.1d { v0, v1, v2 }, [x0]
5601 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
5602 ; CHECK-GISEL-NEXT: str x8, [x1]
5603 ; CHECK-GISEL-NEXT: ret
5604 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3r.v1f64.p0(ptr %A)
5605 %tmp = getelementptr double, ptr %A, i64 %inc
5606 store ptr %tmp, ptr %ptr
5607 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
5610 declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3r.v1f64.p0(ptr) nounwind readonly
5613 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
5614 ; SDAG-LABEL: test_v16i8_post_imm_ld4r:
5616 ; SDAG-NEXT: ld4r.16b { v0, v1, v2, v3 }, [x0], #4
5617 ; SDAG-NEXT: str x0, [x1]
5620 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld4r:
5621 ; CHECK-GISEL: ; %bb.0:
5622 ; CHECK-GISEL-NEXT: ld4r.16b { v0, v1, v2, v3 }, [x0]
5623 ; CHECK-GISEL-NEXT: add x8, x0, #4
5624 ; CHECK-GISEL-NEXT: str x8, [x1]
5625 ; CHECK-GISEL-NEXT: ret
5626 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0(ptr %A)
5627 %tmp = getelementptr i8, ptr %A, i32 4
5628 store ptr %tmp, ptr %ptr
5629 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
5632 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5633 ; SDAG-LABEL: test_v16i8_post_reg_ld4r:
5635 ; SDAG-NEXT: ld4r.16b { v0, v1, v2, v3 }, [x0], x2
5636 ; SDAG-NEXT: str x0, [x1]
5639 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld4r:
5640 ; CHECK-GISEL: ; %bb.0:
5641 ; CHECK-GISEL-NEXT: ld4r.16b { v0, v1, v2, v3 }, [x0]
5642 ; CHECK-GISEL-NEXT: add x8, x0, x2
5643 ; CHECK-GISEL-NEXT: str x8, [x1]
5644 ; CHECK-GISEL-NEXT: ret
5645 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0(ptr %A)
5646 %tmp = getelementptr i8, ptr %A, i64 %inc
5647 store ptr %tmp, ptr %ptr
5648 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
5651 declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0(ptr) nounwind readonly
5654 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
5655 ; SDAG-LABEL: test_v8i8_post_imm_ld4r:
5657 ; SDAG-NEXT: ld4r.8b { v0, v1, v2, v3 }, [x0], #4
5658 ; SDAG-NEXT: str x0, [x1]
5661 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld4r:
5662 ; CHECK-GISEL: ; %bb.0:
5663 ; CHECK-GISEL-NEXT: ld4r.8b { v0, v1, v2, v3 }, [x0]
5664 ; CHECK-GISEL-NEXT: add x8, x0, #4
5665 ; CHECK-GISEL-NEXT: str x8, [x1]
5666 ; CHECK-GISEL-NEXT: ret
5667 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0(ptr %A)
5668 %tmp = getelementptr i8, ptr %A, i32 4
5669 store ptr %tmp, ptr %ptr
5670 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
5673 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5674 ; SDAG-LABEL: test_v8i8_post_reg_ld4r:
5676 ; SDAG-NEXT: ld4r.8b { v0, v1, v2, v3 }, [x0], x2
5677 ; SDAG-NEXT: str x0, [x1]
5680 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld4r:
5681 ; CHECK-GISEL: ; %bb.0:
5682 ; CHECK-GISEL-NEXT: ld4r.8b { v0, v1, v2, v3 }, [x0]
5683 ; CHECK-GISEL-NEXT: add x8, x0, x2
5684 ; CHECK-GISEL-NEXT: str x8, [x1]
5685 ; CHECK-GISEL-NEXT: ret
5686 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0(ptr %A)
5687 %tmp = getelementptr i8, ptr %A, i64 %inc
5688 store ptr %tmp, ptr %ptr
5689 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
5692 declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0(ptr) nounwind readonly
5695 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
5696 ; SDAG-LABEL: test_v8i16_post_imm_ld4r:
5698 ; SDAG-NEXT: ld4r.8h { v0, v1, v2, v3 }, [x0], #8
5699 ; SDAG-NEXT: str x0, [x1]
5702 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld4r:
5703 ; CHECK-GISEL: ; %bb.0:
5704 ; CHECK-GISEL-NEXT: ld4r.8h { v0, v1, v2, v3 }, [x0]
5705 ; CHECK-GISEL-NEXT: add x8, x0, #8
5706 ; CHECK-GISEL-NEXT: str x8, [x1]
5707 ; CHECK-GISEL-NEXT: ret
5708 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0(ptr %A)
5709 %tmp = getelementptr i16, ptr %A, i32 4
5710 store ptr %tmp, ptr %ptr
5711 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
5714 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5715 ; SDAG-LABEL: test_v8i16_post_reg_ld4r:
5717 ; SDAG-NEXT: lsl x8, x2, #1
5718 ; SDAG-NEXT: ld4r.8h { v0, v1, v2, v3 }, [x0], x8
5719 ; SDAG-NEXT: str x0, [x1]
5722 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld4r:
5723 ; CHECK-GISEL: ; %bb.0:
5724 ; CHECK-GISEL-NEXT: ld4r.8h { v0, v1, v2, v3 }, [x0]
5725 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
5726 ; CHECK-GISEL-NEXT: str x8, [x1]
5727 ; CHECK-GISEL-NEXT: ret
5728 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0(ptr %A)
5729 %tmp = getelementptr i16, ptr %A, i64 %inc
5730 store ptr %tmp, ptr %ptr
5731 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
5734 declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0(ptr) nounwind readonly
5737 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
5738 ; SDAG-LABEL: test_v4i16_post_imm_ld4r:
5740 ; SDAG-NEXT: ld4r.4h { v0, v1, v2, v3 }, [x0], #8
5741 ; SDAG-NEXT: str x0, [x1]
5744 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld4r:
5745 ; CHECK-GISEL: ; %bb.0:
5746 ; CHECK-GISEL-NEXT: ld4r.4h { v0, v1, v2, v3 }, [x0]
5747 ; CHECK-GISEL-NEXT: add x8, x0, #8
5748 ; CHECK-GISEL-NEXT: str x8, [x1]
5749 ; CHECK-GISEL-NEXT: ret
5750 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0(ptr %A)
5751 %tmp = getelementptr i16, ptr %A, i32 4
5752 store ptr %tmp, ptr %ptr
5753 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
5756 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5757 ; SDAG-LABEL: test_v4i16_post_reg_ld4r:
5759 ; SDAG-NEXT: lsl x8, x2, #1
5760 ; SDAG-NEXT: ld4r.4h { v0, v1, v2, v3 }, [x0], x8
5761 ; SDAG-NEXT: str x0, [x1]
5764 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld4r:
5765 ; CHECK-GISEL: ; %bb.0:
5766 ; CHECK-GISEL-NEXT: ld4r.4h { v0, v1, v2, v3 }, [x0]
5767 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
5768 ; CHECK-GISEL-NEXT: str x8, [x1]
5769 ; CHECK-GISEL-NEXT: ret
5770 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0(ptr %A)
5771 %tmp = getelementptr i16, ptr %A, i64 %inc
5772 store ptr %tmp, ptr %ptr
5773 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
5776 declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0(ptr) nounwind readonly
5779 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
5780 ; SDAG-LABEL: test_v4i32_post_imm_ld4r:
5782 ; SDAG-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0], #16
5783 ; SDAG-NEXT: str x0, [x1]
5786 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld4r:
5787 ; CHECK-GISEL: ; %bb.0:
5788 ; CHECK-GISEL-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0]
5789 ; CHECK-GISEL-NEXT: add x8, x0, #16
5790 ; CHECK-GISEL-NEXT: str x8, [x1]
5791 ; CHECK-GISEL-NEXT: ret
5792 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0(ptr %A)
5793 %tmp = getelementptr i32, ptr %A, i32 4
5794 store ptr %tmp, ptr %ptr
5795 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
5798 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5799 ; SDAG-LABEL: test_v4i32_post_reg_ld4r:
5801 ; SDAG-NEXT: lsl x8, x2, #2
5802 ; SDAG-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0], x8
5803 ; SDAG-NEXT: str x0, [x1]
5806 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld4r:
5807 ; CHECK-GISEL: ; %bb.0:
5808 ; CHECK-GISEL-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0]
5809 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
5810 ; CHECK-GISEL-NEXT: str x8, [x1]
5811 ; CHECK-GISEL-NEXT: ret
5812 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0(ptr %A)
5813 %tmp = getelementptr i32, ptr %A, i64 %inc
5814 store ptr %tmp, ptr %ptr
5815 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
5818 declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0(ptr) nounwind readonly
5820 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
5821 ; SDAG-LABEL: test_v2i32_post_imm_ld4r:
5823 ; SDAG-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0], #16
5824 ; SDAG-NEXT: str x0, [x1]
5827 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld4r:
5828 ; CHECK-GISEL: ; %bb.0:
5829 ; CHECK-GISEL-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0]
5830 ; CHECK-GISEL-NEXT: add x8, x0, #16
5831 ; CHECK-GISEL-NEXT: str x8, [x1]
5832 ; CHECK-GISEL-NEXT: ret
5833 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0(ptr %A)
5834 %tmp = getelementptr i32, ptr %A, i32 4
5835 store ptr %tmp, ptr %ptr
5836 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
5839 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5840 ; SDAG-LABEL: test_v2i32_post_reg_ld4r:
5842 ; SDAG-NEXT: lsl x8, x2, #2
5843 ; SDAG-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0], x8
5844 ; SDAG-NEXT: str x0, [x1]
5847 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld4r:
5848 ; CHECK-GISEL: ; %bb.0:
5849 ; CHECK-GISEL-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0]
5850 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
5851 ; CHECK-GISEL-NEXT: str x8, [x1]
5852 ; CHECK-GISEL-NEXT: ret
5853 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0(ptr %A)
5854 %tmp = getelementptr i32, ptr %A, i64 %inc
5855 store ptr %tmp, ptr %ptr
5856 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
5859 declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0(ptr) nounwind readonly
5862 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
5863 ; SDAG-LABEL: test_v2i64_post_imm_ld4r:
5865 ; SDAG-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0], #32
5866 ; SDAG-NEXT: str x0, [x1]
5869 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld4r:
5870 ; CHECK-GISEL: ; %bb.0:
5871 ; CHECK-GISEL-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0]
5872 ; CHECK-GISEL-NEXT: add x8, x0, #32
5873 ; CHECK-GISEL-NEXT: str x8, [x1]
5874 ; CHECK-GISEL-NEXT: ret
5875 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0(ptr %A)
5876 %tmp = getelementptr i64, ptr %A, i32 4
5877 store ptr %tmp, ptr %ptr
5878 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
5881 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5882 ; SDAG-LABEL: test_v2i64_post_reg_ld4r:
5884 ; SDAG-NEXT: lsl x8, x2, #3
5885 ; SDAG-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0], x8
5886 ; SDAG-NEXT: str x0, [x1]
5889 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld4r:
5890 ; CHECK-GISEL: ; %bb.0:
5891 ; CHECK-GISEL-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0]
5892 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
5893 ; CHECK-GISEL-NEXT: str x8, [x1]
5894 ; CHECK-GISEL-NEXT: ret
5895 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0(ptr %A)
5896 %tmp = getelementptr i64, ptr %A, i64 %inc
5897 store ptr %tmp, ptr %ptr
5898 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
5901 declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0(ptr) nounwind readonly
5903 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
5904 ; SDAG-LABEL: test_v1i64_post_imm_ld4r:
5906 ; SDAG-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0], #32
5907 ; SDAG-NEXT: str x0, [x1]
5910 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld4r:
5911 ; CHECK-GISEL: ; %bb.0:
5912 ; CHECK-GISEL-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0]
5913 ; CHECK-GISEL-NEXT: add x8, x0, #32
5914 ; CHECK-GISEL-NEXT: str x8, [x1]
5915 ; CHECK-GISEL-NEXT: ret
5916 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0(ptr %A)
5917 %tmp = getelementptr i64, ptr %A, i32 4
5918 store ptr %tmp, ptr %ptr
5919 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
5922 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5923 ; SDAG-LABEL: test_v1i64_post_reg_ld4r:
5925 ; SDAG-NEXT: lsl x8, x2, #3
5926 ; SDAG-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0], x8
5927 ; SDAG-NEXT: str x0, [x1]
5930 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld4r:
5931 ; CHECK-GISEL: ; %bb.0:
5932 ; CHECK-GISEL-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0]
5933 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
5934 ; CHECK-GISEL-NEXT: str x8, [x1]
5935 ; CHECK-GISEL-NEXT: ret
5936 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0(ptr %A)
5937 %tmp = getelementptr i64, ptr %A, i64 %inc
5938 store ptr %tmp, ptr %ptr
5939 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
5942 declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0(ptr) nounwind readonly
5945 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
5946 ; SDAG-LABEL: test_v4f32_post_imm_ld4r:
5948 ; SDAG-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0], #16
5949 ; SDAG-NEXT: str x0, [x1]
5952 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld4r:
5953 ; CHECK-GISEL: ; %bb.0:
5954 ; CHECK-GISEL-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0]
5955 ; CHECK-GISEL-NEXT: add x8, x0, #16
5956 ; CHECK-GISEL-NEXT: str x8, [x1]
5957 ; CHECK-GISEL-NEXT: ret
5958 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4r.v4f32.p0(ptr %A)
5959 %tmp = getelementptr float, ptr %A, i32 4
5960 store ptr %tmp, ptr %ptr
5961 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
5964 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
5965 ; SDAG-LABEL: test_v4f32_post_reg_ld4r:
5967 ; SDAG-NEXT: lsl x8, x2, #2
5968 ; SDAG-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0], x8
5969 ; SDAG-NEXT: str x0, [x1]
5972 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld4r:
5973 ; CHECK-GISEL: ; %bb.0:
5974 ; CHECK-GISEL-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0]
5975 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
5976 ; CHECK-GISEL-NEXT: str x8, [x1]
5977 ; CHECK-GISEL-NEXT: ret
5978 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4r.v4f32.p0(ptr %A)
5979 %tmp = getelementptr float, ptr %A, i64 %inc
5980 store ptr %tmp, ptr %ptr
5981 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
5984 declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4r.v4f32.p0(ptr) nounwind readonly
5986 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
5987 ; SDAG-LABEL: test_v2f32_post_imm_ld4r:
5989 ; SDAG-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0], #16
5990 ; SDAG-NEXT: str x0, [x1]
5993 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld4r:
5994 ; CHECK-GISEL: ; %bb.0:
5995 ; CHECK-GISEL-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0]
5996 ; CHECK-GISEL-NEXT: add x8, x0, #16
5997 ; CHECK-GISEL-NEXT: str x8, [x1]
5998 ; CHECK-GISEL-NEXT: ret
5999 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4r.v2f32.p0(ptr %A)
6000 %tmp = getelementptr float, ptr %A, i32 4
6001 store ptr %tmp, ptr %ptr
6002 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
6005 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
6006 ; SDAG-LABEL: test_v2f32_post_reg_ld4r:
6008 ; SDAG-NEXT: lsl x8, x2, #2
6009 ; SDAG-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0], x8
6010 ; SDAG-NEXT: str x0, [x1]
6013 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld4r:
6014 ; CHECK-GISEL: ; %bb.0:
6015 ; CHECK-GISEL-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0]
6016 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
6017 ; CHECK-GISEL-NEXT: str x8, [x1]
6018 ; CHECK-GISEL-NEXT: ret
6019 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4r.v2f32.p0(ptr %A)
6020 %tmp = getelementptr float, ptr %A, i64 %inc
6021 store ptr %tmp, ptr %ptr
6022 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
6025 declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4r.v2f32.p0(ptr) nounwind readonly
6028 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
6029 ; SDAG-LABEL: test_v2f64_post_imm_ld4r:
6031 ; SDAG-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0], #32
6032 ; SDAG-NEXT: str x0, [x1]
6035 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld4r:
6036 ; CHECK-GISEL: ; %bb.0:
6037 ; CHECK-GISEL-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0]
6038 ; CHECK-GISEL-NEXT: add x8, x0, #32
6039 ; CHECK-GISEL-NEXT: str x8, [x1]
6040 ; CHECK-GISEL-NEXT: ret
6041 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4r.v2f64.p0(ptr %A)
6042 %tmp = getelementptr double, ptr %A, i32 4
6043 store ptr %tmp, ptr %ptr
6044 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
6047 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
6048 ; SDAG-LABEL: test_v2f64_post_reg_ld4r:
6050 ; SDAG-NEXT: lsl x8, x2, #3
6051 ; SDAG-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0], x8
6052 ; SDAG-NEXT: str x0, [x1]
6055 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld4r:
6056 ; CHECK-GISEL: ; %bb.0:
6057 ; CHECK-GISEL-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0]
6058 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
6059 ; CHECK-GISEL-NEXT: str x8, [x1]
6060 ; CHECK-GISEL-NEXT: ret
6061 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4r.v2f64.p0(ptr %A)
6062 %tmp = getelementptr double, ptr %A, i64 %inc
6063 store ptr %tmp, ptr %ptr
6064 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
6067 declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4r.v2f64.p0(ptr) nounwind readonly
6069 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
6070 ; SDAG-LABEL: test_v1f64_post_imm_ld4r:
6072 ; SDAG-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0], #32
6073 ; SDAG-NEXT: str x0, [x1]
6076 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld4r:
6077 ; CHECK-GISEL: ; %bb.0:
6078 ; CHECK-GISEL-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0]
6079 ; CHECK-GISEL-NEXT: add x8, x0, #32
6080 ; CHECK-GISEL-NEXT: str x8, [x1]
6081 ; CHECK-GISEL-NEXT: ret
6082 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4r.v1f64.p0(ptr %A)
6083 %tmp = getelementptr double, ptr %A, i32 4
6084 store ptr %tmp, ptr %ptr
6085 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
6088 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
6089 ; SDAG-LABEL: test_v1f64_post_reg_ld4r:
6091 ; SDAG-NEXT: lsl x8, x2, #3
6092 ; SDAG-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0], x8
6093 ; SDAG-NEXT: str x0, [x1]
6096 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld4r:
6097 ; CHECK-GISEL: ; %bb.0:
6098 ; CHECK-GISEL-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0]
6099 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
6100 ; CHECK-GISEL-NEXT: str x8, [x1]
6101 ; CHECK-GISEL-NEXT: ret
6102 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4r.v1f64.p0(ptr %A)
6103 %tmp = getelementptr double, ptr %A, i64 %inc
6104 store ptr %tmp, ptr %ptr
6105 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
6108 declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4r.v1f64.p0(ptr) nounwind readonly
6111 define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld2lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
6112 ; SDAG-LABEL: test_v16i8_post_imm_ld2lane:
6114 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6115 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6116 ; SDAG-NEXT: ld2.b { v0, v1 }[0], [x0], #2
6117 ; SDAG-NEXT: str x0, [x1]
6120 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld2lane:
6121 ; CHECK-GISEL: ; %bb.0:
6122 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6123 ; CHECK-GISEL-NEXT: add x8, x0, #2
6124 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6125 ; CHECK-GISEL-NEXT: ld2.b { v0, v1 }[0], [x0]
6126 ; CHECK-GISEL-NEXT: str x8, [x1]
6127 ; CHECK-GISEL-NEXT: ret
6128 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, i64 0, ptr %A)
6129 %tmp = getelementptr i8, ptr %A, i32 2
6130 store ptr %tmp, ptr %ptr
6131 ret { <16 x i8>, <16 x i8> } %ld2
6134 define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <16 x i8> %B, <16 x i8> %C) nounwind {
6135 ; SDAG-LABEL: test_v16i8_post_reg_ld2lane:
6137 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6138 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6139 ; SDAG-NEXT: ld2.b { v0, v1 }[0], [x0], x2
6140 ; SDAG-NEXT: str x0, [x1]
6143 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld2lane:
6144 ; CHECK-GISEL: ; %bb.0:
6145 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6146 ; CHECK-GISEL-NEXT: add x8, x0, x2
6147 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6148 ; CHECK-GISEL-NEXT: ld2.b { v0, v1 }[0], [x0]
6149 ; CHECK-GISEL-NEXT: str x8, [x1]
6150 ; CHECK-GISEL-NEXT: ret
6151 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, i64 0, ptr %A)
6152 %tmp = getelementptr i8, ptr %A, i64 %inc
6153 store ptr %tmp, ptr %ptr
6154 ret { <16 x i8>, <16 x i8> } %ld2
6157 declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8>, <16 x i8>, i64, ptr) nounwind readonly
6160 define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld2lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
6161 ; SDAG-LABEL: test_v8i8_post_imm_ld2lane:
6163 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6164 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6165 ; SDAG-NEXT: ld2.b { v0, v1 }[0], [x0], #2
6166 ; SDAG-NEXT: str x0, [x1]
6169 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld2lane:
6170 ; CHECK-GISEL: ; %bb.0:
6171 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6172 ; CHECK-GISEL-NEXT: add x8, x0, #2
6173 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6174 ; CHECK-GISEL-NEXT: ld2.b { v0, v1 }[0], [x0]
6175 ; CHECK-GISEL-NEXT: str x8, [x1]
6176 ; CHECK-GISEL-NEXT: ret
6177 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, i64 0, ptr %A)
6178 %tmp = getelementptr i8, ptr %A, i32 2
6179 store ptr %tmp, ptr %ptr
6180 ret { <8 x i8>, <8 x i8> } %ld2
6183 define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <8 x i8> %B, <8 x i8> %C) nounwind {
6184 ; SDAG-LABEL: test_v8i8_post_reg_ld2lane:
6186 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6187 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6188 ; SDAG-NEXT: ld2.b { v0, v1 }[0], [x0], x2
6189 ; SDAG-NEXT: str x0, [x1]
6192 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld2lane:
6193 ; CHECK-GISEL: ; %bb.0:
6194 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6195 ; CHECK-GISEL-NEXT: add x8, x0, x2
6196 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6197 ; CHECK-GISEL-NEXT: ld2.b { v0, v1 }[0], [x0]
6198 ; CHECK-GISEL-NEXT: str x8, [x1]
6199 ; CHECK-GISEL-NEXT: ret
6200 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, i64 0, ptr %A)
6201 %tmp = getelementptr i8, ptr %A, i64 %inc
6202 store ptr %tmp, ptr %ptr
6203 ret { <8 x i8>, <8 x i8> } %ld2
6206 declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2lane.v8i8.p0(<8 x i8>, <8 x i8>, i64, ptr) nounwind readonly
6209 define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld2lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
6210 ; SDAG-LABEL: test_v8i16_post_imm_ld2lane:
6212 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6213 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6214 ; SDAG-NEXT: ld2.h { v0, v1 }[0], [x0], #4
6215 ; SDAG-NEXT: str x0, [x1]
6218 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld2lane:
6219 ; CHECK-GISEL: ; %bb.0:
6220 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6221 ; CHECK-GISEL-NEXT: add x8, x0, #4
6222 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6223 ; CHECK-GISEL-NEXT: ld2.h { v0, v1 }[0], [x0]
6224 ; CHECK-GISEL-NEXT: str x8, [x1]
6225 ; CHECK-GISEL-NEXT: ret
6226 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, i64 0, ptr %A)
6227 %tmp = getelementptr i16, ptr %A, i32 2
6228 store ptr %tmp, ptr %ptr
6229 ret { <8 x i16>, <8 x i16> } %ld2
6232 define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <8 x i16> %B, <8 x i16> %C) nounwind {
6233 ; SDAG-LABEL: test_v8i16_post_reg_ld2lane:
6235 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6236 ; SDAG-NEXT: lsl x8, x2, #1
6237 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6238 ; SDAG-NEXT: ld2.h { v0, v1 }[0], [x0], x8
6239 ; SDAG-NEXT: str x0, [x1]
6242 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld2lane:
6243 ; CHECK-GISEL: ; %bb.0:
6244 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6245 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
6246 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6247 ; CHECK-GISEL-NEXT: ld2.h { v0, v1 }[0], [x0]
6248 ; CHECK-GISEL-NEXT: str x8, [x1]
6249 ; CHECK-GISEL-NEXT: ret
6250 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, i64 0, ptr %A)
6251 %tmp = getelementptr i16, ptr %A, i64 %inc
6252 store ptr %tmp, ptr %ptr
6253 ret { <8 x i16>, <8 x i16> } %ld2
6256 declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16>, <8 x i16>, i64, ptr) nounwind readonly
6259 define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld2lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
6260 ; SDAG-LABEL: test_v4i16_post_imm_ld2lane:
6262 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6263 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6264 ; SDAG-NEXT: ld2.h { v0, v1 }[0], [x0], #4
6265 ; SDAG-NEXT: str x0, [x1]
6268 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld2lane:
6269 ; CHECK-GISEL: ; %bb.0:
6270 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6271 ; CHECK-GISEL-NEXT: add x8, x0, #4
6272 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6273 ; CHECK-GISEL-NEXT: ld2.h { v0, v1 }[0], [x0]
6274 ; CHECK-GISEL-NEXT: str x8, [x1]
6275 ; CHECK-GISEL-NEXT: ret
6276 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, i64 0, ptr %A)
6277 %tmp = getelementptr i16, ptr %A, i32 2
6278 store ptr %tmp, ptr %ptr
6279 ret { <4 x i16>, <4 x i16> } %ld2
6282 define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <4 x i16> %B, <4 x i16> %C) nounwind {
6283 ; SDAG-LABEL: test_v4i16_post_reg_ld2lane:
6285 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6286 ; SDAG-NEXT: lsl x8, x2, #1
6287 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6288 ; SDAG-NEXT: ld2.h { v0, v1 }[0], [x0], x8
6289 ; SDAG-NEXT: str x0, [x1]
6292 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld2lane:
6293 ; CHECK-GISEL: ; %bb.0:
6294 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6295 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
6296 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6297 ; CHECK-GISEL-NEXT: ld2.h { v0, v1 }[0], [x0]
6298 ; CHECK-GISEL-NEXT: str x8, [x1]
6299 ; CHECK-GISEL-NEXT: ret
6300 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, i64 0, ptr %A)
6301 %tmp = getelementptr i16, ptr %A, i64 %inc
6302 store ptr %tmp, ptr %ptr
6303 ret { <4 x i16>, <4 x i16> } %ld2
6306 declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2lane.v4i16.p0(<4 x i16>, <4 x i16>, i64, ptr) nounwind readonly
6309 define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld2lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
6310 ; SDAG-LABEL: test_v4i32_post_imm_ld2lane:
6312 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6313 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6314 ; SDAG-NEXT: ld2.s { v0, v1 }[0], [x0], #8
6315 ; SDAG-NEXT: str x0, [x1]
6318 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld2lane:
6319 ; CHECK-GISEL: ; %bb.0:
6320 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6321 ; CHECK-GISEL-NEXT: add x8, x0, #8
6322 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6323 ; CHECK-GISEL-NEXT: ld2.s { v0, v1 }[0], [x0]
6324 ; CHECK-GISEL-NEXT: str x8, [x1]
6325 ; CHECK-GISEL-NEXT: ret
6326 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, i64 0, ptr %A)
6327 %tmp = getelementptr i32, ptr %A, i32 2
6328 store ptr %tmp, ptr %ptr
6329 ret { <4 x i32>, <4 x i32> } %ld2
6332 define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <4 x i32> %B, <4 x i32> %C) nounwind {
6333 ; SDAG-LABEL: test_v4i32_post_reg_ld2lane:
6335 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6336 ; SDAG-NEXT: lsl x8, x2, #2
6337 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6338 ; SDAG-NEXT: ld2.s { v0, v1 }[0], [x0], x8
6339 ; SDAG-NEXT: str x0, [x1]
6342 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld2lane:
6343 ; CHECK-GISEL: ; %bb.0:
6344 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6345 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
6346 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6347 ; CHECK-GISEL-NEXT: ld2.s { v0, v1 }[0], [x0]
6348 ; CHECK-GISEL-NEXT: str x8, [x1]
6349 ; CHECK-GISEL-NEXT: ret
6350 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, i64 0, ptr %A)
6351 %tmp = getelementptr i32, ptr %A, i64 %inc
6352 store ptr %tmp, ptr %ptr
6353 ret { <4 x i32>, <4 x i32> } %ld2
6356 declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32>, <4 x i32>, i64, ptr) nounwind readonly
6359 define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld2lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
6360 ; SDAG-LABEL: test_v2i32_post_imm_ld2lane:
6362 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6363 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6364 ; SDAG-NEXT: ld2.s { v0, v1 }[0], [x0], #8
6365 ; SDAG-NEXT: str x0, [x1]
6368 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld2lane:
6369 ; CHECK-GISEL: ; %bb.0:
6370 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6371 ; CHECK-GISEL-NEXT: add x8, x0, #8
6372 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6373 ; CHECK-GISEL-NEXT: ld2.s { v0, v1 }[0], [x0]
6374 ; CHECK-GISEL-NEXT: str x8, [x1]
6375 ; CHECK-GISEL-NEXT: ret
6376 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, i64 0, ptr %A)
6377 %tmp = getelementptr i32, ptr %A, i32 2
6378 store ptr %tmp, ptr %ptr
6379 ret { <2 x i32>, <2 x i32> } %ld2
6382 define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <2 x i32> %B, <2 x i32> %C) nounwind {
6383 ; SDAG-LABEL: test_v2i32_post_reg_ld2lane:
6385 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6386 ; SDAG-NEXT: lsl x8, x2, #2
6387 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6388 ; SDAG-NEXT: ld2.s { v0, v1 }[0], [x0], x8
6389 ; SDAG-NEXT: str x0, [x1]
6392 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld2lane:
6393 ; CHECK-GISEL: ; %bb.0:
6394 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6395 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
6396 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6397 ; CHECK-GISEL-NEXT: ld2.s { v0, v1 }[0], [x0]
6398 ; CHECK-GISEL-NEXT: str x8, [x1]
6399 ; CHECK-GISEL-NEXT: ret
6400 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, i64 0, ptr %A)
6401 %tmp = getelementptr i32, ptr %A, i64 %inc
6402 store ptr %tmp, ptr %ptr
6403 ret { <2 x i32>, <2 x i32> } %ld2
6406 declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2lane.v2i32.p0(<2 x i32>, <2 x i32>, i64, ptr) nounwind readonly
6409 define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld2lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
6410 ; SDAG-LABEL: test_v2i64_post_imm_ld2lane:
6412 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6413 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6414 ; SDAG-NEXT: ld2.d { v0, v1 }[0], [x0], #16
6415 ; SDAG-NEXT: str x0, [x1]
6418 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld2lane:
6419 ; CHECK-GISEL: ; %bb.0:
6420 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6421 ; CHECK-GISEL-NEXT: add x8, x0, #16
6422 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6423 ; CHECK-GISEL-NEXT: ld2.d { v0, v1 }[0], [x0]
6424 ; CHECK-GISEL-NEXT: str x8, [x1]
6425 ; CHECK-GISEL-NEXT: ret
6426 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, i64 0, ptr %A)
6427 %tmp = getelementptr i64, ptr %A, i32 2
6428 store ptr %tmp, ptr %ptr
6429 ret { <2 x i64>, <2 x i64> } %ld2
6432 define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <2 x i64> %B, <2 x i64> %C) nounwind {
6433 ; SDAG-LABEL: test_v2i64_post_reg_ld2lane:
6435 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6436 ; SDAG-NEXT: lsl x8, x2, #3
6437 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6438 ; SDAG-NEXT: ld2.d { v0, v1 }[0], [x0], x8
6439 ; SDAG-NEXT: str x0, [x1]
6442 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld2lane:
6443 ; CHECK-GISEL: ; %bb.0:
6444 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6445 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
6446 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6447 ; CHECK-GISEL-NEXT: ld2.d { v0, v1 }[0], [x0]
6448 ; CHECK-GISEL-NEXT: str x8, [x1]
6449 ; CHECK-GISEL-NEXT: ret
6450 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, i64 0, ptr %A)
6451 %tmp = getelementptr i64, ptr %A, i64 %inc
6452 store ptr %tmp, ptr %ptr
6453 ret { <2 x i64>, <2 x i64> } %ld2
6456 declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64>, <2 x i64>, i64, ptr) nounwind readonly
6459 define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld2lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
6460 ; SDAG-LABEL: test_v1i64_post_imm_ld2lane:
6462 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6463 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6464 ; SDAG-NEXT: ld2.d { v0, v1 }[0], [x0], #16
6465 ; SDAG-NEXT: str x0, [x1]
6468 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld2lane:
6469 ; CHECK-GISEL: ; %bb.0:
6470 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6471 ; CHECK-GISEL-NEXT: add x8, x0, #16
6472 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6473 ; CHECK-GISEL-NEXT: ld2.d { v0, v1 }[0], [x0]
6474 ; CHECK-GISEL-NEXT: str x8, [x1]
6475 ; CHECK-GISEL-NEXT: ret
6476 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, i64 0, ptr %A)
6477 %tmp = getelementptr i64, ptr %A, i32 2
6478 store ptr %tmp, ptr %ptr
6479 ret { <1 x i64>, <1 x i64> } %ld2
6482 define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <1 x i64> %B, <1 x i64> %C) nounwind {
6483 ; SDAG-LABEL: test_v1i64_post_reg_ld2lane:
6485 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6486 ; SDAG-NEXT: lsl x8, x2, #3
6487 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6488 ; SDAG-NEXT: ld2.d { v0, v1 }[0], [x0], x8
6489 ; SDAG-NEXT: str x0, [x1]
6492 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld2lane:
6493 ; CHECK-GISEL: ; %bb.0:
6494 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6495 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
6496 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6497 ; CHECK-GISEL-NEXT: ld2.d { v0, v1 }[0], [x0]
6498 ; CHECK-GISEL-NEXT: str x8, [x1]
6499 ; CHECK-GISEL-NEXT: ret
6500 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, i64 0, ptr %A)
6501 %tmp = getelementptr i64, ptr %A, i64 %inc
6502 store ptr %tmp, ptr %ptr
6503 ret { <1 x i64>, <1 x i64> } %ld2
6506 declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2lane.v1i64.p0(<1 x i64>, <1 x i64>, i64, ptr) nounwind readonly
6509 define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld2lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C) nounwind {
6510 ; SDAG-LABEL: test_v4f32_post_imm_ld2lane:
6512 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6513 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6514 ; SDAG-NEXT: ld2.s { v0, v1 }[0], [x0], #8
6515 ; SDAG-NEXT: str x0, [x1]
6518 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld2lane:
6519 ; CHECK-GISEL: ; %bb.0:
6520 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6521 ; CHECK-GISEL-NEXT: add x8, x0, #8
6522 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6523 ; CHECK-GISEL-NEXT: ld2.s { v0, v1 }[0], [x0]
6524 ; CHECK-GISEL-NEXT: str x8, [x1]
6525 ; CHECK-GISEL-NEXT: ret
6526 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2lane.v4f32.p0(<4 x float> %B, <4 x float> %C, i64 0, ptr %A)
6527 %tmp = getelementptr float, ptr %A, i32 2
6528 store ptr %tmp, ptr %ptr
6529 ret { <4 x float>, <4 x float> } %ld2
6532 define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <4 x float> %B, <4 x float> %C) nounwind {
6533 ; SDAG-LABEL: test_v4f32_post_reg_ld2lane:
6535 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6536 ; SDAG-NEXT: lsl x8, x2, #2
6537 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6538 ; SDAG-NEXT: ld2.s { v0, v1 }[0], [x0], x8
6539 ; SDAG-NEXT: str x0, [x1]
6542 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld2lane:
6543 ; CHECK-GISEL: ; %bb.0:
6544 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6545 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
6546 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6547 ; CHECK-GISEL-NEXT: ld2.s { v0, v1 }[0], [x0]
6548 ; CHECK-GISEL-NEXT: str x8, [x1]
6549 ; CHECK-GISEL-NEXT: ret
6550 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2lane.v4f32.p0(<4 x float> %B, <4 x float> %C, i64 0, ptr %A)
6551 %tmp = getelementptr float, ptr %A, i64 %inc
6552 store ptr %tmp, ptr %ptr
6553 ret { <4 x float>, <4 x float> } %ld2
6556 declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2lane.v4f32.p0(<4 x float>, <4 x float>, i64, ptr) nounwind readonly
6559 define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld2lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C) nounwind {
6560 ; SDAG-LABEL: test_v2f32_post_imm_ld2lane:
6562 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6563 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6564 ; SDAG-NEXT: ld2.s { v0, v1 }[0], [x0], #8
6565 ; SDAG-NEXT: str x0, [x1]
6568 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld2lane:
6569 ; CHECK-GISEL: ; %bb.0:
6570 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6571 ; CHECK-GISEL-NEXT: add x8, x0, #8
6572 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6573 ; CHECK-GISEL-NEXT: ld2.s { v0, v1 }[0], [x0]
6574 ; CHECK-GISEL-NEXT: str x8, [x1]
6575 ; CHECK-GISEL-NEXT: ret
6576 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2lane.v2f32.p0(<2 x float> %B, <2 x float> %C, i64 0, ptr %A)
6577 %tmp = getelementptr float, ptr %A, i32 2
6578 store ptr %tmp, ptr %ptr
6579 ret { <2 x float>, <2 x float> } %ld2
6582 define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <2 x float> %B, <2 x float> %C) nounwind {
6583 ; SDAG-LABEL: test_v2f32_post_reg_ld2lane:
6585 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6586 ; SDAG-NEXT: lsl x8, x2, #2
6587 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6588 ; SDAG-NEXT: ld2.s { v0, v1 }[0], [x0], x8
6589 ; SDAG-NEXT: str x0, [x1]
6592 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld2lane:
6593 ; CHECK-GISEL: ; %bb.0:
6594 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6595 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
6596 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6597 ; CHECK-GISEL-NEXT: ld2.s { v0, v1 }[0], [x0]
6598 ; CHECK-GISEL-NEXT: str x8, [x1]
6599 ; CHECK-GISEL-NEXT: ret
6600 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2lane.v2f32.p0(<2 x float> %B, <2 x float> %C, i64 0, ptr %A)
6601 %tmp = getelementptr float, ptr %A, i64 %inc
6602 store ptr %tmp, ptr %ptr
6603 ret { <2 x float>, <2 x float> } %ld2
6606 declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2lane.v2f32.p0(<2 x float>, <2 x float>, i64, ptr) nounwind readonly
6609 define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld2lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C) nounwind {
6610 ; SDAG-LABEL: test_v2f64_post_imm_ld2lane:
6612 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6613 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6614 ; SDAG-NEXT: ld2.d { v0, v1 }[0], [x0], #16
6615 ; SDAG-NEXT: str x0, [x1]
6618 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld2lane:
6619 ; CHECK-GISEL: ; %bb.0:
6620 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6621 ; CHECK-GISEL-NEXT: add x8, x0, #16
6622 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6623 ; CHECK-GISEL-NEXT: ld2.d { v0, v1 }[0], [x0]
6624 ; CHECK-GISEL-NEXT: str x8, [x1]
6625 ; CHECK-GISEL-NEXT: ret
6626 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2lane.v2f64.p0(<2 x double> %B, <2 x double> %C, i64 0, ptr %A)
6627 %tmp = getelementptr double, ptr %A, i32 2
6628 store ptr %tmp, ptr %ptr
6629 ret { <2 x double>, <2 x double> } %ld2
6632 define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <2 x double> %B, <2 x double> %C) nounwind {
6633 ; SDAG-LABEL: test_v2f64_post_reg_ld2lane:
6635 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6636 ; SDAG-NEXT: lsl x8, x2, #3
6637 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6638 ; SDAG-NEXT: ld2.d { v0, v1 }[0], [x0], x8
6639 ; SDAG-NEXT: str x0, [x1]
6642 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld2lane:
6643 ; CHECK-GISEL: ; %bb.0:
6644 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6645 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
6646 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6647 ; CHECK-GISEL-NEXT: ld2.d { v0, v1 }[0], [x0]
6648 ; CHECK-GISEL-NEXT: str x8, [x1]
6649 ; CHECK-GISEL-NEXT: ret
6650 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2lane.v2f64.p0(<2 x double> %B, <2 x double> %C, i64 0, ptr %A)
6651 %tmp = getelementptr double, ptr %A, i64 %inc
6652 store ptr %tmp, ptr %ptr
6653 ret { <2 x double>, <2 x double> } %ld2
6656 declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2lane.v2f64.p0(<2 x double>, <2 x double>, i64, ptr) nounwind readonly
6659 define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld2lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C) nounwind {
6660 ; SDAG-LABEL: test_v1f64_post_imm_ld2lane:
6662 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6663 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6664 ; SDAG-NEXT: ld2.d { v0, v1 }[0], [x0], #16
6665 ; SDAG-NEXT: str x0, [x1]
6668 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld2lane:
6669 ; CHECK-GISEL: ; %bb.0:
6670 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6671 ; CHECK-GISEL-NEXT: add x8, x0, #16
6672 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6673 ; CHECK-GISEL-NEXT: ld2.d { v0, v1 }[0], [x0]
6674 ; CHECK-GISEL-NEXT: str x8, [x1]
6675 ; CHECK-GISEL-NEXT: ret
6676 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2lane.v1f64.p0(<1 x double> %B, <1 x double> %C, i64 0, ptr %A)
6677 %tmp = getelementptr double, ptr %A, i32 2
6678 store ptr %tmp, ptr %ptr
6679 ret { <1 x double>, <1 x double> } %ld2
6682 define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <1 x double> %B, <1 x double> %C) nounwind {
6683 ; SDAG-LABEL: test_v1f64_post_reg_ld2lane:
6685 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6686 ; SDAG-NEXT: lsl x8, x2, #3
6687 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6688 ; SDAG-NEXT: ld2.d { v0, v1 }[0], [x0], x8
6689 ; SDAG-NEXT: str x0, [x1]
6692 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld2lane:
6693 ; CHECK-GISEL: ; %bb.0:
6694 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
6695 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
6696 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
6697 ; CHECK-GISEL-NEXT: ld2.d { v0, v1 }[0], [x0]
6698 ; CHECK-GISEL-NEXT: str x8, [x1]
6699 ; CHECK-GISEL-NEXT: ret
6700 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2lane.v1f64.p0(<1 x double> %B, <1 x double> %C, i64 0, ptr %A)
6701 %tmp = getelementptr double, ptr %A, i64 %inc
6702 store ptr %tmp, ptr %ptr
6703 ret { <1 x double>, <1 x double> } %ld2
6706 declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2lane.v1f64.p0(<1 x double>, <1 x double>, i64, ptr) nounwind readonly
6709 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld3lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
6710 ; SDAG-LABEL: test_v16i8_post_imm_ld3lane:
6712 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6713 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6714 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6715 ; SDAG-NEXT: ld3.b { v0, v1, v2 }[0], [x0], #3
6716 ; SDAG-NEXT: str x0, [x1]
6719 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld3lane:
6720 ; CHECK-GISEL: ; %bb.0:
6721 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6722 ; CHECK-GISEL-NEXT: add x8, x0, #3
6723 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6724 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6725 ; CHECK-GISEL-NEXT: ld3.b { v0, v1, v2 }[0], [x0]
6726 ; CHECK-GISEL-NEXT: str x8, [x1]
6727 ; CHECK-GISEL-NEXT: ret
6728 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, ptr %A)
6729 %tmp = getelementptr i8, ptr %A, i32 3
6730 store ptr %tmp, ptr %ptr
6731 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
6734 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
6735 ; SDAG-LABEL: test_v16i8_post_reg_ld3lane:
6737 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6738 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6739 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6740 ; SDAG-NEXT: ld3.b { v0, v1, v2 }[0], [x0], x2
6741 ; SDAG-NEXT: str x0, [x1]
6744 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld3lane:
6745 ; CHECK-GISEL: ; %bb.0:
6746 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6747 ; CHECK-GISEL-NEXT: add x8, x0, x2
6748 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6749 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6750 ; CHECK-GISEL-NEXT: ld3.b { v0, v1, v2 }[0], [x0]
6751 ; CHECK-GISEL-NEXT: str x8, [x1]
6752 ; CHECK-GISEL-NEXT: ret
6753 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, ptr %A)
6754 %tmp = getelementptr i8, ptr %A, i64 %inc
6755 store ptr %tmp, ptr %ptr
6756 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
6759 declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, i64, ptr) nounwind readonly
6762 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld3lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
6763 ; SDAG-LABEL: test_v8i8_post_imm_ld3lane:
6765 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
6766 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
6767 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
6768 ; SDAG-NEXT: ld3.b { v0, v1, v2 }[0], [x0], #3
6769 ; SDAG-NEXT: str x0, [x1]
6772 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld3lane:
6773 ; CHECK-GISEL: ; %bb.0:
6774 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
6775 ; CHECK-GISEL-NEXT: add x8, x0, #3
6776 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
6777 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
6778 ; CHECK-GISEL-NEXT: ld3.b { v0, v1, v2 }[0], [x0]
6779 ; CHECK-GISEL-NEXT: str x8, [x1]
6780 ; CHECK-GISEL-NEXT: ret
6781 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, ptr %A)
6782 %tmp = getelementptr i8, ptr %A, i32 3
6783 store ptr %tmp, ptr %ptr
6784 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
6787 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
6788 ; SDAG-LABEL: test_v8i8_post_reg_ld3lane:
6790 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
6791 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
6792 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
6793 ; SDAG-NEXT: ld3.b { v0, v1, v2 }[0], [x0], x2
6794 ; SDAG-NEXT: str x0, [x1]
6797 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld3lane:
6798 ; CHECK-GISEL: ; %bb.0:
6799 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
6800 ; CHECK-GISEL-NEXT: add x8, x0, x2
6801 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
6802 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
6803 ; CHECK-GISEL-NEXT: ld3.b { v0, v1, v2 }[0], [x0]
6804 ; CHECK-GISEL-NEXT: str x8, [x1]
6805 ; CHECK-GISEL-NEXT: ret
6806 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, ptr %A)
6807 %tmp = getelementptr i8, ptr %A, i64 %inc
6808 store ptr %tmp, ptr %ptr
6809 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
6812 declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3lane.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, i64, ptr) nounwind readonly
6815 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld3lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
6816 ; SDAG-LABEL: test_v8i16_post_imm_ld3lane:
6818 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6819 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6820 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6821 ; SDAG-NEXT: ld3.h { v0, v1, v2 }[0], [x0], #6
6822 ; SDAG-NEXT: str x0, [x1]
6825 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld3lane:
6826 ; CHECK-GISEL: ; %bb.0:
6827 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6828 ; CHECK-GISEL-NEXT: add x8, x0, #6
6829 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6830 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6831 ; CHECK-GISEL-NEXT: ld3.h { v0, v1, v2 }[0], [x0]
6832 ; CHECK-GISEL-NEXT: str x8, [x1]
6833 ; CHECK-GISEL-NEXT: ret
6834 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, ptr %A)
6835 %tmp = getelementptr i16, ptr %A, i32 3
6836 store ptr %tmp, ptr %ptr
6837 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
6840 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
6841 ; SDAG-LABEL: test_v8i16_post_reg_ld3lane:
6843 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6844 ; SDAG-NEXT: lsl x8, x2, #1
6845 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6846 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6847 ; SDAG-NEXT: ld3.h { v0, v1, v2 }[0], [x0], x8
6848 ; SDAG-NEXT: str x0, [x1]
6851 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld3lane:
6852 ; CHECK-GISEL: ; %bb.0:
6853 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6854 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
6855 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6856 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6857 ; CHECK-GISEL-NEXT: ld3.h { v0, v1, v2 }[0], [x0]
6858 ; CHECK-GISEL-NEXT: str x8, [x1]
6859 ; CHECK-GISEL-NEXT: ret
6860 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, ptr %A)
6861 %tmp = getelementptr i16, ptr %A, i64 %inc
6862 store ptr %tmp, ptr %ptr
6863 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
6866 declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, i64, ptr) nounwind readonly
6869 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld3lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
6870 ; SDAG-LABEL: test_v4i16_post_imm_ld3lane:
6872 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
6873 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
6874 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
6875 ; SDAG-NEXT: ld3.h { v0, v1, v2 }[0], [x0], #6
6876 ; SDAG-NEXT: str x0, [x1]
6879 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld3lane:
6880 ; CHECK-GISEL: ; %bb.0:
6881 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
6882 ; CHECK-GISEL-NEXT: add x8, x0, #6
6883 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
6884 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
6885 ; CHECK-GISEL-NEXT: ld3.h { v0, v1, v2 }[0], [x0]
6886 ; CHECK-GISEL-NEXT: str x8, [x1]
6887 ; CHECK-GISEL-NEXT: ret
6888 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, ptr %A)
6889 %tmp = getelementptr i16, ptr %A, i32 3
6890 store ptr %tmp, ptr %ptr
6891 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
6894 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
6895 ; SDAG-LABEL: test_v4i16_post_reg_ld3lane:
6897 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
6898 ; SDAG-NEXT: lsl x8, x2, #1
6899 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
6900 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
6901 ; SDAG-NEXT: ld3.h { v0, v1, v2 }[0], [x0], x8
6902 ; SDAG-NEXT: str x0, [x1]
6905 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld3lane:
6906 ; CHECK-GISEL: ; %bb.0:
6907 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
6908 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
6909 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
6910 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
6911 ; CHECK-GISEL-NEXT: ld3.h { v0, v1, v2 }[0], [x0]
6912 ; CHECK-GISEL-NEXT: str x8, [x1]
6913 ; CHECK-GISEL-NEXT: ret
6914 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, ptr %A)
6915 %tmp = getelementptr i16, ptr %A, i64 %inc
6916 store ptr %tmp, ptr %ptr
6917 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
6920 declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3lane.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, i64, ptr) nounwind readonly
6923 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld3lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
6924 ; SDAG-LABEL: test_v4i32_post_imm_ld3lane:
6926 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6927 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6928 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6929 ; SDAG-NEXT: ld3.s { v0, v1, v2 }[0], [x0], #12
6930 ; SDAG-NEXT: str x0, [x1]
6933 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld3lane:
6934 ; CHECK-GISEL: ; %bb.0:
6935 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6936 ; CHECK-GISEL-NEXT: add x8, x0, #12
6937 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6938 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6939 ; CHECK-GISEL-NEXT: ld3.s { v0, v1, v2 }[0], [x0]
6940 ; CHECK-GISEL-NEXT: str x8, [x1]
6941 ; CHECK-GISEL-NEXT: ret
6942 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, ptr %A)
6943 %tmp = getelementptr i32, ptr %A, i32 3
6944 store ptr %tmp, ptr %ptr
6945 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
6948 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
6949 ; SDAG-LABEL: test_v4i32_post_reg_ld3lane:
6951 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6952 ; SDAG-NEXT: lsl x8, x2, #2
6953 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6954 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6955 ; SDAG-NEXT: ld3.s { v0, v1, v2 }[0], [x0], x8
6956 ; SDAG-NEXT: str x0, [x1]
6959 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld3lane:
6960 ; CHECK-GISEL: ; %bb.0:
6961 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6962 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
6963 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6964 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6965 ; CHECK-GISEL-NEXT: ld3.s { v0, v1, v2 }[0], [x0]
6966 ; CHECK-GISEL-NEXT: str x8, [x1]
6967 ; CHECK-GISEL-NEXT: ret
6968 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, ptr %A)
6969 %tmp = getelementptr i32, ptr %A, i64 %inc
6970 store ptr %tmp, ptr %ptr
6971 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
6974 declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, i64, ptr) nounwind readonly
6977 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld3lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
6978 ; SDAG-LABEL: test_v2i32_post_imm_ld3lane:
6980 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
6981 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
6982 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
6983 ; SDAG-NEXT: ld3.s { v0, v1, v2 }[0], [x0], #12
6984 ; SDAG-NEXT: str x0, [x1]
6987 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld3lane:
6988 ; CHECK-GISEL: ; %bb.0:
6989 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
6990 ; CHECK-GISEL-NEXT: add x8, x0, #12
6991 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
6992 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
6993 ; CHECK-GISEL-NEXT: ld3.s { v0, v1, v2 }[0], [x0]
6994 ; CHECK-GISEL-NEXT: str x8, [x1]
6995 ; CHECK-GISEL-NEXT: ret
6996 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, ptr %A)
6997 %tmp = getelementptr i32, ptr %A, i32 3
6998 store ptr %tmp, ptr %ptr
6999 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
7002 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
7003 ; SDAG-LABEL: test_v2i32_post_reg_ld3lane:
7005 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7006 ; SDAG-NEXT: lsl x8, x2, #2
7007 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7008 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7009 ; SDAG-NEXT: ld3.s { v0, v1, v2 }[0], [x0], x8
7010 ; SDAG-NEXT: str x0, [x1]
7013 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld3lane:
7014 ; CHECK-GISEL: ; %bb.0:
7015 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7016 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
7017 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7018 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7019 ; CHECK-GISEL-NEXT: ld3.s { v0, v1, v2 }[0], [x0]
7020 ; CHECK-GISEL-NEXT: str x8, [x1]
7021 ; CHECK-GISEL-NEXT: ret
7022 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, ptr %A)
7023 %tmp = getelementptr i32, ptr %A, i64 %inc
7024 store ptr %tmp, ptr %ptr
7025 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
7028 declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3lane.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, i64, ptr) nounwind readonly
7031 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld3lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
7032 ; SDAG-LABEL: test_v2i64_post_imm_ld3lane:
7034 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7035 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7036 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7037 ; SDAG-NEXT: ld3.d { v0, v1, v2 }[0], [x0], #24
7038 ; SDAG-NEXT: str x0, [x1]
7041 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld3lane:
7042 ; CHECK-GISEL: ; %bb.0:
7043 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7044 ; CHECK-GISEL-NEXT: add x8, x0, #24
7045 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7046 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7047 ; CHECK-GISEL-NEXT: ld3.d { v0, v1, v2 }[0], [x0]
7048 ; CHECK-GISEL-NEXT: str x8, [x1]
7049 ; CHECK-GISEL-NEXT: ret
7050 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, ptr %A)
7051 %tmp = getelementptr i64, ptr %A, i32 3
7052 store ptr %tmp, ptr %ptr
7053 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
7056 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
7057 ; SDAG-LABEL: test_v2i64_post_reg_ld3lane:
7059 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7060 ; SDAG-NEXT: lsl x8, x2, #3
7061 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7062 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7063 ; SDAG-NEXT: ld3.d { v0, v1, v2 }[0], [x0], x8
7064 ; SDAG-NEXT: str x0, [x1]
7067 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld3lane:
7068 ; CHECK-GISEL: ; %bb.0:
7069 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7070 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
7071 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7072 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7073 ; CHECK-GISEL-NEXT: ld3.d { v0, v1, v2 }[0], [x0]
7074 ; CHECK-GISEL-NEXT: str x8, [x1]
7075 ; CHECK-GISEL-NEXT: ret
7076 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, ptr %A)
7077 %tmp = getelementptr i64, ptr %A, i64 %inc
7078 store ptr %tmp, ptr %ptr
7079 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
7082 declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, i64, ptr) nounwind readonly
7085 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld3lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
7086 ; SDAG-LABEL: test_v1i64_post_imm_ld3lane:
7088 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7089 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7090 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7091 ; SDAG-NEXT: ld3.d { v0, v1, v2 }[0], [x0], #24
7092 ; SDAG-NEXT: str x0, [x1]
7095 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld3lane:
7096 ; CHECK-GISEL: ; %bb.0:
7097 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7098 ; CHECK-GISEL-NEXT: add x8, x0, #24
7099 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7100 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7101 ; CHECK-GISEL-NEXT: ld3.d { v0, v1, v2 }[0], [x0]
7102 ; CHECK-GISEL-NEXT: str x8, [x1]
7103 ; CHECK-GISEL-NEXT: ret
7104 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, ptr %A)
7105 %tmp = getelementptr i64, ptr %A, i32 3
7106 store ptr %tmp, ptr %ptr
7107 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
7110 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
7111 ; SDAG-LABEL: test_v1i64_post_reg_ld3lane:
7113 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7114 ; SDAG-NEXT: lsl x8, x2, #3
7115 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7116 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7117 ; SDAG-NEXT: ld3.d { v0, v1, v2 }[0], [x0], x8
7118 ; SDAG-NEXT: str x0, [x1]
7121 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld3lane:
7122 ; CHECK-GISEL: ; %bb.0:
7123 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7124 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
7125 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7126 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7127 ; CHECK-GISEL-NEXT: ld3.d { v0, v1, v2 }[0], [x0]
7128 ; CHECK-GISEL-NEXT: str x8, [x1]
7129 ; CHECK-GISEL-NEXT: ret
7130 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, ptr %A)
7131 %tmp = getelementptr i64, ptr %A, i64 %inc
7132 store ptr %tmp, ptr %ptr
7133 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
7136 declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3lane.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, i64, ptr) nounwind readonly
7139 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld3lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
7140 ; SDAG-LABEL: test_v4f32_post_imm_ld3lane:
7142 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7143 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7144 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7145 ; SDAG-NEXT: ld3.s { v0, v1, v2 }[0], [x0], #12
7146 ; SDAG-NEXT: str x0, [x1]
7149 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld3lane:
7150 ; CHECK-GISEL: ; %bb.0:
7151 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7152 ; CHECK-GISEL-NEXT: add x8, x0, #12
7153 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7154 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7155 ; CHECK-GISEL-NEXT: ld3.s { v0, v1, v2 }[0], [x0]
7156 ; CHECK-GISEL-NEXT: str x8, [x1]
7157 ; CHECK-GISEL-NEXT: ret
7158 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, ptr %A)
7159 %tmp = getelementptr float, ptr %A, i32 3
7160 store ptr %tmp, ptr %ptr
7161 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
7164 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
7165 ; SDAG-LABEL: test_v4f32_post_reg_ld3lane:
7167 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7168 ; SDAG-NEXT: lsl x8, x2, #2
7169 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7170 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7171 ; SDAG-NEXT: ld3.s { v0, v1, v2 }[0], [x0], x8
7172 ; SDAG-NEXT: str x0, [x1]
7175 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld3lane:
7176 ; CHECK-GISEL: ; %bb.0:
7177 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7178 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
7179 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7180 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7181 ; CHECK-GISEL-NEXT: ld3.s { v0, v1, v2 }[0], [x0]
7182 ; CHECK-GISEL-NEXT: str x8, [x1]
7183 ; CHECK-GISEL-NEXT: ret
7184 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, ptr %A)
7185 %tmp = getelementptr float, ptr %A, i64 %inc
7186 store ptr %tmp, ptr %ptr
7187 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
7190 declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3lane.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, i64, ptr) nounwind readonly
7193 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld3lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
7194 ; SDAG-LABEL: test_v2f32_post_imm_ld3lane:
7196 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7197 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7198 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7199 ; SDAG-NEXT: ld3.s { v0, v1, v2 }[0], [x0], #12
7200 ; SDAG-NEXT: str x0, [x1]
7203 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld3lane:
7204 ; CHECK-GISEL: ; %bb.0:
7205 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7206 ; CHECK-GISEL-NEXT: add x8, x0, #12
7207 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7208 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7209 ; CHECK-GISEL-NEXT: ld3.s { v0, v1, v2 }[0], [x0]
7210 ; CHECK-GISEL-NEXT: str x8, [x1]
7211 ; CHECK-GISEL-NEXT: ret
7212 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, ptr %A)
7213 %tmp = getelementptr float, ptr %A, i32 3
7214 store ptr %tmp, ptr %ptr
7215 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
7218 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
7219 ; SDAG-LABEL: test_v2f32_post_reg_ld3lane:
7221 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7222 ; SDAG-NEXT: lsl x8, x2, #2
7223 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7224 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7225 ; SDAG-NEXT: ld3.s { v0, v1, v2 }[0], [x0], x8
7226 ; SDAG-NEXT: str x0, [x1]
7229 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld3lane:
7230 ; CHECK-GISEL: ; %bb.0:
7231 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7232 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
7233 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7234 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7235 ; CHECK-GISEL-NEXT: ld3.s { v0, v1, v2 }[0], [x0]
7236 ; CHECK-GISEL-NEXT: str x8, [x1]
7237 ; CHECK-GISEL-NEXT: ret
7238 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, ptr %A)
7239 %tmp = getelementptr float, ptr %A, i64 %inc
7240 store ptr %tmp, ptr %ptr
7241 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
7244 declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3lane.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, i64, ptr) nounwind readonly
7247 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld3lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
7248 ; SDAG-LABEL: test_v2f64_post_imm_ld3lane:
7250 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7251 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7252 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7253 ; SDAG-NEXT: ld3.d { v0, v1, v2 }[0], [x0], #24
7254 ; SDAG-NEXT: str x0, [x1]
7257 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld3lane:
7258 ; CHECK-GISEL: ; %bb.0:
7259 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7260 ; CHECK-GISEL-NEXT: add x8, x0, #24
7261 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7262 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7263 ; CHECK-GISEL-NEXT: ld3.d { v0, v1, v2 }[0], [x0]
7264 ; CHECK-GISEL-NEXT: str x8, [x1]
7265 ; CHECK-GISEL-NEXT: ret
7266 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, ptr %A)
7267 %tmp = getelementptr double, ptr %A, i32 3
7268 store ptr %tmp, ptr %ptr
7269 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
7272 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
7273 ; SDAG-LABEL: test_v2f64_post_reg_ld3lane:
7275 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7276 ; SDAG-NEXT: lsl x8, x2, #3
7277 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7278 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7279 ; SDAG-NEXT: ld3.d { v0, v1, v2 }[0], [x0], x8
7280 ; SDAG-NEXT: str x0, [x1]
7283 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld3lane:
7284 ; CHECK-GISEL: ; %bb.0:
7285 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7286 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
7287 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7288 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7289 ; CHECK-GISEL-NEXT: ld3.d { v0, v1, v2 }[0], [x0]
7290 ; CHECK-GISEL-NEXT: str x8, [x1]
7291 ; CHECK-GISEL-NEXT: ret
7292 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, ptr %A)
7293 %tmp = getelementptr double, ptr %A, i64 %inc
7294 store ptr %tmp, ptr %ptr
7295 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
7298 declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3lane.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, i64, ptr) nounwind readonly
7301 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld3lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
7302 ; SDAG-LABEL: test_v1f64_post_imm_ld3lane:
7304 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7305 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7306 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7307 ; SDAG-NEXT: ld3.d { v0, v1, v2 }[0], [x0], #24
7308 ; SDAG-NEXT: str x0, [x1]
7311 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld3lane:
7312 ; CHECK-GISEL: ; %bb.0:
7313 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7314 ; CHECK-GISEL-NEXT: add x8, x0, #24
7315 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7316 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7317 ; CHECK-GISEL-NEXT: ld3.d { v0, v1, v2 }[0], [x0]
7318 ; CHECK-GISEL-NEXT: str x8, [x1]
7319 ; CHECK-GISEL-NEXT: ret
7320 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, ptr %A)
7321 %tmp = getelementptr double, ptr %A, i32 3
7322 store ptr %tmp, ptr %ptr
7323 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
7326 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
7327 ; SDAG-LABEL: test_v1f64_post_reg_ld3lane:
7329 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7330 ; SDAG-NEXT: lsl x8, x2, #3
7331 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7332 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7333 ; SDAG-NEXT: ld3.d { v0, v1, v2 }[0], [x0], x8
7334 ; SDAG-NEXT: str x0, [x1]
7337 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld3lane:
7338 ; CHECK-GISEL: ; %bb.0:
7339 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7340 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
7341 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7342 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7343 ; CHECK-GISEL-NEXT: ld3.d { v0, v1, v2 }[0], [x0]
7344 ; CHECK-GISEL-NEXT: str x8, [x1]
7345 ; CHECK-GISEL-NEXT: ret
7346 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, ptr %A)
7347 %tmp = getelementptr double, ptr %A, i64 %inc
7348 store ptr %tmp, ptr %ptr
7349 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
7352 declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3lane.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, i64, ptr) nounwind readonly
7355 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld4lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
7356 ; SDAG-LABEL: test_v16i8_post_imm_ld4lane:
7358 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7359 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7360 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7361 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7362 ; SDAG-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0], #4
7363 ; SDAG-NEXT: str x0, [x1]
7366 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld4lane:
7367 ; CHECK-GISEL: ; %bb.0:
7368 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7369 ; CHECK-GISEL-NEXT: add x8, x0, #4
7370 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7371 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7372 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7373 ; CHECK-GISEL-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0]
7374 ; CHECK-GISEL-NEXT: str x8, [x1]
7375 ; CHECK-GISEL-NEXT: ret
7376 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, ptr %A)
7377 %tmp = getelementptr i8, ptr %A, i32 4
7378 store ptr %tmp, ptr %ptr
7379 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
7382 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
7383 ; SDAG-LABEL: test_v16i8_post_reg_ld4lane:
7385 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7386 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7387 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7388 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7389 ; SDAG-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0], x2
7390 ; SDAG-NEXT: str x0, [x1]
7393 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld4lane:
7394 ; CHECK-GISEL: ; %bb.0:
7395 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7396 ; CHECK-GISEL-NEXT: add x8, x0, x2
7397 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7398 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7399 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7400 ; CHECK-GISEL-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0]
7401 ; CHECK-GISEL-NEXT: str x8, [x1]
7402 ; CHECK-GISEL-NEXT: ret
7403 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, ptr %A)
7404 %tmp = getelementptr i8, ptr %A, i64 %inc
7405 store ptr %tmp, ptr %ptr
7406 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
7409 declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i64, ptr) nounwind readonly
7412 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld4lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
7413 ; SDAG-LABEL: test_v8i8_post_imm_ld4lane:
7415 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7416 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7417 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7418 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7419 ; SDAG-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0], #4
7420 ; SDAG-NEXT: str x0, [x1]
7423 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld4lane:
7424 ; CHECK-GISEL: ; %bb.0:
7425 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7426 ; CHECK-GISEL-NEXT: add x8, x0, #4
7427 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7428 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7429 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7430 ; CHECK-GISEL-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0]
7431 ; CHECK-GISEL-NEXT: str x8, [x1]
7432 ; CHECK-GISEL-NEXT: ret
7433 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, ptr %A)
7434 %tmp = getelementptr i8, ptr %A, i32 4
7435 store ptr %tmp, ptr %ptr
7436 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
7439 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
7440 ; SDAG-LABEL: test_v8i8_post_reg_ld4lane:
7442 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7443 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7444 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7445 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7446 ; SDAG-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0], x2
7447 ; SDAG-NEXT: str x0, [x1]
7450 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld4lane:
7451 ; CHECK-GISEL: ; %bb.0:
7452 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7453 ; CHECK-GISEL-NEXT: add x8, x0, x2
7454 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7455 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7456 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7457 ; CHECK-GISEL-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0]
7458 ; CHECK-GISEL-NEXT: str x8, [x1]
7459 ; CHECK-GISEL-NEXT: ret
7460 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, ptr %A)
7461 %tmp = getelementptr i8, ptr %A, i64 %inc
7462 store ptr %tmp, ptr %ptr
7463 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
7466 declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4lane.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i64, ptr) nounwind readonly
7469 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld4lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
7470 ; SDAG-LABEL: test_v8i16_post_imm_ld4lane:
7472 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7473 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7474 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7475 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7476 ; SDAG-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0], #8
7477 ; SDAG-NEXT: str x0, [x1]
7480 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld4lane:
7481 ; CHECK-GISEL: ; %bb.0:
7482 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7483 ; CHECK-GISEL-NEXT: add x8, x0, #8
7484 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7485 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7486 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7487 ; CHECK-GISEL-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0]
7488 ; CHECK-GISEL-NEXT: str x8, [x1]
7489 ; CHECK-GISEL-NEXT: ret
7490 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, ptr %A)
7491 %tmp = getelementptr i16, ptr %A, i32 4
7492 store ptr %tmp, ptr %ptr
7493 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
7496 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
7497 ; SDAG-LABEL: test_v8i16_post_reg_ld4lane:
7499 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7500 ; SDAG-NEXT: lsl x8, x2, #1
7501 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7502 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7503 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7504 ; SDAG-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0], x8
7505 ; SDAG-NEXT: str x0, [x1]
7508 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld4lane:
7509 ; CHECK-GISEL: ; %bb.0:
7510 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7511 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
7512 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7513 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7514 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7515 ; CHECK-GISEL-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0]
7516 ; CHECK-GISEL-NEXT: str x8, [x1]
7517 ; CHECK-GISEL-NEXT: ret
7518 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, ptr %A)
7519 %tmp = getelementptr i16, ptr %A, i64 %inc
7520 store ptr %tmp, ptr %ptr
7521 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
7524 declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i64, ptr) nounwind readonly
7527 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld4lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
7528 ; SDAG-LABEL: test_v4i16_post_imm_ld4lane:
7530 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7531 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7532 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7533 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7534 ; SDAG-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0], #8
7535 ; SDAG-NEXT: str x0, [x1]
7538 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld4lane:
7539 ; CHECK-GISEL: ; %bb.0:
7540 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7541 ; CHECK-GISEL-NEXT: add x8, x0, #8
7542 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7543 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7544 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7545 ; CHECK-GISEL-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0]
7546 ; CHECK-GISEL-NEXT: str x8, [x1]
7547 ; CHECK-GISEL-NEXT: ret
7548 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, ptr %A)
7549 %tmp = getelementptr i16, ptr %A, i32 4
7550 store ptr %tmp, ptr %ptr
7551 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
7554 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
7555 ; SDAG-LABEL: test_v4i16_post_reg_ld4lane:
7557 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7558 ; SDAG-NEXT: lsl x8, x2, #1
7559 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7560 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7561 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7562 ; SDAG-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0], x8
7563 ; SDAG-NEXT: str x0, [x1]
7566 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld4lane:
7567 ; CHECK-GISEL: ; %bb.0:
7568 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7569 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
7570 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7571 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7572 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7573 ; CHECK-GISEL-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0]
7574 ; CHECK-GISEL-NEXT: str x8, [x1]
7575 ; CHECK-GISEL-NEXT: ret
7576 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, ptr %A)
7577 %tmp = getelementptr i16, ptr %A, i64 %inc
7578 store ptr %tmp, ptr %ptr
7579 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
7582 declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4lane.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i64, ptr) nounwind readonly
7585 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld4lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
7586 ; SDAG-LABEL: test_v4i32_post_imm_ld4lane:
7588 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7589 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7590 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7591 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7592 ; SDAG-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
7593 ; SDAG-NEXT: str x0, [x1]
7596 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld4lane:
7597 ; CHECK-GISEL: ; %bb.0:
7598 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7599 ; CHECK-GISEL-NEXT: add x8, x0, #16
7600 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7601 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7602 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7603 ; CHECK-GISEL-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0]
7604 ; CHECK-GISEL-NEXT: str x8, [x1]
7605 ; CHECK-GISEL-NEXT: ret
7606 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, ptr %A)
7607 %tmp = getelementptr i32, ptr %A, i32 4
7608 store ptr %tmp, ptr %ptr
7609 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
7612 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
7613 ; SDAG-LABEL: test_v4i32_post_reg_ld4lane:
7615 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7616 ; SDAG-NEXT: lsl x8, x2, #2
7617 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7618 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7619 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7620 ; SDAG-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], x8
7621 ; SDAG-NEXT: str x0, [x1]
7624 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld4lane:
7625 ; CHECK-GISEL: ; %bb.0:
7626 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7627 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
7628 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7629 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7630 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7631 ; CHECK-GISEL-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0]
7632 ; CHECK-GISEL-NEXT: str x8, [x1]
7633 ; CHECK-GISEL-NEXT: ret
7634 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, ptr %A)
7635 %tmp = getelementptr i32, ptr %A, i64 %inc
7636 store ptr %tmp, ptr %ptr
7637 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
7640 declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i64, ptr) nounwind readonly
7643 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld4lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
7644 ; SDAG-LABEL: test_v2i32_post_imm_ld4lane:
7646 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7647 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7648 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7649 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7650 ; SDAG-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
7651 ; SDAG-NEXT: str x0, [x1]
7654 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld4lane:
7655 ; CHECK-GISEL: ; %bb.0:
7656 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7657 ; CHECK-GISEL-NEXT: add x8, x0, #16
7658 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7659 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7660 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7661 ; CHECK-GISEL-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0]
7662 ; CHECK-GISEL-NEXT: str x8, [x1]
7663 ; CHECK-GISEL-NEXT: ret
7664 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, ptr %A)
7665 %tmp = getelementptr i32, ptr %A, i32 4
7666 store ptr %tmp, ptr %ptr
7667 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
7670 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
7671 ; SDAG-LABEL: test_v2i32_post_reg_ld4lane:
7673 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7674 ; SDAG-NEXT: lsl x8, x2, #2
7675 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7676 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7677 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7678 ; SDAG-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], x8
7679 ; SDAG-NEXT: str x0, [x1]
7682 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld4lane:
7683 ; CHECK-GISEL: ; %bb.0:
7684 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7685 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
7686 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7687 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7688 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7689 ; CHECK-GISEL-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0]
7690 ; CHECK-GISEL-NEXT: str x8, [x1]
7691 ; CHECK-GISEL-NEXT: ret
7692 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, ptr %A)
7693 %tmp = getelementptr i32, ptr %A, i64 %inc
7694 store ptr %tmp, ptr %ptr
7695 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
7698 declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4lane.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i64, ptr) nounwind readonly
7701 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld4lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
7702 ; SDAG-LABEL: test_v2i64_post_imm_ld4lane:
7704 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7705 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7706 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7707 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7708 ; SDAG-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
7709 ; SDAG-NEXT: str x0, [x1]
7712 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld4lane:
7713 ; CHECK-GISEL: ; %bb.0:
7714 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7715 ; CHECK-GISEL-NEXT: add x8, x0, #32
7716 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7717 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7718 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7719 ; CHECK-GISEL-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0]
7720 ; CHECK-GISEL-NEXT: str x8, [x1]
7721 ; CHECK-GISEL-NEXT: ret
7722 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, ptr %A)
7723 %tmp = getelementptr i64, ptr %A, i32 4
7724 store ptr %tmp, ptr %ptr
7725 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
7728 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
7729 ; SDAG-LABEL: test_v2i64_post_reg_ld4lane:
7731 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7732 ; SDAG-NEXT: lsl x8, x2, #3
7733 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7734 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7735 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7736 ; SDAG-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], x8
7737 ; SDAG-NEXT: str x0, [x1]
7740 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld4lane:
7741 ; CHECK-GISEL: ; %bb.0:
7742 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7743 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
7744 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7745 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7746 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7747 ; CHECK-GISEL-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0]
7748 ; CHECK-GISEL-NEXT: str x8, [x1]
7749 ; CHECK-GISEL-NEXT: ret
7750 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, ptr %A)
7751 %tmp = getelementptr i64, ptr %A, i64 %inc
7752 store ptr %tmp, ptr %ptr
7753 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
7756 declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, ptr) nounwind readonly
7759 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld4lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
7760 ; SDAG-LABEL: test_v1i64_post_imm_ld4lane:
7762 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7763 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7764 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7765 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7766 ; SDAG-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
7767 ; SDAG-NEXT: str x0, [x1]
7770 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_ld4lane:
7771 ; CHECK-GISEL: ; %bb.0:
7772 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7773 ; CHECK-GISEL-NEXT: add x8, x0, #32
7774 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7775 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7776 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7777 ; CHECK-GISEL-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0]
7778 ; CHECK-GISEL-NEXT: str x8, [x1]
7779 ; CHECK-GISEL-NEXT: ret
7780 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, ptr %A)
7781 %tmp = getelementptr i64, ptr %A, i32 4
7782 store ptr %tmp, ptr %ptr
7783 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
7786 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
7787 ; SDAG-LABEL: test_v1i64_post_reg_ld4lane:
7789 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7790 ; SDAG-NEXT: lsl x8, x2, #3
7791 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7792 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7793 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7794 ; SDAG-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], x8
7795 ; SDAG-NEXT: str x0, [x1]
7798 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_ld4lane:
7799 ; CHECK-GISEL: ; %bb.0:
7800 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7801 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
7802 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7803 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7804 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7805 ; CHECK-GISEL-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0]
7806 ; CHECK-GISEL-NEXT: str x8, [x1]
7807 ; CHECK-GISEL-NEXT: ret
7808 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, ptr %A)
7809 %tmp = getelementptr i64, ptr %A, i64 %inc
7810 store ptr %tmp, ptr %ptr
7811 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
7814 declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4lane.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>, i64, ptr) nounwind readonly
7817 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld4lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
7818 ; SDAG-LABEL: test_v4f32_post_imm_ld4lane:
7820 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7821 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7822 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7823 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7824 ; SDAG-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
7825 ; SDAG-NEXT: str x0, [x1]
7828 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld4lane:
7829 ; CHECK-GISEL: ; %bb.0:
7830 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7831 ; CHECK-GISEL-NEXT: add x8, x0, #16
7832 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7833 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7834 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7835 ; CHECK-GISEL-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0]
7836 ; CHECK-GISEL-NEXT: str x8, [x1]
7837 ; CHECK-GISEL-NEXT: ret
7838 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, ptr %A)
7839 %tmp = getelementptr float, ptr %A, i32 4
7840 store ptr %tmp, ptr %ptr
7841 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
7844 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
7845 ; SDAG-LABEL: test_v4f32_post_reg_ld4lane:
7847 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7848 ; SDAG-NEXT: lsl x8, x2, #2
7849 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7850 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7851 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7852 ; SDAG-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], x8
7853 ; SDAG-NEXT: str x0, [x1]
7856 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld4lane:
7857 ; CHECK-GISEL: ; %bb.0:
7858 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7859 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
7860 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7861 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7862 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7863 ; CHECK-GISEL-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0]
7864 ; CHECK-GISEL-NEXT: str x8, [x1]
7865 ; CHECK-GISEL-NEXT: ret
7866 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, ptr %A)
7867 %tmp = getelementptr float, ptr %A, i64 %inc
7868 store ptr %tmp, ptr %ptr
7869 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
7872 declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4lane.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, <4 x float>, i64, ptr) nounwind readonly
7875 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld4lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
7876 ; SDAG-LABEL: test_v2f32_post_imm_ld4lane:
7878 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7879 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7880 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7881 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7882 ; SDAG-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
7883 ; SDAG-NEXT: str x0, [x1]
7886 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld4lane:
7887 ; CHECK-GISEL: ; %bb.0:
7888 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7889 ; CHECK-GISEL-NEXT: add x8, x0, #16
7890 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7891 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7892 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7893 ; CHECK-GISEL-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0]
7894 ; CHECK-GISEL-NEXT: str x8, [x1]
7895 ; CHECK-GISEL-NEXT: ret
7896 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, ptr %A)
7897 %tmp = getelementptr float, ptr %A, i32 4
7898 store ptr %tmp, ptr %ptr
7899 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
7902 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
7903 ; SDAG-LABEL: test_v2f32_post_reg_ld4lane:
7905 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7906 ; SDAG-NEXT: lsl x8, x2, #2
7907 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7908 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7909 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7910 ; SDAG-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], x8
7911 ; SDAG-NEXT: str x0, [x1]
7914 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld4lane:
7915 ; CHECK-GISEL: ; %bb.0:
7916 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7917 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
7918 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7919 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7920 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7921 ; CHECK-GISEL-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0]
7922 ; CHECK-GISEL-NEXT: str x8, [x1]
7923 ; CHECK-GISEL-NEXT: ret
7924 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, ptr %A)
7925 %tmp = getelementptr float, ptr %A, i64 %inc
7926 store ptr %tmp, ptr %ptr
7927 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
7930 declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4lane.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, <2 x float>, i64, ptr) nounwind readonly
7933 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld4lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
7934 ; SDAG-LABEL: test_v2f64_post_imm_ld4lane:
7936 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7937 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7938 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7939 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7940 ; SDAG-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
7941 ; SDAG-NEXT: str x0, [x1]
7944 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld4lane:
7945 ; CHECK-GISEL: ; %bb.0:
7946 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7947 ; CHECK-GISEL-NEXT: add x8, x0, #32
7948 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7949 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7950 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7951 ; CHECK-GISEL-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0]
7952 ; CHECK-GISEL-NEXT: str x8, [x1]
7953 ; CHECK-GISEL-NEXT: ret
7954 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, ptr %A)
7955 %tmp = getelementptr double, ptr %A, i32 4
7956 store ptr %tmp, ptr %ptr
7957 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
7960 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
7961 ; SDAG-LABEL: test_v2f64_post_reg_ld4lane:
7963 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7964 ; SDAG-NEXT: lsl x8, x2, #3
7965 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7966 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7967 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7968 ; SDAG-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], x8
7969 ; SDAG-NEXT: str x0, [x1]
7972 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld4lane:
7973 ; CHECK-GISEL: ; %bb.0:
7974 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7975 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
7976 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7977 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7978 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7979 ; CHECK-GISEL-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0]
7980 ; CHECK-GISEL-NEXT: str x8, [x1]
7981 ; CHECK-GISEL-NEXT: ret
7982 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, ptr %A)
7983 %tmp = getelementptr double, ptr %A, i64 %inc
7984 store ptr %tmp, ptr %ptr
7985 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
7988 declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4lane.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, <2 x double>, i64, ptr) nounwind readonly
7991 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld4lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
7992 ; SDAG-LABEL: test_v1f64_post_imm_ld4lane:
7994 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7995 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7996 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7997 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7998 ; SDAG-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
7999 ; SDAG-NEXT: str x0, [x1]
8002 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_ld4lane:
8003 ; CHECK-GISEL: ; %bb.0:
8004 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8005 ; CHECK-GISEL-NEXT: add x8, x0, #32
8006 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8007 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8008 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8009 ; CHECK-GISEL-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0]
8010 ; CHECK-GISEL-NEXT: str x8, [x1]
8011 ; CHECK-GISEL-NEXT: ret
8012 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, ptr %A)
8013 %tmp = getelementptr double, ptr %A, i32 4
8014 store ptr %tmp, ptr %ptr
8015 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
8018 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
8019 ; SDAG-LABEL: test_v1f64_post_reg_ld4lane:
8021 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8022 ; SDAG-NEXT: lsl x8, x2, #3
8023 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8024 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8025 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8026 ; SDAG-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], x8
8027 ; SDAG-NEXT: str x0, [x1]
8030 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_ld4lane:
8031 ; CHECK-GISEL: ; %bb.0:
8032 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8033 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
8034 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8035 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8036 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8037 ; CHECK-GISEL-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0]
8038 ; CHECK-GISEL-NEXT: str x8, [x1]
8039 ; CHECK-GISEL-NEXT: ret
8040 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, ptr %A)
8041 %tmp = getelementptr double, ptr %A, i64 %inc
8042 store ptr %tmp, ptr %ptr
8043 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
8046 declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4lane.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, <1 x double>, i64, ptr) nounwind readonly
8049 define ptr @test_v16i8_post_imm_st2(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
8050 ; SDAG-LABEL: test_v16i8_post_imm_st2:
8052 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8053 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8054 ; SDAG-NEXT: st2.16b { v0, v1 }, [x0], #32
8057 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_st2:
8058 ; CHECK-GISEL: ; %bb.0:
8059 ; CHECK-GISEL-NEXT: mov x8, x0
8060 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8061 ; CHECK-GISEL-NEXT: add x0, x0, #32
8062 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8063 ; CHECK-GISEL-NEXT: st2.16b { v0, v1 }, [x8]
8064 ; CHECK-GISEL-NEXT: ret
8065 call void @llvm.aarch64.neon.st2.v16i8.p0(<16 x i8> %B, <16 x i8> %C, ptr %A)
8066 %tmp = getelementptr i8, ptr %A, i32 32
8070 define ptr @test_v16i8_post_reg_st2(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, i64 %inc) nounwind {
8071 ; SDAG-LABEL: test_v16i8_post_reg_st2:
8073 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8074 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8075 ; SDAG-NEXT: st2.16b { v0, v1 }, [x0], x2
8078 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_st2:
8079 ; CHECK-GISEL: ; %bb.0:
8080 ; CHECK-GISEL-NEXT: mov x8, x0
8081 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8082 ; CHECK-GISEL-NEXT: add x0, x0, x2
8083 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8084 ; CHECK-GISEL-NEXT: st2.16b { v0, v1 }, [x8]
8085 ; CHECK-GISEL-NEXT: ret
8086 call void @llvm.aarch64.neon.st2.v16i8.p0(<16 x i8> %B, <16 x i8> %C, ptr %A)
8087 %tmp = getelementptr i8, ptr %A, i64 %inc
8091 declare void @llvm.aarch64.neon.st2.v16i8.p0(<16 x i8>, <16 x i8>, ptr)
8094 define ptr @test_v8i8_post_imm_st2(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
8095 ; SDAG-LABEL: test_v8i8_post_imm_st2:
8097 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8098 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8099 ; SDAG-NEXT: st2.8b { v0, v1 }, [x0], #16
8102 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_st2:
8103 ; CHECK-GISEL: ; %bb.0:
8104 ; CHECK-GISEL-NEXT: mov x8, x0
8105 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8106 ; CHECK-GISEL-NEXT: add x0, x0, #16
8107 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8108 ; CHECK-GISEL-NEXT: st2.8b { v0, v1 }, [x8]
8109 ; CHECK-GISEL-NEXT: ret
8110 call void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8> %B, <8 x i8> %C, ptr %A)
8111 %tmp = getelementptr i8, ptr %A, i32 16
8115 define ptr @test_v8i8_post_reg_st2(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, i64 %inc) nounwind {
8116 ; SDAG-LABEL: test_v8i8_post_reg_st2:
8118 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8119 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8120 ; SDAG-NEXT: st2.8b { v0, v1 }, [x0], x2
8123 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_st2:
8124 ; CHECK-GISEL: ; %bb.0:
8125 ; CHECK-GISEL-NEXT: mov x8, x0
8126 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8127 ; CHECK-GISEL-NEXT: add x0, x0, x2
8128 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8129 ; CHECK-GISEL-NEXT: st2.8b { v0, v1 }, [x8]
8130 ; CHECK-GISEL-NEXT: ret
8131 call void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8> %B, <8 x i8> %C, ptr %A)
8132 %tmp = getelementptr i8, ptr %A, i64 %inc
8136 declare void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8>, <8 x i8>, ptr)
8139 define ptr @test_v8i16_post_imm_st2(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
8140 ; SDAG-LABEL: test_v8i16_post_imm_st2:
8142 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8143 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8144 ; SDAG-NEXT: st2.8h { v0, v1 }, [x0], #32
8147 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_st2:
8148 ; CHECK-GISEL: ; %bb.0:
8149 ; CHECK-GISEL-NEXT: mov x8, x0
8150 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8151 ; CHECK-GISEL-NEXT: add x0, x0, #32
8152 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8153 ; CHECK-GISEL-NEXT: st2.8h { v0, v1 }, [x8]
8154 ; CHECK-GISEL-NEXT: ret
8155 call void @llvm.aarch64.neon.st2.v8i16.p0(<8 x i16> %B, <8 x i16> %C, ptr %A)
8156 %tmp = getelementptr i16, ptr %A, i32 16
8160 define ptr @test_v8i16_post_reg_st2(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, i64 %inc) nounwind {
8161 ; SDAG-LABEL: test_v8i16_post_reg_st2:
8163 ; SDAG-NEXT: lsl x8, x2, #1
8164 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8165 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8166 ; SDAG-NEXT: st2.8h { v0, v1 }, [x0], x8
8169 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_st2:
8170 ; CHECK-GISEL: ; %bb.0:
8171 ; CHECK-GISEL-NEXT: mov x8, x0
8172 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
8173 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8174 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8175 ; CHECK-GISEL-NEXT: st2.8h { v0, v1 }, [x8]
8176 ; CHECK-GISEL-NEXT: ret
8177 call void @llvm.aarch64.neon.st2.v8i16.p0(<8 x i16> %B, <8 x i16> %C, ptr %A)
8178 %tmp = getelementptr i16, ptr %A, i64 %inc
8182 declare void @llvm.aarch64.neon.st2.v8i16.p0(<8 x i16>, <8 x i16>, ptr)
8185 define ptr @test_v4i16_post_imm_st2(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
8186 ; SDAG-LABEL: test_v4i16_post_imm_st2:
8188 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8189 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8190 ; SDAG-NEXT: st2.4h { v0, v1 }, [x0], #16
8193 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_st2:
8194 ; CHECK-GISEL: ; %bb.0:
8195 ; CHECK-GISEL-NEXT: mov x8, x0
8196 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8197 ; CHECK-GISEL-NEXT: add x0, x0, #16
8198 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8199 ; CHECK-GISEL-NEXT: st2.4h { v0, v1 }, [x8]
8200 ; CHECK-GISEL-NEXT: ret
8201 call void @llvm.aarch64.neon.st2.v4i16.p0(<4 x i16> %B, <4 x i16> %C, ptr %A)
8202 %tmp = getelementptr i16, ptr %A, i32 8
8206 define ptr @test_v4i16_post_reg_st2(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, i64 %inc) nounwind {
8207 ; SDAG-LABEL: test_v4i16_post_reg_st2:
8209 ; SDAG-NEXT: lsl x8, x2, #1
8210 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8211 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8212 ; SDAG-NEXT: st2.4h { v0, v1 }, [x0], x8
8215 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_st2:
8216 ; CHECK-GISEL: ; %bb.0:
8217 ; CHECK-GISEL-NEXT: mov x8, x0
8218 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
8219 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8220 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8221 ; CHECK-GISEL-NEXT: st2.4h { v0, v1 }, [x8]
8222 ; CHECK-GISEL-NEXT: ret
8223 call void @llvm.aarch64.neon.st2.v4i16.p0(<4 x i16> %B, <4 x i16> %C, ptr %A)
8224 %tmp = getelementptr i16, ptr %A, i64 %inc
8228 declare void @llvm.aarch64.neon.st2.v4i16.p0(<4 x i16>, <4 x i16>, ptr)
8231 define ptr @test_v4i32_post_imm_st2(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
8232 ; SDAG-LABEL: test_v4i32_post_imm_st2:
8234 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8235 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8236 ; SDAG-NEXT: st2.4s { v0, v1 }, [x0], #32
8239 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_st2:
8240 ; CHECK-GISEL: ; %bb.0:
8241 ; CHECK-GISEL-NEXT: mov x8, x0
8242 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8243 ; CHECK-GISEL-NEXT: add x0, x0, #32
8244 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8245 ; CHECK-GISEL-NEXT: st2.4s { v0, v1 }, [x8]
8246 ; CHECK-GISEL-NEXT: ret
8247 call void @llvm.aarch64.neon.st2.v4i32.p0(<4 x i32> %B, <4 x i32> %C, ptr %A)
8248 %tmp = getelementptr i32, ptr %A, i32 8
8252 define ptr @test_v4i32_post_reg_st2(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, i64 %inc) nounwind {
8253 ; SDAG-LABEL: test_v4i32_post_reg_st2:
8255 ; SDAG-NEXT: lsl x8, x2, #2
8256 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8257 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8258 ; SDAG-NEXT: st2.4s { v0, v1 }, [x0], x8
8261 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_st2:
8262 ; CHECK-GISEL: ; %bb.0:
8263 ; CHECK-GISEL-NEXT: mov x8, x0
8264 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
8265 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8266 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8267 ; CHECK-GISEL-NEXT: st2.4s { v0, v1 }, [x8]
8268 ; CHECK-GISEL-NEXT: ret
8269 call void @llvm.aarch64.neon.st2.v4i32.p0(<4 x i32> %B, <4 x i32> %C, ptr %A)
8270 %tmp = getelementptr i32, ptr %A, i64 %inc
8274 declare void @llvm.aarch64.neon.st2.v4i32.p0(<4 x i32>, <4 x i32>, ptr)
8277 define ptr @test_v2i32_post_imm_st2(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
8278 ; SDAG-LABEL: test_v2i32_post_imm_st2:
8280 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8281 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8282 ; SDAG-NEXT: st2.2s { v0, v1 }, [x0], #16
8285 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_st2:
8286 ; CHECK-GISEL: ; %bb.0:
8287 ; CHECK-GISEL-NEXT: mov x8, x0
8288 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8289 ; CHECK-GISEL-NEXT: add x0, x0, #16
8290 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8291 ; CHECK-GISEL-NEXT: st2.2s { v0, v1 }, [x8]
8292 ; CHECK-GISEL-NEXT: ret
8293 call void @llvm.aarch64.neon.st2.v2i32.p0(<2 x i32> %B, <2 x i32> %C, ptr %A)
8294 %tmp = getelementptr i32, ptr %A, i32 4
8298 define ptr @test_v2i32_post_reg_st2(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, i64 %inc) nounwind {
8299 ; SDAG-LABEL: test_v2i32_post_reg_st2:
8301 ; SDAG-NEXT: lsl x8, x2, #2
8302 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8303 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8304 ; SDAG-NEXT: st2.2s { v0, v1 }, [x0], x8
8307 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_st2:
8308 ; CHECK-GISEL: ; %bb.0:
8309 ; CHECK-GISEL-NEXT: mov x8, x0
8310 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
8311 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8312 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8313 ; CHECK-GISEL-NEXT: st2.2s { v0, v1 }, [x8]
8314 ; CHECK-GISEL-NEXT: ret
8315 call void @llvm.aarch64.neon.st2.v2i32.p0(<2 x i32> %B, <2 x i32> %C, ptr %A)
8316 %tmp = getelementptr i32, ptr %A, i64 %inc
8320 declare void @llvm.aarch64.neon.st2.v2i32.p0(<2 x i32>, <2 x i32>, ptr)
8323 define ptr @test_v2i64_post_imm_st2(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
8324 ; SDAG-LABEL: test_v2i64_post_imm_st2:
8326 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8327 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8328 ; SDAG-NEXT: st2.2d { v0, v1 }, [x0], #32
8331 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_st2:
8332 ; CHECK-GISEL: ; %bb.0:
8333 ; CHECK-GISEL-NEXT: mov x8, x0
8334 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8335 ; CHECK-GISEL-NEXT: add x0, x0, #32
8336 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8337 ; CHECK-GISEL-NEXT: st2.2d { v0, v1 }, [x8]
8338 ; CHECK-GISEL-NEXT: ret
8339 call void @llvm.aarch64.neon.st2.v2i64.p0(<2 x i64> %B, <2 x i64> %C, ptr %A)
8340 %tmp = getelementptr i64, ptr %A, i64 4
8344 define ptr @test_v2i64_post_reg_st2(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, i64 %inc) nounwind {
8345 ; SDAG-LABEL: test_v2i64_post_reg_st2:
8347 ; SDAG-NEXT: lsl x8, x2, #3
8348 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8349 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8350 ; SDAG-NEXT: st2.2d { v0, v1 }, [x0], x8
8353 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_st2:
8354 ; CHECK-GISEL: ; %bb.0:
8355 ; CHECK-GISEL-NEXT: mov x8, x0
8356 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
8357 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8358 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8359 ; CHECK-GISEL-NEXT: st2.2d { v0, v1 }, [x8]
8360 ; CHECK-GISEL-NEXT: ret
8361 call void @llvm.aarch64.neon.st2.v2i64.p0(<2 x i64> %B, <2 x i64> %C, ptr %A)
8362 %tmp = getelementptr i64, ptr %A, i64 %inc
8366 declare void @llvm.aarch64.neon.st2.v2i64.p0(<2 x i64>, <2 x i64>, ptr)
8369 define ptr @test_v1i64_post_imm_st2(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
8370 ; SDAG-LABEL: test_v1i64_post_imm_st2:
8372 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8373 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8374 ; SDAG-NEXT: st1.1d { v0, v1 }, [x0], #16
8377 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_st2:
8378 ; CHECK-GISEL: ; %bb.0:
8379 ; CHECK-GISEL-NEXT: mov x8, x0
8380 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8381 ; CHECK-GISEL-NEXT: add x0, x0, #16
8382 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8383 ; CHECK-GISEL-NEXT: st1.1d { v0, v1 }, [x8]
8384 ; CHECK-GISEL-NEXT: ret
8385 call void @llvm.aarch64.neon.st2.v1i64.p0(<1 x i64> %B, <1 x i64> %C, ptr %A)
8386 %tmp = getelementptr i64, ptr %A, i64 2
8390 define ptr @test_v1i64_post_reg_st2(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, i64 %inc) nounwind {
8391 ; SDAG-LABEL: test_v1i64_post_reg_st2:
8393 ; SDAG-NEXT: lsl x8, x2, #3
8394 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8395 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8396 ; SDAG-NEXT: st1.1d { v0, v1 }, [x0], x8
8399 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_st2:
8400 ; CHECK-GISEL: ; %bb.0:
8401 ; CHECK-GISEL-NEXT: mov x8, x0
8402 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
8403 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8404 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8405 ; CHECK-GISEL-NEXT: st1.1d { v0, v1 }, [x8]
8406 ; CHECK-GISEL-NEXT: ret
8407 call void @llvm.aarch64.neon.st2.v1i64.p0(<1 x i64> %B, <1 x i64> %C, ptr %A)
8408 %tmp = getelementptr i64, ptr %A, i64 %inc
8412 declare void @llvm.aarch64.neon.st2.v1i64.p0(<1 x i64>, <1 x i64>, ptr)
8415 define ptr @test_v4f32_post_imm_st2(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C) nounwind {
8416 ; SDAG-LABEL: test_v4f32_post_imm_st2:
8418 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8419 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8420 ; SDAG-NEXT: st2.4s { v0, v1 }, [x0], #32
8423 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_st2:
8424 ; CHECK-GISEL: ; %bb.0:
8425 ; CHECK-GISEL-NEXT: mov x8, x0
8426 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8427 ; CHECK-GISEL-NEXT: add x0, x0, #32
8428 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8429 ; CHECK-GISEL-NEXT: st2.4s { v0, v1 }, [x8]
8430 ; CHECK-GISEL-NEXT: ret
8431 call void @llvm.aarch64.neon.st2.v4f32.p0(<4 x float> %B, <4 x float> %C, ptr %A)
8432 %tmp = getelementptr float, ptr %A, i32 8
8436 define ptr @test_v4f32_post_reg_st2(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, i64 %inc) nounwind {
8437 ; SDAG-LABEL: test_v4f32_post_reg_st2:
8439 ; SDAG-NEXT: lsl x8, x2, #2
8440 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8441 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8442 ; SDAG-NEXT: st2.4s { v0, v1 }, [x0], x8
8445 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_st2:
8446 ; CHECK-GISEL: ; %bb.0:
8447 ; CHECK-GISEL-NEXT: mov x8, x0
8448 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
8449 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8450 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8451 ; CHECK-GISEL-NEXT: st2.4s { v0, v1 }, [x8]
8452 ; CHECK-GISEL-NEXT: ret
8453 call void @llvm.aarch64.neon.st2.v4f32.p0(<4 x float> %B, <4 x float> %C, ptr %A)
8454 %tmp = getelementptr float, ptr %A, i64 %inc
8458 declare void @llvm.aarch64.neon.st2.v4f32.p0(<4 x float>, <4 x float>, ptr)
8461 define ptr @test_v2f32_post_imm_st2(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C) nounwind {
8462 ; SDAG-LABEL: test_v2f32_post_imm_st2:
8464 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8465 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8466 ; SDAG-NEXT: st2.2s { v0, v1 }, [x0], #16
8469 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_st2:
8470 ; CHECK-GISEL: ; %bb.0:
8471 ; CHECK-GISEL-NEXT: mov x8, x0
8472 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8473 ; CHECK-GISEL-NEXT: add x0, x0, #16
8474 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8475 ; CHECK-GISEL-NEXT: st2.2s { v0, v1 }, [x8]
8476 ; CHECK-GISEL-NEXT: ret
8477 call void @llvm.aarch64.neon.st2.v2f32.p0(<2 x float> %B, <2 x float> %C, ptr %A)
8478 %tmp = getelementptr float, ptr %A, i32 4
8482 define ptr @test_v2f32_post_reg_st2(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, i64 %inc) nounwind {
8483 ; SDAG-LABEL: test_v2f32_post_reg_st2:
8485 ; SDAG-NEXT: lsl x8, x2, #2
8486 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8487 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8488 ; SDAG-NEXT: st2.2s { v0, v1 }, [x0], x8
8491 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_st2:
8492 ; CHECK-GISEL: ; %bb.0:
8493 ; CHECK-GISEL-NEXT: mov x8, x0
8494 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
8495 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8496 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8497 ; CHECK-GISEL-NEXT: st2.2s { v0, v1 }, [x8]
8498 ; CHECK-GISEL-NEXT: ret
8499 call void @llvm.aarch64.neon.st2.v2f32.p0(<2 x float> %B, <2 x float> %C, ptr %A)
8500 %tmp = getelementptr float, ptr %A, i64 %inc
8504 declare void @llvm.aarch64.neon.st2.v2f32.p0(<2 x float>, <2 x float>, ptr)
8507 define ptr @test_v2f64_post_imm_st2(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C) nounwind {
8508 ; SDAG-LABEL: test_v2f64_post_imm_st2:
8510 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8511 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8512 ; SDAG-NEXT: st2.2d { v0, v1 }, [x0], #32
8515 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_st2:
8516 ; CHECK-GISEL: ; %bb.0:
8517 ; CHECK-GISEL-NEXT: mov x8, x0
8518 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8519 ; CHECK-GISEL-NEXT: add x0, x0, #32
8520 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8521 ; CHECK-GISEL-NEXT: st2.2d { v0, v1 }, [x8]
8522 ; CHECK-GISEL-NEXT: ret
8523 call void @llvm.aarch64.neon.st2.v2f64.p0(<2 x double> %B, <2 x double> %C, ptr %A)
8524 %tmp = getelementptr double, ptr %A, i64 4
8528 define ptr @test_v2f64_post_reg_st2(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, i64 %inc) nounwind {
8529 ; SDAG-LABEL: test_v2f64_post_reg_st2:
8531 ; SDAG-NEXT: lsl x8, x2, #3
8532 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8533 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8534 ; SDAG-NEXT: st2.2d { v0, v1 }, [x0], x8
8537 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_st2:
8538 ; CHECK-GISEL: ; %bb.0:
8539 ; CHECK-GISEL-NEXT: mov x8, x0
8540 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
8541 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
8542 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
8543 ; CHECK-GISEL-NEXT: st2.2d { v0, v1 }, [x8]
8544 ; CHECK-GISEL-NEXT: ret
8545 call void @llvm.aarch64.neon.st2.v2f64.p0(<2 x double> %B, <2 x double> %C, ptr %A)
8546 %tmp = getelementptr double, ptr %A, i64 %inc
8550 declare void @llvm.aarch64.neon.st2.v2f64.p0(<2 x double>, <2 x double>, ptr)
8553 define ptr @test_v1f64_post_imm_st2(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C) nounwind {
8554 ; SDAG-LABEL: test_v1f64_post_imm_st2:
8556 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8557 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8558 ; SDAG-NEXT: st1.1d { v0, v1 }, [x0], #16
8561 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_st2:
8562 ; CHECK-GISEL: ; %bb.0:
8563 ; CHECK-GISEL-NEXT: mov x8, x0
8564 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8565 ; CHECK-GISEL-NEXT: add x0, x0, #16
8566 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8567 ; CHECK-GISEL-NEXT: st1.1d { v0, v1 }, [x8]
8568 ; CHECK-GISEL-NEXT: ret
8569 call void @llvm.aarch64.neon.st2.v1f64.p0(<1 x double> %B, <1 x double> %C, ptr %A)
8570 %tmp = getelementptr double, ptr %A, i64 2
8574 define ptr @test_v1f64_post_reg_st2(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, i64 %inc) nounwind {
8575 ; SDAG-LABEL: test_v1f64_post_reg_st2:
8577 ; SDAG-NEXT: lsl x8, x2, #3
8578 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8579 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8580 ; SDAG-NEXT: st1.1d { v0, v1 }, [x0], x8
8583 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_st2:
8584 ; CHECK-GISEL: ; %bb.0:
8585 ; CHECK-GISEL-NEXT: mov x8, x0
8586 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
8587 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
8588 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
8589 ; CHECK-GISEL-NEXT: st1.1d { v0, v1 }, [x8]
8590 ; CHECK-GISEL-NEXT: ret
8591 call void @llvm.aarch64.neon.st2.v1f64.p0(<1 x double> %B, <1 x double> %C, ptr %A)
8592 %tmp = getelementptr double, ptr %A, i64 %inc
8596 declare void @llvm.aarch64.neon.st2.v1f64.p0(<1 x double>, <1 x double>, ptr)
8599 define ptr @test_v16i8_post_imm_st3(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
8600 ; SDAG-LABEL: test_v16i8_post_imm_st3:
8602 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8603 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8604 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8605 ; SDAG-NEXT: st3.16b { v0, v1, v2 }, [x0], #48
8608 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_st3:
8609 ; CHECK-GISEL: ; %bb.0:
8610 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8611 ; CHECK-GISEL-NEXT: mov x8, x0
8612 ; CHECK-GISEL-NEXT: add x0, x0, #48
8613 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8614 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8615 ; CHECK-GISEL-NEXT: st3.16b { v0, v1, v2 }, [x8]
8616 ; CHECK-GISEL-NEXT: ret
8617 call void @llvm.aarch64.neon.st3.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %A)
8618 %tmp = getelementptr i8, ptr %A, i32 48
8622 define ptr @test_v16i8_post_reg_st3(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 %inc) nounwind {
8623 ; SDAG-LABEL: test_v16i8_post_reg_st3:
8625 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8626 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8627 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8628 ; SDAG-NEXT: st3.16b { v0, v1, v2 }, [x0], x2
8631 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_st3:
8632 ; CHECK-GISEL: ; %bb.0:
8633 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8634 ; CHECK-GISEL-NEXT: mov x8, x0
8635 ; CHECK-GISEL-NEXT: add x0, x0, x2
8636 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8637 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8638 ; CHECK-GISEL-NEXT: st3.16b { v0, v1, v2 }, [x8]
8639 ; CHECK-GISEL-NEXT: ret
8640 call void @llvm.aarch64.neon.st3.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %A)
8641 %tmp = getelementptr i8, ptr %A, i64 %inc
8645 declare void @llvm.aarch64.neon.st3.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, ptr)
8648 define ptr @test_v8i8_post_imm_st3(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
8649 ; SDAG-LABEL: test_v8i8_post_imm_st3:
8651 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8652 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8653 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8654 ; SDAG-NEXT: st3.8b { v0, v1, v2 }, [x0], #24
8657 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_st3:
8658 ; CHECK-GISEL: ; %bb.0:
8659 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8660 ; CHECK-GISEL-NEXT: mov x8, x0
8661 ; CHECK-GISEL-NEXT: add x0, x0, #24
8662 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8663 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8664 ; CHECK-GISEL-NEXT: st3.8b { v0, v1, v2 }, [x8]
8665 ; CHECK-GISEL-NEXT: ret
8666 call void @llvm.aarch64.neon.st3.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, ptr %A)
8667 %tmp = getelementptr i8, ptr %A, i32 24
8671 define ptr @test_v8i8_post_reg_st3(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 %inc) nounwind {
8672 ; SDAG-LABEL: test_v8i8_post_reg_st3:
8674 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8675 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8676 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8677 ; SDAG-NEXT: st3.8b { v0, v1, v2 }, [x0], x2
8680 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_st3:
8681 ; CHECK-GISEL: ; %bb.0:
8682 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8683 ; CHECK-GISEL-NEXT: mov x8, x0
8684 ; CHECK-GISEL-NEXT: add x0, x0, x2
8685 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8686 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8687 ; CHECK-GISEL-NEXT: st3.8b { v0, v1, v2 }, [x8]
8688 ; CHECK-GISEL-NEXT: ret
8689 call void @llvm.aarch64.neon.st3.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, ptr %A)
8690 %tmp = getelementptr i8, ptr %A, i64 %inc
8694 declare void @llvm.aarch64.neon.st3.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, ptr)
8697 define ptr @test_v8i16_post_imm_st3(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
8698 ; SDAG-LABEL: test_v8i16_post_imm_st3:
8700 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8701 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8702 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8703 ; SDAG-NEXT: st3.8h { v0, v1, v2 }, [x0], #48
8706 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_st3:
8707 ; CHECK-GISEL: ; %bb.0:
8708 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8709 ; CHECK-GISEL-NEXT: mov x8, x0
8710 ; CHECK-GISEL-NEXT: add x0, x0, #48
8711 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8712 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8713 ; CHECK-GISEL-NEXT: st3.8h { v0, v1, v2 }, [x8]
8714 ; CHECK-GISEL-NEXT: ret
8715 call void @llvm.aarch64.neon.st3.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %A)
8716 %tmp = getelementptr i16, ptr %A, i32 24
8720 define ptr @test_v8i16_post_reg_st3(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 %inc) nounwind {
8721 ; SDAG-LABEL: test_v8i16_post_reg_st3:
8723 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8724 ; SDAG-NEXT: lsl x8, x2, #1
8725 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8726 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8727 ; SDAG-NEXT: st3.8h { v0, v1, v2 }, [x0], x8
8730 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_st3:
8731 ; CHECK-GISEL: ; %bb.0:
8732 ; CHECK-GISEL-NEXT: mov x8, x0
8733 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8734 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
8735 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8736 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8737 ; CHECK-GISEL-NEXT: st3.8h { v0, v1, v2 }, [x8]
8738 ; CHECK-GISEL-NEXT: ret
8739 call void @llvm.aarch64.neon.st3.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %A)
8740 %tmp = getelementptr i16, ptr %A, i64 %inc
8744 declare void @llvm.aarch64.neon.st3.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, ptr)
8747 define ptr @test_v4i16_post_imm_st3(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
8748 ; SDAG-LABEL: test_v4i16_post_imm_st3:
8750 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8751 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8752 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8753 ; SDAG-NEXT: st3.4h { v0, v1, v2 }, [x0], #24
8756 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_st3:
8757 ; CHECK-GISEL: ; %bb.0:
8758 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8759 ; CHECK-GISEL-NEXT: mov x8, x0
8760 ; CHECK-GISEL-NEXT: add x0, x0, #24
8761 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8762 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8763 ; CHECK-GISEL-NEXT: st3.4h { v0, v1, v2 }, [x8]
8764 ; CHECK-GISEL-NEXT: ret
8765 call void @llvm.aarch64.neon.st3.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, ptr %A)
8766 %tmp = getelementptr i16, ptr %A, i32 12
8770 define ptr @test_v4i16_post_reg_st3(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 %inc) nounwind {
8771 ; SDAG-LABEL: test_v4i16_post_reg_st3:
8773 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8774 ; SDAG-NEXT: lsl x8, x2, #1
8775 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8776 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8777 ; SDAG-NEXT: st3.4h { v0, v1, v2 }, [x0], x8
8780 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_st3:
8781 ; CHECK-GISEL: ; %bb.0:
8782 ; CHECK-GISEL-NEXT: mov x8, x0
8783 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8784 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
8785 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8786 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8787 ; CHECK-GISEL-NEXT: st3.4h { v0, v1, v2 }, [x8]
8788 ; CHECK-GISEL-NEXT: ret
8789 call void @llvm.aarch64.neon.st3.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, ptr %A)
8790 %tmp = getelementptr i16, ptr %A, i64 %inc
8794 declare void @llvm.aarch64.neon.st3.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, ptr)
8797 define ptr @test_v4i32_post_imm_st3(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
8798 ; SDAG-LABEL: test_v4i32_post_imm_st3:
8800 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8801 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8802 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8803 ; SDAG-NEXT: st3.4s { v0, v1, v2 }, [x0], #48
8806 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_st3:
8807 ; CHECK-GISEL: ; %bb.0:
8808 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8809 ; CHECK-GISEL-NEXT: mov x8, x0
8810 ; CHECK-GISEL-NEXT: add x0, x0, #48
8811 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8812 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8813 ; CHECK-GISEL-NEXT: st3.4s { v0, v1, v2 }, [x8]
8814 ; CHECK-GISEL-NEXT: ret
8815 call void @llvm.aarch64.neon.st3.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %A)
8816 %tmp = getelementptr i32, ptr %A, i32 12
8820 define ptr @test_v4i32_post_reg_st3(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 %inc) nounwind {
8821 ; SDAG-LABEL: test_v4i32_post_reg_st3:
8823 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8824 ; SDAG-NEXT: lsl x8, x2, #2
8825 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8826 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8827 ; SDAG-NEXT: st3.4s { v0, v1, v2 }, [x0], x8
8830 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_st3:
8831 ; CHECK-GISEL: ; %bb.0:
8832 ; CHECK-GISEL-NEXT: mov x8, x0
8833 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8834 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
8835 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8836 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8837 ; CHECK-GISEL-NEXT: st3.4s { v0, v1, v2 }, [x8]
8838 ; CHECK-GISEL-NEXT: ret
8839 call void @llvm.aarch64.neon.st3.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %A)
8840 %tmp = getelementptr i32, ptr %A, i64 %inc
8844 declare void @llvm.aarch64.neon.st3.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, ptr)
8847 define ptr @test_v2i32_post_imm_st3(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
8848 ; SDAG-LABEL: test_v2i32_post_imm_st3:
8850 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8851 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8852 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8853 ; SDAG-NEXT: st3.2s { v0, v1, v2 }, [x0], #24
8856 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_st3:
8857 ; CHECK-GISEL: ; %bb.0:
8858 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8859 ; CHECK-GISEL-NEXT: mov x8, x0
8860 ; CHECK-GISEL-NEXT: add x0, x0, #24
8861 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8862 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8863 ; CHECK-GISEL-NEXT: st3.2s { v0, v1, v2 }, [x8]
8864 ; CHECK-GISEL-NEXT: ret
8865 call void @llvm.aarch64.neon.st3.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, ptr %A)
8866 %tmp = getelementptr i32, ptr %A, i32 6
8870 define ptr @test_v2i32_post_reg_st3(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 %inc) nounwind {
8871 ; SDAG-LABEL: test_v2i32_post_reg_st3:
8873 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8874 ; SDAG-NEXT: lsl x8, x2, #2
8875 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8876 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8877 ; SDAG-NEXT: st3.2s { v0, v1, v2 }, [x0], x8
8880 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_st3:
8881 ; CHECK-GISEL: ; %bb.0:
8882 ; CHECK-GISEL-NEXT: mov x8, x0
8883 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8884 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
8885 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8886 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8887 ; CHECK-GISEL-NEXT: st3.2s { v0, v1, v2 }, [x8]
8888 ; CHECK-GISEL-NEXT: ret
8889 call void @llvm.aarch64.neon.st3.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, ptr %A)
8890 %tmp = getelementptr i32, ptr %A, i64 %inc
8894 declare void @llvm.aarch64.neon.st3.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, ptr)
8897 define ptr @test_v2i64_post_imm_st3(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
8898 ; SDAG-LABEL: test_v2i64_post_imm_st3:
8900 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8901 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8902 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8903 ; SDAG-NEXT: st3.2d { v0, v1, v2 }, [x0], #48
8906 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_st3:
8907 ; CHECK-GISEL: ; %bb.0:
8908 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8909 ; CHECK-GISEL-NEXT: mov x8, x0
8910 ; CHECK-GISEL-NEXT: add x0, x0, #48
8911 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8912 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8913 ; CHECK-GISEL-NEXT: st3.2d { v0, v1, v2 }, [x8]
8914 ; CHECK-GISEL-NEXT: ret
8915 call void @llvm.aarch64.neon.st3.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %A)
8916 %tmp = getelementptr i64, ptr %A, i64 6
8920 define ptr @test_v2i64_post_reg_st3(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 %inc) nounwind {
8921 ; SDAG-LABEL: test_v2i64_post_reg_st3:
8923 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8924 ; SDAG-NEXT: lsl x8, x2, #3
8925 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8926 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8927 ; SDAG-NEXT: st3.2d { v0, v1, v2 }, [x0], x8
8930 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_st3:
8931 ; CHECK-GISEL: ; %bb.0:
8932 ; CHECK-GISEL-NEXT: mov x8, x0
8933 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
8934 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
8935 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
8936 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
8937 ; CHECK-GISEL-NEXT: st3.2d { v0, v1, v2 }, [x8]
8938 ; CHECK-GISEL-NEXT: ret
8939 call void @llvm.aarch64.neon.st3.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %A)
8940 %tmp = getelementptr i64, ptr %A, i64 %inc
8944 declare void @llvm.aarch64.neon.st3.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, ptr)
8947 define ptr @test_v1i64_post_imm_st3(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
8948 ; SDAG-LABEL: test_v1i64_post_imm_st3:
8950 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8951 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8952 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8953 ; SDAG-NEXT: st1.1d { v0, v1, v2 }, [x0], #24
8956 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_st3:
8957 ; CHECK-GISEL: ; %bb.0:
8958 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8959 ; CHECK-GISEL-NEXT: mov x8, x0
8960 ; CHECK-GISEL-NEXT: add x0, x0, #24
8961 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8962 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8963 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2 }, [x8]
8964 ; CHECK-GISEL-NEXT: ret
8965 call void @llvm.aarch64.neon.st3.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %A)
8966 %tmp = getelementptr i64, ptr %A, i64 3
8970 define ptr @test_v1i64_post_reg_st3(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 %inc) nounwind {
8971 ; SDAG-LABEL: test_v1i64_post_reg_st3:
8973 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8974 ; SDAG-NEXT: lsl x8, x2, #3
8975 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8976 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8977 ; SDAG-NEXT: st1.1d { v0, v1, v2 }, [x0], x8
8980 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_st3:
8981 ; CHECK-GISEL: ; %bb.0:
8982 ; CHECK-GISEL-NEXT: mov x8, x0
8983 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
8984 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
8985 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
8986 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
8987 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2 }, [x8]
8988 ; CHECK-GISEL-NEXT: ret
8989 call void @llvm.aarch64.neon.st3.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %A)
8990 %tmp = getelementptr i64, ptr %A, i64 %inc
8994 declare void @llvm.aarch64.neon.st3.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, ptr)
8997 define ptr @test_v4f32_post_imm_st3(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
8998 ; SDAG-LABEL: test_v4f32_post_imm_st3:
9000 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
9001 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
9002 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
9003 ; SDAG-NEXT: st3.4s { v0, v1, v2 }, [x0], #48
9006 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_st3:
9007 ; CHECK-GISEL: ; %bb.0:
9008 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
9009 ; CHECK-GISEL-NEXT: mov x8, x0
9010 ; CHECK-GISEL-NEXT: add x0, x0, #48
9011 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
9012 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
9013 ; CHECK-GISEL-NEXT: st3.4s { v0, v1, v2 }, [x8]
9014 ; CHECK-GISEL-NEXT: ret
9015 call void @llvm.aarch64.neon.st3.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, ptr %A)
9016 %tmp = getelementptr float, ptr %A, i32 12
9020 define ptr @test_v4f32_post_reg_st3(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, i64 %inc) nounwind {
9021 ; SDAG-LABEL: test_v4f32_post_reg_st3:
9023 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
9024 ; SDAG-NEXT: lsl x8, x2, #2
9025 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
9026 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
9027 ; SDAG-NEXT: st3.4s { v0, v1, v2 }, [x0], x8
9030 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_st3:
9031 ; CHECK-GISEL: ; %bb.0:
9032 ; CHECK-GISEL-NEXT: mov x8, x0
9033 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
9034 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
9035 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
9036 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
9037 ; CHECK-GISEL-NEXT: st3.4s { v0, v1, v2 }, [x8]
9038 ; CHECK-GISEL-NEXT: ret
9039 call void @llvm.aarch64.neon.st3.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, ptr %A)
9040 %tmp = getelementptr float, ptr %A, i64 %inc
9044 declare void @llvm.aarch64.neon.st3.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, ptr)
9047 define ptr @test_v2f32_post_imm_st3(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
9048 ; SDAG-LABEL: test_v2f32_post_imm_st3:
9050 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
9051 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
9052 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
9053 ; SDAG-NEXT: st3.2s { v0, v1, v2 }, [x0], #24
9056 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_st3:
9057 ; CHECK-GISEL: ; %bb.0:
9058 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
9059 ; CHECK-GISEL-NEXT: mov x8, x0
9060 ; CHECK-GISEL-NEXT: add x0, x0, #24
9061 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
9062 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
9063 ; CHECK-GISEL-NEXT: st3.2s { v0, v1, v2 }, [x8]
9064 ; CHECK-GISEL-NEXT: ret
9065 call void @llvm.aarch64.neon.st3.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, ptr %A)
9066 %tmp = getelementptr float, ptr %A, i32 6
9070 define ptr @test_v2f32_post_reg_st3(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, i64 %inc) nounwind {
9071 ; SDAG-LABEL: test_v2f32_post_reg_st3:
9073 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
9074 ; SDAG-NEXT: lsl x8, x2, #2
9075 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
9076 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
9077 ; SDAG-NEXT: st3.2s { v0, v1, v2 }, [x0], x8
9080 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_st3:
9081 ; CHECK-GISEL: ; %bb.0:
9082 ; CHECK-GISEL-NEXT: mov x8, x0
9083 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
9084 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
9085 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
9086 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
9087 ; CHECK-GISEL-NEXT: st3.2s { v0, v1, v2 }, [x8]
9088 ; CHECK-GISEL-NEXT: ret
9089 call void @llvm.aarch64.neon.st3.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, ptr %A)
9090 %tmp = getelementptr float, ptr %A, i64 %inc
9094 declare void @llvm.aarch64.neon.st3.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, ptr)
9097 define ptr @test_v2f64_post_imm_st3(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
9098 ; SDAG-LABEL: test_v2f64_post_imm_st3:
9100 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
9101 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
9102 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
9103 ; SDAG-NEXT: st3.2d { v0, v1, v2 }, [x0], #48
9106 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_st3:
9107 ; CHECK-GISEL: ; %bb.0:
9108 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
9109 ; CHECK-GISEL-NEXT: mov x8, x0
9110 ; CHECK-GISEL-NEXT: add x0, x0, #48
9111 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
9112 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
9113 ; CHECK-GISEL-NEXT: st3.2d { v0, v1, v2 }, [x8]
9114 ; CHECK-GISEL-NEXT: ret
9115 call void @llvm.aarch64.neon.st3.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %A)
9116 %tmp = getelementptr double, ptr %A, i64 6
9120 define ptr @test_v2f64_post_reg_st3(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, i64 %inc) nounwind {
9121 ; SDAG-LABEL: test_v2f64_post_reg_st3:
9123 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
9124 ; SDAG-NEXT: lsl x8, x2, #3
9125 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
9126 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
9127 ; SDAG-NEXT: st3.2d { v0, v1, v2 }, [x0], x8
9130 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_st3:
9131 ; CHECK-GISEL: ; %bb.0:
9132 ; CHECK-GISEL-NEXT: mov x8, x0
9133 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
9134 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
9135 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
9136 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
9137 ; CHECK-GISEL-NEXT: st3.2d { v0, v1, v2 }, [x8]
9138 ; CHECK-GISEL-NEXT: ret
9139 call void @llvm.aarch64.neon.st3.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %A)
9140 %tmp = getelementptr double, ptr %A, i64 %inc
9144 declare void @llvm.aarch64.neon.st3.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, ptr)
9147 define ptr @test_v1f64_post_imm_st3(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
9148 ; SDAG-LABEL: test_v1f64_post_imm_st3:
9150 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
9151 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
9152 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
9153 ; SDAG-NEXT: st1.1d { v0, v1, v2 }, [x0], #24
9156 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_st3:
9157 ; CHECK-GISEL: ; %bb.0:
9158 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
9159 ; CHECK-GISEL-NEXT: mov x8, x0
9160 ; CHECK-GISEL-NEXT: add x0, x0, #24
9161 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
9162 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
9163 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2 }, [x8]
9164 ; CHECK-GISEL-NEXT: ret
9165 call void @llvm.aarch64.neon.st3.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %A)
9166 %tmp = getelementptr double, ptr %A, i64 3
9170 define ptr @test_v1f64_post_reg_st3(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, i64 %inc) nounwind {
9171 ; SDAG-LABEL: test_v1f64_post_reg_st3:
9173 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
9174 ; SDAG-NEXT: lsl x8, x2, #3
9175 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
9176 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
9177 ; SDAG-NEXT: st1.1d { v0, v1, v2 }, [x0], x8
9180 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_st3:
9181 ; CHECK-GISEL: ; %bb.0:
9182 ; CHECK-GISEL-NEXT: mov x8, x0
9183 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
9184 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
9185 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
9186 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
9187 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2 }, [x8]
9188 ; CHECK-GISEL-NEXT: ret
9189 call void @llvm.aarch64.neon.st3.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %A)
9190 %tmp = getelementptr double, ptr %A, i64 %inc
9194 declare void @llvm.aarch64.neon.st3.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, ptr)
9197 define ptr @test_v16i8_post_imm_st4(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
9198 ; SDAG-LABEL: test_v16i8_post_imm_st4:
9200 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9201 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9202 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9203 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9204 ; SDAG-NEXT: st4.16b { v0, v1, v2, v3 }, [x0], #64
9207 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_st4:
9208 ; CHECK-GISEL: ; %bb.0:
9209 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9210 ; CHECK-GISEL-NEXT: mov x8, x0
9211 ; CHECK-GISEL-NEXT: add x0, x0, #64
9212 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9213 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9214 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9215 ; CHECK-GISEL-NEXT: st4.16b { v0, v1, v2, v3 }, [x8]
9216 ; CHECK-GISEL-NEXT: ret
9217 call void @llvm.aarch64.neon.st4.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, ptr %A)
9218 %tmp = getelementptr i8, ptr %A, i32 64
9222 define ptr @test_v16i8_post_reg_st4(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 %inc) nounwind {
9223 ; SDAG-LABEL: test_v16i8_post_reg_st4:
9225 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9226 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9227 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9228 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9229 ; SDAG-NEXT: st4.16b { v0, v1, v2, v3 }, [x0], x2
9232 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_st4:
9233 ; CHECK-GISEL: ; %bb.0:
9234 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9235 ; CHECK-GISEL-NEXT: mov x8, x0
9236 ; CHECK-GISEL-NEXT: add x0, x0, x2
9237 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9238 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9239 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9240 ; CHECK-GISEL-NEXT: st4.16b { v0, v1, v2, v3 }, [x8]
9241 ; CHECK-GISEL-NEXT: ret
9242 call void @llvm.aarch64.neon.st4.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, ptr %A)
9243 %tmp = getelementptr i8, ptr %A, i64 %inc
9247 declare void @llvm.aarch64.neon.st4.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, ptr)
9250 define ptr @test_v8i8_post_imm_st4(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
9251 ; SDAG-LABEL: test_v8i8_post_imm_st4:
9253 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9254 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9255 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9256 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9257 ; SDAG-NEXT: st4.8b { v0, v1, v2, v3 }, [x0], #32
9260 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_st4:
9261 ; CHECK-GISEL: ; %bb.0:
9262 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9263 ; CHECK-GISEL-NEXT: mov x8, x0
9264 ; CHECK-GISEL-NEXT: add x0, x0, #32
9265 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9266 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9267 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9268 ; CHECK-GISEL-NEXT: st4.8b { v0, v1, v2, v3 }, [x8]
9269 ; CHECK-GISEL-NEXT: ret
9270 call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, ptr %A)
9271 %tmp = getelementptr i8, ptr %A, i32 32
9275 define ptr @test_v8i8_post_reg_st4(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 %inc) nounwind {
9276 ; SDAG-LABEL: test_v8i8_post_reg_st4:
9278 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9279 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9280 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9281 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9282 ; SDAG-NEXT: st4.8b { v0, v1, v2, v3 }, [x0], x2
9285 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_st4:
9286 ; CHECK-GISEL: ; %bb.0:
9287 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9288 ; CHECK-GISEL-NEXT: mov x8, x0
9289 ; CHECK-GISEL-NEXT: add x0, x0, x2
9290 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9291 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9292 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9293 ; CHECK-GISEL-NEXT: st4.8b { v0, v1, v2, v3 }, [x8]
9294 ; CHECK-GISEL-NEXT: ret
9295 call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, ptr %A)
9296 %tmp = getelementptr i8, ptr %A, i64 %inc
9300 declare void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, ptr)
9303 define ptr @test_v8i16_post_imm_st4(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
9304 ; SDAG-LABEL: test_v8i16_post_imm_st4:
9306 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9307 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9308 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9309 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9310 ; SDAG-NEXT: st4.8h { v0, v1, v2, v3 }, [x0], #64
9313 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_st4:
9314 ; CHECK-GISEL: ; %bb.0:
9315 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9316 ; CHECK-GISEL-NEXT: mov x8, x0
9317 ; CHECK-GISEL-NEXT: add x0, x0, #64
9318 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9319 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9320 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9321 ; CHECK-GISEL-NEXT: st4.8h { v0, v1, v2, v3 }, [x8]
9322 ; CHECK-GISEL-NEXT: ret
9323 call void @llvm.aarch64.neon.st4.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, ptr %A)
9324 %tmp = getelementptr i16, ptr %A, i32 32
9328 define ptr @test_v8i16_post_reg_st4(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 %inc) nounwind {
9329 ; SDAG-LABEL: test_v8i16_post_reg_st4:
9331 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9332 ; SDAG-NEXT: lsl x8, x2, #1
9333 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9334 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9335 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9336 ; SDAG-NEXT: st4.8h { v0, v1, v2, v3 }, [x0], x8
9339 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_st4:
9340 ; CHECK-GISEL: ; %bb.0:
9341 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9342 ; CHECK-GISEL-NEXT: mov x8, x0
9343 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
9344 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9345 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9346 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9347 ; CHECK-GISEL-NEXT: st4.8h { v0, v1, v2, v3 }, [x8]
9348 ; CHECK-GISEL-NEXT: ret
9349 call void @llvm.aarch64.neon.st4.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, ptr %A)
9350 %tmp = getelementptr i16, ptr %A, i64 %inc
9354 declare void @llvm.aarch64.neon.st4.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, ptr)
9357 define ptr @test_v4i16_post_imm_st4(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
9358 ; SDAG-LABEL: test_v4i16_post_imm_st4:
9360 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9361 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9362 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9363 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9364 ; SDAG-NEXT: st4.4h { v0, v1, v2, v3 }, [x0], #32
9367 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_st4:
9368 ; CHECK-GISEL: ; %bb.0:
9369 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9370 ; CHECK-GISEL-NEXT: mov x8, x0
9371 ; CHECK-GISEL-NEXT: add x0, x0, #32
9372 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9373 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9374 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9375 ; CHECK-GISEL-NEXT: st4.4h { v0, v1, v2, v3 }, [x8]
9376 ; CHECK-GISEL-NEXT: ret
9377 call void @llvm.aarch64.neon.st4.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, ptr %A)
9378 %tmp = getelementptr i16, ptr %A, i32 16
9382 define ptr @test_v4i16_post_reg_st4(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 %inc) nounwind {
9383 ; SDAG-LABEL: test_v4i16_post_reg_st4:
9385 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9386 ; SDAG-NEXT: lsl x8, x2, #1
9387 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9388 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9389 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9390 ; SDAG-NEXT: st4.4h { v0, v1, v2, v3 }, [x0], x8
9393 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_st4:
9394 ; CHECK-GISEL: ; %bb.0:
9395 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9396 ; CHECK-GISEL-NEXT: mov x8, x0
9397 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
9398 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9399 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9400 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9401 ; CHECK-GISEL-NEXT: st4.4h { v0, v1, v2, v3 }, [x8]
9402 ; CHECK-GISEL-NEXT: ret
9403 call void @llvm.aarch64.neon.st4.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, ptr %A)
9404 %tmp = getelementptr i16, ptr %A, i64 %inc
9408 declare void @llvm.aarch64.neon.st4.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>,<4 x i16>, ptr)
9411 define ptr @test_v4i32_post_imm_st4(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
9412 ; SDAG-LABEL: test_v4i32_post_imm_st4:
9414 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9415 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9416 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9417 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9418 ; SDAG-NEXT: st4.4s { v0, v1, v2, v3 }, [x0], #64
9421 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_st4:
9422 ; CHECK-GISEL: ; %bb.0:
9423 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9424 ; CHECK-GISEL-NEXT: mov x8, x0
9425 ; CHECK-GISEL-NEXT: add x0, x0, #64
9426 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9427 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9428 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9429 ; CHECK-GISEL-NEXT: st4.4s { v0, v1, v2, v3 }, [x8]
9430 ; CHECK-GISEL-NEXT: ret
9431 call void @llvm.aarch64.neon.st4.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, ptr %A)
9432 %tmp = getelementptr i32, ptr %A, i32 16
9436 define ptr @test_v4i32_post_reg_st4(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 %inc) nounwind {
9437 ; SDAG-LABEL: test_v4i32_post_reg_st4:
9439 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9440 ; SDAG-NEXT: lsl x8, x2, #2
9441 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9442 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9443 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9444 ; SDAG-NEXT: st4.4s { v0, v1, v2, v3 }, [x0], x8
9447 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_st4:
9448 ; CHECK-GISEL: ; %bb.0:
9449 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9450 ; CHECK-GISEL-NEXT: mov x8, x0
9451 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
9452 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9453 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9454 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9455 ; CHECK-GISEL-NEXT: st4.4s { v0, v1, v2, v3 }, [x8]
9456 ; CHECK-GISEL-NEXT: ret
9457 call void @llvm.aarch64.neon.st4.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, ptr %A)
9458 %tmp = getelementptr i32, ptr %A, i64 %inc
9462 declare void @llvm.aarch64.neon.st4.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>,<4 x i32>, ptr)
9465 define ptr @test_v2i32_post_imm_st4(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
9466 ; SDAG-LABEL: test_v2i32_post_imm_st4:
9468 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9469 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9470 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9471 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9472 ; SDAG-NEXT: st4.2s { v0, v1, v2, v3 }, [x0], #32
9475 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_st4:
9476 ; CHECK-GISEL: ; %bb.0:
9477 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9478 ; CHECK-GISEL-NEXT: mov x8, x0
9479 ; CHECK-GISEL-NEXT: add x0, x0, #32
9480 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9481 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9482 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9483 ; CHECK-GISEL-NEXT: st4.2s { v0, v1, v2, v3 }, [x8]
9484 ; CHECK-GISEL-NEXT: ret
9485 call void @llvm.aarch64.neon.st4.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, ptr %A)
9486 %tmp = getelementptr i32, ptr %A, i32 8
9490 define ptr @test_v2i32_post_reg_st4(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 %inc) nounwind {
9491 ; SDAG-LABEL: test_v2i32_post_reg_st4:
9493 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9494 ; SDAG-NEXT: lsl x8, x2, #2
9495 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9496 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9497 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9498 ; SDAG-NEXT: st4.2s { v0, v1, v2, v3 }, [x0], x8
9501 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_st4:
9502 ; CHECK-GISEL: ; %bb.0:
9503 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9504 ; CHECK-GISEL-NEXT: mov x8, x0
9505 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
9506 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9507 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9508 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9509 ; CHECK-GISEL-NEXT: st4.2s { v0, v1, v2, v3 }, [x8]
9510 ; CHECK-GISEL-NEXT: ret
9511 call void @llvm.aarch64.neon.st4.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, ptr %A)
9512 %tmp = getelementptr i32, ptr %A, i64 %inc
9516 declare void @llvm.aarch64.neon.st4.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, ptr)
9519 define ptr @test_v2i64_post_imm_st4(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
9520 ; SDAG-LABEL: test_v2i64_post_imm_st4:
9522 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9523 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9524 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9525 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9526 ; SDAG-NEXT: st4.2d { v0, v1, v2, v3 }, [x0], #64
9529 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_st4:
9530 ; CHECK-GISEL: ; %bb.0:
9531 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9532 ; CHECK-GISEL-NEXT: mov x8, x0
9533 ; CHECK-GISEL-NEXT: add x0, x0, #64
9534 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9535 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9536 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9537 ; CHECK-GISEL-NEXT: st4.2d { v0, v1, v2, v3 }, [x8]
9538 ; CHECK-GISEL-NEXT: ret
9539 call void @llvm.aarch64.neon.st4.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, ptr %A)
9540 %tmp = getelementptr i64, ptr %A, i64 8
9544 define ptr @test_v2i64_post_reg_st4(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 %inc) nounwind {
9545 ; SDAG-LABEL: test_v2i64_post_reg_st4:
9547 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9548 ; SDAG-NEXT: lsl x8, x2, #3
9549 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9550 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9551 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9552 ; SDAG-NEXT: st4.2d { v0, v1, v2, v3 }, [x0], x8
9555 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_st4:
9556 ; CHECK-GISEL: ; %bb.0:
9557 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9558 ; CHECK-GISEL-NEXT: mov x8, x0
9559 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
9560 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9561 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9562 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9563 ; CHECK-GISEL-NEXT: st4.2d { v0, v1, v2, v3 }, [x8]
9564 ; CHECK-GISEL-NEXT: ret
9565 call void @llvm.aarch64.neon.st4.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, ptr %A)
9566 %tmp = getelementptr i64, ptr %A, i64 %inc
9570 declare void @llvm.aarch64.neon.st4.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>,<2 x i64>, ptr)
9573 define ptr @test_v1i64_post_imm_st4(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
9574 ; SDAG-LABEL: test_v1i64_post_imm_st4:
9576 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9577 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9578 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9579 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9580 ; SDAG-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], #32
9583 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_st4:
9584 ; CHECK-GISEL: ; %bb.0:
9585 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9586 ; CHECK-GISEL-NEXT: mov x8, x0
9587 ; CHECK-GISEL-NEXT: add x0, x0, #32
9588 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9589 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9590 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9591 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2, v3 }, [x8]
9592 ; CHECK-GISEL-NEXT: ret
9593 call void @llvm.aarch64.neon.st4.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, ptr %A)
9594 %tmp = getelementptr i64, ptr %A, i64 4
9598 define ptr @test_v1i64_post_reg_st4(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 %inc) nounwind {
9599 ; SDAG-LABEL: test_v1i64_post_reg_st4:
9601 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9602 ; SDAG-NEXT: lsl x8, x2, #3
9603 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9604 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9605 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9606 ; SDAG-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], x8
9609 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_st4:
9610 ; CHECK-GISEL: ; %bb.0:
9611 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9612 ; CHECK-GISEL-NEXT: mov x8, x0
9613 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
9614 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9615 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9616 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9617 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2, v3 }, [x8]
9618 ; CHECK-GISEL-NEXT: ret
9619 call void @llvm.aarch64.neon.st4.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, ptr %A)
9620 %tmp = getelementptr i64, ptr %A, i64 %inc
9624 declare void @llvm.aarch64.neon.st4.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>,<1 x i64>, ptr)
9627 define ptr @test_v4f32_post_imm_st4(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
9628 ; SDAG-LABEL: test_v4f32_post_imm_st4:
9630 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9631 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9632 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9633 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9634 ; SDAG-NEXT: st4.4s { v0, v1, v2, v3 }, [x0], #64
9637 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_st4:
9638 ; CHECK-GISEL: ; %bb.0:
9639 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9640 ; CHECK-GISEL-NEXT: mov x8, x0
9641 ; CHECK-GISEL-NEXT: add x0, x0, #64
9642 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9643 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9644 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9645 ; CHECK-GISEL-NEXT: st4.4s { v0, v1, v2, v3 }, [x8]
9646 ; CHECK-GISEL-NEXT: ret
9647 call void @llvm.aarch64.neon.st4.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, ptr %A)
9648 %tmp = getelementptr float, ptr %A, i32 16
9652 define ptr @test_v4f32_post_reg_st4(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 %inc) nounwind {
9653 ; SDAG-LABEL: test_v4f32_post_reg_st4:
9655 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9656 ; SDAG-NEXT: lsl x8, x2, #2
9657 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9658 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9659 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9660 ; SDAG-NEXT: st4.4s { v0, v1, v2, v3 }, [x0], x8
9663 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_st4:
9664 ; CHECK-GISEL: ; %bb.0:
9665 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9666 ; CHECK-GISEL-NEXT: mov x8, x0
9667 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
9668 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9669 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9670 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9671 ; CHECK-GISEL-NEXT: st4.4s { v0, v1, v2, v3 }, [x8]
9672 ; CHECK-GISEL-NEXT: ret
9673 call void @llvm.aarch64.neon.st4.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, ptr %A)
9674 %tmp = getelementptr float, ptr %A, i64 %inc
9678 declare void @llvm.aarch64.neon.st4.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, <4 x float>, ptr)
9681 define ptr @test_v2f32_post_imm_st4(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
9682 ; SDAG-LABEL: test_v2f32_post_imm_st4:
9684 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9685 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9686 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9687 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9688 ; SDAG-NEXT: st4.2s { v0, v1, v2, v3 }, [x0], #32
9691 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_st4:
9692 ; CHECK-GISEL: ; %bb.0:
9693 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9694 ; CHECK-GISEL-NEXT: mov x8, x0
9695 ; CHECK-GISEL-NEXT: add x0, x0, #32
9696 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9697 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9698 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9699 ; CHECK-GISEL-NEXT: st4.2s { v0, v1, v2, v3 }, [x8]
9700 ; CHECK-GISEL-NEXT: ret
9701 call void @llvm.aarch64.neon.st4.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, ptr %A)
9702 %tmp = getelementptr float, ptr %A, i32 8
9706 define ptr @test_v2f32_post_reg_st4(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 %inc) nounwind {
9707 ; SDAG-LABEL: test_v2f32_post_reg_st4:
9709 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9710 ; SDAG-NEXT: lsl x8, x2, #2
9711 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9712 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9713 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9714 ; SDAG-NEXT: st4.2s { v0, v1, v2, v3 }, [x0], x8
9717 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_st4:
9718 ; CHECK-GISEL: ; %bb.0:
9719 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9720 ; CHECK-GISEL-NEXT: mov x8, x0
9721 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
9722 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9723 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9724 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9725 ; CHECK-GISEL-NEXT: st4.2s { v0, v1, v2, v3 }, [x8]
9726 ; CHECK-GISEL-NEXT: ret
9727 call void @llvm.aarch64.neon.st4.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, ptr %A)
9728 %tmp = getelementptr float, ptr %A, i64 %inc
9732 declare void @llvm.aarch64.neon.st4.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, <2 x float>, ptr)
9735 define ptr @test_v2f64_post_imm_st4(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
9736 ; SDAG-LABEL: test_v2f64_post_imm_st4:
9738 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9739 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9740 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9741 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9742 ; SDAG-NEXT: st4.2d { v0, v1, v2, v3 }, [x0], #64
9745 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_st4:
9746 ; CHECK-GISEL: ; %bb.0:
9747 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9748 ; CHECK-GISEL-NEXT: mov x8, x0
9749 ; CHECK-GISEL-NEXT: add x0, x0, #64
9750 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9751 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9752 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9753 ; CHECK-GISEL-NEXT: st4.2d { v0, v1, v2, v3 }, [x8]
9754 ; CHECK-GISEL-NEXT: ret
9755 call void @llvm.aarch64.neon.st4.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, ptr %A)
9756 %tmp = getelementptr double, ptr %A, i64 8
9760 define ptr @test_v2f64_post_reg_st4(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 %inc) nounwind {
9761 ; SDAG-LABEL: test_v2f64_post_reg_st4:
9763 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9764 ; SDAG-NEXT: lsl x8, x2, #3
9765 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9766 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9767 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9768 ; SDAG-NEXT: st4.2d { v0, v1, v2, v3 }, [x0], x8
9771 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_st4:
9772 ; CHECK-GISEL: ; %bb.0:
9773 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9774 ; CHECK-GISEL-NEXT: mov x8, x0
9775 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
9776 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9777 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9778 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
9779 ; CHECK-GISEL-NEXT: st4.2d { v0, v1, v2, v3 }, [x8]
9780 ; CHECK-GISEL-NEXT: ret
9781 call void @llvm.aarch64.neon.st4.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, ptr %A)
9782 %tmp = getelementptr double, ptr %A, i64 %inc
9786 declare void @llvm.aarch64.neon.st4.v2f64.p0(<2 x double>, <2 x double>, <2 x double>,<2 x double>, ptr)
9789 define ptr @test_v1f64_post_imm_st4(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
9790 ; SDAG-LABEL: test_v1f64_post_imm_st4:
9792 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9793 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9794 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9795 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9796 ; SDAG-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], #32
9799 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_st4:
9800 ; CHECK-GISEL: ; %bb.0:
9801 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9802 ; CHECK-GISEL-NEXT: mov x8, x0
9803 ; CHECK-GISEL-NEXT: add x0, x0, #32
9804 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9805 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9806 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9807 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2, v3 }, [x8]
9808 ; CHECK-GISEL-NEXT: ret
9809 call void @llvm.aarch64.neon.st4.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, ptr %A)
9810 %tmp = getelementptr double, ptr %A, i64 4
9814 define ptr @test_v1f64_post_reg_st4(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 %inc) nounwind {
9815 ; SDAG-LABEL: test_v1f64_post_reg_st4:
9817 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9818 ; SDAG-NEXT: lsl x8, x2, #3
9819 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9820 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9821 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9822 ; SDAG-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], x8
9825 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_st4:
9826 ; CHECK-GISEL: ; %bb.0:
9827 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9828 ; CHECK-GISEL-NEXT: mov x8, x0
9829 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
9830 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9831 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9832 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
9833 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2, v3 }, [x8]
9834 ; CHECK-GISEL-NEXT: ret
9835 call void @llvm.aarch64.neon.st4.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, ptr %A)
9836 %tmp = getelementptr double, ptr %A, i64 %inc
9840 declare void @llvm.aarch64.neon.st4.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, <1 x double>, ptr)
9843 define ptr @test_v16i8_post_imm_st1x2(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
9844 ; SDAG-LABEL: test_v16i8_post_imm_st1x2:
9846 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
9847 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
9848 ; SDAG-NEXT: st1.16b { v0, v1 }, [x0], #32
9851 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_st1x2:
9852 ; CHECK-GISEL: ; %bb.0:
9853 ; CHECK-GISEL-NEXT: mov x8, x0
9854 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
9855 ; CHECK-GISEL-NEXT: add x0, x0, #32
9856 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
9857 ; CHECK-GISEL-NEXT: st1.16b { v0, v1 }, [x8]
9858 ; CHECK-GISEL-NEXT: ret
9859 call void @llvm.aarch64.neon.st1x2.v16i8.p0(<16 x i8> %B, <16 x i8> %C, ptr %A)
9860 %tmp = getelementptr i8, ptr %A, i32 32
9864 define ptr @test_v16i8_post_reg_st1x2(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, i64 %inc) nounwind {
9865 ; SDAG-LABEL: test_v16i8_post_reg_st1x2:
9867 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
9868 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
9869 ; SDAG-NEXT: st1.16b { v0, v1 }, [x0], x2
9872 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_st1x2:
9873 ; CHECK-GISEL: ; %bb.0:
9874 ; CHECK-GISEL-NEXT: mov x8, x0
9875 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
9876 ; CHECK-GISEL-NEXT: add x0, x0, x2
9877 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
9878 ; CHECK-GISEL-NEXT: st1.16b { v0, v1 }, [x8]
9879 ; CHECK-GISEL-NEXT: ret
9880 call void @llvm.aarch64.neon.st1x2.v16i8.p0(<16 x i8> %B, <16 x i8> %C, ptr %A)
9881 %tmp = getelementptr i8, ptr %A, i64 %inc
9885 declare void @llvm.aarch64.neon.st1x2.v16i8.p0(<16 x i8>, <16 x i8>, ptr)
9888 define ptr @test_v8i8_post_imm_st1x2(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
9889 ; SDAG-LABEL: test_v8i8_post_imm_st1x2:
9891 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
9892 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
9893 ; SDAG-NEXT: st1.8b { v0, v1 }, [x0], #16
9896 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_st1x2:
9897 ; CHECK-GISEL: ; %bb.0:
9898 ; CHECK-GISEL-NEXT: mov x8, x0
9899 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
9900 ; CHECK-GISEL-NEXT: add x0, x0, #16
9901 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
9902 ; CHECK-GISEL-NEXT: st1.8b { v0, v1 }, [x8]
9903 ; CHECK-GISEL-NEXT: ret
9904 call void @llvm.aarch64.neon.st1x2.v8i8.p0(<8 x i8> %B, <8 x i8> %C, ptr %A)
9905 %tmp = getelementptr i8, ptr %A, i32 16
9909 define ptr @test_v8i8_post_reg_st1x2(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, i64 %inc) nounwind {
9910 ; SDAG-LABEL: test_v8i8_post_reg_st1x2:
9912 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
9913 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
9914 ; SDAG-NEXT: st1.8b { v0, v1 }, [x0], x2
9917 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_st1x2:
9918 ; CHECK-GISEL: ; %bb.0:
9919 ; CHECK-GISEL-NEXT: mov x8, x0
9920 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
9921 ; CHECK-GISEL-NEXT: add x0, x0, x2
9922 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
9923 ; CHECK-GISEL-NEXT: st1.8b { v0, v1 }, [x8]
9924 ; CHECK-GISEL-NEXT: ret
9925 call void @llvm.aarch64.neon.st1x2.v8i8.p0(<8 x i8> %B, <8 x i8> %C, ptr %A)
9926 %tmp = getelementptr i8, ptr %A, i64 %inc
9930 declare void @llvm.aarch64.neon.st1x2.v8i8.p0(<8 x i8>, <8 x i8>, ptr)
9933 define ptr @test_v8i16_post_imm_st1x2(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
9934 ; SDAG-LABEL: test_v8i16_post_imm_st1x2:
9936 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
9937 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
9938 ; SDAG-NEXT: st1.8h { v0, v1 }, [x0], #32
9941 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_st1x2:
9942 ; CHECK-GISEL: ; %bb.0:
9943 ; CHECK-GISEL-NEXT: mov x8, x0
9944 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
9945 ; CHECK-GISEL-NEXT: add x0, x0, #32
9946 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
9947 ; CHECK-GISEL-NEXT: st1.8h { v0, v1 }, [x8]
9948 ; CHECK-GISEL-NEXT: ret
9949 call void @llvm.aarch64.neon.st1x2.v8i16.p0(<8 x i16> %B, <8 x i16> %C, ptr %A)
9950 %tmp = getelementptr i16, ptr %A, i32 16
9954 define ptr @test_v8i16_post_reg_st1x2(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, i64 %inc) nounwind {
9955 ; SDAG-LABEL: test_v8i16_post_reg_st1x2:
9957 ; SDAG-NEXT: lsl x8, x2, #1
9958 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
9959 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
9960 ; SDAG-NEXT: st1.8h { v0, v1 }, [x0], x8
9963 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_st1x2:
9964 ; CHECK-GISEL: ; %bb.0:
9965 ; CHECK-GISEL-NEXT: mov x8, x0
9966 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
9967 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
9968 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
9969 ; CHECK-GISEL-NEXT: st1.8h { v0, v1 }, [x8]
9970 ; CHECK-GISEL-NEXT: ret
9971 call void @llvm.aarch64.neon.st1x2.v8i16.p0(<8 x i16> %B, <8 x i16> %C, ptr %A)
9972 %tmp = getelementptr i16, ptr %A, i64 %inc
9976 declare void @llvm.aarch64.neon.st1x2.v8i16.p0(<8 x i16>, <8 x i16>, ptr)
9979 define ptr @test_v4i16_post_imm_st1x2(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
9980 ; SDAG-LABEL: test_v4i16_post_imm_st1x2:
9982 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
9983 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
9984 ; SDAG-NEXT: st1.4h { v0, v1 }, [x0], #16
9987 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_st1x2:
9988 ; CHECK-GISEL: ; %bb.0:
9989 ; CHECK-GISEL-NEXT: mov x8, x0
9990 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
9991 ; CHECK-GISEL-NEXT: add x0, x0, #16
9992 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
9993 ; CHECK-GISEL-NEXT: st1.4h { v0, v1 }, [x8]
9994 ; CHECK-GISEL-NEXT: ret
9995 call void @llvm.aarch64.neon.st1x2.v4i16.p0(<4 x i16> %B, <4 x i16> %C, ptr %A)
9996 %tmp = getelementptr i16, ptr %A, i32 8
10000 define ptr @test_v4i16_post_reg_st1x2(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, i64 %inc) nounwind {
10001 ; SDAG-LABEL: test_v4i16_post_reg_st1x2:
10003 ; SDAG-NEXT: lsl x8, x2, #1
10004 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10005 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10006 ; SDAG-NEXT: st1.4h { v0, v1 }, [x0], x8
10009 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_st1x2:
10010 ; CHECK-GISEL: ; %bb.0:
10011 ; CHECK-GISEL-NEXT: mov x8, x0
10012 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
10013 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10014 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10015 ; CHECK-GISEL-NEXT: st1.4h { v0, v1 }, [x8]
10016 ; CHECK-GISEL-NEXT: ret
10017 call void @llvm.aarch64.neon.st1x2.v4i16.p0(<4 x i16> %B, <4 x i16> %C, ptr %A)
10018 %tmp = getelementptr i16, ptr %A, i64 %inc
10022 declare void @llvm.aarch64.neon.st1x2.v4i16.p0(<4 x i16>, <4 x i16>, ptr)
10025 define ptr @test_v4i32_post_imm_st1x2(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
10026 ; SDAG-LABEL: test_v4i32_post_imm_st1x2:
10028 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10029 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10030 ; SDAG-NEXT: st1.4s { v0, v1 }, [x0], #32
10033 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_st1x2:
10034 ; CHECK-GISEL: ; %bb.0:
10035 ; CHECK-GISEL-NEXT: mov x8, x0
10036 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10037 ; CHECK-GISEL-NEXT: add x0, x0, #32
10038 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10039 ; CHECK-GISEL-NEXT: st1.4s { v0, v1 }, [x8]
10040 ; CHECK-GISEL-NEXT: ret
10041 call void @llvm.aarch64.neon.st1x2.v4i32.p0(<4 x i32> %B, <4 x i32> %C, ptr %A)
10042 %tmp = getelementptr i32, ptr %A, i32 8
10046 define ptr @test_v4i32_post_reg_st1x2(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, i64 %inc) nounwind {
10047 ; SDAG-LABEL: test_v4i32_post_reg_st1x2:
10049 ; SDAG-NEXT: lsl x8, x2, #2
10050 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10051 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10052 ; SDAG-NEXT: st1.4s { v0, v1 }, [x0], x8
10055 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_st1x2:
10056 ; CHECK-GISEL: ; %bb.0:
10057 ; CHECK-GISEL-NEXT: mov x8, x0
10058 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
10059 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10060 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10061 ; CHECK-GISEL-NEXT: st1.4s { v0, v1 }, [x8]
10062 ; CHECK-GISEL-NEXT: ret
10063 call void @llvm.aarch64.neon.st1x2.v4i32.p0(<4 x i32> %B, <4 x i32> %C, ptr %A)
10064 %tmp = getelementptr i32, ptr %A, i64 %inc
10068 declare void @llvm.aarch64.neon.st1x2.v4i32.p0(<4 x i32>, <4 x i32>, ptr)
10071 define ptr @test_v2i32_post_imm_st1x2(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
10072 ; SDAG-LABEL: test_v2i32_post_imm_st1x2:
10074 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10075 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10076 ; SDAG-NEXT: st1.2s { v0, v1 }, [x0], #16
10079 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_st1x2:
10080 ; CHECK-GISEL: ; %bb.0:
10081 ; CHECK-GISEL-NEXT: mov x8, x0
10082 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10083 ; CHECK-GISEL-NEXT: add x0, x0, #16
10084 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10085 ; CHECK-GISEL-NEXT: st1.2s { v0, v1 }, [x8]
10086 ; CHECK-GISEL-NEXT: ret
10087 call void @llvm.aarch64.neon.st1x2.v2i32.p0(<2 x i32> %B, <2 x i32> %C, ptr %A)
10088 %tmp = getelementptr i32, ptr %A, i32 4
10092 define ptr @test_v2i32_post_reg_st1x2(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, i64 %inc) nounwind {
10093 ; SDAG-LABEL: test_v2i32_post_reg_st1x2:
10095 ; SDAG-NEXT: lsl x8, x2, #2
10096 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10097 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10098 ; SDAG-NEXT: st1.2s { v0, v1 }, [x0], x8
10101 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_st1x2:
10102 ; CHECK-GISEL: ; %bb.0:
10103 ; CHECK-GISEL-NEXT: mov x8, x0
10104 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
10105 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10106 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10107 ; CHECK-GISEL-NEXT: st1.2s { v0, v1 }, [x8]
10108 ; CHECK-GISEL-NEXT: ret
10109 call void @llvm.aarch64.neon.st1x2.v2i32.p0(<2 x i32> %B, <2 x i32> %C, ptr %A)
10110 %tmp = getelementptr i32, ptr %A, i64 %inc
10114 declare void @llvm.aarch64.neon.st1x2.v2i32.p0(<2 x i32>, <2 x i32>, ptr)
10117 define ptr @test_v2i64_post_imm_st1x2(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
10118 ; SDAG-LABEL: test_v2i64_post_imm_st1x2:
10120 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10121 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10122 ; SDAG-NEXT: st1.2d { v0, v1 }, [x0], #32
10125 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_st1x2:
10126 ; CHECK-GISEL: ; %bb.0:
10127 ; CHECK-GISEL-NEXT: mov x8, x0
10128 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10129 ; CHECK-GISEL-NEXT: add x0, x0, #32
10130 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10131 ; CHECK-GISEL-NEXT: st1.2d { v0, v1 }, [x8]
10132 ; CHECK-GISEL-NEXT: ret
10133 call void @llvm.aarch64.neon.st1x2.v2i64.p0(<2 x i64> %B, <2 x i64> %C, ptr %A)
10134 %tmp = getelementptr i64, ptr %A, i64 4
10138 define ptr @test_v2i64_post_reg_st1x2(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, i64 %inc) nounwind {
10139 ; SDAG-LABEL: test_v2i64_post_reg_st1x2:
10141 ; SDAG-NEXT: lsl x8, x2, #3
10142 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10143 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10144 ; SDAG-NEXT: st1.2d { v0, v1 }, [x0], x8
10147 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_st1x2:
10148 ; CHECK-GISEL: ; %bb.0:
10149 ; CHECK-GISEL-NEXT: mov x8, x0
10150 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
10151 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10152 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10153 ; CHECK-GISEL-NEXT: st1.2d { v0, v1 }, [x8]
10154 ; CHECK-GISEL-NEXT: ret
10155 call void @llvm.aarch64.neon.st1x2.v2i64.p0(<2 x i64> %B, <2 x i64> %C, ptr %A)
10156 %tmp = getelementptr i64, ptr %A, i64 %inc
10160 declare void @llvm.aarch64.neon.st1x2.v2i64.p0(<2 x i64>, <2 x i64>, ptr)
10163 define ptr @test_v1i64_post_imm_st1x2(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
10164 ; SDAG-LABEL: test_v1i64_post_imm_st1x2:
10166 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10167 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10168 ; SDAG-NEXT: st1.1d { v0, v1 }, [x0], #16
10171 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_st1x2:
10172 ; CHECK-GISEL: ; %bb.0:
10173 ; CHECK-GISEL-NEXT: mov x8, x0
10174 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10175 ; CHECK-GISEL-NEXT: add x0, x0, #16
10176 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10177 ; CHECK-GISEL-NEXT: st1.1d { v0, v1 }, [x8]
10178 ; CHECK-GISEL-NEXT: ret
10179 call void @llvm.aarch64.neon.st1x2.v1i64.p0(<1 x i64> %B, <1 x i64> %C, ptr %A)
10180 %tmp = getelementptr i64, ptr %A, i64 2
10184 define ptr @test_v1i64_post_reg_st1x2(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, i64 %inc) nounwind {
10185 ; SDAG-LABEL: test_v1i64_post_reg_st1x2:
10187 ; SDAG-NEXT: lsl x8, x2, #3
10188 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10189 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10190 ; SDAG-NEXT: st1.1d { v0, v1 }, [x0], x8
10193 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_st1x2:
10194 ; CHECK-GISEL: ; %bb.0:
10195 ; CHECK-GISEL-NEXT: mov x8, x0
10196 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
10197 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10198 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10199 ; CHECK-GISEL-NEXT: st1.1d { v0, v1 }, [x8]
10200 ; CHECK-GISEL-NEXT: ret
10201 call void @llvm.aarch64.neon.st1x2.v1i64.p0(<1 x i64> %B, <1 x i64> %C, ptr %A)
10202 %tmp = getelementptr i64, ptr %A, i64 %inc
10206 declare void @llvm.aarch64.neon.st1x2.v1i64.p0(<1 x i64>, <1 x i64>, ptr)
10209 define ptr @test_v4f32_post_imm_st1x2(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C) nounwind {
10210 ; SDAG-LABEL: test_v4f32_post_imm_st1x2:
10212 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10213 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10214 ; SDAG-NEXT: st1.4s { v0, v1 }, [x0], #32
10217 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_st1x2:
10218 ; CHECK-GISEL: ; %bb.0:
10219 ; CHECK-GISEL-NEXT: mov x8, x0
10220 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10221 ; CHECK-GISEL-NEXT: add x0, x0, #32
10222 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10223 ; CHECK-GISEL-NEXT: st1.4s { v0, v1 }, [x8]
10224 ; CHECK-GISEL-NEXT: ret
10225 call void @llvm.aarch64.neon.st1x2.v4f32.p0(<4 x float> %B, <4 x float> %C, ptr %A)
10226 %tmp = getelementptr float, ptr %A, i32 8
10230 define ptr @test_v4f32_post_reg_st1x2(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, i64 %inc) nounwind {
10231 ; SDAG-LABEL: test_v4f32_post_reg_st1x2:
10233 ; SDAG-NEXT: lsl x8, x2, #2
10234 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10235 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10236 ; SDAG-NEXT: st1.4s { v0, v1 }, [x0], x8
10239 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_st1x2:
10240 ; CHECK-GISEL: ; %bb.0:
10241 ; CHECK-GISEL-NEXT: mov x8, x0
10242 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
10243 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10244 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10245 ; CHECK-GISEL-NEXT: st1.4s { v0, v1 }, [x8]
10246 ; CHECK-GISEL-NEXT: ret
10247 call void @llvm.aarch64.neon.st1x2.v4f32.p0(<4 x float> %B, <4 x float> %C, ptr %A)
10248 %tmp = getelementptr float, ptr %A, i64 %inc
10252 declare void @llvm.aarch64.neon.st1x2.v4f32.p0(<4 x float>, <4 x float>, ptr)
10255 define ptr @test_v2f32_post_imm_st1x2(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C) nounwind {
10256 ; SDAG-LABEL: test_v2f32_post_imm_st1x2:
10258 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10259 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10260 ; SDAG-NEXT: st1.2s { v0, v1 }, [x0], #16
10263 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_st1x2:
10264 ; CHECK-GISEL: ; %bb.0:
10265 ; CHECK-GISEL-NEXT: mov x8, x0
10266 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10267 ; CHECK-GISEL-NEXT: add x0, x0, #16
10268 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10269 ; CHECK-GISEL-NEXT: st1.2s { v0, v1 }, [x8]
10270 ; CHECK-GISEL-NEXT: ret
10271 call void @llvm.aarch64.neon.st1x2.v2f32.p0(<2 x float> %B, <2 x float> %C, ptr %A)
10272 %tmp = getelementptr float, ptr %A, i32 4
10276 define ptr @test_v2f32_post_reg_st1x2(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, i64 %inc) nounwind {
10277 ; SDAG-LABEL: test_v2f32_post_reg_st1x2:
10279 ; SDAG-NEXT: lsl x8, x2, #2
10280 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10281 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10282 ; SDAG-NEXT: st1.2s { v0, v1 }, [x0], x8
10285 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_st1x2:
10286 ; CHECK-GISEL: ; %bb.0:
10287 ; CHECK-GISEL-NEXT: mov x8, x0
10288 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
10289 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10290 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10291 ; CHECK-GISEL-NEXT: st1.2s { v0, v1 }, [x8]
10292 ; CHECK-GISEL-NEXT: ret
10293 call void @llvm.aarch64.neon.st1x2.v2f32.p0(<2 x float> %B, <2 x float> %C, ptr %A)
10294 %tmp = getelementptr float, ptr %A, i64 %inc
10298 declare void @llvm.aarch64.neon.st1x2.v2f32.p0(<2 x float>, <2 x float>, ptr)
10301 define ptr @test_v2f64_post_imm_st1x2(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C) nounwind {
10302 ; SDAG-LABEL: test_v2f64_post_imm_st1x2:
10304 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10305 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10306 ; SDAG-NEXT: st1.2d { v0, v1 }, [x0], #32
10309 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_st1x2:
10310 ; CHECK-GISEL: ; %bb.0:
10311 ; CHECK-GISEL-NEXT: mov x8, x0
10312 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10313 ; CHECK-GISEL-NEXT: add x0, x0, #32
10314 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10315 ; CHECK-GISEL-NEXT: st1.2d { v0, v1 }, [x8]
10316 ; CHECK-GISEL-NEXT: ret
10317 call void @llvm.aarch64.neon.st1x2.v2f64.p0(<2 x double> %B, <2 x double> %C, ptr %A)
10318 %tmp = getelementptr double, ptr %A, i64 4
10322 define ptr @test_v2f64_post_reg_st1x2(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, i64 %inc) nounwind {
10323 ; SDAG-LABEL: test_v2f64_post_reg_st1x2:
10325 ; SDAG-NEXT: lsl x8, x2, #3
10326 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10327 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10328 ; SDAG-NEXT: st1.2d { v0, v1 }, [x0], x8
10331 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_st1x2:
10332 ; CHECK-GISEL: ; %bb.0:
10333 ; CHECK-GISEL-NEXT: mov x8, x0
10334 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
10335 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
10336 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
10337 ; CHECK-GISEL-NEXT: st1.2d { v0, v1 }, [x8]
10338 ; CHECK-GISEL-NEXT: ret
10339 call void @llvm.aarch64.neon.st1x2.v2f64.p0(<2 x double> %B, <2 x double> %C, ptr %A)
10340 %tmp = getelementptr double, ptr %A, i64 %inc
10344 declare void @llvm.aarch64.neon.st1x2.v2f64.p0(<2 x double>, <2 x double>, ptr)
10347 define ptr @test_v1f64_post_imm_st1x2(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C) nounwind {
10348 ; SDAG-LABEL: test_v1f64_post_imm_st1x2:
10350 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10351 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10352 ; SDAG-NEXT: st1.1d { v0, v1 }, [x0], #16
10355 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_st1x2:
10356 ; CHECK-GISEL: ; %bb.0:
10357 ; CHECK-GISEL-NEXT: mov x8, x0
10358 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10359 ; CHECK-GISEL-NEXT: add x0, x0, #16
10360 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10361 ; CHECK-GISEL-NEXT: st1.1d { v0, v1 }, [x8]
10362 ; CHECK-GISEL-NEXT: ret
10363 call void @llvm.aarch64.neon.st1x2.v1f64.p0(<1 x double> %B, <1 x double> %C, ptr %A)
10364 %tmp = getelementptr double, ptr %A, i64 2
10368 define ptr @test_v1f64_post_reg_st1x2(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, i64 %inc) nounwind {
10369 ; SDAG-LABEL: test_v1f64_post_reg_st1x2:
10371 ; SDAG-NEXT: lsl x8, x2, #3
10372 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10373 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10374 ; SDAG-NEXT: st1.1d { v0, v1 }, [x0], x8
10377 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_st1x2:
10378 ; CHECK-GISEL: ; %bb.0:
10379 ; CHECK-GISEL-NEXT: mov x8, x0
10380 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
10381 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
10382 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
10383 ; CHECK-GISEL-NEXT: st1.1d { v0, v1 }, [x8]
10384 ; CHECK-GISEL-NEXT: ret
10385 call void @llvm.aarch64.neon.st1x2.v1f64.p0(<1 x double> %B, <1 x double> %C, ptr %A)
10386 %tmp = getelementptr double, ptr %A, i64 %inc
10390 declare void @llvm.aarch64.neon.st1x2.v1f64.p0(<1 x double>, <1 x double>, ptr)
10393 define ptr @test_v16i8_post_imm_st1x3(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
10394 ; SDAG-LABEL: test_v16i8_post_imm_st1x3:
10396 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10397 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10398 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10399 ; SDAG-NEXT: st1.16b { v0, v1, v2 }, [x0], #48
10402 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_st1x3:
10403 ; CHECK-GISEL: ; %bb.0:
10404 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10405 ; CHECK-GISEL-NEXT: mov x8, x0
10406 ; CHECK-GISEL-NEXT: add x0, x0, #48
10407 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10408 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10409 ; CHECK-GISEL-NEXT: st1.16b { v0, v1, v2 }, [x8]
10410 ; CHECK-GISEL-NEXT: ret
10411 call void @llvm.aarch64.neon.st1x3.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %A)
10412 %tmp = getelementptr i8, ptr %A, i32 48
10416 define ptr @test_v16i8_post_reg_st1x3(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 %inc) nounwind {
10417 ; SDAG-LABEL: test_v16i8_post_reg_st1x3:
10419 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10420 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10421 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10422 ; SDAG-NEXT: st1.16b { v0, v1, v2 }, [x0], x2
10425 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_st1x3:
10426 ; CHECK-GISEL: ; %bb.0:
10427 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10428 ; CHECK-GISEL-NEXT: mov x8, x0
10429 ; CHECK-GISEL-NEXT: add x0, x0, x2
10430 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10431 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10432 ; CHECK-GISEL-NEXT: st1.16b { v0, v1, v2 }, [x8]
10433 ; CHECK-GISEL-NEXT: ret
10434 call void @llvm.aarch64.neon.st1x3.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %A)
10435 %tmp = getelementptr i8, ptr %A, i64 %inc
10439 declare void @llvm.aarch64.neon.st1x3.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, ptr)
10442 define ptr @test_v8i8_post_imm_st1x3(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
10443 ; SDAG-LABEL: test_v8i8_post_imm_st1x3:
10445 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10446 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10447 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10448 ; SDAG-NEXT: st1.8b { v0, v1, v2 }, [x0], #24
10451 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_st1x3:
10452 ; CHECK-GISEL: ; %bb.0:
10453 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10454 ; CHECK-GISEL-NEXT: mov x8, x0
10455 ; CHECK-GISEL-NEXT: add x0, x0, #24
10456 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10457 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10458 ; CHECK-GISEL-NEXT: st1.8b { v0, v1, v2 }, [x8]
10459 ; CHECK-GISEL-NEXT: ret
10460 call void @llvm.aarch64.neon.st1x3.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, ptr %A)
10461 %tmp = getelementptr i8, ptr %A, i32 24
10465 define ptr @test_v8i8_post_reg_st1x3(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 %inc) nounwind {
10466 ; SDAG-LABEL: test_v8i8_post_reg_st1x3:
10468 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10469 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10470 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10471 ; SDAG-NEXT: st1.8b { v0, v1, v2 }, [x0], x2
10474 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_st1x3:
10475 ; CHECK-GISEL: ; %bb.0:
10476 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10477 ; CHECK-GISEL-NEXT: mov x8, x0
10478 ; CHECK-GISEL-NEXT: add x0, x0, x2
10479 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10480 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10481 ; CHECK-GISEL-NEXT: st1.8b { v0, v1, v2 }, [x8]
10482 ; CHECK-GISEL-NEXT: ret
10483 call void @llvm.aarch64.neon.st1x3.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, ptr %A)
10484 %tmp = getelementptr i8, ptr %A, i64 %inc
10488 declare void @llvm.aarch64.neon.st1x3.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, ptr)
10491 define ptr @test_v8i16_post_imm_st1x3(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
10492 ; SDAG-LABEL: test_v8i16_post_imm_st1x3:
10494 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10495 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10496 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10497 ; SDAG-NEXT: st1.8h { v0, v1, v2 }, [x0], #48
10500 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_st1x3:
10501 ; CHECK-GISEL: ; %bb.0:
10502 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10503 ; CHECK-GISEL-NEXT: mov x8, x0
10504 ; CHECK-GISEL-NEXT: add x0, x0, #48
10505 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10506 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10507 ; CHECK-GISEL-NEXT: st1.8h { v0, v1, v2 }, [x8]
10508 ; CHECK-GISEL-NEXT: ret
10509 call void @llvm.aarch64.neon.st1x3.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %A)
10510 %tmp = getelementptr i16, ptr %A, i32 24
10514 define ptr @test_v8i16_post_reg_st1x3(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 %inc) nounwind {
10515 ; SDAG-LABEL: test_v8i16_post_reg_st1x3:
10517 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10518 ; SDAG-NEXT: lsl x8, x2, #1
10519 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10520 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10521 ; SDAG-NEXT: st1.8h { v0, v1, v2 }, [x0], x8
10524 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_st1x3:
10525 ; CHECK-GISEL: ; %bb.0:
10526 ; CHECK-GISEL-NEXT: mov x8, x0
10527 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10528 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
10529 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10530 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10531 ; CHECK-GISEL-NEXT: st1.8h { v0, v1, v2 }, [x8]
10532 ; CHECK-GISEL-NEXT: ret
10533 call void @llvm.aarch64.neon.st1x3.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %A)
10534 %tmp = getelementptr i16, ptr %A, i64 %inc
10538 declare void @llvm.aarch64.neon.st1x3.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, ptr)
10541 define ptr @test_v4i16_post_imm_st1x3(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
10542 ; SDAG-LABEL: test_v4i16_post_imm_st1x3:
10544 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10545 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10546 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10547 ; SDAG-NEXT: st1.4h { v0, v1, v2 }, [x0], #24
10550 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_st1x3:
10551 ; CHECK-GISEL: ; %bb.0:
10552 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10553 ; CHECK-GISEL-NEXT: mov x8, x0
10554 ; CHECK-GISEL-NEXT: add x0, x0, #24
10555 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10556 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10557 ; CHECK-GISEL-NEXT: st1.4h { v0, v1, v2 }, [x8]
10558 ; CHECK-GISEL-NEXT: ret
10559 call void @llvm.aarch64.neon.st1x3.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, ptr %A)
10560 %tmp = getelementptr i16, ptr %A, i32 12
10564 define ptr @test_v4i16_post_reg_st1x3(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 %inc) nounwind {
10565 ; SDAG-LABEL: test_v4i16_post_reg_st1x3:
10567 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10568 ; SDAG-NEXT: lsl x8, x2, #1
10569 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10570 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10571 ; SDAG-NEXT: st1.4h { v0, v1, v2 }, [x0], x8
10574 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_st1x3:
10575 ; CHECK-GISEL: ; %bb.0:
10576 ; CHECK-GISEL-NEXT: mov x8, x0
10577 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10578 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
10579 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10580 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10581 ; CHECK-GISEL-NEXT: st1.4h { v0, v1, v2 }, [x8]
10582 ; CHECK-GISEL-NEXT: ret
10583 call void @llvm.aarch64.neon.st1x3.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, ptr %A)
10584 %tmp = getelementptr i16, ptr %A, i64 %inc
10588 declare void @llvm.aarch64.neon.st1x3.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, ptr)
10591 define ptr @test_v4i32_post_imm_st1x3(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
10592 ; SDAG-LABEL: test_v4i32_post_imm_st1x3:
10594 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10595 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10596 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10597 ; SDAG-NEXT: st1.4s { v0, v1, v2 }, [x0], #48
10600 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_st1x3:
10601 ; CHECK-GISEL: ; %bb.0:
10602 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10603 ; CHECK-GISEL-NEXT: mov x8, x0
10604 ; CHECK-GISEL-NEXT: add x0, x0, #48
10605 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10606 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10607 ; CHECK-GISEL-NEXT: st1.4s { v0, v1, v2 }, [x8]
10608 ; CHECK-GISEL-NEXT: ret
10609 call void @llvm.aarch64.neon.st1x3.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %A)
10610 %tmp = getelementptr i32, ptr %A, i32 12
10614 define ptr @test_v4i32_post_reg_st1x3(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 %inc) nounwind {
10615 ; SDAG-LABEL: test_v4i32_post_reg_st1x3:
10617 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10618 ; SDAG-NEXT: lsl x8, x2, #2
10619 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10620 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10621 ; SDAG-NEXT: st1.4s { v0, v1, v2 }, [x0], x8
10624 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_st1x3:
10625 ; CHECK-GISEL: ; %bb.0:
10626 ; CHECK-GISEL-NEXT: mov x8, x0
10627 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10628 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
10629 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10630 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10631 ; CHECK-GISEL-NEXT: st1.4s { v0, v1, v2 }, [x8]
10632 ; CHECK-GISEL-NEXT: ret
10633 call void @llvm.aarch64.neon.st1x3.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %A)
10634 %tmp = getelementptr i32, ptr %A, i64 %inc
10638 declare void @llvm.aarch64.neon.st1x3.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, ptr)
10641 define ptr @test_v2i32_post_imm_st1x3(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
10642 ; SDAG-LABEL: test_v2i32_post_imm_st1x3:
10644 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10645 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10646 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10647 ; SDAG-NEXT: st1.2s { v0, v1, v2 }, [x0], #24
10650 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_st1x3:
10651 ; CHECK-GISEL: ; %bb.0:
10652 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10653 ; CHECK-GISEL-NEXT: mov x8, x0
10654 ; CHECK-GISEL-NEXT: add x0, x0, #24
10655 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10656 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10657 ; CHECK-GISEL-NEXT: st1.2s { v0, v1, v2 }, [x8]
10658 ; CHECK-GISEL-NEXT: ret
10659 call void @llvm.aarch64.neon.st1x3.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, ptr %A)
10660 %tmp = getelementptr i32, ptr %A, i32 6
10664 define ptr @test_v2i32_post_reg_st1x3(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 %inc) nounwind {
10665 ; SDAG-LABEL: test_v2i32_post_reg_st1x3:
10667 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10668 ; SDAG-NEXT: lsl x8, x2, #2
10669 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10670 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10671 ; SDAG-NEXT: st1.2s { v0, v1, v2 }, [x0], x8
10674 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_st1x3:
10675 ; CHECK-GISEL: ; %bb.0:
10676 ; CHECK-GISEL-NEXT: mov x8, x0
10677 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10678 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
10679 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10680 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10681 ; CHECK-GISEL-NEXT: st1.2s { v0, v1, v2 }, [x8]
10682 ; CHECK-GISEL-NEXT: ret
10683 call void @llvm.aarch64.neon.st1x3.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, ptr %A)
10684 %tmp = getelementptr i32, ptr %A, i64 %inc
10688 declare void @llvm.aarch64.neon.st1x3.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, ptr)
10691 define ptr @test_v2i64_post_imm_st1x3(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
10692 ; SDAG-LABEL: test_v2i64_post_imm_st1x3:
10694 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10695 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10696 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10697 ; SDAG-NEXT: st1.2d { v0, v1, v2 }, [x0], #48
10700 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_st1x3:
10701 ; CHECK-GISEL: ; %bb.0:
10702 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10703 ; CHECK-GISEL-NEXT: mov x8, x0
10704 ; CHECK-GISEL-NEXT: add x0, x0, #48
10705 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10706 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10707 ; CHECK-GISEL-NEXT: st1.2d { v0, v1, v2 }, [x8]
10708 ; CHECK-GISEL-NEXT: ret
10709 call void @llvm.aarch64.neon.st1x3.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %A)
10710 %tmp = getelementptr i64, ptr %A, i64 6
10714 define ptr @test_v2i64_post_reg_st1x3(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 %inc) nounwind {
10715 ; SDAG-LABEL: test_v2i64_post_reg_st1x3:
10717 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10718 ; SDAG-NEXT: lsl x8, x2, #3
10719 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10720 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10721 ; SDAG-NEXT: st1.2d { v0, v1, v2 }, [x0], x8
10724 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_st1x3:
10725 ; CHECK-GISEL: ; %bb.0:
10726 ; CHECK-GISEL-NEXT: mov x8, x0
10727 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10728 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
10729 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10730 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10731 ; CHECK-GISEL-NEXT: st1.2d { v0, v1, v2 }, [x8]
10732 ; CHECK-GISEL-NEXT: ret
10733 call void @llvm.aarch64.neon.st1x3.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %A)
10734 %tmp = getelementptr i64, ptr %A, i64 %inc
10738 declare void @llvm.aarch64.neon.st1x3.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, ptr)
10741 define ptr @test_v1i64_post_imm_st1x3(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
10742 ; SDAG-LABEL: test_v1i64_post_imm_st1x3:
10744 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10745 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10746 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10747 ; SDAG-NEXT: st1.1d { v0, v1, v2 }, [x0], #24
10750 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_st1x3:
10751 ; CHECK-GISEL: ; %bb.0:
10752 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10753 ; CHECK-GISEL-NEXT: mov x8, x0
10754 ; CHECK-GISEL-NEXT: add x0, x0, #24
10755 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10756 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10757 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2 }, [x8]
10758 ; CHECK-GISEL-NEXT: ret
10759 call void @llvm.aarch64.neon.st1x3.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %A)
10760 %tmp = getelementptr i64, ptr %A, i64 3
10764 define ptr @test_v1i64_post_reg_st1x3(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 %inc) nounwind {
10765 ; SDAG-LABEL: test_v1i64_post_reg_st1x3:
10767 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10768 ; SDAG-NEXT: lsl x8, x2, #3
10769 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10770 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10771 ; SDAG-NEXT: st1.1d { v0, v1, v2 }, [x0], x8
10774 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_st1x3:
10775 ; CHECK-GISEL: ; %bb.0:
10776 ; CHECK-GISEL-NEXT: mov x8, x0
10777 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10778 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
10779 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10780 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10781 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2 }, [x8]
10782 ; CHECK-GISEL-NEXT: ret
10783 call void @llvm.aarch64.neon.st1x3.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %A)
10784 %tmp = getelementptr i64, ptr %A, i64 %inc
10788 declare void @llvm.aarch64.neon.st1x3.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, ptr)
10791 define ptr @test_v4f32_post_imm_st1x3(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
10792 ; SDAG-LABEL: test_v4f32_post_imm_st1x3:
10794 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10795 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10796 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10797 ; SDAG-NEXT: st1.4s { v0, v1, v2 }, [x0], #48
10800 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_st1x3:
10801 ; CHECK-GISEL: ; %bb.0:
10802 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10803 ; CHECK-GISEL-NEXT: mov x8, x0
10804 ; CHECK-GISEL-NEXT: add x0, x0, #48
10805 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10806 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10807 ; CHECK-GISEL-NEXT: st1.4s { v0, v1, v2 }, [x8]
10808 ; CHECK-GISEL-NEXT: ret
10809 call void @llvm.aarch64.neon.st1x3.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, ptr %A)
10810 %tmp = getelementptr float, ptr %A, i32 12
10814 define ptr @test_v4f32_post_reg_st1x3(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, i64 %inc) nounwind {
10815 ; SDAG-LABEL: test_v4f32_post_reg_st1x3:
10817 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10818 ; SDAG-NEXT: lsl x8, x2, #2
10819 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10820 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10821 ; SDAG-NEXT: st1.4s { v0, v1, v2 }, [x0], x8
10824 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_st1x3:
10825 ; CHECK-GISEL: ; %bb.0:
10826 ; CHECK-GISEL-NEXT: mov x8, x0
10827 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10828 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
10829 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10830 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10831 ; CHECK-GISEL-NEXT: st1.4s { v0, v1, v2 }, [x8]
10832 ; CHECK-GISEL-NEXT: ret
10833 call void @llvm.aarch64.neon.st1x3.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, ptr %A)
10834 %tmp = getelementptr float, ptr %A, i64 %inc
10838 declare void @llvm.aarch64.neon.st1x3.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, ptr)
10841 define ptr @test_v2f32_post_imm_st1x3(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
10842 ; SDAG-LABEL: test_v2f32_post_imm_st1x3:
10844 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10845 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10846 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10847 ; SDAG-NEXT: st1.2s { v0, v1, v2 }, [x0], #24
10850 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_st1x3:
10851 ; CHECK-GISEL: ; %bb.0:
10852 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10853 ; CHECK-GISEL-NEXT: mov x8, x0
10854 ; CHECK-GISEL-NEXT: add x0, x0, #24
10855 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10856 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10857 ; CHECK-GISEL-NEXT: st1.2s { v0, v1, v2 }, [x8]
10858 ; CHECK-GISEL-NEXT: ret
10859 call void @llvm.aarch64.neon.st1x3.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, ptr %A)
10860 %tmp = getelementptr float, ptr %A, i32 6
10864 define ptr @test_v2f32_post_reg_st1x3(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, i64 %inc) nounwind {
10865 ; SDAG-LABEL: test_v2f32_post_reg_st1x3:
10867 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10868 ; SDAG-NEXT: lsl x8, x2, #2
10869 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10870 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10871 ; SDAG-NEXT: st1.2s { v0, v1, v2 }, [x0], x8
10874 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_st1x3:
10875 ; CHECK-GISEL: ; %bb.0:
10876 ; CHECK-GISEL-NEXT: mov x8, x0
10877 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10878 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
10879 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10880 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10881 ; CHECK-GISEL-NEXT: st1.2s { v0, v1, v2 }, [x8]
10882 ; CHECK-GISEL-NEXT: ret
10883 call void @llvm.aarch64.neon.st1x3.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, ptr %A)
10884 %tmp = getelementptr float, ptr %A, i64 %inc
10888 declare void @llvm.aarch64.neon.st1x3.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, ptr)
10891 define ptr @test_v2f64_post_imm_st1x3(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
10892 ; SDAG-LABEL: test_v2f64_post_imm_st1x3:
10894 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10895 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10896 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10897 ; SDAG-NEXT: st1.2d { v0, v1, v2 }, [x0], #48
10900 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_st1x3:
10901 ; CHECK-GISEL: ; %bb.0:
10902 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10903 ; CHECK-GISEL-NEXT: mov x8, x0
10904 ; CHECK-GISEL-NEXT: add x0, x0, #48
10905 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10906 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10907 ; CHECK-GISEL-NEXT: st1.2d { v0, v1, v2 }, [x8]
10908 ; CHECK-GISEL-NEXT: ret
10909 call void @llvm.aarch64.neon.st1x3.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %A)
10910 %tmp = getelementptr double, ptr %A, i64 6
10914 define ptr @test_v2f64_post_reg_st1x3(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, i64 %inc) nounwind {
10915 ; SDAG-LABEL: test_v2f64_post_reg_st1x3:
10917 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10918 ; SDAG-NEXT: lsl x8, x2, #3
10919 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10920 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10921 ; SDAG-NEXT: st1.2d { v0, v1, v2 }, [x0], x8
10924 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_st1x3:
10925 ; CHECK-GISEL: ; %bb.0:
10926 ; CHECK-GISEL-NEXT: mov x8, x0
10927 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
10928 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
10929 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
10930 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
10931 ; CHECK-GISEL-NEXT: st1.2d { v0, v1, v2 }, [x8]
10932 ; CHECK-GISEL-NEXT: ret
10933 call void @llvm.aarch64.neon.st1x3.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %A)
10934 %tmp = getelementptr double, ptr %A, i64 %inc
10938 declare void @llvm.aarch64.neon.st1x3.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, ptr)
10941 define ptr @test_v1f64_post_imm_st1x3(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
10942 ; SDAG-LABEL: test_v1f64_post_imm_st1x3:
10944 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10945 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10946 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10947 ; SDAG-NEXT: st1.1d { v0, v1, v2 }, [x0], #24
10950 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_st1x3:
10951 ; CHECK-GISEL: ; %bb.0:
10952 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10953 ; CHECK-GISEL-NEXT: mov x8, x0
10954 ; CHECK-GISEL-NEXT: add x0, x0, #24
10955 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10956 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10957 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2 }, [x8]
10958 ; CHECK-GISEL-NEXT: ret
10959 call void @llvm.aarch64.neon.st1x3.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %A)
10960 %tmp = getelementptr double, ptr %A, i64 3
10964 define ptr @test_v1f64_post_reg_st1x3(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, i64 %inc) nounwind {
10965 ; SDAG-LABEL: test_v1f64_post_reg_st1x3:
10967 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10968 ; SDAG-NEXT: lsl x8, x2, #3
10969 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10970 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10971 ; SDAG-NEXT: st1.1d { v0, v1, v2 }, [x0], x8
10974 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_st1x3:
10975 ; CHECK-GISEL: ; %bb.0:
10976 ; CHECK-GISEL-NEXT: mov x8, x0
10977 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
10978 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
10979 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
10980 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
10981 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2 }, [x8]
10982 ; CHECK-GISEL-NEXT: ret
10983 call void @llvm.aarch64.neon.st1x3.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %A)
10984 %tmp = getelementptr double, ptr %A, i64 %inc
10988 declare void @llvm.aarch64.neon.st1x3.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, ptr)
10991 define ptr @test_v16i8_post_imm_st1x4(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
10992 ; SDAG-LABEL: test_v16i8_post_imm_st1x4:
10994 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
10995 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
10996 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
10997 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
10998 ; SDAG-NEXT: st1.16b { v0, v1, v2, v3 }, [x0], #64
11001 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_st1x4:
11002 ; CHECK-GISEL: ; %bb.0:
11003 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11004 ; CHECK-GISEL-NEXT: mov x8, x0
11005 ; CHECK-GISEL-NEXT: add x0, x0, #64
11006 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11007 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11008 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11009 ; CHECK-GISEL-NEXT: st1.16b { v0, v1, v2, v3 }, [x8]
11010 ; CHECK-GISEL-NEXT: ret
11011 call void @llvm.aarch64.neon.st1x4.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, ptr %A)
11012 %tmp = getelementptr i8, ptr %A, i32 64
11016 define ptr @test_v16i8_post_reg_st1x4(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 %inc) nounwind {
11017 ; SDAG-LABEL: test_v16i8_post_reg_st1x4:
11019 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11020 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11021 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11022 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11023 ; SDAG-NEXT: st1.16b { v0, v1, v2, v3 }, [x0], x2
11026 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_st1x4:
11027 ; CHECK-GISEL: ; %bb.0:
11028 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11029 ; CHECK-GISEL-NEXT: mov x8, x0
11030 ; CHECK-GISEL-NEXT: add x0, x0, x2
11031 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11032 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11033 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11034 ; CHECK-GISEL-NEXT: st1.16b { v0, v1, v2, v3 }, [x8]
11035 ; CHECK-GISEL-NEXT: ret
11036 call void @llvm.aarch64.neon.st1x4.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, ptr %A)
11037 %tmp = getelementptr i8, ptr %A, i64 %inc
11041 declare void @llvm.aarch64.neon.st1x4.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, ptr)
11044 define ptr @test_v8i8_post_imm_st1x4(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
11045 ; SDAG-LABEL: test_v8i8_post_imm_st1x4:
11047 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11048 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11049 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11050 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11051 ; SDAG-NEXT: st1.8b { v0, v1, v2, v3 }, [x0], #32
11054 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_st1x4:
11055 ; CHECK-GISEL: ; %bb.0:
11056 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11057 ; CHECK-GISEL-NEXT: mov x8, x0
11058 ; CHECK-GISEL-NEXT: add x0, x0, #32
11059 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11060 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11061 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11062 ; CHECK-GISEL-NEXT: st1.8b { v0, v1, v2, v3 }, [x8]
11063 ; CHECK-GISEL-NEXT: ret
11064 call void @llvm.aarch64.neon.st1x4.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, ptr %A)
11065 %tmp = getelementptr i8, ptr %A, i32 32
11069 define ptr @test_v8i8_post_reg_st1x4(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 %inc) nounwind {
11070 ; SDAG-LABEL: test_v8i8_post_reg_st1x4:
11072 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11073 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11074 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11075 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11076 ; SDAG-NEXT: st1.8b { v0, v1, v2, v3 }, [x0], x2
11079 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_st1x4:
11080 ; CHECK-GISEL: ; %bb.0:
11081 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11082 ; CHECK-GISEL-NEXT: mov x8, x0
11083 ; CHECK-GISEL-NEXT: add x0, x0, x2
11084 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11085 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11086 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11087 ; CHECK-GISEL-NEXT: st1.8b { v0, v1, v2, v3 }, [x8]
11088 ; CHECK-GISEL-NEXT: ret
11089 call void @llvm.aarch64.neon.st1x4.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, ptr %A)
11090 %tmp = getelementptr i8, ptr %A, i64 %inc
11094 declare void @llvm.aarch64.neon.st1x4.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, ptr)
11097 define ptr @test_v8i16_post_imm_st1x4(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
11098 ; SDAG-LABEL: test_v8i16_post_imm_st1x4:
11100 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11101 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11102 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11103 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11104 ; SDAG-NEXT: st1.8h { v0, v1, v2, v3 }, [x0], #64
11107 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_st1x4:
11108 ; CHECK-GISEL: ; %bb.0:
11109 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11110 ; CHECK-GISEL-NEXT: mov x8, x0
11111 ; CHECK-GISEL-NEXT: add x0, x0, #64
11112 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11113 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11114 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11115 ; CHECK-GISEL-NEXT: st1.8h { v0, v1, v2, v3 }, [x8]
11116 ; CHECK-GISEL-NEXT: ret
11117 call void @llvm.aarch64.neon.st1x4.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, ptr %A)
11118 %tmp = getelementptr i16, ptr %A, i32 32
11122 define ptr @test_v8i16_post_reg_st1x4(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 %inc) nounwind {
11123 ; SDAG-LABEL: test_v8i16_post_reg_st1x4:
11125 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11126 ; SDAG-NEXT: lsl x8, x2, #1
11127 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11128 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11129 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11130 ; SDAG-NEXT: st1.8h { v0, v1, v2, v3 }, [x0], x8
11133 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_st1x4:
11134 ; CHECK-GISEL: ; %bb.0:
11135 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11136 ; CHECK-GISEL-NEXT: mov x8, x0
11137 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
11138 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11139 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11140 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11141 ; CHECK-GISEL-NEXT: st1.8h { v0, v1, v2, v3 }, [x8]
11142 ; CHECK-GISEL-NEXT: ret
11143 call void @llvm.aarch64.neon.st1x4.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, ptr %A)
11144 %tmp = getelementptr i16, ptr %A, i64 %inc
11148 declare void @llvm.aarch64.neon.st1x4.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, ptr)
11151 define ptr @test_v4i16_post_imm_st1x4(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
11152 ; SDAG-LABEL: test_v4i16_post_imm_st1x4:
11154 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11155 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11156 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11157 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11158 ; SDAG-NEXT: st1.4h { v0, v1, v2, v3 }, [x0], #32
11161 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_st1x4:
11162 ; CHECK-GISEL: ; %bb.0:
11163 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11164 ; CHECK-GISEL-NEXT: mov x8, x0
11165 ; CHECK-GISEL-NEXT: add x0, x0, #32
11166 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11167 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11168 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11169 ; CHECK-GISEL-NEXT: st1.4h { v0, v1, v2, v3 }, [x8]
11170 ; CHECK-GISEL-NEXT: ret
11171 call void @llvm.aarch64.neon.st1x4.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, ptr %A)
11172 %tmp = getelementptr i16, ptr %A, i32 16
11176 define ptr @test_v4i16_post_reg_st1x4(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 %inc) nounwind {
11177 ; SDAG-LABEL: test_v4i16_post_reg_st1x4:
11179 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11180 ; SDAG-NEXT: lsl x8, x2, #1
11181 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11182 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11183 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11184 ; SDAG-NEXT: st1.4h { v0, v1, v2, v3 }, [x0], x8
11187 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_st1x4:
11188 ; CHECK-GISEL: ; %bb.0:
11189 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11190 ; CHECK-GISEL-NEXT: mov x8, x0
11191 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
11192 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11193 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11194 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11195 ; CHECK-GISEL-NEXT: st1.4h { v0, v1, v2, v3 }, [x8]
11196 ; CHECK-GISEL-NEXT: ret
11197 call void @llvm.aarch64.neon.st1x4.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, ptr %A)
11198 %tmp = getelementptr i16, ptr %A, i64 %inc
11202 declare void @llvm.aarch64.neon.st1x4.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>,<4 x i16>, ptr)
11205 define ptr @test_v4i32_post_imm_st1x4(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
11206 ; SDAG-LABEL: test_v4i32_post_imm_st1x4:
11208 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11209 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11210 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11211 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11212 ; SDAG-NEXT: st1.4s { v0, v1, v2, v3 }, [x0], #64
11215 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_st1x4:
11216 ; CHECK-GISEL: ; %bb.0:
11217 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11218 ; CHECK-GISEL-NEXT: mov x8, x0
11219 ; CHECK-GISEL-NEXT: add x0, x0, #64
11220 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11221 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11222 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11223 ; CHECK-GISEL-NEXT: st1.4s { v0, v1, v2, v3 }, [x8]
11224 ; CHECK-GISEL-NEXT: ret
11225 call void @llvm.aarch64.neon.st1x4.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, ptr %A)
11226 %tmp = getelementptr i32, ptr %A, i32 16
11230 define ptr @test_v4i32_post_reg_st1x4(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 %inc) nounwind {
11231 ; SDAG-LABEL: test_v4i32_post_reg_st1x4:
11233 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11234 ; SDAG-NEXT: lsl x8, x2, #2
11235 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11236 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11237 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11238 ; SDAG-NEXT: st1.4s { v0, v1, v2, v3 }, [x0], x8
11241 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_st1x4:
11242 ; CHECK-GISEL: ; %bb.0:
11243 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11244 ; CHECK-GISEL-NEXT: mov x8, x0
11245 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
11246 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11247 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11248 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11249 ; CHECK-GISEL-NEXT: st1.4s { v0, v1, v2, v3 }, [x8]
11250 ; CHECK-GISEL-NEXT: ret
11251 call void @llvm.aarch64.neon.st1x4.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, ptr %A)
11252 %tmp = getelementptr i32, ptr %A, i64 %inc
11256 declare void @llvm.aarch64.neon.st1x4.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>,<4 x i32>, ptr)
11259 define ptr @test_v2i32_post_imm_st1x4(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
11260 ; SDAG-LABEL: test_v2i32_post_imm_st1x4:
11262 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11263 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11264 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11265 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11266 ; SDAG-NEXT: st1.2s { v0, v1, v2, v3 }, [x0], #32
11269 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_st1x4:
11270 ; CHECK-GISEL: ; %bb.0:
11271 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11272 ; CHECK-GISEL-NEXT: mov x8, x0
11273 ; CHECK-GISEL-NEXT: add x0, x0, #32
11274 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11275 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11276 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11277 ; CHECK-GISEL-NEXT: st1.2s { v0, v1, v2, v3 }, [x8]
11278 ; CHECK-GISEL-NEXT: ret
11279 call void @llvm.aarch64.neon.st1x4.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, ptr %A)
11280 %tmp = getelementptr i32, ptr %A, i32 8
11284 define ptr @test_v2i32_post_reg_st1x4(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 %inc) nounwind {
11285 ; SDAG-LABEL: test_v2i32_post_reg_st1x4:
11287 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11288 ; SDAG-NEXT: lsl x8, x2, #2
11289 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11290 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11291 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11292 ; SDAG-NEXT: st1.2s { v0, v1, v2, v3 }, [x0], x8
11295 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_st1x4:
11296 ; CHECK-GISEL: ; %bb.0:
11297 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11298 ; CHECK-GISEL-NEXT: mov x8, x0
11299 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
11300 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11301 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11302 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11303 ; CHECK-GISEL-NEXT: st1.2s { v0, v1, v2, v3 }, [x8]
11304 ; CHECK-GISEL-NEXT: ret
11305 call void @llvm.aarch64.neon.st1x4.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, ptr %A)
11306 %tmp = getelementptr i32, ptr %A, i64 %inc
11310 declare void @llvm.aarch64.neon.st1x4.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, ptr)
11313 define ptr @test_v2i64_post_imm_st1x4(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
11314 ; SDAG-LABEL: test_v2i64_post_imm_st1x4:
11316 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11317 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11318 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11319 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11320 ; SDAG-NEXT: st1.2d { v0, v1, v2, v3 }, [x0], #64
11323 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_st1x4:
11324 ; CHECK-GISEL: ; %bb.0:
11325 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11326 ; CHECK-GISEL-NEXT: mov x8, x0
11327 ; CHECK-GISEL-NEXT: add x0, x0, #64
11328 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11329 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11330 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11331 ; CHECK-GISEL-NEXT: st1.2d { v0, v1, v2, v3 }, [x8]
11332 ; CHECK-GISEL-NEXT: ret
11333 call void @llvm.aarch64.neon.st1x4.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, ptr %A)
11334 %tmp = getelementptr i64, ptr %A, i64 8
11338 define ptr @test_v2i64_post_reg_st1x4(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 %inc) nounwind {
11339 ; SDAG-LABEL: test_v2i64_post_reg_st1x4:
11341 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11342 ; SDAG-NEXT: lsl x8, x2, #3
11343 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11344 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11345 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11346 ; SDAG-NEXT: st1.2d { v0, v1, v2, v3 }, [x0], x8
11349 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_st1x4:
11350 ; CHECK-GISEL: ; %bb.0:
11351 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11352 ; CHECK-GISEL-NEXT: mov x8, x0
11353 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
11354 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11355 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11356 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11357 ; CHECK-GISEL-NEXT: st1.2d { v0, v1, v2, v3 }, [x8]
11358 ; CHECK-GISEL-NEXT: ret
11359 call void @llvm.aarch64.neon.st1x4.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, ptr %A)
11360 %tmp = getelementptr i64, ptr %A, i64 %inc
11364 declare void @llvm.aarch64.neon.st1x4.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>,<2 x i64>, ptr)
11367 define ptr @test_v1i64_post_imm_st1x4(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
11368 ; SDAG-LABEL: test_v1i64_post_imm_st1x4:
11370 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11371 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11372 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11373 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11374 ; SDAG-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], #32
11377 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_st1x4:
11378 ; CHECK-GISEL: ; %bb.0:
11379 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11380 ; CHECK-GISEL-NEXT: mov x8, x0
11381 ; CHECK-GISEL-NEXT: add x0, x0, #32
11382 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11383 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11384 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11385 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2, v3 }, [x8]
11386 ; CHECK-GISEL-NEXT: ret
11387 call void @llvm.aarch64.neon.st1x4.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, ptr %A)
11388 %tmp = getelementptr i64, ptr %A, i64 4
11392 define ptr @test_v1i64_post_reg_st1x4(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 %inc) nounwind {
11393 ; SDAG-LABEL: test_v1i64_post_reg_st1x4:
11395 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11396 ; SDAG-NEXT: lsl x8, x2, #3
11397 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11398 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11399 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11400 ; SDAG-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], x8
11403 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_st1x4:
11404 ; CHECK-GISEL: ; %bb.0:
11405 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11406 ; CHECK-GISEL-NEXT: mov x8, x0
11407 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
11408 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11409 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11410 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11411 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2, v3 }, [x8]
11412 ; CHECK-GISEL-NEXT: ret
11413 call void @llvm.aarch64.neon.st1x4.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, ptr %A)
11414 %tmp = getelementptr i64, ptr %A, i64 %inc
11418 declare void @llvm.aarch64.neon.st1x4.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>,<1 x i64>, ptr)
11421 define ptr @test_v4f32_post_imm_st1x4(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
11422 ; SDAG-LABEL: test_v4f32_post_imm_st1x4:
11424 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11425 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11426 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11427 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11428 ; SDAG-NEXT: st1.4s { v0, v1, v2, v3 }, [x0], #64
11431 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_st1x4:
11432 ; CHECK-GISEL: ; %bb.0:
11433 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11434 ; CHECK-GISEL-NEXT: mov x8, x0
11435 ; CHECK-GISEL-NEXT: add x0, x0, #64
11436 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11437 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11438 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11439 ; CHECK-GISEL-NEXT: st1.4s { v0, v1, v2, v3 }, [x8]
11440 ; CHECK-GISEL-NEXT: ret
11441 call void @llvm.aarch64.neon.st1x4.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, ptr %A)
11442 %tmp = getelementptr float, ptr %A, i32 16
11446 define ptr @test_v4f32_post_reg_st1x4(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 %inc) nounwind {
11447 ; SDAG-LABEL: test_v4f32_post_reg_st1x4:
11449 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11450 ; SDAG-NEXT: lsl x8, x2, #2
11451 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11452 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11453 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11454 ; SDAG-NEXT: st1.4s { v0, v1, v2, v3 }, [x0], x8
11457 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_st1x4:
11458 ; CHECK-GISEL: ; %bb.0:
11459 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11460 ; CHECK-GISEL-NEXT: mov x8, x0
11461 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
11462 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11463 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11464 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11465 ; CHECK-GISEL-NEXT: st1.4s { v0, v1, v2, v3 }, [x8]
11466 ; CHECK-GISEL-NEXT: ret
11467 call void @llvm.aarch64.neon.st1x4.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, ptr %A)
11468 %tmp = getelementptr float, ptr %A, i64 %inc
11472 declare void @llvm.aarch64.neon.st1x4.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, <4 x float>, ptr)
11475 define ptr @test_v2f32_post_imm_st1x4(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
11476 ; SDAG-LABEL: test_v2f32_post_imm_st1x4:
11478 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11479 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11480 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11481 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11482 ; SDAG-NEXT: st1.2s { v0, v1, v2, v3 }, [x0], #32
11485 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_st1x4:
11486 ; CHECK-GISEL: ; %bb.0:
11487 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11488 ; CHECK-GISEL-NEXT: mov x8, x0
11489 ; CHECK-GISEL-NEXT: add x0, x0, #32
11490 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11491 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11492 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11493 ; CHECK-GISEL-NEXT: st1.2s { v0, v1, v2, v3 }, [x8]
11494 ; CHECK-GISEL-NEXT: ret
11495 call void @llvm.aarch64.neon.st1x4.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, ptr %A)
11496 %tmp = getelementptr float, ptr %A, i32 8
11500 define ptr @test_v2f32_post_reg_st1x4(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 %inc) nounwind {
11501 ; SDAG-LABEL: test_v2f32_post_reg_st1x4:
11503 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11504 ; SDAG-NEXT: lsl x8, x2, #2
11505 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11506 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11507 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11508 ; SDAG-NEXT: st1.2s { v0, v1, v2, v3 }, [x0], x8
11511 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_st1x4:
11512 ; CHECK-GISEL: ; %bb.0:
11513 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11514 ; CHECK-GISEL-NEXT: mov x8, x0
11515 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
11516 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11517 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11518 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11519 ; CHECK-GISEL-NEXT: st1.2s { v0, v1, v2, v3 }, [x8]
11520 ; CHECK-GISEL-NEXT: ret
11521 call void @llvm.aarch64.neon.st1x4.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, ptr %A)
11522 %tmp = getelementptr float, ptr %A, i64 %inc
11526 declare void @llvm.aarch64.neon.st1x4.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, <2 x float>, ptr)
11529 define ptr @test_v2f64_post_imm_st1x4(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
11530 ; SDAG-LABEL: test_v2f64_post_imm_st1x4:
11532 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11533 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11534 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11535 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11536 ; SDAG-NEXT: st1.2d { v0, v1, v2, v3 }, [x0], #64
11539 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_st1x4:
11540 ; CHECK-GISEL: ; %bb.0:
11541 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11542 ; CHECK-GISEL-NEXT: mov x8, x0
11543 ; CHECK-GISEL-NEXT: add x0, x0, #64
11544 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11545 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11546 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11547 ; CHECK-GISEL-NEXT: st1.2d { v0, v1, v2, v3 }, [x8]
11548 ; CHECK-GISEL-NEXT: ret
11549 call void @llvm.aarch64.neon.st1x4.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, ptr %A)
11550 %tmp = getelementptr double, ptr %A, i64 8
11554 define ptr @test_v2f64_post_reg_st1x4(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 %inc) nounwind {
11555 ; SDAG-LABEL: test_v2f64_post_reg_st1x4:
11557 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11558 ; SDAG-NEXT: lsl x8, x2, #3
11559 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11560 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11561 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11562 ; SDAG-NEXT: st1.2d { v0, v1, v2, v3 }, [x0], x8
11565 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_st1x4:
11566 ; CHECK-GISEL: ; %bb.0:
11567 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11568 ; CHECK-GISEL-NEXT: mov x8, x0
11569 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
11570 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11571 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11572 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
11573 ; CHECK-GISEL-NEXT: st1.2d { v0, v1, v2, v3 }, [x8]
11574 ; CHECK-GISEL-NEXT: ret
11575 call void @llvm.aarch64.neon.st1x4.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, ptr %A)
11576 %tmp = getelementptr double, ptr %A, i64 %inc
11580 declare void @llvm.aarch64.neon.st1x4.v2f64.p0(<2 x double>, <2 x double>, <2 x double>,<2 x double>, ptr)
11583 define ptr @test_v1f64_post_imm_st1x4(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
11584 ; SDAG-LABEL: test_v1f64_post_imm_st1x4:
11586 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11587 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11588 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11589 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11590 ; SDAG-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], #32
11593 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_st1x4:
11594 ; CHECK-GISEL: ; %bb.0:
11595 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11596 ; CHECK-GISEL-NEXT: mov x8, x0
11597 ; CHECK-GISEL-NEXT: add x0, x0, #32
11598 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11599 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11600 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11601 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2, v3 }, [x8]
11602 ; CHECK-GISEL-NEXT: ret
11603 call void @llvm.aarch64.neon.st1x4.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, ptr %A)
11604 %tmp = getelementptr double, ptr %A, i64 4
11608 define ptr @test_v1f64_post_reg_st1x4(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 %inc) nounwind {
11609 ; SDAG-LABEL: test_v1f64_post_reg_st1x4:
11611 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11612 ; SDAG-NEXT: lsl x8, x2, #3
11613 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11614 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11615 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11616 ; SDAG-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], x8
11619 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_st1x4:
11620 ; CHECK-GISEL: ; %bb.0:
11621 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11622 ; CHECK-GISEL-NEXT: mov x8, x0
11623 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
11624 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11625 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11626 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
11627 ; CHECK-GISEL-NEXT: st1.1d { v0, v1, v2, v3 }, [x8]
11628 ; CHECK-GISEL-NEXT: ret
11629 call void @llvm.aarch64.neon.st1x4.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, ptr %A)
11630 %tmp = getelementptr double, ptr %A, i64 %inc
11634 declare void @llvm.aarch64.neon.st1x4.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, <1 x double>, ptr)
11636 define ptr @test_v16i8_post_imm_st2lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
11637 ; SDAG-LABEL: test_v16i8_post_imm_st2lane:
11639 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11640 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11641 ; SDAG-NEXT: st2.b { v0, v1 }[0], [x0], #2
11644 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_st2lane:
11645 ; CHECK-GISEL: ; %bb.0:
11646 ; CHECK-GISEL-NEXT: mov x8, x0
11647 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11648 ; CHECK-GISEL-NEXT: add x0, x0, #2
11649 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11650 ; CHECK-GISEL-NEXT: st2.b { v0, v1 }[0], [x8]
11651 ; CHECK-GISEL-NEXT: ret
11652 call void @llvm.aarch64.neon.st2lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, i64 0, ptr %A)
11653 %tmp = getelementptr i8, ptr %A, i32 2
11657 define ptr @test_v16i8_post_reg_st2lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, i64 %inc) nounwind {
11658 ; SDAG-LABEL: test_v16i8_post_reg_st2lane:
11660 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11661 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11662 ; SDAG-NEXT: st2.b { v0, v1 }[0], [x0], x2
11665 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_st2lane:
11666 ; CHECK-GISEL: ; %bb.0:
11667 ; CHECK-GISEL-NEXT: mov x8, x0
11668 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11669 ; CHECK-GISEL-NEXT: add x0, x0, x2
11670 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11671 ; CHECK-GISEL-NEXT: st2.b { v0, v1 }[0], [x8]
11672 ; CHECK-GISEL-NEXT: ret
11673 call void @llvm.aarch64.neon.st2lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, i64 0, ptr %A)
11674 %tmp = getelementptr i8, ptr %A, i64 %inc
11678 declare void @llvm.aarch64.neon.st2lane.v16i8.p0(<16 x i8>, <16 x i8>, i64, ptr)
11681 define ptr @test_v8i8_post_imm_st2lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
11682 ; SDAG-LABEL: test_v8i8_post_imm_st2lane:
11684 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11685 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11686 ; SDAG-NEXT: st2.b { v0, v1 }[0], [x0], #2
11689 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_st2lane:
11690 ; CHECK-GISEL: ; %bb.0:
11691 ; CHECK-GISEL-NEXT: mov x8, x0
11692 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11693 ; CHECK-GISEL-NEXT: add x0, x0, #2
11694 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11695 ; CHECK-GISEL-NEXT: st2.b { v0, v1 }[0], [x8]
11696 ; CHECK-GISEL-NEXT: ret
11697 call void @llvm.aarch64.neon.st2lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, i64 0, ptr %A)
11698 %tmp = getelementptr i8, ptr %A, i32 2
11702 define ptr @test_v8i8_post_reg_st2lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, i64 %inc) nounwind {
11703 ; SDAG-LABEL: test_v8i8_post_reg_st2lane:
11705 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11706 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11707 ; SDAG-NEXT: st2.b { v0, v1 }[0], [x0], x2
11710 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_st2lane:
11711 ; CHECK-GISEL: ; %bb.0:
11712 ; CHECK-GISEL-NEXT: mov x8, x0
11713 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11714 ; CHECK-GISEL-NEXT: add x0, x0, x2
11715 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11716 ; CHECK-GISEL-NEXT: st2.b { v0, v1 }[0], [x8]
11717 ; CHECK-GISEL-NEXT: ret
11718 call void @llvm.aarch64.neon.st2lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, i64 0, ptr %A)
11719 %tmp = getelementptr i8, ptr %A, i64 %inc
11723 declare void @llvm.aarch64.neon.st2lane.v8i8.p0(<8 x i8>, <8 x i8>, i64, ptr)
11726 define ptr @test_v8i16_post_imm_st2lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
11727 ; SDAG-LABEL: test_v8i16_post_imm_st2lane:
11729 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11730 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11731 ; SDAG-NEXT: st2.h { v0, v1 }[0], [x0], #4
11734 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_st2lane:
11735 ; CHECK-GISEL: ; %bb.0:
11736 ; CHECK-GISEL-NEXT: mov x8, x0
11737 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11738 ; CHECK-GISEL-NEXT: add x0, x0, #4
11739 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11740 ; CHECK-GISEL-NEXT: st2.h { v0, v1 }[0], [x8]
11741 ; CHECK-GISEL-NEXT: ret
11742 call void @llvm.aarch64.neon.st2lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, i64 0, ptr %A)
11743 %tmp = getelementptr i16, ptr %A, i32 2
11747 define ptr @test_v8i16_post_reg_st2lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, i64 %inc) nounwind {
11748 ; SDAG-LABEL: test_v8i16_post_reg_st2lane:
11750 ; SDAG-NEXT: lsl x8, x2, #1
11751 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11752 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11753 ; SDAG-NEXT: st2.h { v0, v1 }[0], [x0], x8
11756 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_st2lane:
11757 ; CHECK-GISEL: ; %bb.0:
11758 ; CHECK-GISEL-NEXT: mov x8, x0
11759 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
11760 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11761 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11762 ; CHECK-GISEL-NEXT: st2.h { v0, v1 }[0], [x8]
11763 ; CHECK-GISEL-NEXT: ret
11764 call void @llvm.aarch64.neon.st2lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, i64 0, ptr %A)
11765 %tmp = getelementptr i16, ptr %A, i64 %inc
11769 declare void @llvm.aarch64.neon.st2lane.v8i16.p0(<8 x i16>, <8 x i16>, i64, ptr)
11772 define ptr @test_v4i16_post_imm_st2lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
11773 ; SDAG-LABEL: test_v4i16_post_imm_st2lane:
11775 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11776 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11777 ; SDAG-NEXT: st2.h { v0, v1 }[0], [x0], #4
11780 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_st2lane:
11781 ; CHECK-GISEL: ; %bb.0:
11782 ; CHECK-GISEL-NEXT: mov x8, x0
11783 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11784 ; CHECK-GISEL-NEXT: add x0, x0, #4
11785 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11786 ; CHECK-GISEL-NEXT: st2.h { v0, v1 }[0], [x8]
11787 ; CHECK-GISEL-NEXT: ret
11788 call void @llvm.aarch64.neon.st2lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, i64 0, ptr %A)
11789 %tmp = getelementptr i16, ptr %A, i32 2
11793 define ptr @test_v4i16_post_reg_st2lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, i64 %inc) nounwind {
11794 ; SDAG-LABEL: test_v4i16_post_reg_st2lane:
11796 ; SDAG-NEXT: lsl x8, x2, #1
11797 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11798 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11799 ; SDAG-NEXT: st2.h { v0, v1 }[0], [x0], x8
11802 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_st2lane:
11803 ; CHECK-GISEL: ; %bb.0:
11804 ; CHECK-GISEL-NEXT: mov x8, x0
11805 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
11806 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11807 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11808 ; CHECK-GISEL-NEXT: st2.h { v0, v1 }[0], [x8]
11809 ; CHECK-GISEL-NEXT: ret
11810 call void @llvm.aarch64.neon.st2lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, i64 0, ptr %A)
11811 %tmp = getelementptr i16, ptr %A, i64 %inc
11815 declare void @llvm.aarch64.neon.st2lane.v4i16.p0(<4 x i16>, <4 x i16>, i64, ptr)
11818 define ptr @test_v4i32_post_imm_st2lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
11819 ; SDAG-LABEL: test_v4i32_post_imm_st2lane:
11821 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11822 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11823 ; SDAG-NEXT: st2.s { v0, v1 }[0], [x0], #8
11826 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_st2lane:
11827 ; CHECK-GISEL: ; %bb.0:
11828 ; CHECK-GISEL-NEXT: mov x8, x0
11829 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11830 ; CHECK-GISEL-NEXT: add x0, x0, #8
11831 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11832 ; CHECK-GISEL-NEXT: st2.s { v0, v1 }[0], [x8]
11833 ; CHECK-GISEL-NEXT: ret
11834 call void @llvm.aarch64.neon.st2lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, i64 0, ptr %A)
11835 %tmp = getelementptr i32, ptr %A, i32 2
11839 define ptr @test_v4i32_post_reg_st2lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, i64 %inc) nounwind {
11840 ; SDAG-LABEL: test_v4i32_post_reg_st2lane:
11842 ; SDAG-NEXT: lsl x8, x2, #2
11843 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11844 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11845 ; SDAG-NEXT: st2.s { v0, v1 }[0], [x0], x8
11848 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_st2lane:
11849 ; CHECK-GISEL: ; %bb.0:
11850 ; CHECK-GISEL-NEXT: mov x8, x0
11851 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
11852 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11853 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11854 ; CHECK-GISEL-NEXT: st2.s { v0, v1 }[0], [x8]
11855 ; CHECK-GISEL-NEXT: ret
11856 call void @llvm.aarch64.neon.st2lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, i64 0, ptr %A)
11857 %tmp = getelementptr i32, ptr %A, i64 %inc
11861 declare void @llvm.aarch64.neon.st2lane.v4i32.p0(<4 x i32>, <4 x i32>, i64, ptr)
11864 define ptr @test_v2i32_post_imm_st2lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
11865 ; SDAG-LABEL: test_v2i32_post_imm_st2lane:
11867 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11868 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11869 ; SDAG-NEXT: st2.s { v0, v1 }[0], [x0], #8
11872 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_st2lane:
11873 ; CHECK-GISEL: ; %bb.0:
11874 ; CHECK-GISEL-NEXT: mov x8, x0
11875 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11876 ; CHECK-GISEL-NEXT: add x0, x0, #8
11877 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11878 ; CHECK-GISEL-NEXT: st2.s { v0, v1 }[0], [x8]
11879 ; CHECK-GISEL-NEXT: ret
11880 call void @llvm.aarch64.neon.st2lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, i64 0, ptr %A)
11881 %tmp = getelementptr i32, ptr %A, i32 2
11885 define ptr @test_v2i32_post_reg_st2lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, i64 %inc) nounwind {
11886 ; SDAG-LABEL: test_v2i32_post_reg_st2lane:
11888 ; SDAG-NEXT: lsl x8, x2, #2
11889 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11890 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11891 ; SDAG-NEXT: st2.s { v0, v1 }[0], [x0], x8
11894 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_st2lane:
11895 ; CHECK-GISEL: ; %bb.0:
11896 ; CHECK-GISEL-NEXT: mov x8, x0
11897 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
11898 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11899 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11900 ; CHECK-GISEL-NEXT: st2.s { v0, v1 }[0], [x8]
11901 ; CHECK-GISEL-NEXT: ret
11902 call void @llvm.aarch64.neon.st2lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, i64 0, ptr %A)
11903 %tmp = getelementptr i32, ptr %A, i64 %inc
11907 declare void @llvm.aarch64.neon.st2lane.v2i32.p0(<2 x i32>, <2 x i32>, i64, ptr)
11910 define ptr @test_v2i64_post_imm_st2lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
11911 ; SDAG-LABEL: test_v2i64_post_imm_st2lane:
11913 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11914 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11915 ; SDAG-NEXT: st2.d { v0, v1 }[0], [x0], #16
11918 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_st2lane:
11919 ; CHECK-GISEL: ; %bb.0:
11920 ; CHECK-GISEL-NEXT: mov x8, x0
11921 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11922 ; CHECK-GISEL-NEXT: add x0, x0, #16
11923 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11924 ; CHECK-GISEL-NEXT: st2.d { v0, v1 }[0], [x8]
11925 ; CHECK-GISEL-NEXT: ret
11926 call void @llvm.aarch64.neon.st2lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, i64 0, ptr %A)
11927 %tmp = getelementptr i64, ptr %A, i64 2
11931 define ptr @test_v2i64_post_reg_st2lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, i64 %inc) nounwind {
11932 ; SDAG-LABEL: test_v2i64_post_reg_st2lane:
11934 ; SDAG-NEXT: lsl x8, x2, #3
11935 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11936 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11937 ; SDAG-NEXT: st2.d { v0, v1 }[0], [x0], x8
11940 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_st2lane:
11941 ; CHECK-GISEL: ; %bb.0:
11942 ; CHECK-GISEL-NEXT: mov x8, x0
11943 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
11944 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
11945 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
11946 ; CHECK-GISEL-NEXT: st2.d { v0, v1 }[0], [x8]
11947 ; CHECK-GISEL-NEXT: ret
11948 call void @llvm.aarch64.neon.st2lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, i64 0, ptr %A)
11949 %tmp = getelementptr i64, ptr %A, i64 %inc
11953 declare void @llvm.aarch64.neon.st2lane.v2i64.p0(<2 x i64>, <2 x i64>, i64, ptr)
11956 define ptr @test_v1i64_post_imm_st2lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
11957 ; SDAG-LABEL: test_v1i64_post_imm_st2lane:
11959 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11960 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11961 ; SDAG-NEXT: st2.d { v0, v1 }[0], [x0], #16
11964 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_st2lane:
11965 ; CHECK-GISEL: ; %bb.0:
11966 ; CHECK-GISEL-NEXT: mov x8, x0
11967 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11968 ; CHECK-GISEL-NEXT: add x0, x0, #16
11969 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11970 ; CHECK-GISEL-NEXT: st2.d { v0, v1 }[0], [x8]
11971 ; CHECK-GISEL-NEXT: ret
11972 call void @llvm.aarch64.neon.st2lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, i64 0, ptr %A)
11973 %tmp = getelementptr i64, ptr %A, i64 2
11977 define ptr @test_v1i64_post_reg_st2lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, i64 %inc) nounwind {
11978 ; SDAG-LABEL: test_v1i64_post_reg_st2lane:
11980 ; SDAG-NEXT: lsl x8, x2, #3
11981 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11982 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11983 ; SDAG-NEXT: st2.d { v0, v1 }[0], [x0], x8
11986 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_st2lane:
11987 ; CHECK-GISEL: ; %bb.0:
11988 ; CHECK-GISEL-NEXT: mov x8, x0
11989 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
11990 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
11991 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
11992 ; CHECK-GISEL-NEXT: st2.d { v0, v1 }[0], [x8]
11993 ; CHECK-GISEL-NEXT: ret
11994 call void @llvm.aarch64.neon.st2lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, i64 0, ptr %A)
11995 %tmp = getelementptr i64, ptr %A, i64 %inc
11999 declare void @llvm.aarch64.neon.st2lane.v1i64.p0(<1 x i64>, <1 x i64>, i64, ptr)
12002 define ptr @test_v4f32_post_imm_st2lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C) nounwind {
12003 ; SDAG-LABEL: test_v4f32_post_imm_st2lane:
12005 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
12006 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
12007 ; SDAG-NEXT: st2.s { v0, v1 }[0], [x0], #8
12010 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_st2lane:
12011 ; CHECK-GISEL: ; %bb.0:
12012 ; CHECK-GISEL-NEXT: mov x8, x0
12013 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
12014 ; CHECK-GISEL-NEXT: add x0, x0, #8
12015 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
12016 ; CHECK-GISEL-NEXT: st2.s { v0, v1 }[0], [x8]
12017 ; CHECK-GISEL-NEXT: ret
12018 call void @llvm.aarch64.neon.st2lane.v4f32.p0(<4 x float> %B, <4 x float> %C, i64 0, ptr %A)
12019 %tmp = getelementptr float, ptr %A, i32 2
12023 define ptr @test_v4f32_post_reg_st2lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, i64 %inc) nounwind {
12024 ; SDAG-LABEL: test_v4f32_post_reg_st2lane:
12026 ; SDAG-NEXT: lsl x8, x2, #2
12027 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
12028 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
12029 ; SDAG-NEXT: st2.s { v0, v1 }[0], [x0], x8
12032 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_st2lane:
12033 ; CHECK-GISEL: ; %bb.0:
12034 ; CHECK-GISEL-NEXT: mov x8, x0
12035 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
12036 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
12037 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
12038 ; CHECK-GISEL-NEXT: st2.s { v0, v1 }[0], [x8]
12039 ; CHECK-GISEL-NEXT: ret
12040 call void @llvm.aarch64.neon.st2lane.v4f32.p0(<4 x float> %B, <4 x float> %C, i64 0, ptr %A)
12041 %tmp = getelementptr float, ptr %A, i64 %inc
12045 declare void @llvm.aarch64.neon.st2lane.v4f32.p0(<4 x float>, <4 x float>, i64, ptr)
12048 define ptr @test_v2f32_post_imm_st2lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C) nounwind {
12049 ; SDAG-LABEL: test_v2f32_post_imm_st2lane:
12051 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
12052 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
12053 ; SDAG-NEXT: st2.s { v0, v1 }[0], [x0], #8
12056 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_st2lane:
12057 ; CHECK-GISEL: ; %bb.0:
12058 ; CHECK-GISEL-NEXT: mov x8, x0
12059 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
12060 ; CHECK-GISEL-NEXT: add x0, x0, #8
12061 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
12062 ; CHECK-GISEL-NEXT: st2.s { v0, v1 }[0], [x8]
12063 ; CHECK-GISEL-NEXT: ret
12064 call void @llvm.aarch64.neon.st2lane.v2f32.p0(<2 x float> %B, <2 x float> %C, i64 0, ptr %A)
12065 %tmp = getelementptr float, ptr %A, i32 2
12069 define ptr @test_v2f32_post_reg_st2lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, i64 %inc) nounwind {
12070 ; SDAG-LABEL: test_v2f32_post_reg_st2lane:
12072 ; SDAG-NEXT: lsl x8, x2, #2
12073 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
12074 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
12075 ; SDAG-NEXT: st2.s { v0, v1 }[0], [x0], x8
12078 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_st2lane:
12079 ; CHECK-GISEL: ; %bb.0:
12080 ; CHECK-GISEL-NEXT: mov x8, x0
12081 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
12082 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
12083 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
12084 ; CHECK-GISEL-NEXT: st2.s { v0, v1 }[0], [x8]
12085 ; CHECK-GISEL-NEXT: ret
12086 call void @llvm.aarch64.neon.st2lane.v2f32.p0(<2 x float> %B, <2 x float> %C, i64 0, ptr %A)
12087 %tmp = getelementptr float, ptr %A, i64 %inc
12091 declare void @llvm.aarch64.neon.st2lane.v2f32.p0(<2 x float>, <2 x float>, i64, ptr)
12094 define ptr @test_v2f64_post_imm_st2lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C) nounwind {
12095 ; SDAG-LABEL: test_v2f64_post_imm_st2lane:
12097 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
12098 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
12099 ; SDAG-NEXT: st2.d { v0, v1 }[0], [x0], #16
12102 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_st2lane:
12103 ; CHECK-GISEL: ; %bb.0:
12104 ; CHECK-GISEL-NEXT: mov x8, x0
12105 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
12106 ; CHECK-GISEL-NEXT: add x0, x0, #16
12107 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
12108 ; CHECK-GISEL-NEXT: st2.d { v0, v1 }[0], [x8]
12109 ; CHECK-GISEL-NEXT: ret
12110 call void @llvm.aarch64.neon.st2lane.v2f64.p0(<2 x double> %B, <2 x double> %C, i64 0, ptr %A)
12111 %tmp = getelementptr double, ptr %A, i64 2
12115 define ptr @test_v2f64_post_reg_st2lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, i64 %inc) nounwind {
12116 ; SDAG-LABEL: test_v2f64_post_reg_st2lane:
12118 ; SDAG-NEXT: lsl x8, x2, #3
12119 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
12120 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
12121 ; SDAG-NEXT: st2.d { v0, v1 }[0], [x0], x8
12124 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_st2lane:
12125 ; CHECK-GISEL: ; %bb.0:
12126 ; CHECK-GISEL-NEXT: mov x8, x0
12127 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
12128 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
12129 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
12130 ; CHECK-GISEL-NEXT: st2.d { v0, v1 }[0], [x8]
12131 ; CHECK-GISEL-NEXT: ret
12132 call void @llvm.aarch64.neon.st2lane.v2f64.p0(<2 x double> %B, <2 x double> %C, i64 0, ptr %A)
12133 %tmp = getelementptr double, ptr %A, i64 %inc
12137 declare void @llvm.aarch64.neon.st2lane.v2f64.p0(<2 x double>, <2 x double>, i64, ptr)
12140 define ptr @test_v1f64_post_imm_st2lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C) nounwind {
12141 ; SDAG-LABEL: test_v1f64_post_imm_st2lane:
12143 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
12144 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
12145 ; SDAG-NEXT: st2.d { v0, v1 }[0], [x0], #16
12148 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_st2lane:
12149 ; CHECK-GISEL: ; %bb.0:
12150 ; CHECK-GISEL-NEXT: mov x8, x0
12151 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
12152 ; CHECK-GISEL-NEXT: add x0, x0, #16
12153 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
12154 ; CHECK-GISEL-NEXT: st2.d { v0, v1 }[0], [x8]
12155 ; CHECK-GISEL-NEXT: ret
12156 call void @llvm.aarch64.neon.st2lane.v1f64.p0(<1 x double> %B, <1 x double> %C, i64 0, ptr %A)
12157 %tmp = getelementptr double, ptr %A, i64 2
12161 define ptr @test_v1f64_post_reg_st2lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, i64 %inc) nounwind {
12162 ; SDAG-LABEL: test_v1f64_post_reg_st2lane:
12164 ; SDAG-NEXT: lsl x8, x2, #3
12165 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
12166 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
12167 ; SDAG-NEXT: st2.d { v0, v1 }[0], [x0], x8
12170 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_st2lane:
12171 ; CHECK-GISEL: ; %bb.0:
12172 ; CHECK-GISEL-NEXT: mov x8, x0
12173 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
12174 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
12175 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
12176 ; CHECK-GISEL-NEXT: st2.d { v0, v1 }[0], [x8]
12177 ; CHECK-GISEL-NEXT: ret
12178 call void @llvm.aarch64.neon.st2lane.v1f64.p0(<1 x double> %B, <1 x double> %C, i64 0, ptr %A)
12179 %tmp = getelementptr double, ptr %A, i64 %inc
12183 declare void @llvm.aarch64.neon.st2lane.v1f64.p0(<1 x double>, <1 x double>, i64, ptr)
12186 define ptr @test_v16i8_post_imm_st3lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
12187 ; SDAG-LABEL: test_v16i8_post_imm_st3lane:
12189 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12190 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12191 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12192 ; SDAG-NEXT: st3.b { v0, v1, v2 }[0], [x0], #3
12195 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_st3lane:
12196 ; CHECK-GISEL: ; %bb.0:
12197 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12198 ; CHECK-GISEL-NEXT: mov x8, x0
12199 ; CHECK-GISEL-NEXT: add x0, x0, #3
12200 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12201 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12202 ; CHECK-GISEL-NEXT: st3.b { v0, v1, v2 }[0], [x8]
12203 ; CHECK-GISEL-NEXT: ret
12204 call void @llvm.aarch64.neon.st3lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, ptr %A)
12205 %tmp = getelementptr i8, ptr %A, i32 3
12209 define ptr @test_v16i8_post_reg_st3lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 %inc) nounwind {
12210 ; SDAG-LABEL: test_v16i8_post_reg_st3lane:
12212 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12213 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12214 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12215 ; SDAG-NEXT: st3.b { v0, v1, v2 }[0], [x0], x2
12218 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_st3lane:
12219 ; CHECK-GISEL: ; %bb.0:
12220 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12221 ; CHECK-GISEL-NEXT: mov x8, x0
12222 ; CHECK-GISEL-NEXT: add x0, x0, x2
12223 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12224 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12225 ; CHECK-GISEL-NEXT: st3.b { v0, v1, v2 }[0], [x8]
12226 ; CHECK-GISEL-NEXT: ret
12227 call void @llvm.aarch64.neon.st3lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, ptr %A)
12228 %tmp = getelementptr i8, ptr %A, i64 %inc
12232 declare void @llvm.aarch64.neon.st3lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, i64, ptr)
12235 define ptr @test_v8i8_post_imm_st3lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
12236 ; SDAG-LABEL: test_v8i8_post_imm_st3lane:
12238 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12239 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12240 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12241 ; SDAG-NEXT: st3.b { v0, v1, v2 }[0], [x0], #3
12244 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_st3lane:
12245 ; CHECK-GISEL: ; %bb.0:
12246 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12247 ; CHECK-GISEL-NEXT: mov x8, x0
12248 ; CHECK-GISEL-NEXT: add x0, x0, #3
12249 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12250 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12251 ; CHECK-GISEL-NEXT: st3.b { v0, v1, v2 }[0], [x8]
12252 ; CHECK-GISEL-NEXT: ret
12253 call void @llvm.aarch64.neon.st3lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, ptr %A)
12254 %tmp = getelementptr i8, ptr %A, i32 3
12258 define ptr @test_v8i8_post_reg_st3lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 %inc) nounwind {
12259 ; SDAG-LABEL: test_v8i8_post_reg_st3lane:
12261 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12262 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12263 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12264 ; SDAG-NEXT: st3.b { v0, v1, v2 }[0], [x0], x2
12267 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_st3lane:
12268 ; CHECK-GISEL: ; %bb.0:
12269 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12270 ; CHECK-GISEL-NEXT: mov x8, x0
12271 ; CHECK-GISEL-NEXT: add x0, x0, x2
12272 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12273 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12274 ; CHECK-GISEL-NEXT: st3.b { v0, v1, v2 }[0], [x8]
12275 ; CHECK-GISEL-NEXT: ret
12276 call void @llvm.aarch64.neon.st3lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, ptr %A)
12277 %tmp = getelementptr i8, ptr %A, i64 %inc
12281 declare void @llvm.aarch64.neon.st3lane.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, i64, ptr)
12284 define ptr @test_v8i16_post_imm_st3lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
12285 ; SDAG-LABEL: test_v8i16_post_imm_st3lane:
12287 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12288 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12289 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12290 ; SDAG-NEXT: st3.h { v0, v1, v2 }[0], [x0], #6
12293 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_st3lane:
12294 ; CHECK-GISEL: ; %bb.0:
12295 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12296 ; CHECK-GISEL-NEXT: mov x8, x0
12297 ; CHECK-GISEL-NEXT: add x0, x0, #6
12298 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12299 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12300 ; CHECK-GISEL-NEXT: st3.h { v0, v1, v2 }[0], [x8]
12301 ; CHECK-GISEL-NEXT: ret
12302 call void @llvm.aarch64.neon.st3lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, ptr %A)
12303 %tmp = getelementptr i16, ptr %A, i32 3
12307 define ptr @test_v8i16_post_reg_st3lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 %inc) nounwind {
12308 ; SDAG-LABEL: test_v8i16_post_reg_st3lane:
12310 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12311 ; SDAG-NEXT: lsl x8, x2, #1
12312 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12313 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12314 ; SDAG-NEXT: st3.h { v0, v1, v2 }[0], [x0], x8
12317 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_st3lane:
12318 ; CHECK-GISEL: ; %bb.0:
12319 ; CHECK-GISEL-NEXT: mov x8, x0
12320 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12321 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
12322 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12323 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12324 ; CHECK-GISEL-NEXT: st3.h { v0, v1, v2 }[0], [x8]
12325 ; CHECK-GISEL-NEXT: ret
12326 call void @llvm.aarch64.neon.st3lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, ptr %A)
12327 %tmp = getelementptr i16, ptr %A, i64 %inc
12331 declare void @llvm.aarch64.neon.st3lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, i64, ptr)
12334 define ptr @test_v4i16_post_imm_st3lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
12335 ; SDAG-LABEL: test_v4i16_post_imm_st3lane:
12337 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12338 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12339 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12340 ; SDAG-NEXT: st3.h { v0, v1, v2 }[0], [x0], #6
12343 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_st3lane:
12344 ; CHECK-GISEL: ; %bb.0:
12345 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12346 ; CHECK-GISEL-NEXT: mov x8, x0
12347 ; CHECK-GISEL-NEXT: add x0, x0, #6
12348 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12349 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12350 ; CHECK-GISEL-NEXT: st3.h { v0, v1, v2 }[0], [x8]
12351 ; CHECK-GISEL-NEXT: ret
12352 call void @llvm.aarch64.neon.st3lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, ptr %A)
12353 %tmp = getelementptr i16, ptr %A, i32 3
12357 define ptr @test_v4i16_post_reg_st3lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 %inc) nounwind {
12358 ; SDAG-LABEL: test_v4i16_post_reg_st3lane:
12360 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12361 ; SDAG-NEXT: lsl x8, x2, #1
12362 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12363 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12364 ; SDAG-NEXT: st3.h { v0, v1, v2 }[0], [x0], x8
12367 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_st3lane:
12368 ; CHECK-GISEL: ; %bb.0:
12369 ; CHECK-GISEL-NEXT: mov x8, x0
12370 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12371 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
12372 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12373 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12374 ; CHECK-GISEL-NEXT: st3.h { v0, v1, v2 }[0], [x8]
12375 ; CHECK-GISEL-NEXT: ret
12376 call void @llvm.aarch64.neon.st3lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, ptr %A)
12377 %tmp = getelementptr i16, ptr %A, i64 %inc
12381 declare void @llvm.aarch64.neon.st3lane.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, i64, ptr)
12384 define ptr @test_v4i32_post_imm_st3lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
12385 ; SDAG-LABEL: test_v4i32_post_imm_st3lane:
12387 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12388 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12389 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12390 ; SDAG-NEXT: st3.s { v0, v1, v2 }[0], [x0], #12
12393 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_st3lane:
12394 ; CHECK-GISEL: ; %bb.0:
12395 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12396 ; CHECK-GISEL-NEXT: mov x8, x0
12397 ; CHECK-GISEL-NEXT: add x0, x0, #12
12398 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12399 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12400 ; CHECK-GISEL-NEXT: st3.s { v0, v1, v2 }[0], [x8]
12401 ; CHECK-GISEL-NEXT: ret
12402 call void @llvm.aarch64.neon.st3lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, ptr %A)
12403 %tmp = getelementptr i32, ptr %A, i32 3
12407 define ptr @test_v4i32_post_reg_st3lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 %inc) nounwind {
12408 ; SDAG-LABEL: test_v4i32_post_reg_st3lane:
12410 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12411 ; SDAG-NEXT: lsl x8, x2, #2
12412 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12413 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12414 ; SDAG-NEXT: st3.s { v0, v1, v2 }[0], [x0], x8
12417 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_st3lane:
12418 ; CHECK-GISEL: ; %bb.0:
12419 ; CHECK-GISEL-NEXT: mov x8, x0
12420 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12421 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
12422 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12423 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12424 ; CHECK-GISEL-NEXT: st3.s { v0, v1, v2 }[0], [x8]
12425 ; CHECK-GISEL-NEXT: ret
12426 call void @llvm.aarch64.neon.st3lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, ptr %A)
12427 %tmp = getelementptr i32, ptr %A, i64 %inc
12431 declare void @llvm.aarch64.neon.st3lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, i64, ptr)
12434 define ptr @test_v2i32_post_imm_st3lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
12435 ; SDAG-LABEL: test_v2i32_post_imm_st3lane:
12437 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12438 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12439 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12440 ; SDAG-NEXT: st3.s { v0, v1, v2 }[0], [x0], #12
12443 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_st3lane:
12444 ; CHECK-GISEL: ; %bb.0:
12445 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12446 ; CHECK-GISEL-NEXT: mov x8, x0
12447 ; CHECK-GISEL-NEXT: add x0, x0, #12
12448 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12449 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12450 ; CHECK-GISEL-NEXT: st3.s { v0, v1, v2 }[0], [x8]
12451 ; CHECK-GISEL-NEXT: ret
12452 call void @llvm.aarch64.neon.st3lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, ptr %A)
12453 %tmp = getelementptr i32, ptr %A, i32 3
12457 define ptr @test_v2i32_post_reg_st3lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 %inc) nounwind {
12458 ; SDAG-LABEL: test_v2i32_post_reg_st3lane:
12460 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12461 ; SDAG-NEXT: lsl x8, x2, #2
12462 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12463 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12464 ; SDAG-NEXT: st3.s { v0, v1, v2 }[0], [x0], x8
12467 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_st3lane:
12468 ; CHECK-GISEL: ; %bb.0:
12469 ; CHECK-GISEL-NEXT: mov x8, x0
12470 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12471 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
12472 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12473 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12474 ; CHECK-GISEL-NEXT: st3.s { v0, v1, v2 }[0], [x8]
12475 ; CHECK-GISEL-NEXT: ret
12476 call void @llvm.aarch64.neon.st3lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, ptr %A)
12477 %tmp = getelementptr i32, ptr %A, i64 %inc
12481 declare void @llvm.aarch64.neon.st3lane.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, i64, ptr)
12484 define ptr @test_v2i64_post_imm_st3lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
12485 ; SDAG-LABEL: test_v2i64_post_imm_st3lane:
12487 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12488 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12489 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12490 ; SDAG-NEXT: st3.d { v0, v1, v2 }[0], [x0], #24
12493 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_st3lane:
12494 ; CHECK-GISEL: ; %bb.0:
12495 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12496 ; CHECK-GISEL-NEXT: mov x8, x0
12497 ; CHECK-GISEL-NEXT: add x0, x0, #24
12498 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12499 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12500 ; CHECK-GISEL-NEXT: st3.d { v0, v1, v2 }[0], [x8]
12501 ; CHECK-GISEL-NEXT: ret
12502 call void @llvm.aarch64.neon.st3lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, ptr %A)
12503 %tmp = getelementptr i64, ptr %A, i64 3
12507 define ptr @test_v2i64_post_reg_st3lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 %inc) nounwind {
12508 ; SDAG-LABEL: test_v2i64_post_reg_st3lane:
12510 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12511 ; SDAG-NEXT: lsl x8, x2, #3
12512 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12513 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12514 ; SDAG-NEXT: st3.d { v0, v1, v2 }[0], [x0], x8
12517 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_st3lane:
12518 ; CHECK-GISEL: ; %bb.0:
12519 ; CHECK-GISEL-NEXT: mov x8, x0
12520 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12521 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
12522 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12523 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12524 ; CHECK-GISEL-NEXT: st3.d { v0, v1, v2 }[0], [x8]
12525 ; CHECK-GISEL-NEXT: ret
12526 call void @llvm.aarch64.neon.st3lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, ptr %A)
12527 %tmp = getelementptr i64, ptr %A, i64 %inc
12531 declare void @llvm.aarch64.neon.st3lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, i64, ptr)
12534 define ptr @test_v1i64_post_imm_st3lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
12535 ; SDAG-LABEL: test_v1i64_post_imm_st3lane:
12537 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12538 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12539 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12540 ; SDAG-NEXT: st3.d { v0, v1, v2 }[0], [x0], #24
12543 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_st3lane:
12544 ; CHECK-GISEL: ; %bb.0:
12545 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12546 ; CHECK-GISEL-NEXT: mov x8, x0
12547 ; CHECK-GISEL-NEXT: add x0, x0, #24
12548 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12549 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12550 ; CHECK-GISEL-NEXT: st3.d { v0, v1, v2 }[0], [x8]
12551 ; CHECK-GISEL-NEXT: ret
12552 call void @llvm.aarch64.neon.st3lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, ptr %A)
12553 %tmp = getelementptr i64, ptr %A, i64 3
12557 define ptr @test_v1i64_post_reg_st3lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 %inc) nounwind {
12558 ; SDAG-LABEL: test_v1i64_post_reg_st3lane:
12560 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12561 ; SDAG-NEXT: lsl x8, x2, #3
12562 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12563 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12564 ; SDAG-NEXT: st3.d { v0, v1, v2 }[0], [x0], x8
12567 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_st3lane:
12568 ; CHECK-GISEL: ; %bb.0:
12569 ; CHECK-GISEL-NEXT: mov x8, x0
12570 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12571 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
12572 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12573 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12574 ; CHECK-GISEL-NEXT: st3.d { v0, v1, v2 }[0], [x8]
12575 ; CHECK-GISEL-NEXT: ret
12576 call void @llvm.aarch64.neon.st3lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, ptr %A)
12577 %tmp = getelementptr i64, ptr %A, i64 %inc
12581 declare void @llvm.aarch64.neon.st3lane.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, i64, ptr)
12584 define ptr @test_v4f32_post_imm_st3lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
12585 ; SDAG-LABEL: test_v4f32_post_imm_st3lane:
12587 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12588 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12589 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12590 ; SDAG-NEXT: st3.s { v0, v1, v2 }[0], [x0], #12
12593 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_st3lane:
12594 ; CHECK-GISEL: ; %bb.0:
12595 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12596 ; CHECK-GISEL-NEXT: mov x8, x0
12597 ; CHECK-GISEL-NEXT: add x0, x0, #12
12598 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12599 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12600 ; CHECK-GISEL-NEXT: st3.s { v0, v1, v2 }[0], [x8]
12601 ; CHECK-GISEL-NEXT: ret
12602 call void @llvm.aarch64.neon.st3lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, ptr %A)
12603 %tmp = getelementptr float, ptr %A, i32 3
12607 define ptr @test_v4f32_post_reg_st3lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, i64 %inc) nounwind {
12608 ; SDAG-LABEL: test_v4f32_post_reg_st3lane:
12610 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12611 ; SDAG-NEXT: lsl x8, x2, #2
12612 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12613 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12614 ; SDAG-NEXT: st3.s { v0, v1, v2 }[0], [x0], x8
12617 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_st3lane:
12618 ; CHECK-GISEL: ; %bb.0:
12619 ; CHECK-GISEL-NEXT: mov x8, x0
12620 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12621 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
12622 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12623 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12624 ; CHECK-GISEL-NEXT: st3.s { v0, v1, v2 }[0], [x8]
12625 ; CHECK-GISEL-NEXT: ret
12626 call void @llvm.aarch64.neon.st3lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, ptr %A)
12627 %tmp = getelementptr float, ptr %A, i64 %inc
12631 declare void @llvm.aarch64.neon.st3lane.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, i64, ptr)
12634 define ptr @test_v2f32_post_imm_st3lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
12635 ; SDAG-LABEL: test_v2f32_post_imm_st3lane:
12637 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12638 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12639 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12640 ; SDAG-NEXT: st3.s { v0, v1, v2 }[0], [x0], #12
12643 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_st3lane:
12644 ; CHECK-GISEL: ; %bb.0:
12645 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12646 ; CHECK-GISEL-NEXT: mov x8, x0
12647 ; CHECK-GISEL-NEXT: add x0, x0, #12
12648 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12649 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12650 ; CHECK-GISEL-NEXT: st3.s { v0, v1, v2 }[0], [x8]
12651 ; CHECK-GISEL-NEXT: ret
12652 call void @llvm.aarch64.neon.st3lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, ptr %A)
12653 %tmp = getelementptr float, ptr %A, i32 3
12657 define ptr @test_v2f32_post_reg_st3lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, i64 %inc) nounwind {
12658 ; SDAG-LABEL: test_v2f32_post_reg_st3lane:
12660 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12661 ; SDAG-NEXT: lsl x8, x2, #2
12662 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12663 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12664 ; SDAG-NEXT: st3.s { v0, v1, v2 }[0], [x0], x8
12667 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_st3lane:
12668 ; CHECK-GISEL: ; %bb.0:
12669 ; CHECK-GISEL-NEXT: mov x8, x0
12670 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12671 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
12672 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12673 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12674 ; CHECK-GISEL-NEXT: st3.s { v0, v1, v2 }[0], [x8]
12675 ; CHECK-GISEL-NEXT: ret
12676 call void @llvm.aarch64.neon.st3lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, ptr %A)
12677 %tmp = getelementptr float, ptr %A, i64 %inc
12681 declare void @llvm.aarch64.neon.st3lane.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, i64, ptr)
12684 define ptr @test_v2f64_post_imm_st3lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
12685 ; SDAG-LABEL: test_v2f64_post_imm_st3lane:
12687 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12688 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12689 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12690 ; SDAG-NEXT: st3.d { v0, v1, v2 }[0], [x0], #24
12693 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_st3lane:
12694 ; CHECK-GISEL: ; %bb.0:
12695 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12696 ; CHECK-GISEL-NEXT: mov x8, x0
12697 ; CHECK-GISEL-NEXT: add x0, x0, #24
12698 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12699 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12700 ; CHECK-GISEL-NEXT: st3.d { v0, v1, v2 }[0], [x8]
12701 ; CHECK-GISEL-NEXT: ret
12702 call void @llvm.aarch64.neon.st3lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, ptr %A)
12703 %tmp = getelementptr double, ptr %A, i64 3
12707 define ptr @test_v2f64_post_reg_st3lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, i64 %inc) nounwind {
12708 ; SDAG-LABEL: test_v2f64_post_reg_st3lane:
12710 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12711 ; SDAG-NEXT: lsl x8, x2, #3
12712 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12713 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12714 ; SDAG-NEXT: st3.d { v0, v1, v2 }[0], [x0], x8
12717 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_st3lane:
12718 ; CHECK-GISEL: ; %bb.0:
12719 ; CHECK-GISEL-NEXT: mov x8, x0
12720 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
12721 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
12722 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
12723 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
12724 ; CHECK-GISEL-NEXT: st3.d { v0, v1, v2 }[0], [x8]
12725 ; CHECK-GISEL-NEXT: ret
12726 call void @llvm.aarch64.neon.st3lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, ptr %A)
12727 %tmp = getelementptr double, ptr %A, i64 %inc
12731 declare void @llvm.aarch64.neon.st3lane.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, i64, ptr)
12734 define ptr @test_v1f64_post_imm_st3lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
12735 ; SDAG-LABEL: test_v1f64_post_imm_st3lane:
12737 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12738 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12739 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12740 ; SDAG-NEXT: st3.d { v0, v1, v2 }[0], [x0], #24
12743 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_st3lane:
12744 ; CHECK-GISEL: ; %bb.0:
12745 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12746 ; CHECK-GISEL-NEXT: mov x8, x0
12747 ; CHECK-GISEL-NEXT: add x0, x0, #24
12748 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12749 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12750 ; CHECK-GISEL-NEXT: st3.d { v0, v1, v2 }[0], [x8]
12751 ; CHECK-GISEL-NEXT: ret
12752 call void @llvm.aarch64.neon.st3lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, ptr %A)
12753 %tmp = getelementptr double, ptr %A, i64 3
12757 define ptr @test_v1f64_post_reg_st3lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, i64 %inc) nounwind {
12758 ; SDAG-LABEL: test_v1f64_post_reg_st3lane:
12760 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12761 ; SDAG-NEXT: lsl x8, x2, #3
12762 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12763 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12764 ; SDAG-NEXT: st3.d { v0, v1, v2 }[0], [x0], x8
12767 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_st3lane:
12768 ; CHECK-GISEL: ; %bb.0:
12769 ; CHECK-GISEL-NEXT: mov x8, x0
12770 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
12771 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
12772 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
12773 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
12774 ; CHECK-GISEL-NEXT: st3.d { v0, v1, v2 }[0], [x8]
12775 ; CHECK-GISEL-NEXT: ret
12776 call void @llvm.aarch64.neon.st3lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, ptr %A)
12777 %tmp = getelementptr double, ptr %A, i64 %inc
12781 declare void @llvm.aarch64.neon.st3lane.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, i64, ptr)
12784 define ptr @test_v16i8_post_imm_st4lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
12785 ; SDAG-LABEL: test_v16i8_post_imm_st4lane:
12787 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12788 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12789 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12790 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12791 ; SDAG-NEXT: st4.b { v0, v1, v2, v3 }[0], [x0], #4
12794 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_st4lane:
12795 ; CHECK-GISEL: ; %bb.0:
12796 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12797 ; CHECK-GISEL-NEXT: mov x8, x0
12798 ; CHECK-GISEL-NEXT: add x0, x0, #4
12799 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12800 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12801 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12802 ; CHECK-GISEL-NEXT: st4.b { v0, v1, v2, v3 }[0], [x8]
12803 ; CHECK-GISEL-NEXT: ret
12804 call void @llvm.aarch64.neon.st4lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, ptr %A)
12805 %tmp = getelementptr i8, ptr %A, i32 4
12809 define ptr @test_v16i8_post_reg_st4lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 %inc) nounwind {
12810 ; SDAG-LABEL: test_v16i8_post_reg_st4lane:
12812 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12813 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12814 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12815 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12816 ; SDAG-NEXT: st4.b { v0, v1, v2, v3 }[0], [x0], x2
12819 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_st4lane:
12820 ; CHECK-GISEL: ; %bb.0:
12821 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12822 ; CHECK-GISEL-NEXT: mov x8, x0
12823 ; CHECK-GISEL-NEXT: add x0, x0, x2
12824 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12825 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12826 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12827 ; CHECK-GISEL-NEXT: st4.b { v0, v1, v2, v3 }[0], [x8]
12828 ; CHECK-GISEL-NEXT: ret
12829 call void @llvm.aarch64.neon.st4lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, ptr %A)
12830 %tmp = getelementptr i8, ptr %A, i64 %inc
12834 declare void @llvm.aarch64.neon.st4lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i64, ptr)
12837 define ptr @test_v8i8_post_imm_st4lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
12838 ; SDAG-LABEL: test_v8i8_post_imm_st4lane:
12840 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12841 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12842 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12843 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12844 ; SDAG-NEXT: st4.b { v0, v1, v2, v3 }[0], [x0], #4
12847 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_st4lane:
12848 ; CHECK-GISEL: ; %bb.0:
12849 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12850 ; CHECK-GISEL-NEXT: mov x8, x0
12851 ; CHECK-GISEL-NEXT: add x0, x0, #4
12852 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12853 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12854 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12855 ; CHECK-GISEL-NEXT: st4.b { v0, v1, v2, v3 }[0], [x8]
12856 ; CHECK-GISEL-NEXT: ret
12857 call void @llvm.aarch64.neon.st4lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, ptr %A)
12858 %tmp = getelementptr i8, ptr %A, i32 4
12862 define ptr @test_v8i8_post_reg_st4lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 %inc) nounwind {
12863 ; SDAG-LABEL: test_v8i8_post_reg_st4lane:
12865 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12866 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12867 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12868 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12869 ; SDAG-NEXT: st4.b { v0, v1, v2, v3 }[0], [x0], x2
12872 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_st4lane:
12873 ; CHECK-GISEL: ; %bb.0:
12874 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12875 ; CHECK-GISEL-NEXT: mov x8, x0
12876 ; CHECK-GISEL-NEXT: add x0, x0, x2
12877 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12878 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12879 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12880 ; CHECK-GISEL-NEXT: st4.b { v0, v1, v2, v3 }[0], [x8]
12881 ; CHECK-GISEL-NEXT: ret
12882 call void @llvm.aarch64.neon.st4lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, ptr %A)
12883 %tmp = getelementptr i8, ptr %A, i64 %inc
12887 declare void @llvm.aarch64.neon.st4lane.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i64, ptr)
12890 define ptr @test_v8i16_post_imm_st4lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
12891 ; SDAG-LABEL: test_v8i16_post_imm_st4lane:
12893 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12894 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12895 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12896 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12897 ; SDAG-NEXT: st4.h { v0, v1, v2, v3 }[0], [x0], #8
12900 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_st4lane:
12901 ; CHECK-GISEL: ; %bb.0:
12902 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12903 ; CHECK-GISEL-NEXT: mov x8, x0
12904 ; CHECK-GISEL-NEXT: add x0, x0, #8
12905 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12906 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12907 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12908 ; CHECK-GISEL-NEXT: st4.h { v0, v1, v2, v3 }[0], [x8]
12909 ; CHECK-GISEL-NEXT: ret
12910 call void @llvm.aarch64.neon.st4lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, ptr %A)
12911 %tmp = getelementptr i16, ptr %A, i32 4
12915 define ptr @test_v8i16_post_reg_st4lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 %inc) nounwind {
12916 ; SDAG-LABEL: test_v8i16_post_reg_st4lane:
12918 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12919 ; SDAG-NEXT: lsl x8, x2, #1
12920 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12921 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12922 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12923 ; SDAG-NEXT: st4.h { v0, v1, v2, v3 }[0], [x0], x8
12926 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_st4lane:
12927 ; CHECK-GISEL: ; %bb.0:
12928 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12929 ; CHECK-GISEL-NEXT: mov x8, x0
12930 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
12931 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12932 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12933 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12934 ; CHECK-GISEL-NEXT: st4.h { v0, v1, v2, v3 }[0], [x8]
12935 ; CHECK-GISEL-NEXT: ret
12936 call void @llvm.aarch64.neon.st4lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, ptr %A)
12937 %tmp = getelementptr i16, ptr %A, i64 %inc
12941 declare void @llvm.aarch64.neon.st4lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i64, ptr)
12944 define ptr @test_v4i16_post_imm_st4lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
12945 ; SDAG-LABEL: test_v4i16_post_imm_st4lane:
12947 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12948 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12949 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12950 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12951 ; SDAG-NEXT: st4.h { v0, v1, v2, v3 }[0], [x0], #8
12954 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_st4lane:
12955 ; CHECK-GISEL: ; %bb.0:
12956 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12957 ; CHECK-GISEL-NEXT: mov x8, x0
12958 ; CHECK-GISEL-NEXT: add x0, x0, #8
12959 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12960 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12961 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12962 ; CHECK-GISEL-NEXT: st4.h { v0, v1, v2, v3 }[0], [x8]
12963 ; CHECK-GISEL-NEXT: ret
12964 call void @llvm.aarch64.neon.st4lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, ptr %A)
12965 %tmp = getelementptr i16, ptr %A, i32 4
12969 define ptr @test_v4i16_post_reg_st4lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 %inc) nounwind {
12970 ; SDAG-LABEL: test_v4i16_post_reg_st4lane:
12972 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12973 ; SDAG-NEXT: lsl x8, x2, #1
12974 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12975 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12976 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12977 ; SDAG-NEXT: st4.h { v0, v1, v2, v3 }[0], [x0], x8
12980 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_st4lane:
12981 ; CHECK-GISEL: ; %bb.0:
12982 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12983 ; CHECK-GISEL-NEXT: mov x8, x0
12984 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #1
12985 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12986 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12987 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
12988 ; CHECK-GISEL-NEXT: st4.h { v0, v1, v2, v3 }[0], [x8]
12989 ; CHECK-GISEL-NEXT: ret
12990 call void @llvm.aarch64.neon.st4lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, ptr %A)
12991 %tmp = getelementptr i16, ptr %A, i64 %inc
12995 declare void @llvm.aarch64.neon.st4lane.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i64, ptr)
12998 define ptr @test_v4i32_post_imm_st4lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
12999 ; SDAG-LABEL: test_v4i32_post_imm_st4lane:
13001 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13002 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13003 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13004 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13005 ; SDAG-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], #16
13008 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_st4lane:
13009 ; CHECK-GISEL: ; %bb.0:
13010 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13011 ; CHECK-GISEL-NEXT: mov x8, x0
13012 ; CHECK-GISEL-NEXT: add x0, x0, #16
13013 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13014 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13015 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13016 ; CHECK-GISEL-NEXT: st4.s { v0, v1, v2, v3 }[0], [x8]
13017 ; CHECK-GISEL-NEXT: ret
13018 call void @llvm.aarch64.neon.st4lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, ptr %A)
13019 %tmp = getelementptr i32, ptr %A, i32 4
13023 define ptr @test_v4i32_post_reg_st4lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 %inc) nounwind {
13024 ; SDAG-LABEL: test_v4i32_post_reg_st4lane:
13026 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13027 ; SDAG-NEXT: lsl x8, x2, #2
13028 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13029 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13030 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13031 ; SDAG-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], x8
13034 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_st4lane:
13035 ; CHECK-GISEL: ; %bb.0:
13036 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13037 ; CHECK-GISEL-NEXT: mov x8, x0
13038 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
13039 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13040 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13041 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13042 ; CHECK-GISEL-NEXT: st4.s { v0, v1, v2, v3 }[0], [x8]
13043 ; CHECK-GISEL-NEXT: ret
13044 call void @llvm.aarch64.neon.st4lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, ptr %A)
13045 %tmp = getelementptr i32, ptr %A, i64 %inc
13049 declare void @llvm.aarch64.neon.st4lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i64, ptr)
13052 define ptr @test_v2i32_post_imm_st4lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
13053 ; SDAG-LABEL: test_v2i32_post_imm_st4lane:
13055 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13056 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13057 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13058 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13059 ; SDAG-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], #16
13062 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_st4lane:
13063 ; CHECK-GISEL: ; %bb.0:
13064 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13065 ; CHECK-GISEL-NEXT: mov x8, x0
13066 ; CHECK-GISEL-NEXT: add x0, x0, #16
13067 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13068 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13069 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13070 ; CHECK-GISEL-NEXT: st4.s { v0, v1, v2, v3 }[0], [x8]
13071 ; CHECK-GISEL-NEXT: ret
13072 call void @llvm.aarch64.neon.st4lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, ptr %A)
13073 %tmp = getelementptr i32, ptr %A, i32 4
13077 define ptr @test_v2i32_post_reg_st4lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 %inc) nounwind {
13078 ; SDAG-LABEL: test_v2i32_post_reg_st4lane:
13080 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13081 ; SDAG-NEXT: lsl x8, x2, #2
13082 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13083 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13084 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13085 ; SDAG-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], x8
13088 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_st4lane:
13089 ; CHECK-GISEL: ; %bb.0:
13090 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13091 ; CHECK-GISEL-NEXT: mov x8, x0
13092 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
13093 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13094 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13095 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13096 ; CHECK-GISEL-NEXT: st4.s { v0, v1, v2, v3 }[0], [x8]
13097 ; CHECK-GISEL-NEXT: ret
13098 call void @llvm.aarch64.neon.st4lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, ptr %A)
13099 %tmp = getelementptr i32, ptr %A, i64 %inc
13103 declare void @llvm.aarch64.neon.st4lane.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i64, ptr)
13106 define ptr @test_v2i64_post_imm_st4lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
13107 ; SDAG-LABEL: test_v2i64_post_imm_st4lane:
13109 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13110 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13111 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13112 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13113 ; SDAG-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], #32
13116 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_st4lane:
13117 ; CHECK-GISEL: ; %bb.0:
13118 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13119 ; CHECK-GISEL-NEXT: mov x8, x0
13120 ; CHECK-GISEL-NEXT: add x0, x0, #32
13121 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13122 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13123 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13124 ; CHECK-GISEL-NEXT: st4.d { v0, v1, v2, v3 }[0], [x8]
13125 ; CHECK-GISEL-NEXT: ret
13126 call void @llvm.aarch64.neon.st4lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, ptr %A)
13127 %tmp = getelementptr i64, ptr %A, i64 4
13131 define ptr @test_v2i64_post_reg_st4lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 %inc) nounwind {
13132 ; SDAG-LABEL: test_v2i64_post_reg_st4lane:
13134 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13135 ; SDAG-NEXT: lsl x8, x2, #3
13136 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13137 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13138 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13139 ; SDAG-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], x8
13142 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_st4lane:
13143 ; CHECK-GISEL: ; %bb.0:
13144 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13145 ; CHECK-GISEL-NEXT: mov x8, x0
13146 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
13147 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13148 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13149 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13150 ; CHECK-GISEL-NEXT: st4.d { v0, v1, v2, v3 }[0], [x8]
13151 ; CHECK-GISEL-NEXT: ret
13152 call void @llvm.aarch64.neon.st4lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, ptr %A)
13153 %tmp = getelementptr i64, ptr %A, i64 %inc
13157 declare void @llvm.aarch64.neon.st4lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, ptr)
13160 define ptr @test_v1i64_post_imm_st4lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
13161 ; SDAG-LABEL: test_v1i64_post_imm_st4lane:
13163 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13164 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13165 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13166 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13167 ; SDAG-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], #32
13170 ; CHECK-GISEL-LABEL: test_v1i64_post_imm_st4lane:
13171 ; CHECK-GISEL: ; %bb.0:
13172 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13173 ; CHECK-GISEL-NEXT: mov x8, x0
13174 ; CHECK-GISEL-NEXT: add x0, x0, #32
13175 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13176 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13177 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13178 ; CHECK-GISEL-NEXT: st4.d { v0, v1, v2, v3 }[0], [x8]
13179 ; CHECK-GISEL-NEXT: ret
13180 call void @llvm.aarch64.neon.st4lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, ptr %A)
13181 %tmp = getelementptr i64, ptr %A, i64 4
13185 define ptr @test_v1i64_post_reg_st4lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 %inc) nounwind {
13186 ; SDAG-LABEL: test_v1i64_post_reg_st4lane:
13188 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13189 ; SDAG-NEXT: lsl x8, x2, #3
13190 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13191 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13192 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13193 ; SDAG-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], x8
13196 ; CHECK-GISEL-LABEL: test_v1i64_post_reg_st4lane:
13197 ; CHECK-GISEL: ; %bb.0:
13198 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13199 ; CHECK-GISEL-NEXT: mov x8, x0
13200 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
13201 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13202 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13203 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13204 ; CHECK-GISEL-NEXT: st4.d { v0, v1, v2, v3 }[0], [x8]
13205 ; CHECK-GISEL-NEXT: ret
13206 call void @llvm.aarch64.neon.st4lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, ptr %A)
13207 %tmp = getelementptr i64, ptr %A, i64 %inc
13211 declare void @llvm.aarch64.neon.st4lane.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>, i64, ptr)
13214 define ptr @test_v4f32_post_imm_st4lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
13215 ; SDAG-LABEL: test_v4f32_post_imm_st4lane:
13217 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13218 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13219 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13220 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13221 ; SDAG-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], #16
13224 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_st4lane:
13225 ; CHECK-GISEL: ; %bb.0:
13226 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13227 ; CHECK-GISEL-NEXT: mov x8, x0
13228 ; CHECK-GISEL-NEXT: add x0, x0, #16
13229 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13230 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13231 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13232 ; CHECK-GISEL-NEXT: st4.s { v0, v1, v2, v3 }[0], [x8]
13233 ; CHECK-GISEL-NEXT: ret
13234 call void @llvm.aarch64.neon.st4lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, ptr %A)
13235 %tmp = getelementptr float, ptr %A, i32 4
13239 define ptr @test_v4f32_post_reg_st4lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 %inc) nounwind {
13240 ; SDAG-LABEL: test_v4f32_post_reg_st4lane:
13242 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13243 ; SDAG-NEXT: lsl x8, x2, #2
13244 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13245 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13246 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13247 ; SDAG-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], x8
13250 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_st4lane:
13251 ; CHECK-GISEL: ; %bb.0:
13252 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13253 ; CHECK-GISEL-NEXT: mov x8, x0
13254 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
13255 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13256 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13257 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13258 ; CHECK-GISEL-NEXT: st4.s { v0, v1, v2, v3 }[0], [x8]
13259 ; CHECK-GISEL-NEXT: ret
13260 call void @llvm.aarch64.neon.st4lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, ptr %A)
13261 %tmp = getelementptr float, ptr %A, i64 %inc
13265 declare void @llvm.aarch64.neon.st4lane.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, <4 x float>, i64, ptr)
13268 define ptr @test_v2f32_post_imm_st4lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
13269 ; SDAG-LABEL: test_v2f32_post_imm_st4lane:
13271 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13272 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13273 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13274 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13275 ; SDAG-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], #16
13278 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_st4lane:
13279 ; CHECK-GISEL: ; %bb.0:
13280 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13281 ; CHECK-GISEL-NEXT: mov x8, x0
13282 ; CHECK-GISEL-NEXT: add x0, x0, #16
13283 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13284 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13285 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13286 ; CHECK-GISEL-NEXT: st4.s { v0, v1, v2, v3 }[0], [x8]
13287 ; CHECK-GISEL-NEXT: ret
13288 call void @llvm.aarch64.neon.st4lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, ptr %A)
13289 %tmp = getelementptr float, ptr %A, i32 4
13293 define ptr @test_v2f32_post_reg_st4lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 %inc) nounwind {
13294 ; SDAG-LABEL: test_v2f32_post_reg_st4lane:
13296 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13297 ; SDAG-NEXT: lsl x8, x2, #2
13298 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13299 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13300 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13301 ; SDAG-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], x8
13304 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_st4lane:
13305 ; CHECK-GISEL: ; %bb.0:
13306 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13307 ; CHECK-GISEL-NEXT: mov x8, x0
13308 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #2
13309 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13310 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13311 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13312 ; CHECK-GISEL-NEXT: st4.s { v0, v1, v2, v3 }[0], [x8]
13313 ; CHECK-GISEL-NEXT: ret
13314 call void @llvm.aarch64.neon.st4lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, ptr %A)
13315 %tmp = getelementptr float, ptr %A, i64 %inc
13319 declare void @llvm.aarch64.neon.st4lane.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, <2 x float>, i64, ptr)
13322 define ptr @test_v2f64_post_imm_st4lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
13323 ; SDAG-LABEL: test_v2f64_post_imm_st4lane:
13325 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13326 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13327 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13328 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13329 ; SDAG-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], #32
13332 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_st4lane:
13333 ; CHECK-GISEL: ; %bb.0:
13334 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13335 ; CHECK-GISEL-NEXT: mov x8, x0
13336 ; CHECK-GISEL-NEXT: add x0, x0, #32
13337 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13338 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13339 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13340 ; CHECK-GISEL-NEXT: st4.d { v0, v1, v2, v3 }[0], [x8]
13341 ; CHECK-GISEL-NEXT: ret
13342 call void @llvm.aarch64.neon.st4lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, ptr %A)
13343 %tmp = getelementptr double, ptr %A, i64 4
13347 define ptr @test_v2f64_post_reg_st4lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 %inc) nounwind {
13348 ; SDAG-LABEL: test_v2f64_post_reg_st4lane:
13350 ; SDAG-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13351 ; SDAG-NEXT: lsl x8, x2, #3
13352 ; SDAG-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13353 ; SDAG-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13354 ; SDAG-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13355 ; SDAG-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], x8
13358 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_st4lane:
13359 ; CHECK-GISEL: ; %bb.0:
13360 ; CHECK-GISEL-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13361 ; CHECK-GISEL-NEXT: mov x8, x0
13362 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
13363 ; CHECK-GISEL-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13364 ; CHECK-GISEL-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13365 ; CHECK-GISEL-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13366 ; CHECK-GISEL-NEXT: st4.d { v0, v1, v2, v3 }[0], [x8]
13367 ; CHECK-GISEL-NEXT: ret
13368 call void @llvm.aarch64.neon.st4lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, ptr %A)
13369 %tmp = getelementptr double, ptr %A, i64 %inc
13373 declare void @llvm.aarch64.neon.st4lane.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, <2 x double>, i64, ptr)
13376 define ptr @test_v1f64_post_imm_st4lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
13377 ; SDAG-LABEL: test_v1f64_post_imm_st4lane:
13379 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13380 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13381 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13382 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13383 ; SDAG-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], #32
13386 ; CHECK-GISEL-LABEL: test_v1f64_post_imm_st4lane:
13387 ; CHECK-GISEL: ; %bb.0:
13388 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13389 ; CHECK-GISEL-NEXT: mov x8, x0
13390 ; CHECK-GISEL-NEXT: add x0, x0, #32
13391 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13392 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13393 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13394 ; CHECK-GISEL-NEXT: st4.d { v0, v1, v2, v3 }[0], [x8]
13395 ; CHECK-GISEL-NEXT: ret
13396 call void @llvm.aarch64.neon.st4lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, ptr %A)
13397 %tmp = getelementptr double, ptr %A, i64 4
13401 define ptr @test_v1f64_post_reg_st4lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 %inc) nounwind {
13402 ; SDAG-LABEL: test_v1f64_post_reg_st4lane:
13404 ; SDAG-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13405 ; SDAG-NEXT: lsl x8, x2, #3
13406 ; SDAG-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13407 ; SDAG-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13408 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13409 ; SDAG-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], x8
13412 ; CHECK-GISEL-LABEL: test_v1f64_post_reg_st4lane:
13413 ; CHECK-GISEL: ; %bb.0:
13414 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13415 ; CHECK-GISEL-NEXT: mov x8, x0
13416 ; CHECK-GISEL-NEXT: add x0, x0, x2, lsl #3
13417 ; CHECK-GISEL-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13418 ; CHECK-GISEL-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13419 ; CHECK-GISEL-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
13420 ; CHECK-GISEL-NEXT: st4.d { v0, v1, v2, v3 }[0], [x8]
13421 ; CHECK-GISEL-NEXT: ret
13422 call void @llvm.aarch64.neon.st4lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, ptr %A)
13423 %tmp = getelementptr double, ptr %A, i64 %inc
13427 declare void @llvm.aarch64.neon.st4lane.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, <1 x double>, i64, ptr)
13429 define <16 x i8> @test_v16i8_post_imm_ld1r(ptr %bar, ptr %ptr) {
13430 ; SDAG-LABEL: test_v16i8_post_imm_ld1r:
13432 ; SDAG-NEXT: ld1r.16b { v0 }, [x0], #1
13433 ; SDAG-NEXT: str x0, [x1]
13436 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld1r:
13437 ; CHECK-GISEL: ; %bb.0:
13438 ; CHECK-GISEL-NEXT: ldrb w8, [x0], #1
13439 ; CHECK-GISEL-NEXT: str x0, [x1]
13440 ; CHECK-GISEL-NEXT: dup.16b v0, w8
13441 ; CHECK-GISEL-NEXT: ret
13442 %tmp1 = load i8, ptr %bar
13443 %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
13444 %tmp3 = insertelement <16 x i8> %tmp2, i8 %tmp1, i32 1
13445 %tmp4 = insertelement <16 x i8> %tmp3, i8 %tmp1, i32 2
13446 %tmp5 = insertelement <16 x i8> %tmp4, i8 %tmp1, i32 3
13447 %tmp6 = insertelement <16 x i8> %tmp5, i8 %tmp1, i32 4
13448 %tmp7 = insertelement <16 x i8> %tmp6, i8 %tmp1, i32 5
13449 %tmp8 = insertelement <16 x i8> %tmp7, i8 %tmp1, i32 6
13450 %tmp9 = insertelement <16 x i8> %tmp8, i8 %tmp1, i32 7
13451 %tmp10 = insertelement <16 x i8> %tmp9, i8 %tmp1, i32 8
13452 %tmp11 = insertelement <16 x i8> %tmp10, i8 %tmp1, i32 9
13453 %tmp12 = insertelement <16 x i8> %tmp11, i8 %tmp1, i32 10
13454 %tmp13 = insertelement <16 x i8> %tmp12, i8 %tmp1, i32 11
13455 %tmp14 = insertelement <16 x i8> %tmp13, i8 %tmp1, i32 12
13456 %tmp15 = insertelement <16 x i8> %tmp14, i8 %tmp1, i32 13
13457 %tmp16 = insertelement <16 x i8> %tmp15, i8 %tmp1, i32 14
13458 %tmp17 = insertelement <16 x i8> %tmp16, i8 %tmp1, i32 15
13459 %tmp18 = getelementptr i8, ptr %bar, i64 1
13460 store ptr %tmp18, ptr %ptr
13461 ret <16 x i8> %tmp17
13464 define <16 x i8> @test_v16i8_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
13465 ; SDAG-LABEL: test_v16i8_post_reg_ld1r:
13467 ; SDAG-NEXT: ld1r.16b { v0 }, [x0], x2
13468 ; SDAG-NEXT: str x0, [x1]
13471 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld1r:
13472 ; CHECK-GISEL: ; %bb.0:
13473 ; CHECK-GISEL-NEXT: ld1r.16b { v0 }, [x0]
13474 ; CHECK-GISEL-NEXT: add x8, x0, x2
13475 ; CHECK-GISEL-NEXT: str x8, [x1]
13476 ; CHECK-GISEL-NEXT: ret
13477 %tmp1 = load i8, ptr %bar
13478 %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
13479 %tmp3 = insertelement <16 x i8> %tmp2, i8 %tmp1, i32 1
13480 %tmp4 = insertelement <16 x i8> %tmp3, i8 %tmp1, i32 2
13481 %tmp5 = insertelement <16 x i8> %tmp4, i8 %tmp1, i32 3
13482 %tmp6 = insertelement <16 x i8> %tmp5, i8 %tmp1, i32 4
13483 %tmp7 = insertelement <16 x i8> %tmp6, i8 %tmp1, i32 5
13484 %tmp8 = insertelement <16 x i8> %tmp7, i8 %tmp1, i32 6
13485 %tmp9 = insertelement <16 x i8> %tmp8, i8 %tmp1, i32 7
13486 %tmp10 = insertelement <16 x i8> %tmp9, i8 %tmp1, i32 8
13487 %tmp11 = insertelement <16 x i8> %tmp10, i8 %tmp1, i32 9
13488 %tmp12 = insertelement <16 x i8> %tmp11, i8 %tmp1, i32 10
13489 %tmp13 = insertelement <16 x i8> %tmp12, i8 %tmp1, i32 11
13490 %tmp14 = insertelement <16 x i8> %tmp13, i8 %tmp1, i32 12
13491 %tmp15 = insertelement <16 x i8> %tmp14, i8 %tmp1, i32 13
13492 %tmp16 = insertelement <16 x i8> %tmp15, i8 %tmp1, i32 14
13493 %tmp17 = insertelement <16 x i8> %tmp16, i8 %tmp1, i32 15
13494 %tmp18 = getelementptr i8, ptr %bar, i64 %inc
13495 store ptr %tmp18, ptr %ptr
13496 ret <16 x i8> %tmp17
13499 define <8 x i8> @test_v8i8_post_imm_ld1r(ptr %bar, ptr %ptr) {
13500 ; SDAG-LABEL: test_v8i8_post_imm_ld1r:
13502 ; SDAG-NEXT: ld1r.8b { v0 }, [x0], #1
13503 ; SDAG-NEXT: str x0, [x1]
13506 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld1r:
13507 ; CHECK-GISEL: ; %bb.0:
13508 ; CHECK-GISEL-NEXT: ldrb w8, [x0], #1
13509 ; CHECK-GISEL-NEXT: str x0, [x1]
13510 ; CHECK-GISEL-NEXT: dup.8b v0, w8
13511 ; CHECK-GISEL-NEXT: ret
13512 %tmp1 = load i8, ptr %bar
13513 %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
13514 %tmp3 = insertelement <8 x i8> %tmp2, i8 %tmp1, i32 1
13515 %tmp4 = insertelement <8 x i8> %tmp3, i8 %tmp1, i32 2
13516 %tmp5 = insertelement <8 x i8> %tmp4, i8 %tmp1, i32 3
13517 %tmp6 = insertelement <8 x i8> %tmp5, i8 %tmp1, i32 4
13518 %tmp7 = insertelement <8 x i8> %tmp6, i8 %tmp1, i32 5
13519 %tmp8 = insertelement <8 x i8> %tmp7, i8 %tmp1, i32 6
13520 %tmp9 = insertelement <8 x i8> %tmp8, i8 %tmp1, i32 7
13521 %tmp10 = getelementptr i8, ptr %bar, i64 1
13522 store ptr %tmp10, ptr %ptr
13526 define <8 x i8> @test_v8i8_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
13527 ; SDAG-LABEL: test_v8i8_post_reg_ld1r:
13529 ; SDAG-NEXT: ld1r.8b { v0 }, [x0], x2
13530 ; SDAG-NEXT: str x0, [x1]
13533 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld1r:
13534 ; CHECK-GISEL: ; %bb.0:
13535 ; CHECK-GISEL-NEXT: ld1r.8b { v0 }, [x0]
13536 ; CHECK-GISEL-NEXT: add x8, x0, x2
13537 ; CHECK-GISEL-NEXT: str x8, [x1]
13538 ; CHECK-GISEL-NEXT: ret
13539 %tmp1 = load i8, ptr %bar
13540 %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
13541 %tmp3 = insertelement <8 x i8> %tmp2, i8 %tmp1, i32 1
13542 %tmp4 = insertelement <8 x i8> %tmp3, i8 %tmp1, i32 2
13543 %tmp5 = insertelement <8 x i8> %tmp4, i8 %tmp1, i32 3
13544 %tmp6 = insertelement <8 x i8> %tmp5, i8 %tmp1, i32 4
13545 %tmp7 = insertelement <8 x i8> %tmp6, i8 %tmp1, i32 5
13546 %tmp8 = insertelement <8 x i8> %tmp7, i8 %tmp1, i32 6
13547 %tmp9 = insertelement <8 x i8> %tmp8, i8 %tmp1, i32 7
13548 %tmp10 = getelementptr i8, ptr %bar, i64 %inc
13549 store ptr %tmp10, ptr %ptr
13553 define <8 x i16> @test_v8i16_post_imm_ld1r(ptr %bar, ptr %ptr) {
13554 ; SDAG-LABEL: test_v8i16_post_imm_ld1r:
13556 ; SDAG-NEXT: ld1r.8h { v0 }, [x0], #2
13557 ; SDAG-NEXT: str x0, [x1]
13560 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld1r:
13561 ; CHECK-GISEL: ; %bb.0:
13562 ; CHECK-GISEL-NEXT: ldrh w8, [x0], #2
13563 ; CHECK-GISEL-NEXT: str x0, [x1]
13564 ; CHECK-GISEL-NEXT: dup.8h v0, w8
13565 ; CHECK-GISEL-NEXT: ret
13566 %tmp1 = load i16, ptr %bar
13567 %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
13568 %tmp3 = insertelement <8 x i16> %tmp2, i16 %tmp1, i32 1
13569 %tmp4 = insertelement <8 x i16> %tmp3, i16 %tmp1, i32 2
13570 %tmp5 = insertelement <8 x i16> %tmp4, i16 %tmp1, i32 3
13571 %tmp6 = insertelement <8 x i16> %tmp5, i16 %tmp1, i32 4
13572 %tmp7 = insertelement <8 x i16> %tmp6, i16 %tmp1, i32 5
13573 %tmp8 = insertelement <8 x i16> %tmp7, i16 %tmp1, i32 6
13574 %tmp9 = insertelement <8 x i16> %tmp8, i16 %tmp1, i32 7
13575 %tmp10 = getelementptr i16, ptr %bar, i64 1
13576 store ptr %tmp10, ptr %ptr
13577 ret <8 x i16> %tmp9
13580 define <8 x i16> @test_v8i16_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
13581 ; SDAG-LABEL: test_v8i16_post_reg_ld1r:
13583 ; SDAG-NEXT: lsl x8, x2, #1
13584 ; SDAG-NEXT: ld1r.8h { v0 }, [x0], x8
13585 ; SDAG-NEXT: str x0, [x1]
13588 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld1r:
13589 ; CHECK-GISEL: ; %bb.0:
13590 ; CHECK-GISEL-NEXT: ld1r.8h { v0 }, [x0]
13591 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
13592 ; CHECK-GISEL-NEXT: str x8, [x1]
13593 ; CHECK-GISEL-NEXT: ret
13594 %tmp1 = load i16, ptr %bar
13595 %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
13596 %tmp3 = insertelement <8 x i16> %tmp2, i16 %tmp1, i32 1
13597 %tmp4 = insertelement <8 x i16> %tmp3, i16 %tmp1, i32 2
13598 %tmp5 = insertelement <8 x i16> %tmp4, i16 %tmp1, i32 3
13599 %tmp6 = insertelement <8 x i16> %tmp5, i16 %tmp1, i32 4
13600 %tmp7 = insertelement <8 x i16> %tmp6, i16 %tmp1, i32 5
13601 %tmp8 = insertelement <8 x i16> %tmp7, i16 %tmp1, i32 6
13602 %tmp9 = insertelement <8 x i16> %tmp8, i16 %tmp1, i32 7
13603 %tmp10 = getelementptr i16, ptr %bar, i64 %inc
13604 store ptr %tmp10, ptr %ptr
13605 ret <8 x i16> %tmp9
13608 define <4 x i16> @test_v4i16_post_imm_ld1r(ptr %bar, ptr %ptr) {
13609 ; SDAG-LABEL: test_v4i16_post_imm_ld1r:
13611 ; SDAG-NEXT: ld1r.4h { v0 }, [x0], #2
13612 ; SDAG-NEXT: str x0, [x1]
13615 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld1r:
13616 ; CHECK-GISEL: ; %bb.0:
13617 ; CHECK-GISEL-NEXT: ldrh w8, [x0], #2
13618 ; CHECK-GISEL-NEXT: str x0, [x1]
13619 ; CHECK-GISEL-NEXT: dup.4h v0, w8
13620 ; CHECK-GISEL-NEXT: ret
13621 %tmp1 = load i16, ptr %bar
13622 %tmp2 = insertelement <4 x i16> <i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0
13623 %tmp3 = insertelement <4 x i16> %tmp2, i16 %tmp1, i32 1
13624 %tmp4 = insertelement <4 x i16> %tmp3, i16 %tmp1, i32 2
13625 %tmp5 = insertelement <4 x i16> %tmp4, i16 %tmp1, i32 3
13626 %tmp6 = getelementptr i16, ptr %bar, i64 1
13627 store ptr %tmp6, ptr %ptr
13628 ret <4 x i16> %tmp5
13631 define <4 x i16> @test_v4i16_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
13632 ; SDAG-LABEL: test_v4i16_post_reg_ld1r:
13634 ; SDAG-NEXT: lsl x8, x2, #1
13635 ; SDAG-NEXT: ld1r.4h { v0 }, [x0], x8
13636 ; SDAG-NEXT: str x0, [x1]
13639 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld1r:
13640 ; CHECK-GISEL: ; %bb.0:
13641 ; CHECK-GISEL-NEXT: ld1r.4h { v0 }, [x0]
13642 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
13643 ; CHECK-GISEL-NEXT: str x8, [x1]
13644 ; CHECK-GISEL-NEXT: ret
13645 %tmp1 = load i16, ptr %bar
13646 %tmp2 = insertelement <4 x i16> <i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0
13647 %tmp3 = insertelement <4 x i16> %tmp2, i16 %tmp1, i32 1
13648 %tmp4 = insertelement <4 x i16> %tmp3, i16 %tmp1, i32 2
13649 %tmp5 = insertelement <4 x i16> %tmp4, i16 %tmp1, i32 3
13650 %tmp6 = getelementptr i16, ptr %bar, i64 %inc
13651 store ptr %tmp6, ptr %ptr
13652 ret <4 x i16> %tmp5
13655 define <4 x i32> @test_v4i32_post_imm_ld1r(ptr %bar, ptr %ptr) {
13656 ; SDAG-LABEL: test_v4i32_post_imm_ld1r:
13658 ; SDAG-NEXT: ld1r.4s { v0 }, [x0], #4
13659 ; SDAG-NEXT: str x0, [x1]
13662 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld1r:
13663 ; CHECK-GISEL: ; %bb.0:
13664 ; CHECK-GISEL-NEXT: ldr w8, [x0], #4
13665 ; CHECK-GISEL-NEXT: str x0, [x1]
13666 ; CHECK-GISEL-NEXT: dup.4s v0, w8
13667 ; CHECK-GISEL-NEXT: ret
13668 %tmp1 = load i32, ptr %bar
13669 %tmp2 = insertelement <4 x i32> <i32 undef, i32 undef, i32 undef, i32 undef>, i32 %tmp1, i32 0
13670 %tmp3 = insertelement <4 x i32> %tmp2, i32 %tmp1, i32 1
13671 %tmp4 = insertelement <4 x i32> %tmp3, i32 %tmp1, i32 2
13672 %tmp5 = insertelement <4 x i32> %tmp4, i32 %tmp1, i32 3
13673 %tmp6 = getelementptr i32, ptr %bar, i64 1
13674 store ptr %tmp6, ptr %ptr
13675 ret <4 x i32> %tmp5
13678 define <4 x i32> @test_v4i32_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
13679 ; SDAG-LABEL: test_v4i32_post_reg_ld1r:
13681 ; SDAG-NEXT: lsl x8, x2, #2
13682 ; SDAG-NEXT: ld1r.4s { v0 }, [x0], x8
13683 ; SDAG-NEXT: str x0, [x1]
13686 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld1r:
13687 ; CHECK-GISEL: ; %bb.0:
13688 ; CHECK-GISEL-NEXT: ld1r.4s { v0 }, [x0]
13689 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
13690 ; CHECK-GISEL-NEXT: str x8, [x1]
13691 ; CHECK-GISEL-NEXT: ret
13692 %tmp1 = load i32, ptr %bar
13693 %tmp2 = insertelement <4 x i32> <i32 undef, i32 undef, i32 undef, i32 undef>, i32 %tmp1, i32 0
13694 %tmp3 = insertelement <4 x i32> %tmp2, i32 %tmp1, i32 1
13695 %tmp4 = insertelement <4 x i32> %tmp3, i32 %tmp1, i32 2
13696 %tmp5 = insertelement <4 x i32> %tmp4, i32 %tmp1, i32 3
13697 %tmp6 = getelementptr i32, ptr %bar, i64 %inc
13698 store ptr %tmp6, ptr %ptr
13699 ret <4 x i32> %tmp5
13702 define <2 x i32> @test_v2i32_post_imm_ld1r(ptr %bar, ptr %ptr) {
13703 ; SDAG-LABEL: test_v2i32_post_imm_ld1r:
13705 ; SDAG-NEXT: ld1r.2s { v0 }, [x0], #4
13706 ; SDAG-NEXT: str x0, [x1]
13709 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld1r:
13710 ; CHECK-GISEL: ; %bb.0:
13711 ; CHECK-GISEL-NEXT: ldr w8, [x0], #4
13712 ; CHECK-GISEL-NEXT: str x0, [x1]
13713 ; CHECK-GISEL-NEXT: dup.2s v0, w8
13714 ; CHECK-GISEL-NEXT: ret
13715 %tmp1 = load i32, ptr %bar
13716 %tmp2 = insertelement <2 x i32> <i32 undef, i32 undef>, i32 %tmp1, i32 0
13717 %tmp3 = insertelement <2 x i32> %tmp2, i32 %tmp1, i32 1
13718 %tmp4 = getelementptr i32, ptr %bar, i64 1
13719 store ptr %tmp4, ptr %ptr
13720 ret <2 x i32> %tmp3
13723 define <2 x i32> @test_v2i32_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
13724 ; SDAG-LABEL: test_v2i32_post_reg_ld1r:
13726 ; SDAG-NEXT: lsl x8, x2, #2
13727 ; SDAG-NEXT: ld1r.2s { v0 }, [x0], x8
13728 ; SDAG-NEXT: str x0, [x1]
13731 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld1r:
13732 ; CHECK-GISEL: ; %bb.0:
13733 ; CHECK-GISEL-NEXT: ld1r.2s { v0 }, [x0]
13734 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
13735 ; CHECK-GISEL-NEXT: str x8, [x1]
13736 ; CHECK-GISEL-NEXT: ret
13737 %tmp1 = load i32, ptr %bar
13738 %tmp2 = insertelement <2 x i32> <i32 undef, i32 undef>, i32 %tmp1, i32 0
13739 %tmp3 = insertelement <2 x i32> %tmp2, i32 %tmp1, i32 1
13740 %tmp4 = getelementptr i32, ptr %bar, i64 %inc
13741 store ptr %tmp4, ptr %ptr
13742 ret <2 x i32> %tmp3
13745 define <2 x i64> @test_v2i64_post_imm_ld1r(ptr %bar, ptr %ptr) {
13746 ; SDAG-LABEL: test_v2i64_post_imm_ld1r:
13748 ; SDAG-NEXT: ld1r.2d { v0 }, [x0], #8
13749 ; SDAG-NEXT: str x0, [x1]
13752 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld1r:
13753 ; CHECK-GISEL: ; %bb.0:
13754 ; CHECK-GISEL-NEXT: ldr x8, [x0], #8
13755 ; CHECK-GISEL-NEXT: str x0, [x1]
13756 ; CHECK-GISEL-NEXT: dup.2d v0, x8
13757 ; CHECK-GISEL-NEXT: ret
13758 %tmp1 = load i64, ptr %bar
13759 %tmp2 = insertelement <2 x i64> <i64 undef, i64 undef>, i64 %tmp1, i32 0
13760 %tmp3 = insertelement <2 x i64> %tmp2, i64 %tmp1, i32 1
13761 %tmp4 = getelementptr i64, ptr %bar, i64 1
13762 store ptr %tmp4, ptr %ptr
13763 ret <2 x i64> %tmp3
13766 define <2 x i64> @test_v2i64_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
13767 ; SDAG-LABEL: test_v2i64_post_reg_ld1r:
13769 ; SDAG-NEXT: lsl x8, x2, #3
13770 ; SDAG-NEXT: ld1r.2d { v0 }, [x0], x8
13771 ; SDAG-NEXT: str x0, [x1]
13774 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld1r:
13775 ; CHECK-GISEL: ; %bb.0:
13776 ; CHECK-GISEL-NEXT: ld1r.2d { v0 }, [x0]
13777 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
13778 ; CHECK-GISEL-NEXT: str x8, [x1]
13779 ; CHECK-GISEL-NEXT: ret
13780 %tmp1 = load i64, ptr %bar
13781 %tmp2 = insertelement <2 x i64> <i64 undef, i64 undef>, i64 %tmp1, i32 0
13782 %tmp3 = insertelement <2 x i64> %tmp2, i64 %tmp1, i32 1
13783 %tmp4 = getelementptr i64, ptr %bar, i64 %inc
13784 store ptr %tmp4, ptr %ptr
13785 ret <2 x i64> %tmp3
13788 define <4 x float> @test_v4f32_post_imm_ld1r(ptr %bar, ptr %ptr) {
13789 ; SDAG-LABEL: test_v4f32_post_imm_ld1r:
13791 ; SDAG-NEXT: ld1r.4s { v0 }, [x0], #4
13792 ; SDAG-NEXT: str x0, [x1]
13795 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld1r:
13796 ; CHECK-GISEL: ; %bb.0:
13797 ; CHECK-GISEL-NEXT: ldr s0, [x0], #4
13798 ; CHECK-GISEL-NEXT: str x0, [x1]
13799 ; CHECK-GISEL-NEXT: dup.4s v0, v0[0]
13800 ; CHECK-GISEL-NEXT: ret
13801 %tmp1 = load float, ptr %bar
13802 %tmp2 = insertelement <4 x float> <float undef, float undef, float undef, float undef>, float %tmp1, i32 0
13803 %tmp3 = insertelement <4 x float> %tmp2, float %tmp1, i32 1
13804 %tmp4 = insertelement <4 x float> %tmp3, float %tmp1, i32 2
13805 %tmp5 = insertelement <4 x float> %tmp4, float %tmp1, i32 3
13806 %tmp6 = getelementptr float, ptr %bar, i64 1
13807 store ptr %tmp6, ptr %ptr
13808 ret <4 x float> %tmp5
13811 define <4 x float> @test_v4f32_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
13812 ; SDAG-LABEL: test_v4f32_post_reg_ld1r:
13814 ; SDAG-NEXT: lsl x8, x2, #2
13815 ; SDAG-NEXT: ld1r.4s { v0 }, [x0], x8
13816 ; SDAG-NEXT: str x0, [x1]
13819 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld1r:
13820 ; CHECK-GISEL: ; %bb.0:
13821 ; CHECK-GISEL-NEXT: ld1r.4s { v0 }, [x0]
13822 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
13823 ; CHECK-GISEL-NEXT: str x8, [x1]
13824 ; CHECK-GISEL-NEXT: ret
13825 %tmp1 = load float, ptr %bar
13826 %tmp2 = insertelement <4 x float> <float undef, float undef, float undef, float undef>, float %tmp1, i32 0
13827 %tmp3 = insertelement <4 x float> %tmp2, float %tmp1, i32 1
13828 %tmp4 = insertelement <4 x float> %tmp3, float %tmp1, i32 2
13829 %tmp5 = insertelement <4 x float> %tmp4, float %tmp1, i32 3
13830 %tmp6 = getelementptr float, ptr %bar, i64 %inc
13831 store ptr %tmp6, ptr %ptr
13832 ret <4 x float> %tmp5
13835 define <2 x float> @test_v2f32_post_imm_ld1r(ptr %bar, ptr %ptr) {
13836 ; SDAG-LABEL: test_v2f32_post_imm_ld1r:
13838 ; SDAG-NEXT: ld1r.2s { v0 }, [x0], #4
13839 ; SDAG-NEXT: str x0, [x1]
13842 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld1r:
13843 ; CHECK-GISEL: ; %bb.0:
13844 ; CHECK-GISEL-NEXT: ldr s0, [x0], #4
13845 ; CHECK-GISEL-NEXT: str x0, [x1]
13846 ; CHECK-GISEL-NEXT: dup.2s v0, v0[0]
13847 ; CHECK-GISEL-NEXT: ret
13848 %tmp1 = load float, ptr %bar
13849 %tmp2 = insertelement <2 x float> <float undef, float undef>, float %tmp1, i32 0
13850 %tmp3 = insertelement <2 x float> %tmp2, float %tmp1, i32 1
13851 %tmp4 = getelementptr float, ptr %bar, i64 1
13852 store ptr %tmp4, ptr %ptr
13853 ret <2 x float> %tmp3
13856 define <2 x float> @test_v2f32_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
13857 ; SDAG-LABEL: test_v2f32_post_reg_ld1r:
13859 ; SDAG-NEXT: lsl x8, x2, #2
13860 ; SDAG-NEXT: ld1r.2s { v0 }, [x0], x8
13861 ; SDAG-NEXT: str x0, [x1]
13864 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld1r:
13865 ; CHECK-GISEL: ; %bb.0:
13866 ; CHECK-GISEL-NEXT: ld1r.2s { v0 }, [x0]
13867 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
13868 ; CHECK-GISEL-NEXT: str x8, [x1]
13869 ; CHECK-GISEL-NEXT: ret
13870 %tmp1 = load float, ptr %bar
13871 %tmp2 = insertelement <2 x float> <float undef, float undef>, float %tmp1, i32 0
13872 %tmp3 = insertelement <2 x float> %tmp2, float %tmp1, i32 1
13873 %tmp4 = getelementptr float, ptr %bar, i64 %inc
13874 store ptr %tmp4, ptr %ptr
13875 ret <2 x float> %tmp3
13878 define <2 x double> @test_v2f64_post_imm_ld1r(ptr %bar, ptr %ptr) {
13879 ; SDAG-LABEL: test_v2f64_post_imm_ld1r:
13881 ; SDAG-NEXT: ld1r.2d { v0 }, [x0], #8
13882 ; SDAG-NEXT: str x0, [x1]
13885 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld1r:
13886 ; CHECK-GISEL: ; %bb.0:
13887 ; CHECK-GISEL-NEXT: ldr d0, [x0], #8
13888 ; CHECK-GISEL-NEXT: str x0, [x1]
13889 ; CHECK-GISEL-NEXT: dup.2d v0, v0[0]
13890 ; CHECK-GISEL-NEXT: ret
13891 %tmp1 = load double, ptr %bar
13892 %tmp2 = insertelement <2 x double> <double undef, double undef>, double %tmp1, i32 0
13893 %tmp3 = insertelement <2 x double> %tmp2, double %tmp1, i32 1
13894 %tmp4 = getelementptr double, ptr %bar, i64 1
13895 store ptr %tmp4, ptr %ptr
13896 ret <2 x double> %tmp3
13899 define <2 x double> @test_v2f64_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
13900 ; SDAG-LABEL: test_v2f64_post_reg_ld1r:
13902 ; SDAG-NEXT: lsl x8, x2, #3
13903 ; SDAG-NEXT: ld1r.2d { v0 }, [x0], x8
13904 ; SDAG-NEXT: str x0, [x1]
13907 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld1r:
13908 ; CHECK-GISEL: ; %bb.0:
13909 ; CHECK-GISEL-NEXT: ld1r.2d { v0 }, [x0]
13910 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
13911 ; CHECK-GISEL-NEXT: str x8, [x1]
13912 ; CHECK-GISEL-NEXT: ret
13913 %tmp1 = load double, ptr %bar
13914 %tmp2 = insertelement <2 x double> <double undef, double undef>, double %tmp1, i32 0
13915 %tmp3 = insertelement <2 x double> %tmp2, double %tmp1, i32 1
13916 %tmp4 = getelementptr double, ptr %bar, i64 %inc
13917 store ptr %tmp4, ptr %ptr
13918 ret <2 x double> %tmp3
13921 define <16 x i8> @test_v16i8_post_imm_ld1lane(ptr %bar, ptr %ptr, <16 x i8> %A) {
13922 ; SDAG-LABEL: test_v16i8_post_imm_ld1lane:
13924 ; SDAG-NEXT: ld1.b { v0 }[1], [x0], #1
13925 ; SDAG-NEXT: str x0, [x1]
13928 ; CHECK-GISEL-LABEL: test_v16i8_post_imm_ld1lane:
13929 ; CHECK-GISEL: ; %bb.0:
13930 ; CHECK-GISEL-NEXT: ldrb w8, [x0], #1
13931 ; CHECK-GISEL-NEXT: str x0, [x1]
13932 ; CHECK-GISEL-NEXT: mov.b v0[1], w8
13933 ; CHECK-GISEL-NEXT: ret
13934 %tmp1 = load i8, ptr %bar
13935 %tmp2 = insertelement <16 x i8> %A, i8 %tmp1, i32 1
13936 %tmp3 = getelementptr i8, ptr %bar, i64 1
13937 store ptr %tmp3, ptr %ptr
13938 ret <16 x i8> %tmp2
13941 define <16 x i8> @test_v16i8_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <16 x i8> %A) {
13942 ; SDAG-LABEL: test_v16i8_post_reg_ld1lane:
13944 ; SDAG-NEXT: ld1.b { v0 }[1], [x0], x2
13945 ; SDAG-NEXT: str x0, [x1]
13948 ; CHECK-GISEL-LABEL: test_v16i8_post_reg_ld1lane:
13949 ; CHECK-GISEL: ; %bb.0:
13950 ; CHECK-GISEL-NEXT: ldr b1, [x0]
13951 ; CHECK-GISEL-NEXT: add x8, x0, x2
13952 ; CHECK-GISEL-NEXT: str x8, [x1]
13953 ; CHECK-GISEL-NEXT: mov.b v0[1], v1[0]
13954 ; CHECK-GISEL-NEXT: ret
13955 %tmp1 = load i8, ptr %bar
13956 %tmp2 = insertelement <16 x i8> %A, i8 %tmp1, i32 1
13957 %tmp3 = getelementptr i8, ptr %bar, i64 %inc
13958 store ptr %tmp3, ptr %ptr
13959 ret <16 x i8> %tmp2
13962 define <8 x i8> @test_v8i8_post_imm_ld1lane(ptr %bar, ptr %ptr, <8 x i8> %A) {
13963 ; SDAG-LABEL: test_v8i8_post_imm_ld1lane:
13965 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
13966 ; SDAG-NEXT: ld1.b { v0 }[1], [x0], #1
13967 ; SDAG-NEXT: str x0, [x1]
13968 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0
13971 ; CHECK-GISEL-LABEL: test_v8i8_post_imm_ld1lane:
13972 ; CHECK-GISEL: ; %bb.0:
13973 ; CHECK-GISEL-NEXT: ldrb w8, [x0], #1
13974 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
13975 ; CHECK-GISEL-NEXT: str x0, [x1]
13976 ; CHECK-GISEL-NEXT: mov.b v0[1], w8
13977 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0
13978 ; CHECK-GISEL-NEXT: ret
13979 %tmp1 = load i8, ptr %bar
13980 %tmp2 = insertelement <8 x i8> %A, i8 %tmp1, i32 1
13981 %tmp3 = getelementptr i8, ptr %bar, i64 1
13982 store ptr %tmp3, ptr %ptr
13986 define <8 x i8> @test_v8i8_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <8 x i8> %A) {
13987 ; SDAG-LABEL: test_v8i8_post_reg_ld1lane:
13989 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
13990 ; SDAG-NEXT: ld1.b { v0 }[1], [x0], x2
13991 ; SDAG-NEXT: str x0, [x1]
13992 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0
13995 ; CHECK-GISEL-LABEL: test_v8i8_post_reg_ld1lane:
13996 ; CHECK-GISEL: ; %bb.0:
13997 ; CHECK-GISEL-NEXT: ldr b1, [x0]
13998 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
13999 ; CHECK-GISEL-NEXT: add x8, x0, x2
14000 ; CHECK-GISEL-NEXT: str x8, [x1]
14001 ; CHECK-GISEL-NEXT: mov.b v0[1], v1[0]
14002 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0
14003 ; CHECK-GISEL-NEXT: ret
14004 %tmp1 = load i8, ptr %bar
14005 %tmp2 = insertelement <8 x i8> %A, i8 %tmp1, i32 1
14006 %tmp3 = getelementptr i8, ptr %bar, i64 %inc
14007 store ptr %tmp3, ptr %ptr
14011 define <8 x i16> @test_v8i16_post_imm_ld1lane(ptr %bar, ptr %ptr, <8 x i16> %A) {
14012 ; SDAG-LABEL: test_v8i16_post_imm_ld1lane:
14014 ; SDAG-NEXT: ld1.h { v0 }[1], [x0], #2
14015 ; SDAG-NEXT: str x0, [x1]
14018 ; CHECK-GISEL-LABEL: test_v8i16_post_imm_ld1lane:
14019 ; CHECK-GISEL: ; %bb.0:
14020 ; CHECK-GISEL-NEXT: ldrh w8, [x0], #2
14021 ; CHECK-GISEL-NEXT: str x0, [x1]
14022 ; CHECK-GISEL-NEXT: mov.h v0[1], w8
14023 ; CHECK-GISEL-NEXT: ret
14024 %tmp1 = load i16, ptr %bar
14025 %tmp2 = insertelement <8 x i16> %A, i16 %tmp1, i32 1
14026 %tmp3 = getelementptr i16, ptr %bar, i64 1
14027 store ptr %tmp3, ptr %ptr
14028 ret <8 x i16> %tmp2
14031 define <8 x i16> @test_v8i16_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <8 x i16> %A) {
14032 ; SDAG-LABEL: test_v8i16_post_reg_ld1lane:
14034 ; SDAG-NEXT: lsl x8, x2, #1
14035 ; SDAG-NEXT: ld1.h { v0 }[1], [x0], x8
14036 ; SDAG-NEXT: str x0, [x1]
14039 ; CHECK-GISEL-LABEL: test_v8i16_post_reg_ld1lane:
14040 ; CHECK-GISEL: ; %bb.0:
14041 ; CHECK-GISEL-NEXT: ldr h1, [x0]
14042 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
14043 ; CHECK-GISEL-NEXT: mov.h v0[1], v1[0]
14044 ; CHECK-GISEL-NEXT: str x8, [x1]
14045 ; CHECK-GISEL-NEXT: ret
14046 %tmp1 = load i16, ptr %bar
14047 %tmp2 = insertelement <8 x i16> %A, i16 %tmp1, i32 1
14048 %tmp3 = getelementptr i16, ptr %bar, i64 %inc
14049 store ptr %tmp3, ptr %ptr
14050 ret <8 x i16> %tmp2
14053 define <4 x i16> @test_v4i16_post_imm_ld1lane(ptr %bar, ptr %ptr, <4 x i16> %A) {
14054 ; SDAG-LABEL: test_v4i16_post_imm_ld1lane:
14056 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
14057 ; SDAG-NEXT: ld1.h { v0 }[1], [x0], #2
14058 ; SDAG-NEXT: str x0, [x1]
14059 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0
14062 ; CHECK-GISEL-LABEL: test_v4i16_post_imm_ld1lane:
14063 ; CHECK-GISEL: ; %bb.0:
14064 ; CHECK-GISEL-NEXT: ldrh w8, [x0], #2
14065 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
14066 ; CHECK-GISEL-NEXT: str x0, [x1]
14067 ; CHECK-GISEL-NEXT: mov.h v0[1], w8
14068 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0
14069 ; CHECK-GISEL-NEXT: ret
14070 %tmp1 = load i16, ptr %bar
14071 %tmp2 = insertelement <4 x i16> %A, i16 %tmp1, i32 1
14072 %tmp3 = getelementptr i16, ptr %bar, i64 1
14073 store ptr %tmp3, ptr %ptr
14074 ret <4 x i16> %tmp2
14077 define <4 x i16> @test_v4i16_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <4 x i16> %A) {
14078 ; SDAG-LABEL: test_v4i16_post_reg_ld1lane:
14080 ; SDAG-NEXT: lsl x8, x2, #1
14081 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
14082 ; SDAG-NEXT: ld1.h { v0 }[1], [x0], x8
14083 ; SDAG-NEXT: str x0, [x1]
14084 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0
14087 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld1lane:
14088 ; CHECK-GISEL: ; %bb.0:
14089 ; CHECK-GISEL-NEXT: ldr h1, [x0]
14090 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
14091 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
14092 ; CHECK-GISEL-NEXT: mov.h v0[1], v1[0]
14093 ; CHECK-GISEL-NEXT: str x8, [x1]
14094 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0
14095 ; CHECK-GISEL-NEXT: ret
14096 %tmp1 = load i16, ptr %bar
14097 %tmp2 = insertelement <4 x i16> %A, i16 %tmp1, i32 1
14098 %tmp3 = getelementptr i16, ptr %bar, i64 %inc
14099 store ptr %tmp3, ptr %ptr
14100 ret <4 x i16> %tmp2
14103 define <4 x i32> @test_v4i32_post_imm_ld1lane(ptr %bar, ptr %ptr, <4 x i32> %A) {
14104 ; SDAG-LABEL: test_v4i32_post_imm_ld1lane:
14106 ; SDAG-NEXT: ld1.s { v0 }[1], [x0], #4
14107 ; SDAG-NEXT: str x0, [x1]
14110 ; CHECK-GISEL-LABEL: test_v4i32_post_imm_ld1lane:
14111 ; CHECK-GISEL: ; %bb.0:
14112 ; CHECK-GISEL-NEXT: ldr w8, [x0], #4
14113 ; CHECK-GISEL-NEXT: str x0, [x1]
14114 ; CHECK-GISEL-NEXT: mov.s v0[1], w8
14115 ; CHECK-GISEL-NEXT: ret
14116 %tmp1 = load i32, ptr %bar
14117 %tmp2 = insertelement <4 x i32> %A, i32 %tmp1, i32 1
14118 %tmp3 = getelementptr i32, ptr %bar, i64 1
14119 store ptr %tmp3, ptr %ptr
14120 ret <4 x i32> %tmp2
14123 define <4 x i32> @test_v4i32_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <4 x i32> %A) {
14124 ; SDAG-LABEL: test_v4i32_post_reg_ld1lane:
14126 ; SDAG-NEXT: lsl x8, x2, #2
14127 ; SDAG-NEXT: ld1.s { v0 }[1], [x0], x8
14128 ; SDAG-NEXT: str x0, [x1]
14131 ; CHECK-GISEL-LABEL: test_v4i32_post_reg_ld1lane:
14132 ; CHECK-GISEL: ; %bb.0:
14133 ; CHECK-GISEL-NEXT: ldr s1, [x0]
14134 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
14135 ; CHECK-GISEL-NEXT: mov.s v0[1], v1[0]
14136 ; CHECK-GISEL-NEXT: str x8, [x1]
14137 ; CHECK-GISEL-NEXT: ret
14138 %tmp1 = load i32, ptr %bar
14139 %tmp2 = insertelement <4 x i32> %A, i32 %tmp1, i32 1
14140 %tmp3 = getelementptr i32, ptr %bar, i64 %inc
14141 store ptr %tmp3, ptr %ptr
14142 ret <4 x i32> %tmp2
14145 define <2 x i32> @test_v2i32_post_imm_ld1lane(ptr %bar, ptr %ptr, <2 x i32> %A) {
14146 ; SDAG-LABEL: test_v2i32_post_imm_ld1lane:
14148 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
14149 ; SDAG-NEXT: ld1.s { v0 }[1], [x0], #4
14150 ; SDAG-NEXT: str x0, [x1]
14151 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0
14154 ; CHECK-GISEL-LABEL: test_v2i32_post_imm_ld1lane:
14155 ; CHECK-GISEL: ; %bb.0:
14156 ; CHECK-GISEL-NEXT: ldr w8, [x0], #4
14157 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
14158 ; CHECK-GISEL-NEXT: str x0, [x1]
14159 ; CHECK-GISEL-NEXT: mov.s v0[1], w8
14160 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0
14161 ; CHECK-GISEL-NEXT: ret
14162 %tmp1 = load i32, ptr %bar
14163 %tmp2 = insertelement <2 x i32> %A, i32 %tmp1, i32 1
14164 %tmp3 = getelementptr i32, ptr %bar, i64 1
14165 store ptr %tmp3, ptr %ptr
14166 ret <2 x i32> %tmp2
14169 define <2 x i32> @test_v2i32_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <2 x i32> %A) {
14170 ; SDAG-LABEL: test_v2i32_post_reg_ld1lane:
14172 ; SDAG-NEXT: lsl x8, x2, #2
14173 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
14174 ; SDAG-NEXT: ld1.s { v0 }[1], [x0], x8
14175 ; SDAG-NEXT: str x0, [x1]
14176 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0
14179 ; CHECK-GISEL-LABEL: test_v2i32_post_reg_ld1lane:
14180 ; CHECK-GISEL: ; %bb.0:
14181 ; CHECK-GISEL-NEXT: ldr s1, [x0]
14182 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
14183 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
14184 ; CHECK-GISEL-NEXT: mov.s v0[1], v1[0]
14185 ; CHECK-GISEL-NEXT: str x8, [x1]
14186 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0
14187 ; CHECK-GISEL-NEXT: ret
14188 %tmp1 = load i32, ptr %bar
14189 %tmp2 = insertelement <2 x i32> %A, i32 %tmp1, i32 1
14190 %tmp3 = getelementptr i32, ptr %bar, i64 %inc
14191 store ptr %tmp3, ptr %ptr
14192 ret <2 x i32> %tmp2
14195 define <2 x i64> @test_v2i64_post_imm_ld1lane(ptr %bar, ptr %ptr, <2 x i64> %A) {
14196 ; SDAG-LABEL: test_v2i64_post_imm_ld1lane:
14198 ; SDAG-NEXT: ld1.d { v0 }[1], [x0], #8
14199 ; SDAG-NEXT: str x0, [x1]
14202 ; CHECK-GISEL-LABEL: test_v2i64_post_imm_ld1lane:
14203 ; CHECK-GISEL: ; %bb.0:
14204 ; CHECK-GISEL-NEXT: ldr x8, [x0], #8
14205 ; CHECK-GISEL-NEXT: str x0, [x1]
14206 ; CHECK-GISEL-NEXT: mov.d v0[1], x8
14207 ; CHECK-GISEL-NEXT: ret
14208 %tmp1 = load i64, ptr %bar
14209 %tmp2 = insertelement <2 x i64> %A, i64 %tmp1, i32 1
14210 %tmp3 = getelementptr i64, ptr %bar, i64 1
14211 store ptr %tmp3, ptr %ptr
14212 ret <2 x i64> %tmp2
14215 define <2 x i64> @test_v2i64_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <2 x i64> %A) {
14216 ; SDAG-LABEL: test_v2i64_post_reg_ld1lane:
14218 ; SDAG-NEXT: lsl x8, x2, #3
14219 ; SDAG-NEXT: ld1.d { v0 }[1], [x0], x8
14220 ; SDAG-NEXT: str x0, [x1]
14223 ; CHECK-GISEL-LABEL: test_v2i64_post_reg_ld1lane:
14224 ; CHECK-GISEL: ; %bb.0:
14225 ; CHECK-GISEL-NEXT: ldr d1, [x0]
14226 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
14227 ; CHECK-GISEL-NEXT: mov.d v0[1], v1[0]
14228 ; CHECK-GISEL-NEXT: str x8, [x1]
14229 ; CHECK-GISEL-NEXT: ret
14230 %tmp1 = load i64, ptr %bar
14231 %tmp2 = insertelement <2 x i64> %A, i64 %tmp1, i32 1
14232 %tmp3 = getelementptr i64, ptr %bar, i64 %inc
14233 store ptr %tmp3, ptr %ptr
14234 ret <2 x i64> %tmp2
14237 define <4 x float> @test_v4f32_post_imm_ld1lane(ptr %bar, ptr %ptr, <4 x float> %A) {
14238 ; SDAG-LABEL: test_v4f32_post_imm_ld1lane:
14240 ; SDAG-NEXT: ld1.s { v0 }[1], [x0], #4
14241 ; SDAG-NEXT: str x0, [x1]
14244 ; CHECK-GISEL-LABEL: test_v4f32_post_imm_ld1lane:
14245 ; CHECK-GISEL: ; %bb.0:
14246 ; CHECK-GISEL-NEXT: ldr s1, [x0], #4
14247 ; CHECK-GISEL-NEXT: str x0, [x1]
14248 ; CHECK-GISEL-NEXT: mov.s v0[1], v1[0]
14249 ; CHECK-GISEL-NEXT: ret
14250 %tmp1 = load float, ptr %bar
14251 %tmp2 = insertelement <4 x float> %A, float %tmp1, i32 1
14252 %tmp3 = getelementptr float, ptr %bar, i64 1
14253 store ptr %tmp3, ptr %ptr
14254 ret <4 x float> %tmp2
14257 define <4 x float> @test_v4f32_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <4 x float> %A) {
14258 ; SDAG-LABEL: test_v4f32_post_reg_ld1lane:
14260 ; SDAG-NEXT: lsl x8, x2, #2
14261 ; SDAG-NEXT: ld1.s { v0 }[1], [x0], x8
14262 ; SDAG-NEXT: str x0, [x1]
14265 ; CHECK-GISEL-LABEL: test_v4f32_post_reg_ld1lane:
14266 ; CHECK-GISEL: ; %bb.0:
14267 ; CHECK-GISEL-NEXT: ldr s1, [x0]
14268 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
14269 ; CHECK-GISEL-NEXT: mov.s v0[1], v1[0]
14270 ; CHECK-GISEL-NEXT: str x8, [x1]
14271 ; CHECK-GISEL-NEXT: ret
14272 %tmp1 = load float, ptr %bar
14273 %tmp2 = insertelement <4 x float> %A, float %tmp1, i32 1
14274 %tmp3 = getelementptr float, ptr %bar, i64 %inc
14275 store ptr %tmp3, ptr %ptr
14276 ret <4 x float> %tmp2
14279 define <2 x float> @test_v2f32_post_imm_ld1lane(ptr %bar, ptr %ptr, <2 x float> %A) {
14280 ; SDAG-LABEL: test_v2f32_post_imm_ld1lane:
14282 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
14283 ; SDAG-NEXT: ld1.s { v0 }[1], [x0], #4
14284 ; SDAG-NEXT: str x0, [x1]
14285 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0
14288 ; CHECK-GISEL-LABEL: test_v2f32_post_imm_ld1lane:
14289 ; CHECK-GISEL: ; %bb.0:
14290 ; CHECK-GISEL-NEXT: ldr s1, [x0], #4
14291 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
14292 ; CHECK-GISEL-NEXT: str x0, [x1]
14293 ; CHECK-GISEL-NEXT: mov.s v0[1], v1[0]
14294 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0
14295 ; CHECK-GISEL-NEXT: ret
14296 %tmp1 = load float, ptr %bar
14297 %tmp2 = insertelement <2 x float> %A, float %tmp1, i32 1
14298 %tmp3 = getelementptr float, ptr %bar, i64 1
14299 store ptr %tmp3, ptr %ptr
14300 ret <2 x float> %tmp2
14303 define <2 x float> @test_v2f32_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <2 x float> %A) {
14304 ; SDAG-LABEL: test_v2f32_post_reg_ld1lane:
14306 ; SDAG-NEXT: lsl x8, x2, #2
14307 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
14308 ; SDAG-NEXT: ld1.s { v0 }[1], [x0], x8
14309 ; SDAG-NEXT: str x0, [x1]
14310 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0
14313 ; CHECK-GISEL-LABEL: test_v2f32_post_reg_ld1lane:
14314 ; CHECK-GISEL: ; %bb.0:
14315 ; CHECK-GISEL-NEXT: ldr s1, [x0]
14316 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
14317 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #2
14318 ; CHECK-GISEL-NEXT: mov.s v0[1], v1[0]
14319 ; CHECK-GISEL-NEXT: str x8, [x1]
14320 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0
14321 ; CHECK-GISEL-NEXT: ret
14322 %tmp1 = load float, ptr %bar
14323 %tmp2 = insertelement <2 x float> %A, float %tmp1, i32 1
14324 %tmp3 = getelementptr float, ptr %bar, i64 %inc
14325 store ptr %tmp3, ptr %ptr
14326 ret <2 x float> %tmp2
14329 define <2 x double> @test_v2f64_post_imm_ld1lane(ptr %bar, ptr %ptr, <2 x double> %A) {
14330 ; SDAG-LABEL: test_v2f64_post_imm_ld1lane:
14332 ; SDAG-NEXT: ld1.d { v0 }[1], [x0], #8
14333 ; SDAG-NEXT: str x0, [x1]
14336 ; CHECK-GISEL-LABEL: test_v2f64_post_imm_ld1lane:
14337 ; CHECK-GISEL: ; %bb.0:
14338 ; CHECK-GISEL-NEXT: ldr d1, [x0], #8
14339 ; CHECK-GISEL-NEXT: str x0, [x1]
14340 ; CHECK-GISEL-NEXT: mov.d v0[1], v1[0]
14341 ; CHECK-GISEL-NEXT: ret
14342 %tmp1 = load double, ptr %bar
14343 %tmp2 = insertelement <2 x double> %A, double %tmp1, i32 1
14344 %tmp3 = getelementptr double, ptr %bar, i64 1
14345 store ptr %tmp3, ptr %ptr
14346 ret <2 x double> %tmp2
14349 define <2 x double> @test_v2f64_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <2 x double> %A) {
14350 ; SDAG-LABEL: test_v2f64_post_reg_ld1lane:
14352 ; SDAG-NEXT: lsl x8, x2, #3
14353 ; SDAG-NEXT: ld1.d { v0 }[1], [x0], x8
14354 ; SDAG-NEXT: str x0, [x1]
14357 ; CHECK-GISEL-LABEL: test_v2f64_post_reg_ld1lane:
14358 ; CHECK-GISEL: ; %bb.0:
14359 ; CHECK-GISEL-NEXT: ldr d1, [x0]
14360 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #3
14361 ; CHECK-GISEL-NEXT: mov.d v0[1], v1[0]
14362 ; CHECK-GISEL-NEXT: str x8, [x1]
14363 ; CHECK-GISEL-NEXT: ret
14364 %tmp1 = load double, ptr %bar
14365 %tmp2 = insertelement <2 x double> %A, double %tmp1, i32 1
14366 %tmp3 = getelementptr double, ptr %bar, i64 %inc
14367 store ptr %tmp3, ptr %ptr
14368 ret <2 x double> %tmp2
14371 ; Check for dependencies between the vector and the scalar load.
14372 define <4 x float> @test_v4f32_post_reg_ld1lane_dep_vec_on_load(ptr %bar, ptr %ptr, i64 %inc, ptr %dep_ptr_1, ptr %dep_ptr_2, <4 x float> %vec) {
14373 ; CHECK-LABEL: test_v4f32_post_reg_ld1lane_dep_vec_on_load:
14375 ; CHECK-NEXT: ldr s1, [x0]
14376 ; CHECK-NEXT: str q0, [x3]
14377 ; CHECK-NEXT: add x8, x0, x2, lsl #2
14378 ; CHECK-NEXT: ldr q0, [x4]
14379 ; CHECK-NEXT: str x8, [x1]
14380 ; CHECK-NEXT: mov.s v0[1], v1[0]
14382 %tmp1 = load float, ptr %bar
14383 store <4 x float> %vec, ptr %dep_ptr_1, align 16
14384 %A = load <4 x float>, ptr %dep_ptr_2, align 16
14385 %tmp2 = insertelement <4 x float> %A, float %tmp1, i32 1
14386 %tmp3 = getelementptr float, ptr %bar, i64 %inc
14387 store ptr %tmp3, ptr %ptr
14388 ret <4 x float> %tmp2
14391 ; Make sure that we test the narrow V64 code path.
14392 ; The tests above don't, because there, 64-bit insert_vector_elt nodes will be
14393 ; widened to 128-bit before the LD1LANEpost combine has the chance to run,
14394 ; making it avoid narrow vector types.
14395 ; One way to trick that combine into running early is to force the vector ops
14396 ; legalizer to run. We achieve that using the ctpop.
14398 define <4 x i16> @test_v4i16_post_reg_ld1lane_forced_narrow(ptr %bar, ptr %ptr, i64 %inc, <4 x i16> %A, ptr %d) {
14399 ; SDAG-LABEL: test_v4i16_post_reg_ld1lane_forced_narrow:
14401 ; SDAG-NEXT: lsl x8, x2, #1
14402 ; SDAG-NEXT: ; kill: def $d0 killed $d0 def $q0
14403 ; SDAG-NEXT: ld1.h { v0 }[1], [x0], x8
14404 ; SDAG-NEXT: str x0, [x1]
14405 ; SDAG-NEXT: ldr d1, [x3]
14406 ; SDAG-NEXT: ; kill: def $d0 killed $d0 killed $q0
14407 ; SDAG-NEXT: cnt.8b v1, v1
14408 ; SDAG-NEXT: uaddlp.4h v1, v1
14409 ; SDAG-NEXT: uaddlp.2s v1, v1
14410 ; SDAG-NEXT: str d1, [x3]
14413 ; CHECK-GISEL-LABEL: test_v4i16_post_reg_ld1lane_forced_narrow:
14414 ; CHECK-GISEL: ; %bb.0:
14415 ; CHECK-GISEL-NEXT: add x8, x0, x2, lsl #1
14416 ; CHECK-GISEL-NEXT: ldr h1, [x0]
14417 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 def $q0
14418 ; CHECK-GISEL-NEXT: str x8, [x1]
14419 ; CHECK-GISEL-NEXT: mov.h v0[1], v1[0]
14420 ; CHECK-GISEL-NEXT: ldr d2, [x3]
14421 ; CHECK-GISEL-NEXT: ; kill: def $d0 killed $d0 killed $q0
14422 ; CHECK-GISEL-NEXT: cnt.8b v2, v2
14423 ; CHECK-GISEL-NEXT: uaddlp.4h v2, v2
14424 ; CHECK-GISEL-NEXT: uaddlp.2s v1, v2
14425 ; CHECK-GISEL-NEXT: str d1, [x3]
14426 ; CHECK-GISEL-NEXT: ret
14427 %tmp1 = load i16, ptr %bar
14428 %tmp2 = insertelement <4 x i16> %A, i16 %tmp1, i32 1
14429 %tmp3 = getelementptr i16, ptr %bar, i64 %inc
14430 store ptr %tmp3, ptr %ptr
14431 %dl = load <2 x i32>, ptr %d
14432 %dr = call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %dl)
14433 store <2 x i32> %dr, ptr %d
14434 ret <4 x i16> %tmp2
14437 declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32>)
14439 define void @test_ld1lane_build(ptr %ptr0, ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %out) {
14440 ; SDAG-LABEL: test_ld1lane_build:
14442 ; SDAG-NEXT: ldr s0, [x2]
14443 ; SDAG-NEXT: ldr s1, [x0]
14444 ; SDAG-NEXT: ld1.s { v0 }[1], [x3]
14445 ; SDAG-NEXT: ld1.s { v1 }[1], [x1]
14446 ; SDAG-NEXT: sub.2s v0, v1, v0
14447 ; SDAG-NEXT: str d0, [x4]
14450 ; CHECK-GISEL-LABEL: test_ld1lane_build:
14451 ; CHECK-GISEL: ; %bb.0:
14452 ; CHECK-GISEL-NEXT: ldr s0, [x0]
14453 ; CHECK-GISEL-NEXT: ldr s1, [x1]
14454 ; CHECK-GISEL-NEXT: ldr s2, [x2]
14455 ; CHECK-GISEL-NEXT: ldr s3, [x3]
14456 ; CHECK-GISEL-NEXT: mov.s v0[1], v1[0]
14457 ; CHECK-GISEL-NEXT: mov.s v2[1], v3[0]
14458 ; CHECK-GISEL-NEXT: sub.2s v0, v0, v2
14459 ; CHECK-GISEL-NEXT: str d0, [x4]
14460 ; CHECK-GISEL-NEXT: ret
14461 %load0 = load i32, ptr %ptr0, align 4
14462 %load1 = load i32, ptr %ptr1, align 4
14463 %vec0_0 = insertelement <2 x i32> undef, i32 %load0, i32 0
14464 %vec0_1 = insertelement <2 x i32> %vec0_0, i32 %load1, i32 1
14466 %load2 = load i32, ptr %ptr2, align 4
14467 %load3 = load i32, ptr %ptr3, align 4
14468 %vec1_0 = insertelement <2 x i32> undef, i32 %load2, i32 0
14469 %vec1_1 = insertelement <2 x i32> %vec1_0, i32 %load3, i32 1
14471 %sub = sub nsw <2 x i32> %vec0_1, %vec1_1
14472 store <2 x i32> %sub, ptr %out, align 16
14476 define void @test_ld1lane_build_i16(ptr %a, ptr %b, ptr %c, ptr %d, <4 x i16> %e, ptr %p) {
14477 ; SDAG-LABEL: test_ld1lane_build_i16:
14479 ; SDAG-NEXT: ldr h1, [x0]
14480 ; SDAG-NEXT: ld1.h { v1 }[1], [x1]
14481 ; SDAG-NEXT: ld1.h { v1 }[2], [x2]
14482 ; SDAG-NEXT: ld1.h { v1 }[3], [x3]
14483 ; SDAG-NEXT: sub.4h v0, v1, v0
14484 ; SDAG-NEXT: str d0, [x4]
14487 ; CHECK-GISEL-LABEL: test_ld1lane_build_i16:
14488 ; CHECK-GISEL: ; %bb.0:
14489 ; CHECK-GISEL-NEXT: ldr h1, [x0]
14490 ; CHECK-GISEL-NEXT: ldr h2, [x1]
14491 ; CHECK-GISEL-NEXT: mov.h v1[1], v2[0]
14492 ; CHECK-GISEL-NEXT: ldr h2, [x2]
14493 ; CHECK-GISEL-NEXT: mov.h v1[2], v2[0]
14494 ; CHECK-GISEL-NEXT: ldr h2, [x3]
14495 ; CHECK-GISEL-NEXT: mov.h v1[3], v2[0]
14496 ; CHECK-GISEL-NEXT: sub.4h v0, v1, v0
14497 ; CHECK-GISEL-NEXT: str d0, [x4]
14498 ; CHECK-GISEL-NEXT: ret
14499 %ld.a = load i16, ptr %a
14500 %ld.b = load i16, ptr %b
14501 %ld.c = load i16, ptr %c
14502 %ld.d = load i16, ptr %d
14503 %v.a = insertelement <4 x i16> undef, i16 %ld.a, i64 0
14504 %v.b = insertelement <4 x i16> %v.a, i16 %ld.b, i64 1
14505 %v.c = insertelement <4 x i16> %v.b, i16 %ld.c, i64 2
14506 %v = insertelement <4 x i16> %v.c, i16 %ld.d, i64 3
14507 %sub = sub nsw <4 x i16> %v, %e
14508 store <4 x i16> %sub, ptr %p
14512 define void @test_ld1lane_build_half(ptr %a, ptr %b, ptr %c, ptr %d, <4 x half> %e, ptr %p) {
14513 ; SDAG-LABEL: test_ld1lane_build_half:
14515 ; SDAG-NEXT: ldr h1, [x0]
14516 ; SDAG-NEXT: fcvtl v0.4s, v0.4h
14517 ; SDAG-NEXT: ld1.h { v1 }[1], [x1]
14518 ; SDAG-NEXT: ld1.h { v1 }[2], [x2]
14519 ; SDAG-NEXT: ld1.h { v1 }[3], [x3]
14520 ; SDAG-NEXT: fcvtl v1.4s, v1.4h
14521 ; SDAG-NEXT: fsub.4s v0, v1, v0
14522 ; SDAG-NEXT: fcvtn v0.4h, v0.4s
14523 ; SDAG-NEXT: str d0, [x4]
14526 ; CHECK-GISEL-LABEL: test_ld1lane_build_half:
14527 ; CHECK-GISEL: ; %bb.0:
14528 ; CHECK-GISEL-NEXT: ldr h1, [x0]
14529 ; CHECK-GISEL-NEXT: ldr h2, [x1]
14530 ; CHECK-GISEL-NEXT: fcvtl v0.4s, v0.4h
14531 ; CHECK-GISEL-NEXT: mov.h v1[1], v2[0]
14532 ; CHECK-GISEL-NEXT: ldr h2, [x2]
14533 ; CHECK-GISEL-NEXT: mov.h v1[2], v2[0]
14534 ; CHECK-GISEL-NEXT: ldr h2, [x3]
14535 ; CHECK-GISEL-NEXT: mov.h v1[3], v2[0]
14536 ; CHECK-GISEL-NEXT: fcvtl v1.4s, v1.4h
14537 ; CHECK-GISEL-NEXT: fsub.4s v0, v1, v0
14538 ; CHECK-GISEL-NEXT: fcvtn v0.4h, v0.4s
14539 ; CHECK-GISEL-NEXT: str d0, [x4]
14540 ; CHECK-GISEL-NEXT: ret
14541 %ld.a = load half, ptr %a
14542 %ld.b = load half, ptr %b
14543 %ld.c = load half, ptr %c
14544 %ld.d = load half, ptr %d
14545 %v.a = insertelement <4 x half> undef, half %ld.a, i64 0
14546 %v.b = insertelement <4 x half> %v.a, half %ld.b, i64 1
14547 %v.c = insertelement <4 x half> %v.b, half %ld.c, i64 2
14548 %v = insertelement <4 x half> %v.c, half %ld.d, i64 3
14549 %sub = fsub <4 x half> %v, %e
14550 store <4 x half> %sub, ptr %p
14554 define void @test_ld1lane_build_i8(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e, ptr %f, ptr %g, ptr %h, <8 x i8> %v, ptr %p) {
14555 ; SDAG-LABEL: test_ld1lane_build_i8:
14557 ; SDAG-NEXT: ldr b1, [x0]
14558 ; SDAG-NEXT: ldr x8, [sp]
14559 ; SDAG-NEXT: ld1.b { v1 }[1], [x1]
14560 ; SDAG-NEXT: ld1.b { v1 }[2], [x2]
14561 ; SDAG-NEXT: ld1.b { v1 }[3], [x3]
14562 ; SDAG-NEXT: ld1.b { v1 }[4], [x4]
14563 ; SDAG-NEXT: ld1.b { v1 }[5], [x5]
14564 ; SDAG-NEXT: ld1.b { v1 }[6], [x6]
14565 ; SDAG-NEXT: ld1.b { v1 }[7], [x7]
14566 ; SDAG-NEXT: sub.8b v0, v1, v0
14567 ; SDAG-NEXT: str d0, [x8]
14570 ; CHECK-GISEL-LABEL: test_ld1lane_build_i8:
14571 ; CHECK-GISEL: ; %bb.0:
14572 ; CHECK-GISEL-NEXT: ldr b1, [x0]
14573 ; CHECK-GISEL-NEXT: ldr b2, [x1]
14574 ; CHECK-GISEL-NEXT: ldr x8, [sp]
14575 ; CHECK-GISEL-NEXT: mov.b v1[1], v2[0]
14576 ; CHECK-GISEL-NEXT: ldr b2, [x2]
14577 ; CHECK-GISEL-NEXT: mov.b v1[2], v2[0]
14578 ; CHECK-GISEL-NEXT: ldr b2, [x3]
14579 ; CHECK-GISEL-NEXT: mov.b v1[3], v2[0]
14580 ; CHECK-GISEL-NEXT: ldr b2, [x4]
14581 ; CHECK-GISEL-NEXT: mov.b v1[4], v2[0]
14582 ; CHECK-GISEL-NEXT: ldr b2, [x5]
14583 ; CHECK-GISEL-NEXT: mov.b v1[5], v2[0]
14584 ; CHECK-GISEL-NEXT: ldr b2, [x6]
14585 ; CHECK-GISEL-NEXT: mov.b v1[6], v2[0]
14586 ; CHECK-GISEL-NEXT: ldr b2, [x7]
14587 ; CHECK-GISEL-NEXT: mov.b v1[7], v2[0]
14588 ; CHECK-GISEL-NEXT: sub.8b v0, v1, v0
14589 ; CHECK-GISEL-NEXT: str d0, [x8]
14590 ; CHECK-GISEL-NEXT: ret
14591 %ld.a = load i8, ptr %a
14592 %ld.b = load i8, ptr %b
14593 %ld.c = load i8, ptr %c
14594 %ld.d = load i8, ptr %d
14595 %ld.e = load i8, ptr %e
14596 %ld.f = load i8, ptr %f
14597 %ld.g = load i8, ptr %g
14598 %ld.h = load i8, ptr %h
14599 %v.a = insertelement <8 x i8> undef, i8 %ld.a, i64 0
14600 %v.b = insertelement <8 x i8> %v.a, i8 %ld.b, i64 1
14601 %v.c = insertelement <8 x i8> %v.b, i8 %ld.c, i64 2
14602 %v.d = insertelement <8 x i8> %v.c, i8 %ld.d, i64 3
14603 %v.e = insertelement <8 x i8> %v.d, i8 %ld.e, i64 4
14604 %v.f = insertelement <8 x i8> %v.e, i8 %ld.f, i64 5
14605 %v.g = insertelement <8 x i8> %v.f, i8 %ld.g, i64 6
14606 %v1 = insertelement <8 x i8> %v.g, i8 %ld.h, i64 7
14607 %sub = sub nsw <8 x i8> %v1, %v
14608 store <8 x i8> %sub, ptr %p
14612 define <4 x i32> @test_inc_cycle(<4 x i32> %vec, ptr %in) {
14613 ; SDAG-LABEL: test_inc_cycle:
14615 ; SDAG-NEXT: ld1.s { v0 }[0], [x0]
14616 ; SDAG-NEXT: adrp x9, _var@PAGE
14617 ; SDAG-NEXT: fmov x8, d0
14618 ; SDAG-NEXT: add x8, x0, x8, lsl #2
14619 ; SDAG-NEXT: str x8, [x9, _var@PAGEOFF]
14622 ; CHECK-GISEL-LABEL: test_inc_cycle:
14623 ; CHECK-GISEL: ; %bb.0:
14624 ; CHECK-GISEL-NEXT: ldr s1, [x0]
14625 ; CHECK-GISEL-NEXT: adrp x9, _var@PAGE
14626 ; CHECK-GISEL-NEXT: mov.s v0[0], v1[0]
14627 ; CHECK-GISEL-NEXT: fmov x8, d0
14628 ; CHECK-GISEL-NEXT: add x8, x0, x8, lsl #2
14629 ; CHECK-GISEL-NEXT: str x8, [x9, _var@PAGEOFF]
14630 ; CHECK-GISEL-NEXT: ret
14631 %elt = load i32, ptr %in
14632 %newvec = insertelement <4 x i32> %vec, i32 %elt, i32 0
14634 ; %inc cannot be %elt directly because we check that the load is only
14635 ; used by the insert before trying to form post-inc.
14636 %inc.vec = bitcast <4 x i32> %newvec to <2 x i64>
14637 %inc = extractelement <2 x i64> %inc.vec, i32 0
14638 %newaddr = getelementptr i32, ptr %in, i64 %inc
14639 store ptr %newaddr, ptr @var
14641 ret <4 x i32> %newvec
14644 @var = global ptr null
14646 define i8 @load_single_extract_variable_index_i8(ptr %A, i32 %idx) {
14647 ; SDAG-LABEL: load_single_extract_variable_index_i8:
14649 ; SDAG-NEXT: sub sp, sp, #16
14650 ; SDAG-NEXT: .cfi_def_cfa_offset 16
14651 ; SDAG-NEXT: mov x8, sp
14652 ; SDAG-NEXT: ldr q0, [x0]
14653 ; SDAG-NEXT: ; kill: def $w1 killed $w1 def $x1
14654 ; SDAG-NEXT: bfxil x8, x1, #0, #4
14655 ; SDAG-NEXT: str q0, [sp]
14656 ; SDAG-NEXT: ldrb w0, [x8]
14657 ; SDAG-NEXT: add sp, sp, #16
14660 ; CHECK-GISEL-LABEL: load_single_extract_variable_index_i8:
14661 ; CHECK-GISEL: ; %bb.0:
14662 ; CHECK-GISEL-NEXT: sub sp, sp, #16
14663 ; CHECK-GISEL-NEXT: .cfi_def_cfa_offset 16
14664 ; CHECK-GISEL-NEXT: mov w9, w1
14665 ; CHECK-GISEL-NEXT: ldr q0, [x0]
14666 ; CHECK-GISEL-NEXT: mov x8, sp
14667 ; CHECK-GISEL-NEXT: and x9, x9, #0xf
14668 ; CHECK-GISEL-NEXT: lsl x10, x9, #1
14669 ; CHECK-GISEL-NEXT: str q0, [sp]
14670 ; CHECK-GISEL-NEXT: sub x9, x10, x9
14671 ; CHECK-GISEL-NEXT: ldrb w0, [x8, x9]
14672 ; CHECK-GISEL-NEXT: add sp, sp, #16
14673 ; CHECK-GISEL-NEXT: ret
14674 %lv = load <16 x i8>, ptr %A
14675 %e = extractelement <16 x i8> %lv, i32 %idx
14679 define i16 @load_single_extract_variable_index_i16(ptr %A, i32 %idx) {
14680 ; SDAG-LABEL: load_single_extract_variable_index_i16:
14682 ; SDAG-NEXT: sub sp, sp, #16
14683 ; SDAG-NEXT: .cfi_def_cfa_offset 16
14684 ; SDAG-NEXT: mov x8, sp
14685 ; SDAG-NEXT: ldr q0, [x0]
14686 ; SDAG-NEXT: ; kill: def $w1 killed $w1 def $x1
14687 ; SDAG-NEXT: bfi x8, x1, #1, #3
14688 ; SDAG-NEXT: str q0, [sp]
14689 ; SDAG-NEXT: ldrh w0, [x8]
14690 ; SDAG-NEXT: add sp, sp, #16
14693 ; CHECK-GISEL-LABEL: load_single_extract_variable_index_i16:
14694 ; CHECK-GISEL: ; %bb.0:
14695 ; CHECK-GISEL-NEXT: sub sp, sp, #16
14696 ; CHECK-GISEL-NEXT: .cfi_def_cfa_offset 16
14697 ; CHECK-GISEL-NEXT: ldr q0, [x0]
14698 ; CHECK-GISEL-NEXT: mov w9, w1
14699 ; CHECK-GISEL-NEXT: mov x8, sp
14700 ; CHECK-GISEL-NEXT: and x9, x9, #0x7
14701 ; CHECK-GISEL-NEXT: str q0, [sp]
14702 ; CHECK-GISEL-NEXT: ldrh w0, [x8, x9, lsl #1]
14703 ; CHECK-GISEL-NEXT: add sp, sp, #16
14704 ; CHECK-GISEL-NEXT: ret
14705 %lv = load <8 x i16>, ptr %A
14706 %e = extractelement <8 x i16> %lv, i32 %idx
14710 define i32 @load_single_extract_variable_index_i32(ptr %A, i32 %idx) {
14711 ; SDAG-LABEL: load_single_extract_variable_index_i32:
14713 ; SDAG-NEXT: ; kill: def $w1 killed $w1 def $x1
14714 ; SDAG-NEXT: and x8, x1, #0x3
14715 ; SDAG-NEXT: ldr w0, [x0, x8, lsl #2]
14718 ; CHECK-GISEL-LABEL: load_single_extract_variable_index_i32:
14719 ; CHECK-GISEL: ; %bb.0:
14720 ; CHECK-GISEL-NEXT: sub sp, sp, #16
14721 ; CHECK-GISEL-NEXT: .cfi_def_cfa_offset 16
14722 ; CHECK-GISEL-NEXT: ldr q0, [x0]
14723 ; CHECK-GISEL-NEXT: mov w9, w1
14724 ; CHECK-GISEL-NEXT: mov x8, sp
14725 ; CHECK-GISEL-NEXT: and x9, x9, #0x3
14726 ; CHECK-GISEL-NEXT: str q0, [sp]
14727 ; CHECK-GISEL-NEXT: ldr w0, [x8, x9, lsl #2]
14728 ; CHECK-GISEL-NEXT: add sp, sp, #16
14729 ; CHECK-GISEL-NEXT: ret
14730 %lv = load <4 x i32>, ptr %A
14731 %e = extractelement <4 x i32> %lv, i32 %idx
14735 define i32 @load_single_extract_variable_index_v3i32_small_align(ptr %A, i32 %idx) {
14736 ; CHECK-LABEL: load_single_extract_variable_index_v3i32_small_align:
14738 ; CHECK-NEXT: mov w9, w1
14739 ; CHECK-NEXT: mov w8, #2 ; =0x2
14740 ; CHECK-NEXT: cmp x9, #2
14741 ; CHECK-NEXT: csel x8, x9, x8, lo
14742 ; CHECK-NEXT: ldr w0, [x0, x8, lsl #2]
14744 %lv = load <3 x i32>, ptr %A, align 2
14745 %e = extractelement <3 x i32> %lv, i32 %idx
14749 define i32 @load_single_extract_variable_index_v3i32_default_align(ptr %A, i32 %idx) {
14750 ; CHECK-LABEL: load_single_extract_variable_index_v3i32_default_align:
14752 ; CHECK-NEXT: mov w9, w1
14753 ; CHECK-NEXT: mov w8, #2 ; =0x2
14754 ; CHECK-NEXT: cmp x9, #2
14755 ; CHECK-NEXT: csel x8, x9, x8, lo
14756 ; CHECK-NEXT: ldr w0, [x0, x8, lsl #2]
14758 %lv = load <3 x i32>, ptr %A
14759 %e = extractelement <3 x i32> %lv, i32 %idx
14763 define i32 @load_single_extract_valid_const_index_v3i32(ptr %A, i32 %idx) {
14764 ; CHECK-LABEL: load_single_extract_valid_const_index_v3i32:
14766 ; CHECK-NEXT: ldr w0, [x0, #8]
14768 %lv = load <3 x i32>, ptr %A
14769 %e = extractelement <3 x i32> %lv, i32 2
14773 define i32 @load_single_extract_variable_index_masked_i32(ptr %A, i32 %idx) {
14774 ; SDAG-LABEL: load_single_extract_variable_index_masked_i32:
14776 ; SDAG-NEXT: and w8, w1, #0x3
14777 ; SDAG-NEXT: ldr w0, [x0, w8, uxtw #2]
14780 ; CHECK-GISEL-LABEL: load_single_extract_variable_index_masked_i32:
14781 ; CHECK-GISEL: ; %bb.0:
14782 ; CHECK-GISEL-NEXT: sub sp, sp, #16
14783 ; CHECK-GISEL-NEXT: .cfi_def_cfa_offset 16
14784 ; CHECK-GISEL-NEXT: ldr q0, [x0]
14785 ; CHECK-GISEL-NEXT: mov x8, sp
14786 ; CHECK-GISEL-NEXT: and w9, w1, #0x3
14787 ; CHECK-GISEL-NEXT: str q0, [sp]
14788 ; CHECK-GISEL-NEXT: ldr w0, [x8, w9, uxtw #2]
14789 ; CHECK-GISEL-NEXT: add sp, sp, #16
14790 ; CHECK-GISEL-NEXT: ret
14791 %idx.x = and i32 %idx, 3
14792 %lv = load <4 x i32>, ptr %A
14793 %e = extractelement <4 x i32> %lv, i32 %idx.x
14797 define i32 @load_single_extract_variable_index_masked2_i32(ptr %A, i32 %idx) {
14798 ; SDAG-LABEL: load_single_extract_variable_index_masked2_i32:
14800 ; SDAG-NEXT: and w8, w1, #0x1
14801 ; SDAG-NEXT: ldr w0, [x0, w8, uxtw #2]
14804 ; CHECK-GISEL-LABEL: load_single_extract_variable_index_masked2_i32:
14805 ; CHECK-GISEL: ; %bb.0:
14806 ; CHECK-GISEL-NEXT: sub sp, sp, #16
14807 ; CHECK-GISEL-NEXT: .cfi_def_cfa_offset 16
14808 ; CHECK-GISEL-NEXT: ldr q0, [x0]
14809 ; CHECK-GISEL-NEXT: mov x8, sp
14810 ; CHECK-GISEL-NEXT: and w9, w1, #0x1
14811 ; CHECK-GISEL-NEXT: str q0, [sp]
14812 ; CHECK-GISEL-NEXT: ldr w0, [x8, w9, uxtw #2]
14813 ; CHECK-GISEL-NEXT: add sp, sp, #16
14814 ; CHECK-GISEL-NEXT: ret
14815 %idx.x = and i32 %idx, 1
14816 %lv = load <4 x i32>, ptr %A
14817 %e = extractelement <4 x i32> %lv, i32 %idx.x