comparison clang/test/CodeGen/arm-neon-vld.c @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 0572611fdcc8
children c4bab56944e8
comparison
equal deleted inserted replaced
173:0572611fdcc8 207:2e18cbf3894f
7 7
8 #include <arm_neon.h> 8 #include <arm_neon.h>
9 9
10 // CHECK-LABEL: @test_vld1_f16_x2( 10 // CHECK-LABEL: @test_vld1_f16_x2(
11 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x4x2_t, align 8 11 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x4x2_t, align 8
12 // CHECK-A32: %struct.float16x4x2_t* noalias sret align 8 [[RETVAL:%.*]], 12 // CHECK-A32: %struct.float16x4x2_t* noalias sret(%struct.float16x4x2_t) align 8 [[RETVAL:%.*]],
13 // CHECK: [[__RET:%.*]] = alloca %struct.float16x4x2_t, align 8 13 // CHECK: [[__RET:%.*]] = alloca %struct.float16x4x2_t, align 8
14 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x4x2_t* [[__RET]] to i8* 14 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x4x2_t* [[__RET]] to i8*
15 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8* 15 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8*
16 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF:(half|i16)]]* 16 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF:(half|i16)]]*
17 // CHECK: [[VLD1XN:%.*]] = call { <4 x [[HALF]]>, <4 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x2.v4f16.p0f16|arm.neon.vld1x2.v4i16.p0i16}}([[HALF]]* [[TMP2]]) 17 // CHECK: [[VLD1XN:%.*]] = call { <4 x [[HALF]]>, <4 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x2.v4f16.p0f16|arm.neon.vld1x2.v4i16.p0i16}}([[HALF]]* [[TMP2]])
27 return vld1_f16_x2(a); 27 return vld1_f16_x2(a);
28 } 28 }
29 29
30 // CHECK-LABEL: @test_vld1_f16_x3( 30 // CHECK-LABEL: @test_vld1_f16_x3(
31 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x4x3_t, align 8 31 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x4x3_t, align 8
32 // CHECK-A32: %struct.float16x4x3_t* noalias sret align 8 [[RETVAL:%.*]], 32 // CHECK-A32: %struct.float16x4x3_t* noalias sret(%struct.float16x4x3_t) align 8 [[RETVAL:%.*]],
33 // CHECK: [[__RET:%.*]] = alloca %struct.float16x4x3_t, align 8 33 // CHECK: [[__RET:%.*]] = alloca %struct.float16x4x3_t, align 8
34 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x4x3_t* [[__RET]] to i8* 34 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x4x3_t* [[__RET]] to i8*
35 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8* 35 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8*
36 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF]]* 36 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF]]*
37 // CHECK: [[VLD1XN:%.*]] = call { <4 x [[HALF]]>, <4 x [[HALF]]>, <4 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x3.v4f16.p0f16|arm.neon.vld1x3.v4i16.p0i16}}([[HALF]]* [[TMP2]]) 37 // CHECK: [[VLD1XN:%.*]] = call { <4 x [[HALF]]>, <4 x [[HALF]]>, <4 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x3.v4f16.p0f16|arm.neon.vld1x3.v4i16.p0i16}}([[HALF]]* [[TMP2]])
47 return vld1_f16_x3(a); 47 return vld1_f16_x3(a);
48 } 48 }
49 49
50 // CHECK-LABEL: @test_vld1_f16_x4( 50 // CHECK-LABEL: @test_vld1_f16_x4(
51 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x4x4_t, align 8 51 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x4x4_t, align 8
52 // CHECK-A32: %struct.float16x4x4_t* noalias sret align 8 [[RETVAL:%.*]], 52 // CHECK-A32: %struct.float16x4x4_t* noalias sret(%struct.float16x4x4_t) align 8 [[RETVAL:%.*]],
53 // CHECK: [[__RET:%.*]] = alloca %struct.float16x4x4_t, align 8 53 // CHECK: [[__RET:%.*]] = alloca %struct.float16x4x4_t, align 8
54 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x4x4_t* [[__RET]] to i8* 54 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x4x4_t* [[__RET]] to i8*
55 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8* 55 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8*
56 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF]]* 56 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF]]*
57 // CHECK: [[VLD1XN:%.*]] = call { <4 x [[HALF]]>, <4 x [[HALF]]>, <4 x [[HALF]]>, <4 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x4.v4f16.p0f16|arm.neon.vld1x4.v4i16.p0i16}}([[HALF]]* [[TMP2]]) 57 // CHECK: [[VLD1XN:%.*]] = call { <4 x [[HALF]]>, <4 x [[HALF]]>, <4 x [[HALF]]>, <4 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x4.v4f16.p0f16|arm.neon.vld1x4.v4i16.p0i16}}([[HALF]]* [[TMP2]])
67 return vld1_f16_x4(a); 67 return vld1_f16_x4(a);
68 } 68 }
69 69
70 // CHECK-LABEL: @test_vld1_f32_x2( 70 // CHECK-LABEL: @test_vld1_f32_x2(
71 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x2x2_t, align 8 71 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x2x2_t, align 8
72 // CHECK-A32: %struct.float32x2x2_t* noalias sret align 8 [[RETVAL:%.*]], 72 // CHECK-A32: %struct.float32x2x2_t* noalias sret(%struct.float32x2x2_t) align 8 [[RETVAL:%.*]],
73 // CHECK: [[__RET:%.*]] = alloca %struct.float32x2x2_t, align 8 73 // CHECK: [[__RET:%.*]] = alloca %struct.float32x2x2_t, align 8
74 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x2x2_t* [[__RET]] to i8* 74 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x2x2_t* [[__RET]] to i8*
75 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8* 75 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8*
76 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float* 76 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float*
77 // CHECK: [[VLD1XN:%.*]] = call { <2 x float>, <2 x float> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v2f32.p0f32(float* [[TMP2]]) 77 // CHECK: [[VLD1XN:%.*]] = call { <2 x float>, <2 x float> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v2f32.p0f32(float* [[TMP2]])
87 return vld1_f32_x2(a); 87 return vld1_f32_x2(a);
88 } 88 }
89 89
90 // CHECK-LABEL: @test_vld1_f32_x3( 90 // CHECK-LABEL: @test_vld1_f32_x3(
91 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x2x3_t, align 8 91 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x2x3_t, align 8
92 // CHECK-A32: %struct.float32x2x3_t* noalias sret align 8 [[RETVAL:%.*]], 92 // CHECK-A32: %struct.float32x2x3_t* noalias sret(%struct.float32x2x3_t) align 8 [[RETVAL:%.*]],
93 // CHECK: [[__RET:%.*]] = alloca %struct.float32x2x3_t, align 8 93 // CHECK: [[__RET:%.*]] = alloca %struct.float32x2x3_t, align 8
94 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x2x3_t* [[__RET]] to i8* 94 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x2x3_t* [[__RET]] to i8*
95 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8* 95 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8*
96 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float* 96 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float*
97 // CHECK: [[VLD1XN:%.*]] = call { <2 x float>, <2 x float>, <2 x float> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v2f32.p0f32(float* [[TMP2]]) 97 // CHECK: [[VLD1XN:%.*]] = call { <2 x float>, <2 x float>, <2 x float> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v2f32.p0f32(float* [[TMP2]])
106 return vld1_f32_x3(a); 106 return vld1_f32_x3(a);
107 } 107 }
108 108
109 // CHECK-LABEL: @test_vld1_f32_x4( 109 // CHECK-LABEL: @test_vld1_f32_x4(
110 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x2x4_t, align 8 110 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x2x4_t, align 8
111 // CHECK-A32: %struct.float32x2x4_t* noalias sret align 8 [[RETVAL:%.*]], 111 // CHECK-A32: %struct.float32x2x4_t* noalias sret(%struct.float32x2x4_t) align 8 [[RETVAL:%.*]],
112 // CHECK: [[__RET:%.*]] = alloca %struct.float32x2x4_t, align 8 112 // CHECK: [[__RET:%.*]] = alloca %struct.float32x2x4_t, align 8
113 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x2x4_t* [[__RET]] to i8* 113 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x2x4_t* [[__RET]] to i8*
114 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8* 114 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8*
115 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float* 115 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float*
116 // CHECK: [[VLD1XN:%.*]] = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v2f32.p0f32(float* [[TMP2]]) 116 // CHECK: [[VLD1XN:%.*]] = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v2f32.p0f32(float* [[TMP2]])
126 return vld1_f32_x4(a); 126 return vld1_f32_x4(a);
127 } 127 }
128 128
129 // CHECK-LABEL: @test_vld1_p16_x2( 129 // CHECK-LABEL: @test_vld1_p16_x2(
130 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x4x2_t, align 8 130 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x4x2_t, align 8
131 // CHECK-A32: %struct.poly16x4x2_t* noalias sret align 8 [[RETVAL:%.*]], 131 // CHECK-A32: %struct.poly16x4x2_t* noalias sret(%struct.poly16x4x2_t) align 8 [[RETVAL:%.*]],
132 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x4x2_t, align 8 132 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x4x2_t, align 8
133 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x4x2_t* [[__RET]] to i8* 133 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x4x2_t* [[__RET]] to i8*
134 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 134 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
135 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 135 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
136 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4i16.p0i16(i16* [[TMP2]]) 136 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4i16.p0i16(i16* [[TMP2]])
146 return vld1_p16_x2(a); 146 return vld1_p16_x2(a);
147 } 147 }
148 148
149 // CHECK-LABEL: @test_vld1_p16_x3( 149 // CHECK-LABEL: @test_vld1_p16_x3(
150 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x4x3_t, align 8 150 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x4x3_t, align 8
151 // CHECK-A32: %struct.poly16x4x3_t* noalias sret align 8 [[RETVAL:%.*]], 151 // CHECK-A32: %struct.poly16x4x3_t* noalias sret(%struct.poly16x4x3_t) align 8 [[RETVAL:%.*]],
152 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x4x3_t, align 8 152 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x4x3_t, align 8
153 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x4x3_t* [[__RET]] to i8* 153 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x4x3_t* [[__RET]] to i8*
154 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 154 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
155 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 155 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
156 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4i16.p0i16(i16* [[TMP2]]) 156 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4i16.p0i16(i16* [[TMP2]])
166 return vld1_p16_x3(a); 166 return vld1_p16_x3(a);
167 } 167 }
168 168
169 // CHECK-LABEL: @test_vld1_p16_x4( 169 // CHECK-LABEL: @test_vld1_p16_x4(
170 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x4x4_t, align 8 170 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x4x4_t, align 8
171 // CHECK-A32: %struct.poly16x4x4_t* noalias sret align 8 [[RETVAL:%.*]], 171 // CHECK-A32: %struct.poly16x4x4_t* noalias sret(%struct.poly16x4x4_t) align 8 [[RETVAL:%.*]],
172 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x4x4_t, align 8 172 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x4x4_t, align 8
173 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x4x4_t* [[__RET]] to i8* 173 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x4x4_t* [[__RET]] to i8*
174 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 174 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
175 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 175 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
176 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4i16.p0i16(i16* [[TMP2]]) 176 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4i16.p0i16(i16* [[TMP2]])
186 return vld1_p16_x4(a); 186 return vld1_p16_x4(a);
187 } 187 }
188 188
189 // CHECK-LABEL: @test_vld1_p8_x2( 189 // CHECK-LABEL: @test_vld1_p8_x2(
190 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x8x2_t, align 8 190 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x8x2_t, align 8
191 // CHECK-A32: %struct.poly8x8x2_t* noalias sret align 8 [[RETVAL:%.*]], 191 // CHECK-A32: %struct.poly8x8x2_t* noalias sret(%struct.poly8x8x2_t) align 8 [[RETVAL:%.*]],
192 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x8x2_t, align 8 192 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x8x2_t, align 8
193 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x8x2_t* [[__RET]] to i8* 193 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x8x2_t* [[__RET]] to i8*
194 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i8.p0i8(i8* %a) 194 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i8.p0i8(i8* %a)
195 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8> }* 195 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8> }*
196 // CHECK: store { <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8> }* [[TMP1]] 196 // CHECK: store { <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8> }* [[TMP1]]
204 return vld1_p8_x2(a); 204 return vld1_p8_x2(a);
205 } 205 }
206 206
207 // CHECK-LABEL: @test_vld1_p8_x3( 207 // CHECK-LABEL: @test_vld1_p8_x3(
208 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x8x3_t, align 8 208 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x8x3_t, align 8
209 // CHECK-A32: %struct.poly8x8x3_t* noalias sret align 8 [[RETVAL:%.*]], 209 // CHECK-A32: %struct.poly8x8x3_t* noalias sret(%struct.poly8x8x3_t) align 8 [[RETVAL:%.*]],
210 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x8x3_t, align 8 210 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x8x3_t, align 8
211 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x8x3_t* [[__RET]] to i8* 211 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x8x3_t* [[__RET]] to i8*
212 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i8.p0i8(i8* %a) 212 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i8.p0i8(i8* %a)
213 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8> }* 213 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8> }*
214 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]] 214 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]]
222 return vld1_p8_x3(a); 222 return vld1_p8_x3(a);
223 } 223 }
224 224
225 // CHECK-LABEL: @test_vld1_p8_x4( 225 // CHECK-LABEL: @test_vld1_p8_x4(
226 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x8x4_t, align 8 226 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x8x4_t, align 8
227 // CHECK-A32: %struct.poly8x8x4_t* noalias sret align 8 [[RETVAL:%.*]], 227 // CHECK-A32: %struct.poly8x8x4_t* noalias sret(%struct.poly8x8x4_t) align 8 [[RETVAL:%.*]],
228 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x8x4_t, align 8 228 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x8x4_t, align 8
229 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x8x4_t* [[__RET]] to i8* 229 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x8x4_t* [[__RET]] to i8*
230 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i8.p0i8(i8* %a) 230 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i8.p0i8(i8* %a)
231 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }* 231 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }*
232 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]] 232 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]]
240 return vld1_p8_x4(a); 240 return vld1_p8_x4(a);
241 } 241 }
242 242
243 // CHECK-LABEL: @test_vld1_s16_x2( 243 // CHECK-LABEL: @test_vld1_s16_x2(
244 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x4x2_t, align 8 244 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x4x2_t, align 8
245 // CHECK-A32: %struct.int16x4x2_t* noalias sret align 8 [[RETVAL:%.*]], 245 // CHECK-A32: %struct.int16x4x2_t* noalias sret(%struct.int16x4x2_t) align 8 [[RETVAL:%.*]],
246 // CHECK: [[__RET:%.*]] = alloca %struct.int16x4x2_t, align 8 246 // CHECK: [[__RET:%.*]] = alloca %struct.int16x4x2_t, align 8
247 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x4x2_t* [[__RET]] to i8* 247 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x4x2_t* [[__RET]] to i8*
248 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 248 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
249 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 249 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
250 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4i16.p0i16(i16* [[TMP2]]) 250 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4i16.p0i16(i16* [[TMP2]])
260 return vld1_s16_x2(a); 260 return vld1_s16_x2(a);
261 } 261 }
262 262
263 // CHECK-LABEL: @test_vld1_s16_x3( 263 // CHECK-LABEL: @test_vld1_s16_x3(
264 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x4x3_t, align 8 264 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x4x3_t, align 8
265 // CHECK-A32: %struct.int16x4x3_t* noalias sret align 8 [[RETVAL:%.*]], 265 // CHECK-A32: %struct.int16x4x3_t* noalias sret(%struct.int16x4x3_t) align 8 [[RETVAL:%.*]],
266 // CHECK: [[__RET:%.*]] = alloca %struct.int16x4x3_t, align 8 266 // CHECK: [[__RET:%.*]] = alloca %struct.int16x4x3_t, align 8
267 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x4x3_t* [[__RET]] to i8* 267 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x4x3_t* [[__RET]] to i8*
268 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 268 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
269 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 269 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
270 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4i16.p0i16(i16* [[TMP2]]) 270 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4i16.p0i16(i16* [[TMP2]])
280 return vld1_s16_x3(a); 280 return vld1_s16_x3(a);
281 } 281 }
282 282
283 // CHECK-LABEL: @test_vld1_s16_x4( 283 // CHECK-LABEL: @test_vld1_s16_x4(
284 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x4x4_t, align 8 284 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x4x4_t, align 8
285 // CHECK-A32: %struct.int16x4x4_t* noalias sret align 8 [[RETVAL:%.*]], 285 // CHECK-A32: %struct.int16x4x4_t* noalias sret(%struct.int16x4x4_t) align 8 [[RETVAL:%.*]],
286 // CHECK: [[__RET:%.*]] = alloca %struct.int16x4x4_t, align 8 286 // CHECK: [[__RET:%.*]] = alloca %struct.int16x4x4_t, align 8
287 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x4x4_t* [[__RET]] to i8* 287 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x4x4_t* [[__RET]] to i8*
288 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 288 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
289 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 289 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
290 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4i16.p0i16(i16* [[TMP2]]) 290 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4i16.p0i16(i16* [[TMP2]])
300 return vld1_s16_x4(a); 300 return vld1_s16_x4(a);
301 } 301 }
302 302
303 // CHECK-LABEL: @test_vld1_s32_x2( 303 // CHECK-LABEL: @test_vld1_s32_x2(
304 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x2x2_t, align 8 304 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x2x2_t, align 8
305 // CHECK-A32: %struct.int32x2x2_t* noalias sret align 8 [[RETVAL:%.*]], 305 // CHECK-A32: %struct.int32x2x2_t* noalias sret(%struct.int32x2x2_t) align 8 [[RETVAL:%.*]],
306 // CHECK: [[__RET:%.*]] = alloca %struct.int32x2x2_t, align 8 306 // CHECK: [[__RET:%.*]] = alloca %struct.int32x2x2_t, align 8
307 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x2x2_t* [[__RET]] to i8* 307 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x2x2_t* [[__RET]] to i8*
308 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 308 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
309 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 309 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
310 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v2i32.p0i32(i32* [[TMP2]]) 310 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v2i32.p0i32(i32* [[TMP2]])
320 return vld1_s32_x2(a); 320 return vld1_s32_x2(a);
321 } 321 }
322 322
323 // CHECK-LABEL: @test_vld1_s32_x3( 323 // CHECK-LABEL: @test_vld1_s32_x3(
324 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x2x3_t, align 8 324 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x2x3_t, align 8
325 // CHECK-A32: %struct.int32x2x3_t* noalias sret align 8 [[RETVAL:%.*]], 325 // CHECK-A32: %struct.int32x2x3_t* noalias sret(%struct.int32x2x3_t) align 8 [[RETVAL:%.*]],
326 // CHECK: [[__RET:%.*]] = alloca %struct.int32x2x3_t, align 8 326 // CHECK: [[__RET:%.*]] = alloca %struct.int32x2x3_t, align 8
327 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x2x3_t* [[__RET]] to i8* 327 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x2x3_t* [[__RET]] to i8*
328 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 328 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
329 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 329 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
330 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v2i32.p0i32(i32* [[TMP2]]) 330 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v2i32.p0i32(i32* [[TMP2]])
340 return vld1_s32_x3(a); 340 return vld1_s32_x3(a);
341 } 341 }
342 342
343 // CHECK-LABEL: @test_vld1_s32_x4( 343 // CHECK-LABEL: @test_vld1_s32_x4(
344 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x2x4_t, align 8 344 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x2x4_t, align 8
345 // CHECK-A32: %struct.int32x2x4_t* noalias sret align 8 [[RETVAL:%.*]], 345 // CHECK-A32: %struct.int32x2x4_t* noalias sret(%struct.int32x2x4_t) align 8 [[RETVAL:%.*]],
346 // CHECK: [[__RET:%.*]] = alloca %struct.int32x2x4_t, align 8 346 // CHECK: [[__RET:%.*]] = alloca %struct.int32x2x4_t, align 8
347 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x2x4_t* [[__RET]] to i8* 347 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x2x4_t* [[__RET]] to i8*
348 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 348 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
349 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 349 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
350 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v2i32.p0i32(i32* [[TMP2]]) 350 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v2i32.p0i32(i32* [[TMP2]])
360 return vld1_s32_x4(a); 360 return vld1_s32_x4(a);
361 } 361 }
362 362
363 // CHECK-LABEL: @test_vld1_s64_x2( 363 // CHECK-LABEL: @test_vld1_s64_x2(
364 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x1x2_t, align 8 364 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x1x2_t, align 8
365 // CHECK-A32: %struct.int64x1x2_t* noalias sret align 8 [[RETVAL:%.*]], 365 // CHECK-A32: %struct.int64x1x2_t* noalias sret(%struct.int64x1x2_t) align 8 [[RETVAL:%.*]],
366 // CHECK: [[__RET:%.*]] = alloca %struct.int64x1x2_t, align 8 366 // CHECK: [[__RET:%.*]] = alloca %struct.int64x1x2_t, align 8
367 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x1x2_t* [[__RET]] to i8* 367 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x1x2_t* [[__RET]] to i8*
368 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 368 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
369 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 369 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
370 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v1i64.p0i64(i64* [[TMP2]]) 370 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v1i64.p0i64(i64* [[TMP2]])
380 return vld1_s64_x2(a); 380 return vld1_s64_x2(a);
381 } 381 }
382 382
383 // CHECK-LABEL: @test_vld1_s64_x3( 383 // CHECK-LABEL: @test_vld1_s64_x3(
384 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x1x3_t, align 8 384 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x1x3_t, align 8
385 // CHECK-A32: %struct.int64x1x3_t* noalias sret align 8 [[RETVAL:%.*]], 385 // CHECK-A32: %struct.int64x1x3_t* noalias sret(%struct.int64x1x3_t) align 8 [[RETVAL:%.*]],
386 // CHECK: [[__RET:%.*]] = alloca %struct.int64x1x3_t, align 8 386 // CHECK: [[__RET:%.*]] = alloca %struct.int64x1x3_t, align 8
387 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x1x3_t* [[__RET]] to i8* 387 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x1x3_t* [[__RET]] to i8*
388 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 388 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
389 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 389 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
390 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v1i64.p0i64(i64* [[TMP2]]) 390 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v1i64.p0i64(i64* [[TMP2]])
400 return vld1_s64_x3(a); 400 return vld1_s64_x3(a);
401 } 401 }
402 402
403 // CHECK-LABEL: @test_vld1_s64_x4( 403 // CHECK-LABEL: @test_vld1_s64_x4(
404 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x1x4_t, align 8 404 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x1x4_t, align 8
405 // CHECK-A32: %struct.int64x1x4_t* noalias sret align 8 [[RETVAL:%.*]], 405 // CHECK-A32: %struct.int64x1x4_t* noalias sret(%struct.int64x1x4_t) align 8 [[RETVAL:%.*]],
406 // CHECK: [[__RET:%.*]] = alloca %struct.int64x1x4_t, align 8 406 // CHECK: [[__RET:%.*]] = alloca %struct.int64x1x4_t, align 8
407 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x1x4_t* [[__RET]] to i8* 407 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x1x4_t* [[__RET]] to i8*
408 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 408 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
409 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 409 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
410 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v1i64.p0i64(i64* [[TMP2]]) 410 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v1i64.p0i64(i64* [[TMP2]])
420 return vld1_s64_x4(a); 420 return vld1_s64_x4(a);
421 } 421 }
422 422
423 // CHECK-LABEL: @test_vld1_s8_x2( 423 // CHECK-LABEL: @test_vld1_s8_x2(
424 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x8x2_t, align 8 424 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x8x2_t, align 8
425 // CHECK-A32: %struct.int8x8x2_t* noalias sret align 8 [[RETVAL:%.*]], 425 // CHECK-A32: %struct.int8x8x2_t* noalias sret(%struct.int8x8x2_t) align 8 [[RETVAL:%.*]],
426 // CHECK: [[__RET:%.*]] = alloca %struct.int8x8x2_t, align 8 426 // CHECK: [[__RET:%.*]] = alloca %struct.int8x8x2_t, align 8
427 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x8x2_t* [[__RET]] to i8* 427 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x8x2_t* [[__RET]] to i8*
428 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i8.p0i8(i8* %a) 428 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i8.p0i8(i8* %a)
429 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8> }* 429 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8> }*
430 // CHECK: store { <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8> }* [[TMP1]] 430 // CHECK: store { <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8> }* [[TMP1]]
438 return vld1_s8_x2(a); 438 return vld1_s8_x2(a);
439 } 439 }
440 440
441 // CHECK-LABEL: @test_vld1_s8_x3( 441 // CHECK-LABEL: @test_vld1_s8_x3(
442 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x8x3_t, align 8 442 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x8x3_t, align 8
443 // CHECK-A32: %struct.int8x8x3_t* noalias sret align 8 [[RETVAL:%.*]], 443 // CHECK-A32: %struct.int8x8x3_t* noalias sret(%struct.int8x8x3_t) align 8 [[RETVAL:%.*]],
444 // CHECK: [[__RET:%.*]] = alloca %struct.int8x8x3_t, align 8 444 // CHECK: [[__RET:%.*]] = alloca %struct.int8x8x3_t, align 8
445 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x8x3_t* [[__RET]] to i8* 445 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x8x3_t* [[__RET]] to i8*
446 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i8.p0i8(i8* %a) 446 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i8.p0i8(i8* %a)
447 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8> }* 447 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8> }*
448 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]] 448 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]]
456 return vld1_s8_x3(a); 456 return vld1_s8_x3(a);
457 } 457 }
458 458
459 // CHECK-LABEL: @test_vld1_s8_x4( 459 // CHECK-LABEL: @test_vld1_s8_x4(
460 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x8x4_t, align 8 460 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x8x4_t, align 8
461 // CHECK-A32: %struct.int8x8x4_t* noalias sret align 8 [[RETVAL:%.*]], 461 // CHECK-A32: %struct.int8x8x4_t* noalias sret(%struct.int8x8x4_t) align 8 [[RETVAL:%.*]],
462 // CHECK: [[__RET:%.*]] = alloca %struct.int8x8x4_t, align 8 462 // CHECK: [[__RET:%.*]] = alloca %struct.int8x8x4_t, align 8
463 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x8x4_t* [[__RET]] to i8* 463 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x8x4_t* [[__RET]] to i8*
464 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i8.p0i8(i8* %a) 464 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i8.p0i8(i8* %a)
465 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }* 465 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }*
466 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]] 466 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]]
474 return vld1_s8_x4(a); 474 return vld1_s8_x4(a);
475 } 475 }
476 476
477 // CHECK-LABEL: @test_vld1_u16_x2( 477 // CHECK-LABEL: @test_vld1_u16_x2(
478 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x4x2_t, align 8 478 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x4x2_t, align 8
479 // CHECK-A32: %struct.uint16x4x2_t* noalias sret align 8 [[RETVAL:%.*]], 479 // CHECK-A32: %struct.uint16x4x2_t* noalias sret(%struct.uint16x4x2_t) align 8 [[RETVAL:%.*]],
480 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x4x2_t, align 8 480 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x4x2_t, align 8
481 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x4x2_t* [[__RET]] to i8* 481 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x4x2_t* [[__RET]] to i8*
482 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 482 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
483 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 483 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
484 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4i16.p0i16(i16* [[TMP2]]) 484 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4i16.p0i16(i16* [[TMP2]])
494 return vld1_u16_x2(a); 494 return vld1_u16_x2(a);
495 } 495 }
496 496
497 // CHECK-LABEL: @test_vld1_u16_x3( 497 // CHECK-LABEL: @test_vld1_u16_x3(
498 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x4x3_t, align 8 498 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x4x3_t, align 8
499 // CHECK-A32: %struct.uint16x4x3_t* noalias sret align 8 [[RETVAL:%.*]], 499 // CHECK-A32: %struct.uint16x4x3_t* noalias sret(%struct.uint16x4x3_t) align 8 [[RETVAL:%.*]],
500 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x4x3_t, align 8 500 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x4x3_t, align 8
501 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x4x3_t* [[__RET]] to i8* 501 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x4x3_t* [[__RET]] to i8*
502 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 502 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
503 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 503 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
504 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4i16.p0i16(i16* [[TMP2]]) 504 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4i16.p0i16(i16* [[TMP2]])
514 return vld1_u16_x3(a); 514 return vld1_u16_x3(a);
515 } 515 }
516 516
517 // CHECK-LABEL: @test_vld1_u16_x4( 517 // CHECK-LABEL: @test_vld1_u16_x4(
518 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x4x4_t, align 8 518 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x4x4_t, align 8
519 // CHECK-A32: %struct.uint16x4x4_t* noalias sret align 8 [[RETVAL:%.*]], 519 // CHECK-A32: %struct.uint16x4x4_t* noalias sret(%struct.uint16x4x4_t) align 8 [[RETVAL:%.*]],
520 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x4x4_t, align 8 520 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x4x4_t, align 8
521 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x4x4_t* [[__RET]] to i8* 521 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x4x4_t* [[__RET]] to i8*
522 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 522 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
523 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 523 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
524 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4i16.p0i16(i16* [[TMP2]]) 524 // CHECK: [[VLD1XN:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4i16.p0i16(i16* [[TMP2]])
534 return vld1_u16_x4(a); 534 return vld1_u16_x4(a);
535 } 535 }
536 536
537 // CHECK-LABEL: @test_vld1_u32_x2( 537 // CHECK-LABEL: @test_vld1_u32_x2(
538 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x2x2_t, align 8 538 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x2x2_t, align 8
539 // CHECK-A32: %struct.uint32x2x2_t* noalias sret align 8 [[RETVAL:%.*]], 539 // CHECK-A32: %struct.uint32x2x2_t* noalias sret(%struct.uint32x2x2_t) align 8 [[RETVAL:%.*]],
540 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x2x2_t, align 8 540 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x2x2_t, align 8
541 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x2x2_t* [[__RET]] to i8* 541 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x2x2_t* [[__RET]] to i8*
542 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 542 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
543 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 543 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
544 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v2i32.p0i32(i32* [[TMP2]]) 544 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v2i32.p0i32(i32* [[TMP2]])
554 return vld1_u32_x2(a); 554 return vld1_u32_x2(a);
555 } 555 }
556 556
557 // CHECK-LABEL: @test_vld1_u32_x3( 557 // CHECK-LABEL: @test_vld1_u32_x3(
558 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x2x3_t, align 8 558 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x2x3_t, align 8
559 // CHECK-A32: %struct.uint32x2x3_t* noalias sret align 8 [[RETVAL:%.*]], 559 // CHECK-A32: %struct.uint32x2x3_t* noalias sret(%struct.uint32x2x3_t) align 8 [[RETVAL:%.*]],
560 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x2x3_t, align 8 560 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x2x3_t, align 8
561 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x2x3_t* [[__RET]] to i8* 561 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x2x3_t* [[__RET]] to i8*
562 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 562 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
563 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 563 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
564 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v2i32.p0i32(i32* [[TMP2]]) 564 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v2i32.p0i32(i32* [[TMP2]])
574 return vld1_u32_x3(a); 574 return vld1_u32_x3(a);
575 } 575 }
576 576
577 // CHECK-LABEL: @test_vld1_u32_x4( 577 // CHECK-LABEL: @test_vld1_u32_x4(
578 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x2x4_t, align 8 578 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x2x4_t, align 8
579 // CHECK-A32: %struct.uint32x2x4_t* noalias sret align 8 [[RETVAL:%.*]], 579 // CHECK-A32: %struct.uint32x2x4_t* noalias sret(%struct.uint32x2x4_t) align 8 [[RETVAL:%.*]],
580 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x2x4_t, align 8 580 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x2x4_t, align 8
581 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x2x4_t* [[__RET]] to i8* 581 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x2x4_t* [[__RET]] to i8*
582 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 582 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
583 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 583 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
584 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v2i32.p0i32(i32* [[TMP2]]) 584 // CHECK: [[VLD1XN:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v2i32.p0i32(i32* [[TMP2]])
594 return vld1_u32_x4(a); 594 return vld1_u32_x4(a);
595 } 595 }
596 596
597 // CHECK-LABEL: @test_vld1_u64_x2( 597 // CHECK-LABEL: @test_vld1_u64_x2(
598 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x1x2_t, align 8 598 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x1x2_t, align 8
599 // CHECK-A32: %struct.uint64x1x2_t* noalias sret align 8 [[RETVAL:%.*]], 599 // CHECK-A32: %struct.uint64x1x2_t* noalias sret(%struct.uint64x1x2_t) align 8 [[RETVAL:%.*]],
600 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x1x2_t, align 8 600 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x1x2_t, align 8
601 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x1x2_t* [[__RET]] to i8* 601 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x1x2_t* [[__RET]] to i8*
602 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 602 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
603 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 603 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
604 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v1i64.p0i64(i64* [[TMP2]]) 604 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v1i64.p0i64(i64* [[TMP2]])
614 return vld1_u64_x2(a); 614 return vld1_u64_x2(a);
615 } 615 }
616 616
617 // CHECK-LABEL: @test_vld1_u64_x3( 617 // CHECK-LABEL: @test_vld1_u64_x3(
618 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x1x3_t, align 8 618 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x1x3_t, align 8
619 // CHECK-A32: %struct.uint64x1x3_t* noalias sret align 8 [[RETVAL:%.*]], 619 // CHECK-A32: %struct.uint64x1x3_t* noalias sret(%struct.uint64x1x3_t) align 8 [[RETVAL:%.*]],
620 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x1x3_t, align 8 620 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x1x3_t, align 8
621 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x1x3_t* [[__RET]] to i8* 621 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x1x3_t* [[__RET]] to i8*
622 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 622 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
623 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 623 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
624 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v1i64.p0i64(i64* [[TMP2]]) 624 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v1i64.p0i64(i64* [[TMP2]])
634 return vld1_u64_x3(a); 634 return vld1_u64_x3(a);
635 } 635 }
636 636
637 // CHECK-LABEL: @test_vld1_u64_x4( 637 // CHECK-LABEL: @test_vld1_u64_x4(
638 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x1x4_t, align 8 638 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x1x4_t, align 8
639 // CHECK-A32: %struct.uint64x1x4_t* noalias sret align 8 [[RETVAL:%.*]], 639 // CHECK-A32: %struct.uint64x1x4_t* noalias sret(%struct.uint64x1x4_t) align 8 [[RETVAL:%.*]],
640 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x1x4_t, align 8 640 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x1x4_t, align 8
641 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x1x4_t* [[__RET]] to i8* 641 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x1x4_t* [[__RET]] to i8*
642 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 642 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
643 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 643 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
644 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v1i64.p0i64(i64* [[TMP2]]) 644 // CHECK: [[VLD1XN:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v1i64.p0i64(i64* [[TMP2]])
654 return vld1_u64_x4(a); 654 return vld1_u64_x4(a);
655 } 655 }
656 656
657 // CHECK-LABEL: @test_vld1_u8_x2( 657 // CHECK-LABEL: @test_vld1_u8_x2(
658 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x8x2_t, align 8 658 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x8x2_t, align 8
659 // CHECK-A32: %struct.uint8x8x2_t* noalias sret align 8 [[RETVAL:%.*]], 659 // CHECK-A32: %struct.uint8x8x2_t* noalias sret(%struct.uint8x8x2_t) align 8 [[RETVAL:%.*]],
660 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x8x2_t, align 8 660 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x8x2_t, align 8
661 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x8x2_t* [[__RET]] to i8* 661 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x8x2_t* [[__RET]] to i8*
662 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i8.p0i8(i8* %a) 662 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i8.p0i8(i8* %a)
663 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8> }* 663 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8> }*
664 // CHECK: store { <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8> }* [[TMP1]] 664 // CHECK: store { <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8> }* [[TMP1]]
672 return vld1_u8_x2(a); 672 return vld1_u8_x2(a);
673 } 673 }
674 674
675 // CHECK-LABEL: @test_vld1_u8_x3( 675 // CHECK-LABEL: @test_vld1_u8_x3(
676 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x8x3_t, align 8 676 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x8x3_t, align 8
677 // CHECK-A32: %struct.uint8x8x3_t* noalias sret align 8 [[RETVAL:%.*]], 677 // CHECK-A32: %struct.uint8x8x3_t* noalias sret(%struct.uint8x8x3_t) align 8 [[RETVAL:%.*]],
678 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x8x3_t, align 8 678 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x8x3_t, align 8
679 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x8x3_t* [[__RET]] to i8* 679 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x8x3_t* [[__RET]] to i8*
680 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i8.p0i8(i8* %a) 680 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i8.p0i8(i8* %a)
681 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8> }* 681 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8> }*
682 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]] 682 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]]
690 return vld1_u8_x3(a); 690 return vld1_u8_x3(a);
691 } 691 }
692 692
693 // CHECK-LABEL: @test_vld1_u8_x4( 693 // CHECK-LABEL: @test_vld1_u8_x4(
694 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x8x4_t, align 8 694 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x8x4_t, align 8
695 // CHECK-A32: %struct.uint8x8x4_t* noalias sret align 8 [[RETVAL:%.*]], 695 // CHECK-A32: %struct.uint8x8x4_t* noalias sret(%struct.uint8x8x4_t) align 8 [[RETVAL:%.*]],
696 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x8x4_t, align 8 696 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x8x4_t, align 8
697 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x8x4_t* [[__RET]] to i8* 697 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x8x4_t* [[__RET]] to i8*
698 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i8.p0i8(i8* %a) 698 // CHECK: [[VLD1XN:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i8.p0i8(i8* %a)
699 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }* 699 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }*
700 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]] 700 // CHECK: store { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[VLD1XN]], { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }* [[TMP1]]
708 return vld1_u8_x4(a); 708 return vld1_u8_x4(a);
709 } 709 }
710 710
711 // CHECK-LABEL: @test_vld1q_f16_x2( 711 // CHECK-LABEL: @test_vld1q_f16_x2(
712 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x8x2_t, align 16 712 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x8x2_t, align 16
713 // CHECK-A32: %struct.float16x8x2_t* noalias sret align 8 [[RETVAL:%.*]], 713 // CHECK-A32: %struct.float16x8x2_t* noalias sret(%struct.float16x8x2_t) align 8 [[RETVAL:%.*]],
714 // CHECK: [[__RET:%.*]] = alloca %struct.float16x8x2_t, align {{16|8}} 714 // CHECK: [[__RET:%.*]] = alloca %struct.float16x8x2_t, align {{16|8}}
715 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x8x2_t* [[__RET]] to i8* 715 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x8x2_t* [[__RET]] to i8*
716 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8* 716 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8*
717 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF]]* 717 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF]]*
718 // CHECK: [[VLD1XN:%.*]] = call { <8 x [[HALF]]>, <8 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x2.v8f16.p0f16|arm.neon.vld1x2.v8i16.p0i16}}([[HALF]]* [[TMP2]]) 718 // CHECK: [[VLD1XN:%.*]] = call { <8 x [[HALF]]>, <8 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x2.v8f16.p0f16|arm.neon.vld1x2.v8i16.p0i16}}([[HALF]]* [[TMP2]])
728 return vld1q_f16_x2(a); 728 return vld1q_f16_x2(a);
729 } 729 }
730 730
731 // CHECK-LABEL: @test_vld1q_f16_x3( 731 // CHECK-LABEL: @test_vld1q_f16_x3(
732 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x8x3_t, align 16 732 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x8x3_t, align 16
733 // CHECK-A32: %struct.float16x8x3_t* noalias sret align 8 [[RETVAL:%.*]], 733 // CHECK-A32: %struct.float16x8x3_t* noalias sret(%struct.float16x8x3_t) align 8 [[RETVAL:%.*]],
734 // CHECK: [[__RET:%.*]] = alloca %struct.float16x8x3_t, align {{16|8}} 734 // CHECK: [[__RET:%.*]] = alloca %struct.float16x8x3_t, align {{16|8}}
735 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x8x3_t* [[__RET]] to i8* 735 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x8x3_t* [[__RET]] to i8*
736 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8* 736 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8*
737 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF]]* 737 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF]]*
738 // CHECK: [[VLD1XN:%.*]] = call { <8 x [[HALF]]>, <8 x [[HALF]]>, <8 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x3.v8f16.p0f16|arm.neon.vld1x3.v8i16.p0i16}}([[HALF]]* [[TMP2]]) 738 // CHECK: [[VLD1XN:%.*]] = call { <8 x [[HALF]]>, <8 x [[HALF]]>, <8 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x3.v8f16.p0f16|arm.neon.vld1x3.v8i16.p0i16}}([[HALF]]* [[TMP2]])
748 return vld1q_f16_x3(a); 748 return vld1q_f16_x3(a);
749 } 749 }
750 750
751 // CHECK-LABEL: @test_vld1q_f16_x4( 751 // CHECK-LABEL: @test_vld1q_f16_x4(
752 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x8x4_t, align 16 752 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float16x8x4_t, align 16
753 // CHECK-A32: %struct.float16x8x4_t* noalias sret align 8 [[RETVAL:%.*]], 753 // CHECK-A32: %struct.float16x8x4_t* noalias sret(%struct.float16x8x4_t) align 8 [[RETVAL:%.*]],
754 // CHECK: [[__RET:%.*]] = alloca %struct.float16x8x4_t, align {{16|8}} 754 // CHECK: [[__RET:%.*]] = alloca %struct.float16x8x4_t, align {{16|8}}
755 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x8x4_t* [[__RET]] to i8* 755 // CHECK: [[TMP0:%.*]] = bitcast %struct.float16x8x4_t* [[__RET]] to i8*
756 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8* 756 // CHECK: [[TMP1:%.*]] = bitcast half* %a to i8*
757 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF]]* 757 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to [[HALF]]*
758 // CHECK: [[VLD1XN:%.*]] = call { <8 x [[HALF]]>, <8 x [[HALF]]>, <8 x [[HALF]]>, <8 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x4.v8f16.p0f16|arm.neon.vld1x4.v8i16.p0i16}}([[HALF]]* [[TMP2]]) 758 // CHECK: [[VLD1XN:%.*]] = call { <8 x [[HALF]]>, <8 x [[HALF]]>, <8 x [[HALF]]>, <8 x [[HALF]]> } @llvm.{{aarch64.neon.ld1x4.v8f16.p0f16|arm.neon.vld1x4.v8i16.p0i16}}([[HALF]]* [[TMP2]])
768 return vld1q_f16_x4(a); 768 return vld1q_f16_x4(a);
769 } 769 }
770 770
771 // CHECK-LABEL: @test_vld1q_f32_x2( 771 // CHECK-LABEL: @test_vld1q_f32_x2(
772 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x4x2_t, align 16 772 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x4x2_t, align 16
773 // CHECK-A32: %struct.float32x4x2_t* noalias sret align 8 [[RETVAL:%.*]], 773 // CHECK-A32: %struct.float32x4x2_t* noalias sret(%struct.float32x4x2_t) align 8 [[RETVAL:%.*]],
774 // CHECK: [[__RET:%.*]] = alloca %struct.float32x4x2_t, align {{16|8}} 774 // CHECK: [[__RET:%.*]] = alloca %struct.float32x4x2_t, align {{16|8}}
775 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x4x2_t* [[__RET]] to i8* 775 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x4x2_t* [[__RET]] to i8*
776 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8* 776 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8*
777 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float* 777 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float*
778 // CHECK: [[VLD1XN:%.*]] = call { <4 x float>, <4 x float> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4f32.p0f32(float* [[TMP2]]) 778 // CHECK: [[VLD1XN:%.*]] = call { <4 x float>, <4 x float> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4f32.p0f32(float* [[TMP2]])
788 return vld1q_f32_x2(a); 788 return vld1q_f32_x2(a);
789 } 789 }
790 790
791 // CHECK-LABEL: @test_vld1q_f32_x3( 791 // CHECK-LABEL: @test_vld1q_f32_x3(
792 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x4x3_t, align 16 792 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x4x3_t, align 16
793 // CHECK-A32: %struct.float32x4x3_t* noalias sret align 8 [[RETVAL:%.*]], 793 // CHECK-A32: %struct.float32x4x3_t* noalias sret(%struct.float32x4x3_t) align 8 [[RETVAL:%.*]],
794 // CHECK: [[__RET:%.*]] = alloca %struct.float32x4x3_t, align {{16|8}} 794 // CHECK: [[__RET:%.*]] = alloca %struct.float32x4x3_t, align {{16|8}}
795 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x4x3_t* [[__RET]] to i8* 795 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x4x3_t* [[__RET]] to i8*
796 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8* 796 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8*
797 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float* 797 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float*
798 // CHECK: [[VLD1XN:%.*]] = call { <4 x float>, <4 x float>, <4 x float> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4f32.p0f32(float* [[TMP2]]) 798 // CHECK: [[VLD1XN:%.*]] = call { <4 x float>, <4 x float>, <4 x float> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4f32.p0f32(float* [[TMP2]])
808 return vld1q_f32_x3(a); 808 return vld1q_f32_x3(a);
809 } 809 }
810 810
811 // CHECK-LABEL: @test_vld1q_f32_x4( 811 // CHECK-LABEL: @test_vld1q_f32_x4(
812 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x4x4_t, align 16 812 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.float32x4x4_t, align 16
813 // CHECK-A32: %struct.float32x4x4_t* noalias sret align 8 [[RETVAL:%.*]], 813 // CHECK-A32: %struct.float32x4x4_t* noalias sret(%struct.float32x4x4_t) align 8 [[RETVAL:%.*]],
814 // CHECK: [[__RET:%.*]] = alloca %struct.float32x4x4_t, align {{16|8}} 814 // CHECK: [[__RET:%.*]] = alloca %struct.float32x4x4_t, align {{16|8}}
815 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x4x4_t* [[__RET]] to i8* 815 // CHECK: [[TMP0:%.*]] = bitcast %struct.float32x4x4_t* [[__RET]] to i8*
816 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8* 816 // CHECK: [[TMP1:%.*]] = bitcast float* %a to i8*
817 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float* 817 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to float*
818 // CHECK: [[VLD1XN:%.*]] = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4f32.p0f32(float* [[TMP2]]) 818 // CHECK: [[VLD1XN:%.*]] = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4f32.p0f32(float* [[TMP2]])
828 return vld1q_f32_x4(a); 828 return vld1q_f32_x4(a);
829 } 829 }
830 830
831 // CHECK-LABEL: @test_vld1q_p16_x2( 831 // CHECK-LABEL: @test_vld1q_p16_x2(
832 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x8x2_t, align 16 832 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x8x2_t, align 16
833 // CHECK-A32: %struct.poly16x8x2_t* noalias sret align 8 [[RETVAL:%.*]], 833 // CHECK-A32: %struct.poly16x8x2_t* noalias sret(%struct.poly16x8x2_t) align 8 [[RETVAL:%.*]],
834 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x8x2_t, align {{16|8}} 834 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x8x2_t, align {{16|8}}
835 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x8x2_t* [[__RET]] to i8* 835 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x8x2_t* [[__RET]] to i8*
836 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 836 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
837 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 837 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
838 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i16.p0i16(i16* [[TMP2]]) 838 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i16.p0i16(i16* [[TMP2]])
848 return vld1q_p16_x2(a); 848 return vld1q_p16_x2(a);
849 } 849 }
850 850
851 // CHECK-LABEL: @test_vld1q_p16_x3( 851 // CHECK-LABEL: @test_vld1q_p16_x3(
852 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x8x3_t, align 16 852 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x8x3_t, align 16
853 // CHECK-A32: %struct.poly16x8x3_t* noalias sret align 8 [[RETVAL:%.*]], 853 // CHECK-A32: %struct.poly16x8x3_t* noalias sret(%struct.poly16x8x3_t) align 8 [[RETVAL:%.*]],
854 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x8x3_t, align {{16|8}} 854 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x8x3_t, align {{16|8}}
855 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x8x3_t* [[__RET]] to i8* 855 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x8x3_t* [[__RET]] to i8*
856 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 856 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
857 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 857 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
858 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i16.p0i16(i16* [[TMP2]]) 858 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i16.p0i16(i16* [[TMP2]])
868 return vld1q_p16_x3(a); 868 return vld1q_p16_x3(a);
869 } 869 }
870 870
871 // CHECK-LABEL: @test_vld1q_p16_x4( 871 // CHECK-LABEL: @test_vld1q_p16_x4(
872 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x8x4_t, align 16 872 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly16x8x4_t, align 16
873 // CHECK-A32: %struct.poly16x8x4_t* noalias sret align 8 [[RETVAL:%.*]], 873 // CHECK-A32: %struct.poly16x8x4_t* noalias sret(%struct.poly16x8x4_t) align 8 [[RETVAL:%.*]],
874 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x8x4_t, align {{16|8}} 874 // CHECK: [[__RET:%.*]] = alloca %struct.poly16x8x4_t, align {{16|8}}
875 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x8x4_t* [[__RET]] to i8* 875 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly16x8x4_t* [[__RET]] to i8*
876 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 876 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
877 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 877 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
878 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i16.p0i16(i16* [[TMP2]]) 878 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i16.p0i16(i16* [[TMP2]])
888 return vld1q_p16_x4(a); 888 return vld1q_p16_x4(a);
889 } 889 }
890 890
891 // CHECK-LABEL: @test_vld1q_p8_x2( 891 // CHECK-LABEL: @test_vld1q_p8_x2(
892 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x16x2_t, align 16 892 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x16x2_t, align 16
893 // CHECK-A32: %struct.poly8x16x2_t* noalias sret align 8 [[RETVAL:%.*]], 893 // CHECK-A32: %struct.poly8x16x2_t* noalias sret(%struct.poly8x16x2_t) align 8 [[RETVAL:%.*]],
894 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x16x2_t, align {{16|8}} 894 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x16x2_t, align {{16|8}}
895 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x16x2_t* [[__RET]] to i8* 895 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x16x2_t* [[__RET]] to i8*
896 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v16i8.p0i8(i8* %a) 896 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v16i8.p0i8(i8* %a)
897 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8> }* 897 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8> }*
898 // CHECK: store { <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8> }* [[TMP1]] 898 // CHECK: store { <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8> }* [[TMP1]]
906 return vld1q_p8_x2(a); 906 return vld1q_p8_x2(a);
907 } 907 }
908 908
909 // CHECK-LABEL: @test_vld1q_p8_x3( 909 // CHECK-LABEL: @test_vld1q_p8_x3(
910 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x16x3_t, align 16 910 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x16x3_t, align 16
911 // CHECK-A32: %struct.poly8x16x3_t* noalias sret align 8 [[RETVAL:%.*]], 911 // CHECK-A32: %struct.poly8x16x3_t* noalias sret(%struct.poly8x16x3_t) align 8 [[RETVAL:%.*]],
912 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x16x3_t, align {{16|8}} 912 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x16x3_t, align {{16|8}}
913 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x16x3_t* [[__RET]] to i8* 913 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x16x3_t* [[__RET]] to i8*
914 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v16i8.p0i8(i8* %a) 914 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v16i8.p0i8(i8* %a)
915 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8> }* 915 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8> }*
916 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]] 916 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]]
924 return vld1q_p8_x3(a); 924 return vld1q_p8_x3(a);
925 } 925 }
926 926
927 // CHECK-LABEL: @test_vld1q_p8_x4( 927 // CHECK-LABEL: @test_vld1q_p8_x4(
928 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x16x4_t, align 16 928 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.poly8x16x4_t, align 16
929 // CHECK-A32: %struct.poly8x16x4_t* noalias sret align 8 [[RETVAL:%.*]], 929 // CHECK-A32: %struct.poly8x16x4_t* noalias sret(%struct.poly8x16x4_t) align 8 [[RETVAL:%.*]],
930 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x16x4_t, align {{16|8}} 930 // CHECK: [[__RET:%.*]] = alloca %struct.poly8x16x4_t, align {{16|8}}
931 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x16x4_t* [[__RET]] to i8* 931 // CHECK: [[TMP0:%.*]] = bitcast %struct.poly8x16x4_t* [[__RET]] to i8*
932 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v16i8.p0i8(i8* %a) 932 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v16i8.p0i8(i8* %a)
933 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }* 933 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }*
934 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]] 934 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]]
942 return vld1q_p8_x4(a); 942 return vld1q_p8_x4(a);
943 } 943 }
944 944
945 // CHECK-LABEL: @test_vld1q_s16_x2( 945 // CHECK-LABEL: @test_vld1q_s16_x2(
946 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x8x2_t, align 16 946 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x8x2_t, align 16
947 // CHECK-A32: %struct.int16x8x2_t* noalias sret align 8 [[RETVAL:%.*]], 947 // CHECK-A32: %struct.int16x8x2_t* noalias sret(%struct.int16x8x2_t) align 8 [[RETVAL:%.*]],
948 // CHECK: [[__RET:%.*]] = alloca %struct.int16x8x2_t, align {{16|8}} 948 // CHECK: [[__RET:%.*]] = alloca %struct.int16x8x2_t, align {{16|8}}
949 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x8x2_t* [[__RET]] to i8* 949 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x8x2_t* [[__RET]] to i8*
950 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 950 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
951 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 951 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
952 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i16.p0i16(i16* [[TMP2]]) 952 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i16.p0i16(i16* [[TMP2]])
962 return vld1q_s16_x2(a); 962 return vld1q_s16_x2(a);
963 } 963 }
964 964
965 // CHECK-LABEL: @test_vld1q_s16_x3( 965 // CHECK-LABEL: @test_vld1q_s16_x3(
966 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x8x3_t, align 16 966 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x8x3_t, align 16
967 // CHECK-A32: %struct.int16x8x3_t* noalias sret align 8 [[RETVAL:%.*]], 967 // CHECK-A32: %struct.int16x8x3_t* noalias sret(%struct.int16x8x3_t) align 8 [[RETVAL:%.*]],
968 // CHECK: [[__RET:%.*]] = alloca %struct.int16x8x3_t, align {{16|8}} 968 // CHECK: [[__RET:%.*]] = alloca %struct.int16x8x3_t, align {{16|8}}
969 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x8x3_t* [[__RET]] to i8* 969 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x8x3_t* [[__RET]] to i8*
970 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 970 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
971 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 971 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
972 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i16.p0i16(i16* [[TMP2]]) 972 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i16.p0i16(i16* [[TMP2]])
982 return vld1q_s16_x3(a); 982 return vld1q_s16_x3(a);
983 } 983 }
984 984
985 // CHECK-LABEL: @test_vld1q_s16_x4( 985 // CHECK-LABEL: @test_vld1q_s16_x4(
986 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x8x4_t, align 16 986 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int16x8x4_t, align 16
987 // CHECK-A32: %struct.int16x8x4_t* noalias sret align 8 [[RETVAL:%.*]], 987 // CHECK-A32: %struct.int16x8x4_t* noalias sret(%struct.int16x8x4_t) align 8 [[RETVAL:%.*]],
988 // CHECK: [[__RET:%.*]] = alloca %struct.int16x8x4_t, align {{16|8}} 988 // CHECK: [[__RET:%.*]] = alloca %struct.int16x8x4_t, align {{16|8}}
989 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x8x4_t* [[__RET]] to i8* 989 // CHECK: [[TMP0:%.*]] = bitcast %struct.int16x8x4_t* [[__RET]] to i8*
990 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 990 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
991 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 991 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
992 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i16.p0i16(i16* [[TMP2]]) 992 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i16.p0i16(i16* [[TMP2]])
1002 return vld1q_s16_x4(a); 1002 return vld1q_s16_x4(a);
1003 } 1003 }
1004 1004
1005 // CHECK-LABEL: @test_vld1q_s32_x2( 1005 // CHECK-LABEL: @test_vld1q_s32_x2(
1006 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x4x2_t, align 16 1006 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x4x2_t, align 16
1007 // CHECK-A32: %struct.int32x4x2_t* noalias sret align 8 [[RETVAL:%.*]], 1007 // CHECK-A32: %struct.int32x4x2_t* noalias sret(%struct.int32x4x2_t) align 8 [[RETVAL:%.*]],
1008 // CHECK: [[__RET:%.*]] = alloca %struct.int32x4x2_t, align {{16|8}} 1008 // CHECK: [[__RET:%.*]] = alloca %struct.int32x4x2_t, align {{16|8}}
1009 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x4x2_t* [[__RET]] to i8* 1009 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x4x2_t* [[__RET]] to i8*
1010 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 1010 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
1011 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 1011 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
1012 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4i32.p0i32(i32* [[TMP2]]) 1012 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4i32.p0i32(i32* [[TMP2]])
1022 return vld1q_s32_x2(a); 1022 return vld1q_s32_x2(a);
1023 } 1023 }
1024 1024
1025 // CHECK-LABEL: @test_vld1q_s32_x3( 1025 // CHECK-LABEL: @test_vld1q_s32_x3(
1026 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x4x3_t, align 16 1026 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x4x3_t, align 16
1027 // CHECK-A32: %struct.int32x4x3_t* noalias sret align 8 [[RETVAL:%.*]], 1027 // CHECK-A32: %struct.int32x4x3_t* noalias sret(%struct.int32x4x3_t) align 8 [[RETVAL:%.*]],
1028 // CHECK: [[__RET:%.*]] = alloca %struct.int32x4x3_t, align {{16|8}} 1028 // CHECK: [[__RET:%.*]] = alloca %struct.int32x4x3_t, align {{16|8}}
1029 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x4x3_t* [[__RET]] to i8* 1029 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x4x3_t* [[__RET]] to i8*
1030 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 1030 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
1031 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 1031 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
1032 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4i32.p0i32(i32* [[TMP2]]) 1032 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4i32.p0i32(i32* [[TMP2]])
1042 return vld1q_s32_x3(a); 1042 return vld1q_s32_x3(a);
1043 } 1043 }
1044 1044
1045 // CHECK-LABEL: @test_vld1q_s32_x4( 1045 // CHECK-LABEL: @test_vld1q_s32_x4(
1046 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x4x4_t, align 16 1046 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int32x4x4_t, align 16
1047 // CHECK-A32: %struct.int32x4x4_t* noalias sret align 8 [[RETVAL:%.*]], 1047 // CHECK-A32: %struct.int32x4x4_t* noalias sret(%struct.int32x4x4_t) align 8 [[RETVAL:%.*]],
1048 // CHECK: [[__RET:%.*]] = alloca %struct.int32x4x4_t, align {{16|8}} 1048 // CHECK: [[__RET:%.*]] = alloca %struct.int32x4x4_t, align {{16|8}}
1049 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x4x4_t* [[__RET]] to i8* 1049 // CHECK: [[TMP0:%.*]] = bitcast %struct.int32x4x4_t* [[__RET]] to i8*
1050 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 1050 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
1051 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 1051 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
1052 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4i32.p0i32(i32* [[TMP2]]) 1052 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4i32.p0i32(i32* [[TMP2]])
1062 return vld1q_s32_x4(a); 1062 return vld1q_s32_x4(a);
1063 } 1063 }
1064 1064
1065 // CHECK-LABEL: @test_vld1q_s64_x2( 1065 // CHECK-LABEL: @test_vld1q_s64_x2(
1066 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x2x2_t, align 16 1066 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x2x2_t, align 16
1067 // CHECK-A32: %struct.int64x2x2_t* noalias sret align 8 [[RETVAL:%.*]], 1067 // CHECK-A32: %struct.int64x2x2_t* noalias sret(%struct.int64x2x2_t) align 8 [[RETVAL:%.*]],
1068 // CHECK: [[__RET:%.*]] = alloca %struct.int64x2x2_t, align {{16|8}} 1068 // CHECK: [[__RET:%.*]] = alloca %struct.int64x2x2_t, align {{16|8}}
1069 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x2x2_t* [[__RET]] to i8* 1069 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x2x2_t* [[__RET]] to i8*
1070 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 1070 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
1071 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 1071 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
1072 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v2i64.p0i64(i64* [[TMP2]]) 1072 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v2i64.p0i64(i64* [[TMP2]])
1082 return vld1q_s64_x2(a); 1082 return vld1q_s64_x2(a);
1083 } 1083 }
1084 1084
1085 // CHECK-LABEL: @test_vld1q_s64_x3( 1085 // CHECK-LABEL: @test_vld1q_s64_x3(
1086 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x2x3_t, align 16 1086 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x2x3_t, align 16
1087 // CHECK-A32: %struct.int64x2x3_t* noalias sret align 8 [[RETVAL:%.*]], 1087 // CHECK-A32: %struct.int64x2x3_t* noalias sret(%struct.int64x2x3_t) align 8 [[RETVAL:%.*]],
1088 // CHECK: [[__RET:%.*]] = alloca %struct.int64x2x3_t, align {{16|8}} 1088 // CHECK: [[__RET:%.*]] = alloca %struct.int64x2x3_t, align {{16|8}}
1089 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x2x3_t* [[__RET]] to i8* 1089 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x2x3_t* [[__RET]] to i8*
1090 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 1090 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
1091 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 1091 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
1092 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v2i64.p0i64(i64* [[TMP2]]) 1092 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v2i64.p0i64(i64* [[TMP2]])
1102 return vld1q_s64_x3(a); 1102 return vld1q_s64_x3(a);
1103 } 1103 }
1104 1104
1105 // CHECK-LABEL: @test_vld1q_s64_x4( 1105 // CHECK-LABEL: @test_vld1q_s64_x4(
1106 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x2x4_t, align 16 1106 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int64x2x4_t, align 16
1107 // CHECK-A32: %struct.int64x2x4_t* noalias sret align 8 [[RETVAL:%.*]], 1107 // CHECK-A32: %struct.int64x2x4_t* noalias sret(%struct.int64x2x4_t) align 8 [[RETVAL:%.*]],
1108 // CHECK: [[__RET:%.*]] = alloca %struct.int64x2x4_t, align {{16|8}} 1108 // CHECK: [[__RET:%.*]] = alloca %struct.int64x2x4_t, align {{16|8}}
1109 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x2x4_t* [[__RET]] to i8* 1109 // CHECK: [[TMP0:%.*]] = bitcast %struct.int64x2x4_t* [[__RET]] to i8*
1110 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 1110 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
1111 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 1111 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
1112 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v2i64.p0i64(i64* [[TMP2]]) 1112 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v2i64.p0i64(i64* [[TMP2]])
1122 return vld1q_s64_x4(a); 1122 return vld1q_s64_x4(a);
1123 } 1123 }
1124 1124
1125 // CHECK-LABEL: @test_vld1q_s8_x2( 1125 // CHECK-LABEL: @test_vld1q_s8_x2(
1126 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x16x2_t, align 16 1126 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x16x2_t, align 16
1127 // CHECK-A32: %struct.int8x16x2_t* noalias sret align 8 [[RETVAL:%.*]], 1127 // CHECK-A32: %struct.int8x16x2_t* noalias sret(%struct.int8x16x2_t) align 8 [[RETVAL:%.*]],
1128 // CHECK: [[__RET:%.*]] = alloca %struct.int8x16x2_t, align {{16|8}} 1128 // CHECK: [[__RET:%.*]] = alloca %struct.int8x16x2_t, align {{16|8}}
1129 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x16x2_t* [[__RET]] to i8* 1129 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x16x2_t* [[__RET]] to i8*
1130 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v16i8.p0i8(i8* %a) 1130 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v16i8.p0i8(i8* %a)
1131 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8> }* 1131 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8> }*
1132 // CHECK: store { <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8> }* [[TMP1]] 1132 // CHECK: store { <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8> }* [[TMP1]]
1140 return vld1q_s8_x2(a); 1140 return vld1q_s8_x2(a);
1141 } 1141 }
1142 1142
1143 // CHECK-LABEL: @test_vld1q_s8_x3( 1143 // CHECK-LABEL: @test_vld1q_s8_x3(
1144 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x16x3_t, align 16 1144 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x16x3_t, align 16
1145 // CHECK-A32: %struct.int8x16x3_t* noalias sret align 8 [[RETVAL:%.*]], 1145 // CHECK-A32: %struct.int8x16x3_t* noalias sret(%struct.int8x16x3_t) align 8 [[RETVAL:%.*]],
1146 // CHECK: [[__RET:%.*]] = alloca %struct.int8x16x3_t, align {{16|8}} 1146 // CHECK: [[__RET:%.*]] = alloca %struct.int8x16x3_t, align {{16|8}}
1147 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x16x3_t* [[__RET]] to i8* 1147 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x16x3_t* [[__RET]] to i8*
1148 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v16i8.p0i8(i8* %a) 1148 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v16i8.p0i8(i8* %a)
1149 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8> }* 1149 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8> }*
1150 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]] 1150 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]]
1158 return vld1q_s8_x3(a); 1158 return vld1q_s8_x3(a);
1159 } 1159 }
1160 1160
1161 // CHECK-LABEL: @test_vld1q_s8_x4( 1161 // CHECK-LABEL: @test_vld1q_s8_x4(
1162 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x16x4_t, align 16 1162 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.int8x16x4_t, align 16
1163 // CHECK-A32: %struct.int8x16x4_t* noalias sret align 8 [[RETVAL:%.*]], 1163 // CHECK-A32: %struct.int8x16x4_t* noalias sret(%struct.int8x16x4_t) align 8 [[RETVAL:%.*]],
1164 // CHECK: [[__RET:%.*]] = alloca %struct.int8x16x4_t, align {{16|8}} 1164 // CHECK: [[__RET:%.*]] = alloca %struct.int8x16x4_t, align {{16|8}}
1165 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x16x4_t* [[__RET]] to i8* 1165 // CHECK: [[TMP0:%.*]] = bitcast %struct.int8x16x4_t* [[__RET]] to i8*
1166 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v16i8.p0i8(i8* %a) 1166 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v16i8.p0i8(i8* %a)
1167 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }* 1167 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }*
1168 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]] 1168 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]]
1176 return vld1q_s8_x4(a); 1176 return vld1q_s8_x4(a);
1177 } 1177 }
1178 1178
1179 // CHECK-LABEL: @test_vld1q_u16_x2( 1179 // CHECK-LABEL: @test_vld1q_u16_x2(
1180 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x8x2_t, align 16 1180 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x8x2_t, align 16
1181 // CHECK-A32: %struct.uint16x8x2_t* noalias sret align 8 [[RETVAL:%.*]], 1181 // CHECK-A32: %struct.uint16x8x2_t* noalias sret(%struct.uint16x8x2_t) align 8 [[RETVAL:%.*]],
1182 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x8x2_t, align {{16|8}} 1182 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x8x2_t, align {{16|8}}
1183 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x8x2_t* [[__RET]] to i8* 1183 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x8x2_t* [[__RET]] to i8*
1184 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 1184 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
1185 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 1185 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
1186 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i16.p0i16(i16* [[TMP2]]) 1186 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v8i16.p0i16(i16* [[TMP2]])
1196 return vld1q_u16_x2(a); 1196 return vld1q_u16_x2(a);
1197 } 1197 }
1198 1198
1199 // CHECK-LABEL: @test_vld1q_u16_x3( 1199 // CHECK-LABEL: @test_vld1q_u16_x3(
1200 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x8x3_t, align 16 1200 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x8x3_t, align 16
1201 // CHECK-A32: %struct.uint16x8x3_t* noalias sret align 8 [[RETVAL:%.*]], 1201 // CHECK-A32: %struct.uint16x8x3_t* noalias sret(%struct.uint16x8x3_t) align 8 [[RETVAL:%.*]],
1202 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x8x3_t, align {{16|8}} 1202 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x8x3_t, align {{16|8}}
1203 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x8x3_t* [[__RET]] to i8* 1203 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x8x3_t* [[__RET]] to i8*
1204 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 1204 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
1205 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 1205 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
1206 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i16.p0i16(i16* [[TMP2]]) 1206 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v8i16.p0i16(i16* [[TMP2]])
1216 return vld1q_u16_x3(a); 1216 return vld1q_u16_x3(a);
1217 } 1217 }
1218 1218
1219 // CHECK-LABEL: @test_vld1q_u16_x4( 1219 // CHECK-LABEL: @test_vld1q_u16_x4(
1220 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x8x4_t, align 16 1220 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint16x8x4_t, align 16
1221 // CHECK-A32: %struct.uint16x8x4_t* noalias sret align 8 [[RETVAL:%.*]], 1221 // CHECK-A32: %struct.uint16x8x4_t* noalias sret(%struct.uint16x8x4_t) align 8 [[RETVAL:%.*]],
1222 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x8x4_t, align {{16|8}} 1222 // CHECK: [[__RET:%.*]] = alloca %struct.uint16x8x4_t, align {{16|8}}
1223 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x8x4_t* [[__RET]] to i8* 1223 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint16x8x4_t* [[__RET]] to i8*
1224 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8* 1224 // CHECK: [[TMP1:%.*]] = bitcast i16* %a to i8*
1225 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16* 1225 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
1226 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i16.p0i16(i16* [[TMP2]]) 1226 // CHECK: [[VLD1XN:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v8i16.p0i16(i16* [[TMP2]])
1236 return vld1q_u16_x4(a); 1236 return vld1q_u16_x4(a);
1237 } 1237 }
1238 1238
1239 // CHECK-LABEL: @test_vld1q_u32_x2( 1239 // CHECK-LABEL: @test_vld1q_u32_x2(
1240 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x4x2_t, align 16 1240 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x4x2_t, align 16
1241 // CHECK-A32: %struct.uint32x4x2_t* noalias sret align 8 [[RETVAL:%.*]], 1241 // CHECK-A32: %struct.uint32x4x2_t* noalias sret(%struct.uint32x4x2_t) align 8 [[RETVAL:%.*]],
1242 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x4x2_t, align {{16|8}} 1242 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x4x2_t, align {{16|8}}
1243 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x4x2_t* [[__RET]] to i8* 1243 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x4x2_t* [[__RET]] to i8*
1244 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 1244 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
1245 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 1245 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
1246 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4i32.p0i32(i32* [[TMP2]]) 1246 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v4i32.p0i32(i32* [[TMP2]])
1256 return vld1q_u32_x2(a); 1256 return vld1q_u32_x2(a);
1257 } 1257 }
1258 1258
1259 // CHECK-LABEL: @test_vld1q_u32_x3( 1259 // CHECK-LABEL: @test_vld1q_u32_x3(
1260 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x4x3_t, align 16 1260 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x4x3_t, align 16
1261 // CHECK-A32: %struct.uint32x4x3_t* noalias sret align 8 [[RETVAL:%.*]], 1261 // CHECK-A32: %struct.uint32x4x3_t* noalias sret(%struct.uint32x4x3_t) align 8 [[RETVAL:%.*]],
1262 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x4x3_t, align {{16|8}} 1262 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x4x3_t, align {{16|8}}
1263 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x4x3_t* [[__RET]] to i8* 1263 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x4x3_t* [[__RET]] to i8*
1264 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 1264 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
1265 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 1265 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
1266 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4i32.p0i32(i32* [[TMP2]]) 1266 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v4i32.p0i32(i32* [[TMP2]])
1276 return vld1q_u32_x3(a); 1276 return vld1q_u32_x3(a);
1277 } 1277 }
1278 1278
1279 // CHECK-LABEL: @test_vld1q_u32_x4( 1279 // CHECK-LABEL: @test_vld1q_u32_x4(
1280 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x4x4_t, align 16 1280 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint32x4x4_t, align 16
1281 // CHECK-A32: %struct.uint32x4x4_t* noalias sret align 8 [[RETVAL:%.*]], 1281 // CHECK-A32: %struct.uint32x4x4_t* noalias sret(%struct.uint32x4x4_t) align 8 [[RETVAL:%.*]],
1282 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x4x4_t, align {{16|8}} 1282 // CHECK: [[__RET:%.*]] = alloca %struct.uint32x4x4_t, align {{16|8}}
1283 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x4x4_t* [[__RET]] to i8* 1283 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint32x4x4_t* [[__RET]] to i8*
1284 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8* 1284 // CHECK: [[TMP1:%.*]] = bitcast i32* %a to i8*
1285 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32* 1285 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i32*
1286 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4i32.p0i32(i32* [[TMP2]]) 1286 // CHECK: [[VLD1XN:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v4i32.p0i32(i32* [[TMP2]])
1296 return vld1q_u32_x4(a); 1296 return vld1q_u32_x4(a);
1297 } 1297 }
1298 1298
1299 // CHECK-LABEL: @test_vld1q_u64_x2( 1299 // CHECK-LABEL: @test_vld1q_u64_x2(
1300 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x2x2_t, align 16 1300 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x2x2_t, align 16
1301 // CHECK-A32: %struct.uint64x2x2_t* noalias sret align 8 [[RETVAL:%.*]], 1301 // CHECK-A32: %struct.uint64x2x2_t* noalias sret(%struct.uint64x2x2_t) align 8 [[RETVAL:%.*]],
1302 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x2x2_t, align {{16|8}} 1302 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x2x2_t, align {{16|8}}
1303 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x2x2_t* [[__RET]] to i8* 1303 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x2x2_t* [[__RET]] to i8*
1304 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 1304 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
1305 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 1305 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
1306 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v2i64.p0i64(i64* [[TMP2]]) 1306 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v2i64.p0i64(i64* [[TMP2]])
1316 return vld1q_u64_x2(a); 1316 return vld1q_u64_x2(a);
1317 } 1317 }
1318 1318
1319 // CHECK-LABEL: @test_vld1q_u64_x3( 1319 // CHECK-LABEL: @test_vld1q_u64_x3(
1320 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x2x3_t, align 16 1320 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x2x3_t, align 16
1321 // CHECK-A32: %struct.uint64x2x3_t* noalias sret align 8 [[RETVAL:%.*]], 1321 // CHECK-A32: %struct.uint64x2x3_t* noalias sret(%struct.uint64x2x3_t) align 8 [[RETVAL:%.*]],
1322 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x2x3_t, align {{16|8}} 1322 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x2x3_t, align {{16|8}}
1323 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x2x3_t* [[__RET]] to i8* 1323 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x2x3_t* [[__RET]] to i8*
1324 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 1324 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
1325 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 1325 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
1326 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v2i64.p0i64(i64* [[TMP2]]) 1326 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v2i64.p0i64(i64* [[TMP2]])
1336 return vld1q_u64_x3(a); 1336 return vld1q_u64_x3(a);
1337 } 1337 }
1338 1338
1339 // CHECK-LABEL: @test_vld1q_u64_x4( 1339 // CHECK-LABEL: @test_vld1q_u64_x4(
1340 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x2x4_t, align 16 1340 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint64x2x4_t, align 16
1341 // CHECK-A32: %struct.uint64x2x4_t* noalias sret align 8 [[RETVAL:%.*]], 1341 // CHECK-A32: %struct.uint64x2x4_t* noalias sret(%struct.uint64x2x4_t) align 8 [[RETVAL:%.*]],
1342 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x2x4_t, align {{16|8}} 1342 // CHECK: [[__RET:%.*]] = alloca %struct.uint64x2x4_t, align {{16|8}}
1343 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x2x4_t* [[__RET]] to i8* 1343 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint64x2x4_t* [[__RET]] to i8*
1344 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8* 1344 // CHECK: [[TMP1:%.*]] = bitcast i64* %a to i8*
1345 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64* 1345 // CHECK: [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i64*
1346 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v2i64.p0i64(i64* [[TMP2]]) 1346 // CHECK: [[VLD1XN:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v2i64.p0i64(i64* [[TMP2]])
1356 return vld1q_u64_x4(a); 1356 return vld1q_u64_x4(a);
1357 } 1357 }
1358 1358
1359 // CHECK-LABEL: @test_vld1q_u8_x2( 1359 // CHECK-LABEL: @test_vld1q_u8_x2(
1360 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x16x2_t, align 16 1360 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x16x2_t, align 16
1361 // CHECK-A32: %struct.uint8x16x2_t* noalias sret align 8 [[RETVAL:%.*]], 1361 // CHECK-A32: %struct.uint8x16x2_t* noalias sret(%struct.uint8x16x2_t) align 8 [[RETVAL:%.*]],
1362 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x16x2_t, align {{16|8}} 1362 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x16x2_t, align {{16|8}}
1363 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x16x2_t* [[__RET]] to i8* 1363 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x16x2_t* [[__RET]] to i8*
1364 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v16i8.p0i8(i8* %a) 1364 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x2|arm.neon.vld1x2}}.v16i8.p0i8(i8* %a)
1365 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8> }* 1365 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8> }*
1366 // CHECK: store { <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8> }* [[TMP1]] 1366 // CHECK: store { <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8> }* [[TMP1]]
1374 return vld1q_u8_x2(a); 1374 return vld1q_u8_x2(a);
1375 } 1375 }
1376 1376
1377 // CHECK-LABEL: @test_vld1q_u8_x3( 1377 // CHECK-LABEL: @test_vld1q_u8_x3(
1378 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x16x3_t, align 16 1378 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x16x3_t, align 16
1379 // CHECK-A32: %struct.uint8x16x3_t* noalias sret align 8 [[RETVAL:%.*]], 1379 // CHECK-A32: %struct.uint8x16x3_t* noalias sret(%struct.uint8x16x3_t) align 8 [[RETVAL:%.*]],
1380 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x16x3_t, align {{16|8}} 1380 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x16x3_t, align {{16|8}}
1381 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x16x3_t* [[__RET]] to i8* 1381 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x16x3_t* [[__RET]] to i8*
1382 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v16i8.p0i8(i8* %a) 1382 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x3|arm.neon.vld1x3}}.v16i8.p0i8(i8* %a)
1383 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8> }* 1383 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8> }*
1384 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]] 1384 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]]
1392 return vld1q_u8_x3(a); 1392 return vld1q_u8_x3(a);
1393 } 1393 }
1394 1394
1395 // CHECK-LABEL: @test_vld1q_u8_x4( 1395 // CHECK-LABEL: @test_vld1q_u8_x4(
1396 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x16x4_t, align 16 1396 // CHECK-A64: [[RETVAL:%.*]] = alloca %struct.uint8x16x4_t, align 16
1397 // CHECK-A32: %struct.uint8x16x4_t* noalias sret align 8 [[RETVAL:%.*]], 1397 // CHECK-A32: %struct.uint8x16x4_t* noalias sret(%struct.uint8x16x4_t) align 8 [[RETVAL:%.*]],
1398 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x16x4_t, align {{16|8}} 1398 // CHECK: [[__RET:%.*]] = alloca %struct.uint8x16x4_t, align {{16|8}}
1399 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x16x4_t* [[__RET]] to i8* 1399 // CHECK: [[TMP0:%.*]] = bitcast %struct.uint8x16x4_t* [[__RET]] to i8*
1400 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v16i8.p0i8(i8* %a) 1400 // CHECK: [[VLD1XN:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.{{aarch64.neon.ld1x4|arm.neon.vld1x4}}.v16i8.p0i8(i8* %a)
1401 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }* 1401 // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }*
1402 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]] 1402 // CHECK: store { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[VLD1XN]], { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }* [[TMP1]]