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