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