Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: test/NaCl/ARM/neon-vldlane-sandboxing.ll

Issue 939073008: Rebased PNaCl localmods in LLVM to 223109 (Closed)
Patch Set: undo localmod Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/NaCl/ARM/neon-vlddup-sandboxing.ll ('k') | test/NaCl/ARM/neon-vst1-sandboxing.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 ; RUN: pnacl-llc -mtriple=armv7-unknown-nacl -mattr=+neon -filetype=obj %s -o - \
2 ; RUN: | llvm-objdump -disassemble -triple armv7 - | FileCheck %s
3
4 %struct.__neon_int8x8x2_t = type { <8 x i8>, <8 x i8> }
5 %struct.__neon_int16x4x2_t = type { <4 x i16>, <4 x i16> }
6 %struct.__neon_int32x2x2_t = type { <2 x i32>, <2 x i32> }
7 %struct.__neon_float32x2x2_t = type { <2 x float>, <2 x float> }
8
9 %struct.__neon_int16x8x2_t = type { <8 x i16>, <8 x i16> }
10 %struct.__neon_int32x4x2_t = type { <4 x i32>, <4 x i32> }
11 %struct.__neon_float32x4x2_t = type { <4 x float>, <4 x float> }
12
13 declare %struct.__neon_int8x8x2_t @llvm.arm.neon.vld2lane.v8i8(i8*, <8 x i8>, <8 x i8>, i32, i32) nounwind readonly
14 declare %struct.__neon_int16x4x2_t @llvm.arm.neon.vld2lane.v4i16(i8*, <4 x i16>, <4 x i16>, i32, i32) nounwind readonly
15 declare %struct.__neon_int32x2x2_t @llvm.arm.neon.vld2lane.v2i32(i8*, <2 x i32>, <2 x i32>, i32, i32) nounwind readonly
16 declare %struct.__neon_float32x2x2_t @llvm.arm.neon.vld2lane.v2f32(i8*, <2 x flo at>, <2 x float>, i32, i32) nounwind readonly
17
18 declare %struct.__neon_int16x8x2_t @llvm.arm.neon.vld2lane.v8i16(i8*, <8 x i16>, <8 x i16>, i32, i32) nounwind readonly
19 declare %struct.__neon_int32x4x2_t @llvm.arm.neon.vld2lane.v4i32(i8*, <4 x i32>, <4 x i32>, i32, i32) nounwind readonly
20 declare %struct.__neon_float32x4x2_t @llvm.arm.neon.vld2lane.v4f32(i8*, <4 x flo at>, <4 x float>, i32, i32) nounwind readonly
21
22 %struct.__neon_int8x8x3_t = type { <8 x i8>, <8 x i8>, <8 x i8> }
23 %struct.__neon_int16x4x3_t = type { <4 x i16>, <4 x i16>, <4 x i16> }
24 %struct.__neon_int32x2x3_t = type { <2 x i32>, <2 x i32>, <2 x i32> }
25 %struct.__neon_float32x2x3_t = type { <2 x float>, <2 x float>, <2 x float> }
26
27 %struct.__neon_int16x8x3_t = type { <8 x i16>, <8 x i16>, <8 x i16> }
28 %struct.__neon_int32x4x3_t = type { <4 x i32>, <4 x i32>, <4 x i32> }
29 %struct.__neon_float32x4x3_t = type { <4 x float>, <4 x float>, <4 x float> }
30
31 declare %struct.__neon_int8x8x3_t @llvm.arm.neon.vld3lane.v8i8(i8*, <8 x i8>, <8 x i8>, <8 x i8>, i32, i32) nounwind readonly
32 declare %struct.__neon_int16x4x3_t @llvm.arm.neon.vld3lane.v4i16(i8*, <4 x i16>, <4 x i16>, <4 x i16>, i32, i32) nounwind readonly
33 declare %struct.__neon_int32x2x3_t @llvm.arm.neon.vld3lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind readonly
34 declare %struct.__neon_float32x2x3_t @llvm.arm.neon.vld3lane.v2f32(i8*, <2 x flo at>, <2 x float>, <2 x float>, i32, i32) nounwind readonly
35
36 declare %struct.__neon_int16x8x3_t @llvm.arm.neon.vld3lane.v8i16(i8*, <8 x i16>, <8 x i16>, <8 x i16>, i32, i32) nounwind readonly
37 declare %struct.__neon_int32x4x3_t @llvm.arm.neon.vld3lane.v4i32(i8*, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) nounwind readonly
38 declare %struct.__neon_float32x4x3_t @llvm.arm.neon.vld3lane.v4f32(i8*, <4 x flo at>, <4 x float>, <4 x float>, i32, i32) nounwind readonly
39
40 %struct.__neon_int8x8x4_t = type { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }
41 %struct.__neon_int16x4x4_t = type { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> }
42 %struct.__neon_int32x2x4_t = type { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> }
43 %struct.__neon_float32x2x4_t = type { <2 x float>, <2 x float>, <2 x float>, <2 x float> }
44
45 %struct.__neon_int16x8x4_t = type { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> }
46 %struct.__neon_int32x4x4_t = type { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> }
47 %struct.__neon_float32x4x4_t = type { <4 x float>, <4 x float>, <4 x float>, <4 x float> }
48
49 declare %struct.__neon_int8x8x4_t @llvm.arm.neon.vld4lane.v8i8(i8*, <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i32, i32) nounwind readonly
50 declare %struct.__neon_int16x4x4_t @llvm.arm.neon.vld4lane.v4i16(i8*, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i32, i32) nounwind readonly
51 declare %struct.__neon_int32x2x4_t @llvm.arm.neon.vld4lane.v2i32(i8*, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32, i32) nounwind readonly
52 declare %struct.__neon_float32x2x4_t @llvm.arm.neon.vld4lane.v2f32(i8*, <2 x flo at>, <2 x float>, <2 x float>, <2 x float>, i32, i32) nounwind readonly
53
54 declare %struct.__neon_int16x8x4_t @llvm.arm.neon.vld4lane.v8i16(i8*, <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i32, i32) nounwind readonly
55 declare %struct.__neon_int32x4x4_t @llvm.arm.neon.vld4lane.v4i32(i8*, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) nounwind readonly
56 declare %struct.__neon_float32x4x4_t @llvm.arm.neon.vld4lane.v4f32(i8*, <4 x flo at>, <4 x float>, <4 x float>, <4 x float>, i32, i32) nounwind readonly
57
58 define <8 x i8> @vld1lanei8(i8* %A, <8 x i8>* %B) nounwind {
59 %tmp1 = load <8 x i8>* %B
60 %tmp2 = load i8* %A, align 8
61 %tmp3 = insertelement <8 x i8> %tmp1, i8 %tmp2, i32 3
62 ; CHECK: bic r0, r0, #3221225472
63 ; CHECK-NEXT: vld1.8 {{{d[0-9]+\[[0-9]\]}}}, [r0]
64 ret <8 x i8> %tmp3
65 }
66
67 define <4 x i16> @vld1lanei16(i16* %A, <4 x i16>* %B) nounwind {
68 %tmp1 = load <4 x i16>* %B
69 %tmp2 = load i16* %A, align 8
70 %tmp3 = insertelement <4 x i16> %tmp1, i16 %tmp2, i32 2
71 ; CHECK: bic r0, r0, #3221225472
72 ; CHECK-NEXT: vld1.16 {{{d[0-9]+\[[0-9]\]}}}, [r0:16]
73 ret <4 x i16> %tmp3
74 }
75
76 define <2 x i32> @vld1lanei32(i32* %A, <2 x i32>* %B) nounwind {
77 %tmp1 = load <2 x i32>* %B
78 %tmp2 = load i32* %A, align 8
79 %tmp3 = insertelement <2 x i32> %tmp1, i32 %tmp2, i32 1
80 ; CHECK: bic r0, r0, #3221225472
81 ; CHECK-NEXT: vld1.32 {{{d[0-9]+\[[0-9]\]}}}, [r0:32]
82 ret <2 x i32> %tmp3
83 }
84
85 define <16 x i8> @vld1laneQi8(i8* %A, <16 x i8>* %B) nounwind {
86 %tmp1 = load <16 x i8>* %B
87 %tmp2 = load i8* %A, align 8
88 %tmp3 = insertelement <16 x i8> %tmp1, i8 %tmp2, i32 9
89 ; CHECK: bic r0, r0, #3221225472
90 ; CHECK-NEXT: vld1.8 {{{d[0-9]+\[[0-9]\]}}}, [r0]
91 ret <16 x i8> %tmp3
92 }
93
94 define <8 x i16> @vld1laneQi16(i16* %A, <8 x i16>* %B) nounwind {
95 %tmp1 = load <8 x i16>* %B
96 %tmp2 = load i16* %A, align 8
97 %tmp3 = insertelement <8 x i16> %tmp1, i16 %tmp2, i32 5
98 ; CHECK: bic r0, r0, #3221225472
99 ; CHECK-NEXT: vld1.16 {{{d[0-9]+\[[0-9]\]}}}, [r0:16]
100 ret <8 x i16> %tmp3
101 }
102
103 define <4 x i32> @vld1laneQi32(i32* %A, <4 x i32>* %B) nounwind {
104 %tmp1 = load <4 x i32>* %B
105 %tmp2 = load i32* %A, align 8
106 %tmp3 = insertelement <4 x i32> %tmp1, i32 %tmp2, i32 3
107 ; CHECK: bic r0, r0, #3221225472
108 ; CHECK-NEXT: vld1.32 {{{d[0-9]+\[[0-9]\]}}}, [r0:32]
109 ret <4 x i32> %tmp3
110 }
111
112 define <8 x i8> @vld2lanei8(i8* %A, <8 x i8>* %B) nounwind {
113 %tmp1 = load <8 x i8>* %B
114 %tmp2 = call %struct.__neon_int8x8x2_t @llvm.arm.neon.vld2lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 4)
115 %tmp3 = extractvalue %struct.__neon_int8x8x2_t %tmp2, 0
116 %tmp4 = extractvalue %struct.__neon_int8x8x2_t %tmp2, 1
117 %tmp5 = add <8 x i8> %tmp3, %tmp4
118 ; CHECK: bic r0, r0, #3221225472
119 ; CHECK-NEXT: vld2.8 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}}, [r0:16]
120 ret <8 x i8> %tmp5
121 }
122
123 define <4 x i16> @vld2lanei16(i16* %A, <4 x i16>* %B) nounwind {
124 %tmp0 = bitcast i16* %A to i8*
125 %tmp1 = load <4 x i16>* %B
126 %tmp2 = call %struct.__neon_int16x4x2_t @llvm.arm.neon.vld2lane.v4i16(i8* %tmp 0, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 8)
127 %tmp3 = extractvalue %struct.__neon_int16x4x2_t %tmp2, 0
128 %tmp4 = extractvalue %struct.__neon_int16x4x2_t %tmp2, 1
129 %tmp5 = add <4 x i16> %tmp3, %tmp4
130 ; CHECK: bic r0, r0, #3221225472
131 ; CHECK-NEXT: vld2.16 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}}, [r0:32]
132 ret <4 x i16> %tmp5
133 }
134
135 define <2 x i32> @vld2lanei32(i32 %foo, i32 %bar, i32 %baz,
136 i32* %A, <2 x i32>* %B) nounwind {
137 %tmp0 = bitcast i32* %A to i8*
138 %tmp1 = load <2 x i32>* %B
139 %tmp2 = call %struct.__neon_int32x2x2_t @llvm.arm.neon.vld2lane.v2i32(i8* %tmp 0, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 1)
140 %tmp3 = extractvalue %struct.__neon_int32x2x2_t %tmp2, 0
141 %tmp4 = extractvalue %struct.__neon_int32x2x2_t %tmp2, 1
142 %tmp5 = add <2 x i32> %tmp3, %tmp4
143 ; CHECK: bic r3, r3, #3221225472
144 ; CHECK-NEXT: vld2.32 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}}, [r3]
145 ret <2 x i32> %tmp5
146 }
147
148 define <8 x i16> @vld2laneQi16(i16* %A, <8 x i16>* %B) nounwind {
149 %tmp0 = bitcast i16* %A to i8*
150 %tmp1 = load <8 x i16>* %B
151 %tmp2 = call %struct.__neon_int16x8x2_t @llvm.arm.neon.vld2lane.v8i16(i8* %tmp 0, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 5, i32 1)
152 %tmp3 = extractvalue %struct.__neon_int16x8x2_t %tmp2, 0
153 %tmp4 = extractvalue %struct.__neon_int16x8x2_t %tmp2, 1
154 %tmp5 = add <8 x i16> %tmp3, %tmp4
155 ; CHECK: bic r0, r0, #3221225472
156 ; CHECK-NEXT: vld2.16 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}}, [r0]
157 ret <8 x i16> %tmp5
158 }
159
160 define <4 x i32> @vld2laneQi32(i32* %A, <4 x i32>* %B) nounwind {
161 %tmp0 = bitcast i32* %A to i8*
162 %tmp1 = load <4 x i32>* %B
163 %tmp2 = call %struct.__neon_int32x4x2_t @llvm.arm.neon.vld2lane.v4i32(i8* %tmp 0, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 2, i32 16)
164 %tmp3 = extractvalue %struct.__neon_int32x4x2_t %tmp2, 0
165 %tmp4 = extractvalue %struct.__neon_int32x4x2_t %tmp2, 1
166 %tmp5 = add <4 x i32> %tmp3, %tmp4
167 ; CHECK: bic r0, r0, #3221225472
168 ; CHECK-NEXT: vld2.32 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}}, [r0:64]
169 ret <4 x i32> %tmp5
170 }
171
172 define <8 x i8> @vld3lanei8(i8* %A, <8 x i8>* %B) nounwind {
173 %tmp1 = load <8 x i8>* %B
174 %tmp2 = call %struct.__neon_int8x8x3_t @llvm.arm.neon.vld3lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 1)
175 %tmp3 = extractvalue %struct.__neon_int8x8x3_t %tmp2, 0
176 %tmp4 = extractvalue %struct.__neon_int8x8x3_t %tmp2, 1
177 %tmp5 = extractvalue %struct.__neon_int8x8x3_t %tmp2, 2
178 %tmp6 = add <8 x i8> %tmp3, %tmp4
179 %tmp7 = add <8 x i8> %tmp5, %tmp6
180 ; CHECK: bic r0, r0, #3221225472
181 ; CHECK-NEXT: vld3.8 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[ [0-9]\]}}}, [r0]
182 ret <8 x i8> %tmp7
183 }
184
185 define <4 x i16> @vld3lanei16(i16* %A, <4 x i16>* %B) nounwind {
186 %tmp0 = bitcast i16* %A to i8*
187 %tmp1 = load <4 x i16>* %B
188 %tmp2 = call %struct.__neon_int16x4x3_t @llvm.arm.neon.vld3lane.v4i16(i8* %tmp 0, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i32 8)
189 %tmp3 = extractvalue %struct.__neon_int16x4x3_t %tmp2, 0
190 %tmp4 = extractvalue %struct.__neon_int16x4x3_t %tmp2, 1
191 %tmp5 = extractvalue %struct.__neon_int16x4x3_t %tmp2, 2
192 %tmp6 = add <4 x i16> %tmp3, %tmp4
193 %tmp7 = add <4 x i16> %tmp5, %tmp6
194 ; CHECK: bic r0, r0, #3221225472
195 ; CHECK-NEXT: vld3.16 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\ [[0-9]\]}}}, [r0]
196 ret <4 x i16> %tmp7
197 }
198
199 define <2 x i32> @vld3lanei32(i32* %A, <2 x i32>* %B) nounwind {
200 %tmp0 = bitcast i32* %A to i8*
201 %tmp1 = load <2 x i32>* %B
202 %tmp2 = call %struct.__neon_int32x2x3_t @llvm.arm.neon.vld3lane.v2i32(i8* %tmp 0, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i32 1)
203 %tmp3 = extractvalue %struct.__neon_int32x2x3_t %tmp2, 0
204 %tmp4 = extractvalue %struct.__neon_int32x2x3_t %tmp2, 1
205 %tmp5 = extractvalue %struct.__neon_int32x2x3_t %tmp2, 2
206 %tmp6 = add <2 x i32> %tmp3, %tmp4
207 %tmp7 = add <2 x i32> %tmp5, %tmp6
208 ; CHECK: bic r0, r0, #3221225472
209 ; CHECK-NEXT: vld3.32 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\ [[0-9]\]}}}, [r0]
210 ret <2 x i32> %tmp7
211 }
212
213 define <8 x i16> @vld3laneQi16(i16* %A, <8 x i16>* %B) nounwind {
214 %tmp0 = bitcast i16* %A to i8*
215 %tmp1 = load <8 x i16>* %B
216 %tmp2 = call %struct.__neon_int16x8x3_t @llvm.arm.neon.vld3lane.v8i16(i8* %tmp 0, <8 x i16> %tmp1, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 1, i32 8)
217 %tmp3 = extractvalue %struct.__neon_int16x8x3_t %tmp2, 0
218 %tmp4 = extractvalue %struct.__neon_int16x8x3_t %tmp2, 1
219 %tmp5 = extractvalue %struct.__neon_int16x8x3_t %tmp2, 2
220 %tmp6 = add <8 x i16> %tmp3, %tmp4
221 %tmp7 = add <8 x i16> %tmp5, %tmp6
222 ; CHECK: bic r0, r0, #3221225472
223 ; CHECK-NEXT: vld3.16 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\ [[0-9]\]}}}, [r0]
224 ret <8 x i16> %tmp7
225 }
226
227 define <4 x i32> @vld3laneQi32(i32* %A, <4 x i32>* %B) nounwind {
228 %tmp0 = bitcast i32* %A to i8*
229 %tmp1 = load <4 x i32>* %B
230 %tmp2 = call %struct.__neon_int32x4x3_t @llvm.arm.neon.vld3lane.v4i32(i8* %tmp 0, <4 x i32> %tmp1, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 3, i32 1)
231 %tmp3 = extractvalue %struct.__neon_int32x4x3_t %tmp2, 0
232 %tmp4 = extractvalue %struct.__neon_int32x4x3_t %tmp2, 1
233 %tmp5 = extractvalue %struct.__neon_int32x4x3_t %tmp2, 2
234 %tmp6 = add <4 x i32> %tmp3, %tmp4
235 %tmp7 = add <4 x i32> %tmp5, %tmp6
236 ; CHECK: bic r0, r0, #3221225472
237 ; CHECK-NEXT: vld3.32 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\ [[0-9]\]}}}, [r0]
238 ret <4 x i32> %tmp7
239 }
240
241 define <8 x i8> @vld4lanei8(i8* %A, <8 x i8>* %B) nounwind {
242 %tmp1 = load <8 x i8>* %B
243 %tmp2 = call %struct.__neon_int8x8x4_t @llvm.arm.neon.vld4lane.v8i8(i8* %A, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, <8 x i8> %tmp1, i32 1, i32 8)
244 %tmp3 = extractvalue %struct.__neon_int8x8x4_t %tmp2, 0
245 %tmp4 = extractvalue %struct.__neon_int8x8x4_t %tmp2, 1
246 %tmp5 = extractvalue %struct.__neon_int8x8x4_t %tmp2, 2
247 %tmp6 = extractvalue %struct.__neon_int8x8x4_t %tmp2, 3
248 %tmp7 = add <8 x i8> %tmp3, %tmp4
249 %tmp8 = add <8 x i8> %tmp5, %tmp6
250 %tmp9 = add <8 x i8> %tmp7, %tmp8
251 ; CHECK: bic r0, r0, #3221225472
252 ; CHECK-NEXT: vld4.8 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[ [0-9]\]}}, {{d[0-9]+\[[0-9]\]}}}, [r0:32]
253 ret <8 x i8> %tmp9
254 }
255
256 define <4 x i16> @vld4lanei16(i16* %A, <4 x i16>* %B) nounwind {
257 %tmp0 = bitcast i16* %A to i8*
258 %tmp1 = load <4 x i16>* %B
259 %tmp2 = call %struct.__neon_int16x4x4_t @llvm.arm.neon.vld4lane.v4i16(i8* %tmp 0, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, <4 x i16> %tmp1, i32 1, i3 2 4)
260 %tmp3 = extractvalue %struct.__neon_int16x4x4_t %tmp2, 0
261 %tmp4 = extractvalue %struct.__neon_int16x4x4_t %tmp2, 1
262 %tmp5 = extractvalue %struct.__neon_int16x4x4_t %tmp2, 2
263 %tmp6 = extractvalue %struct.__neon_int16x4x4_t %tmp2, 3
264 %tmp7 = add <4 x i16> %tmp3, %tmp4
265 %tmp8 = add <4 x i16> %tmp5, %tmp6
266 %tmp9 = add <4 x i16> %tmp7, %tmp8
267 ; CHECK: bic r0, r0, #3221225472
268 ; CHECK-NEXT: vld4.16 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\ [[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}}, [r0]
269 ret <4 x i16> %tmp9
270 }
271
272 define <2 x i32> @vld4lanei32(i32* %A, <2 x i32>* %B) nounwind {
273 %tmp0 = bitcast i32* %A to i8*
274 %tmp1 = load <2 x i32>* %B
275 %tmp2 = call %struct.__neon_int32x2x4_t @llvm.arm.neon.vld4lane.v2i32(i8* %tmp 0, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, <2 x i32> %tmp1, i32 1, i3 2 8)
276 %tmp3 = extractvalue %struct.__neon_int32x2x4_t %tmp2, 0
277 %tmp4 = extractvalue %struct.__neon_int32x2x4_t %tmp2, 1
278 %tmp5 = extractvalue %struct.__neon_int32x2x4_t %tmp2, 2
279 %tmp6 = extractvalue %struct.__neon_int32x2x4_t %tmp2, 3
280 %tmp7 = add <2 x i32> %tmp3, %tmp4
281 %tmp8 = add <2 x i32> %tmp5, %tmp6
282 %tmp9 = add <2 x i32> %tmp7, %tmp8
283 ; CHECK: bic r0, r0, #3221225472
284 ; CHECK-NEXT: vld4.32 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\ [[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}}, [r0:64]
285 ret <2 x i32> %tmp9
286 }
287
288 define <8 x i16> @vld4laneQi16(i16* %A, <8 x i16>* %B) nounwind {
289 %tmp0 = bitcast i16* %A to i8*
290 %tmp1 = load <8 x i16>* %B
291 %tmp2 = call %struct.__neon_int16x8x4_t @llvm.arm.neon.vld4lane.v8i16(i8* %tmp 0, <8 x i16> %tmp1, <8 x i16> %tmp1, <8 x i16> %tmp1, <8 x i16> %tmp1, i32 1, i3 2 16)
292 %tmp3 = extractvalue %struct.__neon_int16x8x4_t %tmp2, 0
293 %tmp4 = extractvalue %struct.__neon_int16x8x4_t %tmp2, 1
294 %tmp5 = extractvalue %struct.__neon_int16x8x4_t %tmp2, 2
295 %tmp6 = extractvalue %struct.__neon_int16x8x4_t %tmp2, 3
296 %tmp7 = add <8 x i16> %tmp3, %tmp4
297 %tmp8 = add <8 x i16> %tmp5, %tmp6
298 %tmp9 = add <8 x i16> %tmp7, %tmp8
299 ; CHECK: bic r0, r0, #3221225472
300 ; CHECK-NEXT: vld4.16 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\ [[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}}, [r0:64]
301 ret <8 x i16> %tmp9
302 }
303
304 define <4 x i32> @vld4laneQi32(i32* %A, <4 x i32>* %B) nounwind {
305 %tmp0 = bitcast i32* %A to i8*
306 %tmp1 = load <4 x i32>* %B
307 %tmp2 = call %struct.__neon_int32x4x4_t @llvm.arm.neon.vld4lane.v4i32(i8* %tmp 0, <4 x i32> %tmp1, <4 x i32> %tmp1, <4 x i32> %tmp1, <4 x i32> %tmp1, i32 2, i3 2 1)
308 %tmp3 = extractvalue %struct.__neon_int32x4x4_t %tmp2, 0
309 %tmp4 = extractvalue %struct.__neon_int32x4x4_t %tmp2, 1
310 %tmp5 = extractvalue %struct.__neon_int32x4x4_t %tmp2, 2
311 %tmp6 = extractvalue %struct.__neon_int32x4x4_t %tmp2, 3
312 %tmp7 = add <4 x i32> %tmp3, %tmp4
313 %tmp8 = add <4 x i32> %tmp5, %tmp6
314 %tmp9 = add <4 x i32> %tmp7, %tmp8
315 ; CHECK: bic r0, r0, #3221225472
316 ; CHECK-NEXT: vld4.32 {{{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}, {{d[0-9]+\ [[0-9]\]}}, {{d[0-9]+\[[0-9]\]}}}, [r0]
317 ret <4 x i32> %tmp9
318 }
319
OLDNEW
« no previous file with comments | « test/NaCl/ARM/neon-vlddup-sandboxing.ll ('k') | test/NaCl/ARM/neon-vst1-sandboxing.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698