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