allocation.ll revision 2dcbc3d33443c1224085cab081b634f99327c159
1target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:64-n32-S64"
2target triple = "armv7-none-linux-gnueabi"
3
4declare i8* @rsOffset([1 x i32] %a.coerce, i32 %sizeOf, i32 %x, i32 %y, i32 %z)
5declare i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z)
6
7; The loads and stores in this file are annotated with RenderScript-specific
8; information for the type based alias analysis, such that the TBAA analysis
9; understands that loads and stores from two allocations with different types
10; can never access the same memory element. This is different from C, where
11; a char or uchar load/store is special as it can alias with about everything.
12;
13; The TBAA tree in this file has the the node "RenderScript Distinct TBAA" as
14; its root.
15; This means all loads/stores that share this common root can be proven to not
16; alias. However, the alias analysis still has to assume MayAlias between
17; memory accesses in this file and memory accesses annotated with the C/C++
18; TBAA metadata.
19; A node named "RenderScript TBAA" wraps our distinct TBAA root node.
20; If we can ensure that all accesses to elements loaded from RenderScript
21; allocations are either annotated with the RenderScript TBAA information or
22; not annotated at all, but never annotated with the C/C++ metadata, we
23; can add the "RenderScript TBAA" tree under the C/C++ TBAA tree. This enables
24; TBAA to prove that an access to data from the RenderScript allocation
25; does not alias with a load/store accessing something not part of a RenderScript
26; allocation.
27; We do this by swapping the second operand of "RenderScript TBAA" with the node
28; for "Simple C/C++ TBAA", thus connecting these TBAA groups. The other root
29; node (with no children) can then safely be dropped from the analysis.
30
31!13 = !{!"RenderScript Distinct TBAA"}
32!14 = !{!"RenderScript TBAA", !13}
33!15 = !{!"allocation", !14}
34
35!21 = !{!"char", !15}
36define void @rsSetElementAtImpl_char([1 x i32] %a.coerce, i8 signext %val, i32 %x, i32 %y, i32 %z) #1 {
37  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 1, i32 %x, i32 %y, i32 %z) #2
38  store i8 %val, i8* %1, align 1, !tbaa !21
39  ret void
40}
41
42define signext i8 @rsGetElementAtImpl_char([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
43  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 1, i32 %x, i32 %y, i32 %z) #2
44  %2 = load i8, i8* %1, align 1, !tbaa !21
45  ret i8 %2
46}
47
48!22 = !{!"char2", !15}
49define void @rsSetElementAtImpl_char2([1 x i32] %a.coerce, <2 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
50  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
51  %2 = bitcast i8* %1 to <2 x i8>*
52  store <2 x i8> %val, <2 x i8>* %2, align 2, !tbaa !22
53  ret void
54}
55
56define <2 x i8> @rsGetElementAtImpl_char2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
57  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
58  %2 = bitcast i8* %1 to <2 x i8>*
59  %3 = load <2 x i8>, <2 x i8>* %2, align 2, !tbaa !22
60  ret <2 x i8> %3
61}
62
63!23 = !{!"char3", !15}
64define void @rsSetElementAtImpl_char3([1 x i32] %a.coerce, <3 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
65  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
66  %2 = shufflevector <3 x i8> %val, <3 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
67  %3 = bitcast i8* %1 to <4 x i8>*
68  store <4 x i8> %2, <4 x i8>* %3, align 4, !tbaa !23
69  ret void
70}
71
72define <3 x i8> @rsGetElementAtImpl_char3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
73  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
74  %2 = bitcast i8* %1 to <4 x i8>*
75  %3 = load <4 x i8>, <4 x i8>* %2, align 4, !tbaa !23
76  %4 = shufflevector <4 x i8> %3, <4 x i8> undef, <3 x i32> <i32 0, i32 1, i32 2>
77  ret <3 x i8> %4
78}
79
80!24 = !{!"char4", !15}
81define void @rsSetElementAtImpl_char4([1 x i32] %a.coerce, <4 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
82  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
83  %2 = bitcast i8* %1 to <4 x i8>*
84  store <4 x i8> %val, <4 x i8>* %2, align 4, !tbaa !24
85  ret void
86}
87
88define <4 x i8> @rsGetElementAtImpl_char4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
89  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
90  %2 = bitcast i8* %1 to <4 x i8>*
91  %3 = load <4 x i8>, <4 x i8>* %2, align 4, !tbaa !24
92  ret <4 x i8> %3
93}
94
95!25 = !{!"uchar", !15}
96define void @rsSetElementAtImpl_uchar([1 x i32] %a.coerce, i8 zeroext %val, i32 %x, i32 %y, i32 %z) #1 {
97  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 1, i32 %x, i32 %y, i32 %z) #2
98  store i8 %val, i8* %1, align 1, !tbaa !25
99  ret void
100}
101
102define zeroext i8 @rsGetElementAtImpl_uchar([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
103  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 1, i32 %x, i32 %y, i32 %z) #2
104  %2 = load i8, i8* %1, align 1, !tbaa !25
105  ret i8 %2
106}
107
108!26 = !{!"uchar2", !15}
109define void @rsSetElementAtImpl_uchar2([1 x i32] %a.coerce, <2 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
110  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
111  %2 = bitcast i8* %1 to <2 x i8>*
112  store <2 x i8> %val, <2 x i8>* %2, align 2, !tbaa !26
113  ret void
114}
115
116define <2 x i8> @rsGetElementAtImpl_uchar2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
117  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
118  %2 = bitcast i8* %1 to <2 x i8>*
119  %3 = load <2 x i8>, <2 x i8>* %2, align 2, !tbaa !26
120  ret <2 x i8> %3
121}
122
123!27 = !{!"uchar3", !15}
124define void @rsSetElementAtImpl_uchar3([1 x i32] %a.coerce, <3 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
125  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
126  %2 = shufflevector <3 x i8> %val, <3 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
127  %3 = bitcast i8* %1 to <4 x i8>*
128  store <4 x i8> %2, <4 x i8>* %3, align 4, !tbaa !27
129  ret void
130}
131
132define <3 x i8> @rsGetElementAtImpl_uchar3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
133  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
134  %2 = bitcast i8* %1 to <4 x i8>*
135  %3 = load <4 x i8>, <4 x i8>* %2, align 4, !tbaa !27
136  %4 = shufflevector <4 x i8> %3, <4 x i8> undef, <3 x i32> <i32 0, i32 1, i32 2>
137  ret <3 x i8> %4
138}
139
140!28 = !{!"uchar4", !15}
141define void @rsSetElementAtImpl_uchar4([1 x i32] %a.coerce, <4 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
142  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
143  %2 = bitcast i8* %1 to <4 x i8>*
144  store <4 x i8> %val, <4 x i8>* %2, align 4, !tbaa !28
145  ret void
146}
147
148define <4 x i8> @rsGetElementAtImpl_uchar4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
149  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
150  %2 = bitcast i8* %1 to <4 x i8>*
151  %3 = load <4 x i8>, <4 x i8>* %2, align 4, !tbaa !28
152  ret <4 x i8> %3
153}
154
155!29 = !{!"short", !15}
156define void @rsSetElementAtImpl_short([1 x i32] %a.coerce, i16 signext %val, i32 %x, i32 %y, i32 %z) #1 {
157  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
158  %2 = bitcast i8* %1 to i16*
159  store i16 %val, i16* %2, align 2, !tbaa !29
160  ret void
161}
162
163define signext i16 @rsGetElementAtImpl_short([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
164  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
165  %2 = bitcast i8* %1 to i16*
166  %3 = load i16, i16* %2, align 2, !tbaa !29
167  ret i16 %3
168}
169
170!30 = !{!"short2", !15}
171define void @rsSetElementAtImpl_short2([1 x i32] %a.coerce, <2 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
172  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
173  %2 = bitcast i8* %1 to <2 x i16>*
174  store <2 x i16> %val, <2 x i16>* %2, align 4, !tbaa !30
175  ret void
176}
177
178define <2 x i16> @rsGetElementAtImpl_short2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
179  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
180  %2 = bitcast i8* %1 to <2 x i16>*
181  %3 = load <2 x i16>, <2 x i16>* %2, align 4, !tbaa !30
182  ret <2 x i16> %3
183}
184
185!31 = !{!"short3", !15}
186define void @rsSetElementAtImpl_short3([1 x i32] %a.coerce, <3 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
187  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
188  %2 = shufflevector <3 x i16> %val, <3 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
189  %3 = bitcast i8* %1 to <4 x i16>*
190  store <4 x i16> %2, <4 x i16>* %3, align 8, !tbaa !31
191  ret void
192}
193
194define <3 x i16> @rsGetElementAtImpl_short3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
195  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
196  %2 = bitcast i8* %1 to <4 x i16>*
197  %3 = load <4 x i16>, <4 x i16>* %2, align 8, !tbaa !31
198  %4 = shufflevector <4 x i16> %3, <4 x i16> undef, <3 x i32> <i32 0, i32 1, i32 2>
199  ret <3 x i16> %4
200}
201
202!32 = !{!"short4", !15}
203define void @rsSetElementAtImpl_short4([1 x i32] %a.coerce, <4 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
204  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
205  %2 = bitcast i8* %1 to <4 x i16>*
206  store <4 x i16> %val, <4 x i16>* %2, align 8, !tbaa !32
207  ret void
208}
209
210define <4 x i16> @rsGetElementAtImpl_short4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
211  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
212  %2 = bitcast i8* %1 to <4 x i16>*
213  %3 = load <4 x i16>, <4 x i16>* %2, align 8, !tbaa !32
214  ret <4 x i16> %3
215}
216
217!33 = !{!"ushort", !15}
218define void @rsSetElementAtImpl_ushort([1 x i32] %a.coerce, i16 zeroext %val, i32 %x, i32 %y, i32 %z) #1 {
219  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
220  %2 = bitcast i8* %1 to i16*
221  store i16 %val, i16* %2, align 2, !tbaa !33
222  ret void
223}
224
225define zeroext i16 @rsGetElementAtImpl_ushort([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
226  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
227  %2 = bitcast i8* %1 to i16*
228  %3 = load i16, i16* %2, align 2, !tbaa !33
229  ret i16 %3
230}
231
232!34 = !{!"ushort2", !15}
233define void @rsSetElementAtImpl_ushort2([1 x i32] %a.coerce, <2 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
234  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
235  %2 = bitcast i8* %1 to <2 x i16>*
236  store <2 x i16> %val, <2 x i16>* %2, align 4, !tbaa !34
237  ret void
238}
239
240define <2 x i16> @rsGetElementAtImpl_ushort2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
241  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
242  %2 = bitcast i8* %1 to <2 x i16>*
243  %3 = load <2 x i16>, <2 x i16>* %2, align 4, !tbaa !34
244  ret <2 x i16> %3
245}
246
247!35 = !{!"ushort3", !15}
248define void @rsSetElementAtImpl_ushort3([1 x i32] %a.coerce, <3 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
249  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
250  %2 = shufflevector <3 x i16> %val, <3 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
251  %3 = bitcast i8* %1 to <4 x i16>*
252  store <4 x i16> %2, <4 x i16>* %3, align 8, !tbaa !35
253  ret void
254}
255
256define <3 x i16> @rsGetElementAtImpl_ushort3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
257  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
258  %2 = bitcast i8* %1 to <4 x i16>*
259  %3 = load <4 x i16>, <4 x i16>* %2, align 8, !tbaa !35
260  %4 = shufflevector <4 x i16> %3, <4 x i16> undef, <3 x i32> <i32 0, i32 1, i32 2>
261  ret <3 x i16> %4
262}
263
264!36 = !{!"ushort4", !15}
265define void @rsSetElementAtImpl_ushort4([1 x i32] %a.coerce, <4 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
266  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
267  %2 = bitcast i8* %1 to <4 x i16>*
268  store <4 x i16> %val, <4 x i16>* %2, align 8, !tbaa !36
269  ret void
270}
271
272define <4 x i16> @rsGetElementAtImpl_ushort4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
273  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
274  %2 = bitcast i8* %1 to <4 x i16>*
275  %3 = load <4 x i16>, <4 x i16>* %2, align 8, !tbaa !36
276  ret <4 x i16> %3
277}
278
279!37 = !{!"int", !15}
280define void @rsSetElementAtImpl_int([1 x i32] %a.coerce, i32 %val, i32 %x, i32 %y, i32 %z) #1 {
281  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
282  %2 = bitcast i8* %1 to i32*
283  store i32 %val, i32* %2, align 4, !tbaa !37
284  ret void
285}
286
287define i32 @rsGetElementAtImpl_int([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
288  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
289  %2 = bitcast i8* %1 to i32*
290  %3 = load i32, i32* %2, align 4, !tbaa !37
291  ret i32 %3
292}
293
294!38 = !{!"int2", !15}
295define void @rsSetElementAtImpl_int2([1 x i32] %a.coerce, <2 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
296  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
297  %2 = bitcast i8* %1 to <2 x i32>*
298  store <2 x i32> %val, <2 x i32>* %2, align 8, !tbaa !38
299  ret void
300}
301
302define <2 x i32> @rsGetElementAtImpl_int2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
303  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
304  %2 = bitcast i8* %1 to <2 x i32>*
305  %3 = load <2 x i32>, <2 x i32>* %2, align 8, !tbaa !38
306  ret <2 x i32> %3
307}
308
309!39 = !{!"int3", !15}
310define void @rsSetElementAtImpl_int3([1 x i32] %a.coerce, <3 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
311  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
312  %2 = shufflevector <3 x i32> %val, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
313  %3 = bitcast i8* %1 to <4 x i32>*
314  store <4 x i32> %2, <4 x i32>* %3, align 16, !tbaa !39
315  ret void
316}
317
318define <3 x i32> @rsGetElementAtImpl_int3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
319  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
320  %2 = bitcast i8* %1 to <4 x i32>*
321  %3 = load <4 x i32>, <4 x i32>* %2, align 8, !tbaa !39
322  %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
323  ret <3 x i32> %4
324}
325
326!40 = !{!"int4", !15}
327define void @rsSetElementAtImpl_int4([1 x i32] %a.coerce, <4 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
328  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
329  %2 = bitcast i8* %1 to <4 x i32>*
330  store <4 x i32> %val, <4 x i32>* %2, align 16, !tbaa !40
331  ret void
332}
333
334define <4 x i32> @rsGetElementAtImpl_int4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
335  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
336  %2 = bitcast i8* %1 to <4 x i32>*
337  %3 = load <4 x i32>, <4 x i32>* %2, align 16, !tbaa !40
338  ret <4 x i32> %3
339}
340
341!41 = !{!"uint", !15}
342define void @rsSetElementAtImpl_uint([1 x i32] %a.coerce, i32 %val, i32 %x, i32 %y, i32 %z) #1 {
343  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
344  %2 = bitcast i8* %1 to i32*
345  store i32 %val, i32* %2, align 4, !tbaa !41
346  ret void
347}
348
349define i32 @rsGetElementAtImpl_uint([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
350  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
351  %2 = bitcast i8* %1 to i32*
352  %3 = load i32, i32* %2, align 4, !tbaa !41
353  ret i32 %3
354}
355
356!42 = !{!"uint2", !15}
357define void @rsSetElementAtImpl_uint2([1 x i32] %a.coerce, <2 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
358  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
359  %2 = bitcast i8* %1 to <2 x i32>*
360  store <2 x i32> %val, <2 x i32>* %2, align 8, !tbaa !42
361  ret void
362}
363
364define <2 x i32> @rsGetElementAtImpl_uint2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
365  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
366  %2 = bitcast i8* %1 to <2 x i32>*
367  %3 = load <2 x i32>, <2 x i32>* %2, align 8, !tbaa !42
368  ret <2 x i32> %3
369}
370
371!43 = !{!"uint3", !15}
372define void @rsSetElementAtImpl_uint3([1 x i32] %a.coerce, <3 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
373  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
374  %2 = shufflevector <3 x i32> %val, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
375  %3 = bitcast i8* %1 to <4 x i32>*
376  store <4 x i32> %2, <4 x i32>* %3, align 16, !tbaa !43
377  ret void
378}
379
380define <3 x i32> @rsGetElementAtImpl_uint3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
381  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
382  %2 = bitcast i8* %1 to <4 x i32>*
383  %3 = load <4 x i32>, <4 x i32>* %2, align 8, !tbaa !43
384  %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
385  ret <3 x i32> %4
386}
387
388!44 = !{!"uint4", !15}
389define void @rsSetElementAtImpl_uint4([1 x i32] %a.coerce, <4 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
390  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
391  %2 = bitcast i8* %1 to <4 x i32>*
392  store <4 x i32> %val, <4 x i32>* %2, align 16, !tbaa !44
393  ret void
394}
395
396define <4 x i32> @rsGetElementAtImpl_uint4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
397  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
398  %2 = bitcast i8* %1 to <4 x i32>*
399  %3 = load <4 x i32>, <4 x i32>* %2, align 16, !tbaa !44
400  ret <4 x i32> %3
401}
402
403!45 = !{!"long", !15}
404define void @rsSetElementAtImpl_long([1 x i32] %a.coerce, i64 %val, i32 %x, i32 %y, i32 %z) #1 {
405  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
406  %2 = bitcast i8* %1 to i64*
407  store i64 %val, i64* %2, align 8, !tbaa !45
408  ret void
409}
410
411define i64 @rsGetElementAtImpl_long([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
412  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
413  %2 = bitcast i8* %1 to i64*
414  %3 = load i64, i64* %2, align 8, !tbaa !45
415  ret i64 %3
416}
417
418!46 = !{!"long2", !15}
419define void @rsSetElementAtImpl_long2([1 x i32] %a.coerce, <2 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
420  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
421  %2 = bitcast i8* %1 to <2 x i64>*
422  store <2 x i64> %val, <2 x i64>* %2, align 16, !tbaa !46
423  ret void
424}
425
426define <2 x i64> @rsGetElementAtImpl_long2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
427  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
428  %2 = bitcast i8* %1 to <2 x i64>*
429  %3 = load <2 x i64>, <2 x i64>* %2, align 16, !tbaa !46
430  ret <2 x i64> %3
431}
432
433!47 = !{!"long3", !15}
434define void @rsSetElementAtImpl_long3([1 x i32] %a.coerce, <3 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
435  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
436  %2 = shufflevector <3 x i64> %val, <3 x i64> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
437  %3 = bitcast i8* %1 to <4 x i64>*
438  store <4 x i64> %2, <4 x i64>* %3, align 32, !tbaa !47
439  ret void
440}
441
442define void @rsGetElementAtImpl_long3(<3 x i64>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
443  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
444  %2 = bitcast i8* %1 to <4 x i64>*
445  %3 = load <4 x i64>, <4 x i64>* %2, align 32
446  %4 = bitcast <3 x i64>* %agg.result to <4 x i64>*
447  store <4 x i64> %3, <4 x i64>* %4, align 32, !tbaa !47
448  ret void
449}
450
451!48 = !{!"long4", !15}
452define void @rsSetElementAtImpl_long4([1 x i32] %a.coerce, <4 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
453  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
454  %2 = bitcast i8* %1 to <4 x i64>*
455  store <4 x i64> %val, <4 x i64>* %2, align 32, !tbaa !48
456  ret void
457}
458
459define void @rsGetElementAtImpl_long4(<4 x i64>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
460  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
461  %2 = bitcast i8* %1 to <4 x i64>*
462  %3 = load <4 x i64>, <4 x i64>* %2, align 32, !tbaa !15
463  store <4 x i64> %3, <4 x i64>* %agg.result, align 32, !tbaa !48
464  ret void
465}
466
467!49 = !{!"ulong", !15}
468define void @rsSetElementAtImpl_ulong([1 x i32] %a.coerce, i64 %val, i32 %x, i32 %y, i32 %z) #1 {
469  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
470  %2 = bitcast i8* %1 to i64*
471  store i64 %val, i64* %2, align 8, !tbaa !49
472  ret void
473}
474
475define i64 @rsGetElementAtImpl_ulong([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
476  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
477  %2 = bitcast i8* %1 to i64*
478  %3 = load i64, i64* %2, align 8, !tbaa !49
479  ret i64 %3
480}
481
482!50 = !{!"ulong2", !15}
483define void @rsSetElementAtImpl_ulong2([1 x i32] %a.coerce, <2 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
484  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
485  %2 = bitcast i8* %1 to <2 x i64>*
486  store <2 x i64> %val, <2 x i64>* %2, align 16, !tbaa !50
487  ret void
488}
489
490define <2 x i64> @rsGetElementAtImpl_ulong2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
491  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
492  %2 = bitcast i8* %1 to <2 x i64>*
493  %3 = load <2 x i64>, <2 x i64>* %2, align 16, !tbaa !50
494  ret <2 x i64> %3
495}
496
497!51 = !{!"ulong3", !15}
498define void @rsSetElementAtImpl_ulong3([1 x i32] %a.coerce, <3 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
499  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
500  %2 = shufflevector <3 x i64> %val, <3 x i64> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
501  %3 = bitcast i8* %1 to <4 x i64>*
502  store <4 x i64> %2, <4 x i64>* %3, align 32, !tbaa !51
503  ret void
504}
505
506define void @rsGetElementAtImpl_ulong3(<3 x i64>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
507  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
508  %2 = bitcast i8* %1 to <4 x i64>*
509  %3 = load <4 x i64>, <4 x i64>* %2, align 32
510  %4 = bitcast <3 x i64>* %agg.result to <4 x i64>*
511  store <4 x i64> %3, <4 x i64>* %4, align 32, !tbaa !51
512  ret void
513}
514
515!52 = !{!"ulong4", !15}
516define void @rsSetElementAtImpl_ulong4([1 x i32] %a.coerce, <4 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
517  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
518  %2 = bitcast i8* %1 to <4 x i64>*
519  store <4 x i64> %val, <4 x i64>* %2, align 32, !tbaa !52
520  ret void
521}
522
523define void @rsGetElementAtImpl_ulong4(<4 x i64>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
524  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
525  %2 = bitcast i8* %1 to <4 x i64>*
526  %3 = load <4 x i64>, <4 x i64>* %2, align 32, !tbaa !15
527  store <4 x i64> %3, <4 x i64>* %agg.result, align 32, !tbaa !52
528  ret void
529}
530
531!53 = !{!"float", !15}
532define void @rsSetElementAtImpl_float([1 x i32] %a.coerce, float %val, i32 %x, i32 %y, i32 %z) #1 {
533  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
534  %2 = bitcast i8* %1 to float*
535  store float %val, float* %2, align 4, !tbaa !53
536  ret void
537}
538
539define float @rsGetElementAtImpl_float([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
540  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
541  %2 = bitcast i8* %1 to float*
542  %3 = load float, float* %2, align 4, !tbaa !53
543  ret float %3
544}
545
546!54 = !{!"float2", !15}
547define void @rsSetElementAtImpl_float2([1 x i32] %a.coerce, <2 x float> %val, i32 %x, i32 %y, i32 %z) #1 {
548  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
549  %2 = bitcast i8* %1 to <2 x float>*
550  store <2 x float> %val, <2 x float>* %2, align 8, !tbaa !54
551  ret void
552}
553
554define <2 x float> @rsGetElementAtImpl_float2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
555  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
556  %2 = bitcast i8* %1 to <2 x float>*
557  %3 = load <2 x float>, <2 x float>* %2, align 8, !tbaa !54
558  ret <2 x float> %3
559}
560
561!55 = !{!"float3", !15}
562define void @rsSetElementAtImpl_float3([1 x i32] %a.coerce, <3 x float> %val, i32 %x, i32 %y, i32 %z) #1 {
563  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
564  %2 = shufflevector <3 x float> %val, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
565  %3 = bitcast i8* %1 to <4 x float>*
566  store <4 x float> %2, <4 x float>* %3, align 16, !tbaa !55
567  ret void
568}
569
570define <3 x float> @rsGetElementAtImpl_float3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
571  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
572  %2 = bitcast i8* %1 to <4 x float>*
573  %3 = load <4 x float>, <4 x float>* %2, align 8, !tbaa !55
574  %4 = shufflevector <4 x float> %3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
575  ret <3 x float> %4
576}
577
578!56 = !{!"float4", !15}
579define void @rsSetElementAtImpl_float4([1 x i32] %a.coerce, <4 x float> %val, i32 %x, i32 %y, i32 %z) #1 {
580  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
581  %2 = bitcast i8* %1 to <4 x float>*
582  store <4 x float> %val, <4 x float>* %2, align 16, !tbaa !56
583  ret void
584}
585
586define <4 x float> @rsGetElementAtImpl_float4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
587  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
588  %2 = bitcast i8* %1 to <4 x float>*
589  %3 = load <4 x float>, <4 x float>* %2, align 16, !tbaa !56
590  ret <4 x float> %3
591}
592
593!57 = !{!"double", !15}
594define void @rsSetElementAtImpl_double([1 x i32] %a.coerce, double %val, i32 %x, i32 %y, i32 %z) #1 {
595  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
596  %2 = bitcast i8* %1 to double*
597  store double %val, double* %2, align 8, !tbaa !57
598  ret void
599}
600
601define double @rsGetElementAtImpl_double([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
602  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
603  %2 = bitcast i8* %1 to double*
604  %3 = load double, double* %2, align 8, !tbaa !57
605  ret double %3
606}
607
608!58 = !{!"double2", !15}
609define void @rsSetElementAtImpl_double2([1 x i32] %a.coerce, <2 x double> %val, i32 %x, i32 %y, i32 %z) #1 {
610  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
611  %2 = bitcast i8* %1 to <2 x double>*
612  store <2 x double> %val, <2 x double>* %2, align 16, !tbaa !58
613  ret void
614}
615
616define <2 x double> @rsGetElementAtImpl_double2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
617  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 16, i32 %x, i32 %y, i32 %z) #2
618  %2 = bitcast i8* %1 to <2 x double>*
619  %3 = load <2 x double>, <2 x double>* %2, align 16, !tbaa !58
620  ret <2 x double> %3
621}
622
623!59 = !{!"double3", !15}
624define void @rsSetElementAtImpl_double3([1 x i32] %a.coerce, <3 x double> %val, i32 %x, i32 %y, i32 %z) #1 {
625  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
626  %2 = shufflevector <3 x double> %val, <3 x double> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
627  %3 = bitcast i8* %1 to <4 x double>*
628  store <4 x double> %2, <4 x double>* %3, align 32, !tbaa !59
629  ret void
630}
631
632
633define void @rsGetElementAtImpl_double3(<3 x double>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
634  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
635  %2 = bitcast i8* %1 to <4 x double>*
636  %3 = load <4 x double>, <4 x double>* %2, align 32
637  %4 = bitcast <3 x double>* %agg.result to <4 x double>*
638  store <4 x double> %3, <4 x double>* %4, align 32, !tbaa !59
639  ret void
640}
641
642!60 = !{!"double4", !15}
643define void @rsSetElementAtImpl_double4([1 x i32] %a.coerce, <4 x double> %val, i32 %x, i32 %y, i32 %z) #1 {
644  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
645  %2 = bitcast i8* %1 to <4 x double>*
646  store <4 x double> %val, <4 x double>* %2, align 32, !tbaa !60
647  ret void
648}
649define void @rsGetElementAtImpl_double4(<4 x double>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
650  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
651  %2 = bitcast i8* %1 to <4 x double>*
652  %3 = load <4 x double>, <4 x double>* %2, align 32, !tbaa !15
653  store <4 x double> %3, <4 x double>* %agg.result, align 32, !tbaa !60
654  ret void
655}
656
657!61 = !{!"half", !15}
658define void @rsSetElementAtImpl_half([1 x i32] %a.coerce, half %val, i32 %x, i32 %y, i32 %z) #1 {
659  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
660  %2 = bitcast i8* %1 to half*
661  store half %val, half* %2, align 2, !tbaa !61
662  ret void
663}
664
665define half @rsGetElementAtImpl_half([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
666  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
667  %2 = bitcast i8* %1 to half*
668  %3 = load half, half* %2, align 2, !tbaa !61
669  ret half %3
670}
671
672!62 = !{!"half2", !15}
673define void @rsSetElementAtImpl_half2([1 x i32] %a.coerce, <2 x half> %val, i32 %x, i32 %y, i32 %z) #1 {
674  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
675  %2 = bitcast i8* %1 to <2 x half>*
676  store <2 x half> %val, <2 x half>* %2, align 4, !tbaa !62
677  ret void
678}
679
680define <2 x half> @rsGetElementAtImpl_half2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
681  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
682  %2 = bitcast i8* %1 to <2 x half>*
683  %3 = load <2 x half>, <2 x half>* %2, align 4, !tbaa !62
684  ret <2 x half> %3
685}
686
687!63 = !{!"half3", !15}
688define void @rsSetElementAtImpl_half3([1 x i32] %a.coerce, <3 x half> %val, i32 %x, i32 %y, i32 %z) #1 {
689  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
690  %2 = shufflevector <3 x half> %val, <3 x half> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
691  %3 = bitcast i8* %1 to <4 x half>*
692  store <4 x half> %2, <4 x half>* %3, align 8, !tbaa !63
693  ret void
694}
695
696define void @rsGetElementAtImpl_half3(<3 x half>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
697  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 32, i32 %x, i32 %y, i32 %z) #2
698  %2 = bitcast i8* %1 to <4 x half>*
699  %3 = load <4 x half>, <4 x half>* %2, align 8
700  %4 = bitcast <3 x half>* %agg.result to <4 x half>*
701  store <4 x half> %3, <4 x half>* %4, align 8, !tbaa !63
702  ret void
703}
704
705!64 = !{!"half4", !15}
706define void @rsSetElementAtImpl_half4([1 x i32] %a.coerce, <4 x half> %val, i32 %x, i32 %y, i32 %z) #1 {
707  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
708  %2 = bitcast i8* %1 to <4 x half>*
709  store <4 x half> %val, <4 x half>* %2, align 8, !tbaa !64
710  ret void
711}
712
713define <4 x half> @rsGetElementAtImpl_half4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
714  %1 = tail call i8* @rsOffset([1 x i32] %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
715  %2 = bitcast i8* %1 to <4 x half>*
716  %3 = load <4 x half>, <4 x half>* %2, align 8, !tbaa !64
717  ret <4 x half> %3
718}
719
720define void @__rsAllocationVLoadXImpl_long4(<4 x i64>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
721  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
722  %2 = bitcast i8* %1 to <4 x i64>*
723  %3 = load <4 x i64>, <4 x i64>* %2, align 8
724  store <4 x i64> %3, <4 x i64>* %agg.result, align 32, !tbaa !52
725  ret void
726}
727define void @__rsAllocationVLoadXImpl_long3(<3 x i64>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
728  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
729  %2 = bitcast i8* %1 to <4 x i64>*
730  %3 = load <4 x i64>, <4 x i64>* %2, align 8
731  %4 = bitcast <3 x i64>* %agg.result to <4 x i64>*
732  store <4 x i64> %3, <4 x i64>* %4, align 32, !tbaa !47
733  ret void
734}
735define <2 x i64> @__rsAllocationVLoadXImpl_long2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
736  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
737  %2 = bitcast i8* %1 to <2 x i64>*
738  %3 = load <2 x i64>, <2 x i64>* %2, align 8
739  ret <2 x i64> %3
740}
741
742define void @__rsAllocationVLoadXImpl_ulong4(<4 x i64>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
743  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
744  %2 = bitcast i8* %1 to <4 x i64>*
745  %3 = load <4 x i64>, <4 x i64>* %2, align 8
746  store <4 x i64> %3, <4 x i64>* %agg.result, align 32, !tbaa !48
747  ret void
748}
749define void @__rsAllocationVLoadXImpl_ulong3(<3 x i64>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
750  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
751  %2 = bitcast i8* %1 to <4 x i64>*
752  %3 = load <4 x i64>, <4 x i64>* %2, align 8
753  %4 = bitcast <3 x i64>* %agg.result to <4 x i64>*
754  store <4 x i64> %3, <4 x i64>* %4, align 32, !tbaa !51
755  ret void
756}
757define <2 x i64> @__rsAllocationVLoadXImpl_ulong2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
758  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
759  %2 = bitcast i8* %1 to <2 x i64>*
760  %3 = load <2 x i64>, <2 x i64>* %2, align 8
761  ret <2 x i64> %3
762}
763
764define <4 x i32> @__rsAllocationVLoadXImpl_int4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
765  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
766  %2 = bitcast i8* %1 to <4 x i32>*
767  %3 = load <4 x i32>, <4 x i32>* %2, align 4
768  ret <4 x i32> %3
769}
770define <3 x i32> @__rsAllocationVLoadXImpl_int3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
771  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
772  %2 = bitcast i8* %1 to <3 x i32>*
773  %3 = load <3 x i32>, <3 x i32>* %2, align 4
774  ret <3 x i32> %3
775}
776define <2 x i32> @__rsAllocationVLoadXImpl_int2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
777  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
778  %2 = bitcast i8* %1 to <2 x i32>*
779  %3 = load <2 x i32>, <2 x i32>* %2, align 4
780  ret <2 x i32> %3
781}
782
783define <4 x i32> @__rsAllocationVLoadXImpl_uint4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
784  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
785  %2 = bitcast i8* %1 to <4 x i32>*
786  %3 = load <4 x i32>, <4 x i32>* %2, align 4
787  ret <4 x i32> %3
788}
789define <3 x i32> @__rsAllocationVLoadXImpl_uint3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
790  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
791  %2 = bitcast i8* %1 to <3 x i32>*
792  %3 = load <3 x i32>, <3 x i32>* %2, align 4
793  ret <3 x i32> %3
794}
795define <2 x i32> @__rsAllocationVLoadXImpl_uint2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
796  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
797  %2 = bitcast i8* %1 to <2 x i32>*
798  %3 = load <2 x i32>, <2 x i32>* %2, align 4
799  ret <2 x i32> %3
800}
801
802define <4 x i16> @__rsAllocationVLoadXImpl_short4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
803  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
804  %2 = bitcast i8* %1 to <4 x i16>*
805  %3 = load <4 x i16>, <4 x i16>* %2, align 2
806  ret <4 x i16> %3
807}
808define <3 x i16> @__rsAllocationVLoadXImpl_short3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
809  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
810  %2 = bitcast i8* %1 to <3 x i16>*
811  %3 = load <3 x i16>, <3 x i16>* %2, align 2
812  ret <3 x i16> %3
813}
814define <2 x i16> @__rsAllocationVLoadXImpl_short2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
815  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
816  %2 = bitcast i8* %1 to <2 x i16>*
817  %3 = load <2 x i16>, <2 x i16>* %2, align 2
818  ret <2 x i16> %3
819}
820
821define <4 x i16> @__rsAllocationVLoadXImpl_ushort4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
822  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
823  %2 = bitcast i8* %1 to <4 x i16>*
824  %3 = load <4 x i16>, <4 x i16>* %2, align 2
825  ret <4 x i16> %3
826}
827define <3 x i16> @__rsAllocationVLoadXImpl_ushort3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
828  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
829  %2 = bitcast i8* %1 to <3 x i16>*
830  %3 = load <3 x i16>, <3 x i16>* %2, align 2
831  ret <3 x i16> %3
832}
833define <2 x i16> @__rsAllocationVLoadXImpl_ushort2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
834  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
835  %2 = bitcast i8* %1 to <2 x i16>*
836  %3 = load <2 x i16>, <2 x i16>* %2, align 2
837  ret <2 x i16> %3
838}
839
840define <4 x i8> @__rsAllocationVLoadXImpl_char4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
841  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
842  %2 = bitcast i8* %1 to <4 x i8>*
843  %3 = load <4 x i8>, <4 x i8>* %2, align 1
844  ret <4 x i8> %3
845}
846define <3 x i8> @__rsAllocationVLoadXImpl_char3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
847  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
848  %2 = bitcast i8* %1 to <3 x i8>*
849  %3 = load <3 x i8>, <3 x i8>* %2, align 1
850  ret <3 x i8> %3
851}
852define <2 x i8> @__rsAllocationVLoadXImpl_char2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
853  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
854  %2 = bitcast i8* %1 to <2 x i8>*
855  %3 = load <2 x i8>, <2 x i8>* %2, align 1
856  ret <2 x i8> %3
857}
858
859define <4 x i8> @__rsAllocationVLoadXImpl_uchar4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
860  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
861  %2 = bitcast i8* %1 to <4 x i8>*
862  %3 = load <4 x i8>, <4 x i8>* %2, align 1
863  ret <4 x i8> %3
864}
865define <3 x i8> @__rsAllocationVLoadXImpl_uchar3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
866  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
867  %2 = bitcast i8* %1 to <3 x i8>*
868  %3 = load <3 x i8>, <3 x i8>* %2, align 1
869  ret <3 x i8> %3
870}
871define <2 x i8> @__rsAllocationVLoadXImpl_uchar2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
872  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
873  %2 = bitcast i8* %1 to <2 x i8>*
874  %3 = load <2 x i8>, <2 x i8>* %2, align 1
875  ret <2 x i8> %3
876}
877
878define <4 x float> @__rsAllocationVLoadXImpl_float4([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
879  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
880  %2 = bitcast i8* %1 to <4 x float>*
881  %3 = load <4 x float>, <4 x float>* %2, align 4
882  ret <4 x float> %3
883}
884define <3 x float> @__rsAllocationVLoadXImpl_float3([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
885  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
886  %2 = bitcast i8* %1 to <3 x float>*
887  %3 = load <3 x float>, <3 x float>* %2, align 4
888  ret <3 x float> %3
889}
890define <2 x float> @__rsAllocationVLoadXImpl_float2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
891  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
892  %2 = bitcast i8* %1 to <2 x float>*
893  %3 = load <2 x float>, <2 x float>* %2, align 4
894  ret <2 x float> %3
895}
896
897define void @__rsAllocationVLoadXImpl_double4(<4 x double>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
898  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
899  %2 = bitcast i8* %1 to <4 x double>*
900  %3 = load <4 x double>, <4 x double>* %2, align 8
901  store <4 x double> %3, <4 x double>* %agg.result, align 32, !tbaa !60
902  ret void
903}
904define void @__rsAllocationVLoadXImpl_double3(<3 x double>* noalias nocapture sret %agg.result, [1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
905  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
906  %2 = bitcast i8* %1 to <4 x double>*
907  %3 = load <4 x double>, <4 x double>* %2, align 8
908  %4 = bitcast <3 x double>* %agg.result to <4 x double>*
909  store <4 x double> %3, <4 x double>* %4, align 32, !tbaa !59
910  ret void
911}
912define <2 x double> @__rsAllocationVLoadXImpl_double2([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
913  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
914  %2 = bitcast i8* %1 to <2 x double>*
915  %3 = load <2 x double>, <2 x double>* %2, align 8
916  ret <2 x double> %3
917}
918
919
920define void @__rsAllocationVStoreXImpl_long4([1 x i32] %a.coerce, <4 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
921  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
922  %2 = bitcast i8* %1 to <4 x i64>*
923  store <4 x i64> %val, <4 x i64>* %2, align 8
924  ret void
925}
926define void @__rsAllocationVStoreXImpl_long3([1 x i32] %a.coerce, <3 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
927  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
928  %2 = bitcast i8* %1 to <3 x i64>*
929  store <3 x i64> %val, <3 x i64>* %2, align 8
930  ret void
931}
932define void @__rsAllocationVStoreXImpl_long2([1 x i32] %a.coerce, <2 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
933  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
934  %2 = bitcast i8* %1 to <2 x i64>*
935  store <2 x i64> %val, <2 x i64>* %2, align 8
936  ret void
937}
938
939define void @__rsAllocationVStoreXImpl_ulong4([1 x i32] %a.coerce, <4 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
940  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
941  %2 = bitcast i8* %1 to <4 x i64>*
942  store <4 x i64> %val, <4 x i64>* %2, align 8
943  ret void
944}
945define void @__rsAllocationVStoreXImpl_ulong3([1 x i32] %a.coerce, <3 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
946  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
947  %2 = bitcast i8* %1 to <3 x i64>*
948  store <3 x i64> %val, <3 x i64>* %2, align 8
949  ret void
950}
951define void @__rsAllocationVStoreXImpl_ulong2([1 x i32] %a.coerce, <2 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
952  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
953  %2 = bitcast i8* %1 to <2 x i64>*
954  store <2 x i64> %val, <2 x i64>* %2, align 8
955  ret void
956}
957
958define void @__rsAllocationVStoreXImpl_int4([1 x i32] %a.coerce, <4 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
959  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
960  %2 = bitcast i8* %1 to <4 x i32>*
961  store <4 x i32> %val, <4 x i32>* %2, align 4
962  ret void
963}
964define void @__rsAllocationVStoreXImpl_int3([1 x i32] %a.coerce, <3 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
965  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
966  %2 = bitcast i8* %1 to <3 x i32>*
967  store <3 x i32> %val, <3 x i32>* %2, align 4
968  ret void
969}
970define void @__rsAllocationVStoreXImpl_int2([1 x i32] %a.coerce, <2 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
971  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
972  %2 = bitcast i8* %1 to <2 x i32>*
973  store <2 x i32> %val, <2 x i32>* %2, align 4
974  ret void
975}
976
977define void @__rsAllocationVStoreXImpl_uint4([1 x i32] %a.coerce, <4 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
978  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
979  %2 = bitcast i8* %1 to <4 x i32>*
980  store <4 x i32> %val, <4 x i32>* %2, align 4
981  ret void
982}
983define void @__rsAllocationVStoreXImpl_uint3([1 x i32] %a.coerce, <3 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
984  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
985  %2 = bitcast i8* %1 to <3 x i32>*
986  store <3 x i32> %val, <3 x i32>* %2, align 4
987  ret void
988}
989define void @__rsAllocationVStoreXImpl_uint2([1 x i32] %a.coerce, <2 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
990  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
991  %2 = bitcast i8* %1 to <2 x i32>*
992  store <2 x i32> %val, <2 x i32>* %2, align 4
993  ret void
994}
995
996define void @__rsAllocationVStoreXImpl_short4([1 x i32] %a.coerce, <4 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
997  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
998  %2 = bitcast i8* %1 to <4 x i16>*
999  store <4 x i16> %val, <4 x i16>* %2, align 2
1000  ret void
1001}
1002define void @__rsAllocationVStoreXImpl_short3([1 x i32] %a.coerce, <3 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
1003  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1004  %2 = bitcast i8* %1 to <3 x i16>*
1005  store <3 x i16> %val, <3 x i16>* %2, align 2
1006  ret void
1007}
1008define void @__rsAllocationVStoreXImpl_short2([1 x i32] %a.coerce, <2 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
1009  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1010  %2 = bitcast i8* %1 to <2 x i16>*
1011  store <2 x i16> %val, <2 x i16>* %2, align 2
1012  ret void
1013}
1014
1015define void @__rsAllocationVStoreXImpl_ushort4([1 x i32] %a.coerce, <4 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
1016  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1017  %2 = bitcast i8* %1 to <4 x i16>*
1018  store <4 x i16> %val, <4 x i16>* %2, align 2
1019  ret void
1020}
1021define void @__rsAllocationVStoreXImpl_ushort3([1 x i32] %a.coerce, <3 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
1022  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1023  %2 = bitcast i8* %1 to <3 x i16>*
1024  store <3 x i16> %val, <3 x i16>* %2, align 2
1025  ret void
1026}
1027define void @__rsAllocationVStoreXImpl_ushort2([1 x i32] %a.coerce, <2 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
1028  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1029  %2 = bitcast i8* %1 to <2 x i16>*
1030  store <2 x i16> %val, <2 x i16>* %2, align 2
1031  ret void
1032}
1033
1034define void @__rsAllocationVStoreXImpl_char4([1 x i32] %a.coerce, <4 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
1035  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1036  %2 = bitcast i8* %1 to <4 x i8>*
1037  store <4 x i8> %val, <4 x i8>* %2, align 1
1038  ret void
1039}
1040define void @__rsAllocationVStoreXImpl_char3([1 x i32] %a.coerce, <3 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
1041  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1042  %2 = bitcast i8* %1 to <3 x i8>*
1043  store <3 x i8> %val, <3 x i8>* %2, align 1
1044  ret void
1045}
1046define void @__rsAllocationVStoreXImpl_char2([1 x i32] %a.coerce, <2 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
1047  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1048  %2 = bitcast i8* %1 to <2 x i8>*
1049  store <2 x i8> %val, <2 x i8>* %2, align 1
1050  ret void
1051}
1052
1053define void @__rsAllocationVStoreXImpl_uchar4([1 x i32] %a.coerce, <4 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
1054  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1055  %2 = bitcast i8* %1 to <4 x i8>*
1056  store <4 x i8> %val, <4 x i8>* %2, align 1
1057  ret void
1058}
1059define void @__rsAllocationVStoreXImpl_uchar3([1 x i32] %a.coerce, <3 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
1060  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1061  %2 = bitcast i8* %1 to <3 x i8>*
1062  store <3 x i8> %val, <3 x i8>* %2, align 1
1063  ret void
1064}
1065define void @__rsAllocationVStoreXImpl_uchar2([1 x i32] %a.coerce, <2 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
1066  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1067  %2 = bitcast i8* %1 to <2 x i8>*
1068  store <2 x i8> %val, <2 x i8>* %2, align 1
1069  ret void
1070}
1071
1072define void @__rsAllocationVStoreXImpl_float4([1 x i32] %a.coerce, <4 x float> %val, i32 %x, i32 %y, i32 %z) #1 {
1073  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1074  %2 = bitcast i8* %1 to <4 x float>*
1075  store <4 x float> %val, <4 x float>* %2, align 4
1076  ret void
1077}
1078define void @__rsAllocationVStoreXImpl_float3([1 x i32] %a.coerce, <3 x float> %val, i32 %x, i32 %y, i32 %z) #1 {
1079  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1080  %2 = bitcast i8* %1 to <3 x float>*
1081  store <3 x float> %val, <3 x float>* %2, align 4
1082  ret void
1083}
1084define void @__rsAllocationVStoreXImpl_float2([1 x i32] %a.coerce, <2 x float> %val, i32 %x, i32 %y, i32 %z) #1 {
1085  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1086  %2 = bitcast i8* %1 to <2 x float>*
1087  store <2 x float> %val, <2 x float>* %2, align 4
1088  ret void
1089}
1090
1091define void @__rsAllocationVStoreXImpl_double4([1 x i32] %a.coerce, <4 x double> %val, i32 %x, i32 %y, i32 %z) #1 {
1092  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1093  %2 = bitcast i8* %1 to <4 x double>*
1094  store <4 x double> %val, <4 x double>* %2, align 8
1095  ret void
1096}
1097define void @__rsAllocationVStoreXImpl_double3([1 x i32] %a.coerce, <3 x double> %val, i32 %x, i32 %y, i32 %z) #1 {
1098  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1099  %2 = bitcast i8* %1 to <3 x double>*
1100  store <3 x double> %val, <3 x double>* %2, align 8
1101  ret void
1102}
1103define void @__rsAllocationVStoreXImpl_double2([1 x i32] %a.coerce, <2 x double> %val, i32 %x, i32 %y, i32 %z) #1 {
1104  %1 = tail call i8* @rsOffsetNs([1 x i32] %a.coerce, i32 %x, i32 %y, i32 %z) #2
1105  %2 = bitcast i8* %1 to <2 x double>*
1106  store <2 x double> %val, <2 x double>* %2, align 8
1107  ret void
1108}
1109
1110
1111attributes #0 = { nounwind readonly "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
1112attributes #1 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
1113attributes #2 = { nobuiltin }
1114
1115