allocation.ll revision f1ce4be308bae2fc68d61b7bb067fc00e488959a
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, 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 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>, <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>, <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, 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 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>, <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>, <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, 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 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>, <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>, <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, 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 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>, <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>, <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, 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 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>, <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>, <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, 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 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>, <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>, <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, 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 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>, <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>, <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>, <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>, <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, 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 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>, <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>, <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>, <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>, <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, 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 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>, <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>, <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, 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 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>, <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>, <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>, <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>, <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!61 = !{!"half", !15}
673define void @rsSetElementAtImpl_half(%struct.rs_allocation* nocapture readonly %a.coerce, half %val, i32 %x, i32 %y, i32 %z) #1 {
674  %1 = tail call i8* @rsOffset(%struct.rs_allocation* %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
675  %2 = bitcast i8* %1 to half*
676  store half %val, half* %2, align 2, !tbaa !61
677  ret void
678}
679
680define half @rsGetElementAtImpl_half(%struct.rs_allocation* nocapture readonly %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
681  %1 = tail call i8* @rsOffset(%struct.rs_allocation* %a.coerce, i32 2, i32 %x, i32 %y, i32 %z) #2
682  %2 = bitcast i8* %1 to half*
683  %3 = load half, half* %2, align 2, !tbaa !61
684  ret half %3
685}
686
687!62 = !{!"half2", !15}
688define void @rsSetElementAtImpl_half2(%struct.rs_allocation* nocapture readonly %a.coerce, <2 x half> %val, i32 %x, i32 %y, i32 %z) #1 {
689  %1 = tail call i8* @rsOffset(%struct.rs_allocation* %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
690  %2 = bitcast i8* %1 to <2 x half>*
691  store <2 x half> %val, <2 x half>* %2, align 4, !tbaa !62
692  ret void
693}
694
695define <2 x half> @rsGetElementAtImpl_half2(%struct.rs_allocation* nocapture readonly %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
696  %1 = tail call i8* @rsOffset(%struct.rs_allocation* %a.coerce, i32 4, i32 %x, i32 %y, i32 %z) #2
697  %2 = bitcast i8* %1 to <2 x half>*
698  %3 = load <2 x half>, <2 x half>* %2, align 4, !tbaa !62
699  ret <2 x half> %3
700}
701
702!63 = !{!"half3", !15}
703define void @rsSetElementAtImpl_half3(%struct.rs_allocation* nocapture readonly %a.coerce, <3 x half> %val, i32 %x, i32 %y, i32 %z) #1 {
704  %1 = tail call i8* @rsOffset(%struct.rs_allocation* %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
705  %2 = shufflevector <3 x half> %val, <3 x half> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
706  %3 = bitcast i8* %1 to <4 x half>*
707  store <4 x half> %2, <4 x half>* %3, align 8, !tbaa !63
708  ret void
709}
710
711define <3 x half> @rsGetElementAtImpl_half3(%struct.rs_allocation* nocapture readonly %a.coerce, i32 %x, i32 %y, i32 %z) #1 {
712  %1 = tail call i8* @rsOffset(%struct.rs_allocation* %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
713  %2 = bitcast i8* %1 to <4 x half>*
714  %3 = load <4 x half>, <4 x half>* %2, align 8, !tbaa !63
715  %4 = shufflevector <4 x half> %3, <4 x half> undef, <3 x i32> <i32 0, i32 1, i32 2>
716  ret <3 x half> %4
717}
718
719!64 = !{!"half4", !15}
720define void @rsSetElementAtImpl_half4(%struct.rs_allocation* nocapture readonly %a.coerce, <4 x half> %val, i32 %x, i32 %y, i32 %z) #1 {
721  %1 = tail call i8* @rsOffset(%struct.rs_allocation* %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
722  %2 = bitcast i8* %1 to <4 x half>*
723  store <4 x half> %val, <4 x half>* %2, align 8, !tbaa !64
724  ret void
725}
726
727define <4 x half> @rsGetElementAtImpl_half4(%struct.rs_allocation* nocapture readonly %a.coerce, i32 %x, i32 %y, i32 %z) #0 {
728  %1 = tail call i8* @rsOffset(%struct.rs_allocation* %a.coerce, i32 8, i32 %x, i32 %y, i32 %z) #2
729  %2 = bitcast i8* %1 to <4 x half>*
730  %3 = load <4 x half>, <4 x half>* %2, align 8, !tbaa !64
731  ret <4 x half> %3
732}
733
734
735define void @__rsAllocationVLoadXImpl_long4(<4 x i64>* noalias nocapture sret %agg.result, %struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #1 {
736  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
737  %2 = bitcast i8* %1 to <4 x i64>*
738  %3 = load <4 x i64>, <4 x i64>* %2, align 8
739  store <4 x i64> %3, <4 x i64>* %agg.result
740  ret void
741}
742define void @__rsAllocationVLoadXImpl_long3(<3 x i64>* noalias nocapture sret %agg.result, %struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #1 {
743  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
744  %2 = bitcast i8* %1 to <3 x i64>*
745  %3 = load <3 x i64>, <3 x i64>* %2, align 8
746  store <3 x i64> %3, <3 x i64>* %agg.result
747  ret void
748}
749define <2 x i64> @__rsAllocationVLoadXImpl_long2(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
750  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
751  %2 = bitcast i8* %1 to <2 x i64>*
752  %3 = load <2 x i64>, <2 x i64>* %2, align 8
753  ret <2 x i64> %3
754}
755
756define void @__rsAllocationVLoadXImpl_ulong4(<4 x i64>* noalias nocapture sret %agg.result, %struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #1 {
757  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
758  %2 = bitcast i8* %1 to <4 x i64>*
759  %3 = load <4 x i64>, <4 x i64>* %2, align 8
760  store <4 x i64> %3, <4 x i64>* %agg.result
761  ret void
762}
763define void @__rsAllocationVLoadXImpl_ulong3(<3 x i64>* noalias nocapture sret %agg.result, %struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #1 {
764  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
765  %2 = bitcast i8* %1 to <3 x i64>*
766  %3 = load <3 x i64>, <3 x i64>* %2, align 8
767  store <3 x i64> %3, <3 x i64>* %agg.result
768  ret void
769}
770define <2 x i64> @__rsAllocationVLoadXImpl_ulong2(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
771  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
772  %2 = bitcast i8* %1 to <2 x i64>*
773  %3 = load <2 x i64>, <2 x i64>* %2, align 8
774  ret <2 x i64> %3
775}
776
777define <4 x i32> @__rsAllocationVLoadXImpl_int4(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
778  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
779  %2 = bitcast i8* %1 to <4 x i32>*
780  %3 = load <4 x i32>, <4 x i32>* %2, align 4
781  ret <4 x i32> %3
782}
783define <3 x i32> @__rsAllocationVLoadXImpl_int3(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
784  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
785  %2 = bitcast i8* %1 to <3 x i32>*
786  %3 = load <3 x i32>, <3 x i32>* %2, align 4
787  ret <3 x i32> %3
788}
789define <2 x i32> @__rsAllocationVLoadXImpl_int2(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
790  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
791  %2 = bitcast i8* %1 to <2 x i32>*
792  %3 = load <2 x i32>, <2 x i32>* %2, align 4
793  ret <2 x i32> %3
794}
795
796define <4 x i32> @__rsAllocationVLoadXImpl_uint4(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
797  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
798  %2 = bitcast i8* %1 to <4 x i32>*
799  %3 = load <4 x i32>, <4 x i32>* %2, align 4
800  ret <4 x i32> %3
801}
802define <3 x i32> @__rsAllocationVLoadXImpl_uint3(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
803  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
804  %2 = bitcast i8* %1 to <3 x i32>*
805  %3 = load <3 x i32>, <3 x i32>* %2, align 4
806  ret <3 x i32> %3
807}
808define <2 x i32> @__rsAllocationVLoadXImpl_uint2(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
809  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
810  %2 = bitcast i8* %1 to <2 x i32>*
811  %3 = load <2 x i32>, <2 x i32>* %2, align 4
812  ret <2 x i32> %3
813}
814
815define <4 x i16> @__rsAllocationVLoadXImpl_short4(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
816  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
817  %2 = bitcast i8* %1 to <4 x i16>*
818  %3 = load <4 x i16>, <4 x i16>* %2, align 2
819  ret <4 x i16> %3
820}
821define <3 x i16> @__rsAllocationVLoadXImpl_short3(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
822  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
823  %2 = bitcast i8* %1 to <3 x i16>*
824  %3 = load <3 x i16>, <3 x i16>* %2, align 2
825  ret <3 x i16> %3
826}
827define <2 x i16> @__rsAllocationVLoadXImpl_short2(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
828  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
829  %2 = bitcast i8* %1 to <2 x i16>*
830  %3 = load <2 x i16>, <2 x i16>* %2, align 2
831  ret <2 x i16> %3
832}
833
834define <4 x i16> @__rsAllocationVLoadXImpl_ushort4(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
835  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
836  %2 = bitcast i8* %1 to <4 x i16>*
837  %3 = load <4 x i16>, <4 x i16>* %2, align 2
838  ret <4 x i16> %3
839}
840define <3 x i16> @__rsAllocationVLoadXImpl_ushort3(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
841  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
842  %2 = bitcast i8* %1 to <3 x i16>*
843  %3 = load <3 x i16>, <3 x i16>* %2, align 2
844  ret <3 x i16> %3
845}
846define <2 x i16> @__rsAllocationVLoadXImpl_ushort2(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
847  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
848  %2 = bitcast i8* %1 to <2 x i16>*
849  %3 = load <2 x i16>, <2 x i16>* %2, align 2
850  ret <2 x i16> %3
851}
852
853define <4 x i8> @__rsAllocationVLoadXImpl_char4(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
854  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
855  %2 = bitcast i8* %1 to <4 x i8>*
856  %3 = load <4 x i8>, <4 x i8>* %2, align 1
857  ret <4 x i8> %3
858}
859define <3 x i8> @__rsAllocationVLoadXImpl_char3(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
860  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
861  %2 = bitcast i8* %1 to <3 x i8>*
862  %3 = load <3 x i8>, <3 x i8>* %2, align 1
863  ret <3 x i8> %3
864}
865define <2 x i8> @__rsAllocationVLoadXImpl_char2(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
866  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
867  %2 = bitcast i8* %1 to <2 x i8>*
868  %3 = load <2 x i8>, <2 x i8>* %2, align 1
869  ret <2 x i8> %3
870}
871
872define <4 x i8> @__rsAllocationVLoadXImpl_uchar4(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
873  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
874  %2 = bitcast i8* %1 to <4 x i8>*
875  %3 = load <4 x i8>, <4 x i8>* %2, align 1
876  ret <4 x i8> %3
877}
878define <3 x i8> @__rsAllocationVLoadXImpl_uchar3(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
879  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
880  %2 = bitcast i8* %1 to <3 x i8>*
881  %3 = load <3 x i8>, <3 x i8>* %2, align 1
882  ret <3 x i8> %3
883}
884define <2 x i8> @__rsAllocationVLoadXImpl_uchar2(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
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 i8>*
887  %3 = load <2 x i8>, <2 x i8>* %2, align 1
888  ret <2 x i8> %3
889}
890
891define <4 x float> @__rsAllocationVLoadXImpl_float4(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
892  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
893  %2 = bitcast i8* %1 to <4 x float>*
894  %3 = load <4 x float>, <4 x float>* %2, align 4
895  ret <4 x float> %3
896}
897define <3 x float> @__rsAllocationVLoadXImpl_float3(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
898  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
899  %2 = bitcast i8* %1 to <3 x float>*
900  %3 = load <3 x float>, <3 x float>* %2, align 4
901  ret <3 x float> %3
902}
903define <2 x float> @__rsAllocationVLoadXImpl_float2(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
904  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
905  %2 = bitcast i8* %1 to <2 x float>*
906  %3 = load <2 x float>, <2 x float>* %2, align 4
907  ret <2 x float> %3
908}
909
910define void @__rsAllocationVLoadXImpl_double4(<4 x double>* noalias nocapture sret %agg.result, %struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #1 {
911  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
912  %2 = bitcast i8* %1 to <4 x double>*
913  %3 = load <4 x double>, <4 x double>* %2, align 8
914  store <4 x double> %3, <4 x double>* %agg.result
915  ret void
916}
917define void @__rsAllocationVLoadXImpl_double3(<3 x double>* noalias nocapture sret %agg.result, %struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #1 {
918  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
919  %2 = bitcast i8* %1 to <3 x double>*
920  %3 = load <3 x double>, <3 x double>* %2, align 8
921  store <3 x double> %3, <3 x double>* %agg.result
922  ret void
923}
924define <2 x double> @__rsAllocationVLoadXImpl_double2(%struct.rs_allocation* nocapture readonly %a, i32 %x, i32 %y, i32 %z) #0 {
925  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
926  %2 = bitcast i8* %1 to <2 x double>*
927  %3 = load <2 x double>, <2 x double>* %2, align 8
928  ret <2 x double> %3
929}
930
931
932define void @__rsAllocationVStoreXImpl_long4(%struct.rs_allocation* nocapture readonly %a, <4 x i64>* %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 = load <4 x i64>, <4 x i64>* %val
935  %3 = bitcast i8* %1 to <4 x i64>*
936  store <4 x i64> %2, <4 x i64>* %3, align 8
937  ret void
938}
939define void @__rsAllocationVStoreXImpl_long3(%struct.rs_allocation* nocapture readonly %a, <3 x i64>* %val, i32 %x, i32 %y, i32 %z) #1 {
940  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
941  %2 = load <3 x i64>, <3 x i64>* %val
942  %3 = bitcast i8* %1 to <3 x i64>*
943  store <3 x i64> %2, <3 x i64>* %3, align 8
944  ret void
945}
946define void @__rsAllocationVStoreXImpl_long2(%struct.rs_allocation* nocapture readonly %a, <2 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
947  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
948  %2 = bitcast i8* %1 to <2 x i64>*
949  store <2 x i64> %val, <2 x i64>* %2, align 8
950  ret void
951}
952
953define void @__rsAllocationVStoreXImpl_ulong4(%struct.rs_allocation* nocapture readonly %a, <4 x i64>* %val, i32 %x, i32 %y, i32 %z) #1 {
954  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
955  %2 = load <4 x i64>, <4 x i64>* %val
956  %3 = bitcast i8* %1 to <4 x i64>*
957  store <4 x i64> %2, <4 x i64>* %3, align 8
958  ret void
959}
960define void @__rsAllocationVStoreXImpl_ulong3(%struct.rs_allocation* nocapture readonly %a, <3 x i64>* %val, i32 %x, i32 %y, i32 %z) #1 {
961  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
962  %2 = load <3 x i64>, <3 x i64>* %val
963  %3 = bitcast i8* %1 to <3 x i64>*
964  store <3 x i64> %2, <3 x i64>* %3, align 8
965  ret void
966}
967define void @__rsAllocationVStoreXImpl_ulong2(%struct.rs_allocation* nocapture readonly %a, <2 x i64> %val, i32 %x, i32 %y, i32 %z) #1 {
968  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
969  %2 = bitcast i8* %1 to <2 x i64>*
970  store <2 x i64> %val, <2 x i64>* %2, align 8
971  ret void
972}
973
974define void @__rsAllocationVStoreXImpl_int4(%struct.rs_allocation* nocapture readonly %a, <4 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
975  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
976  %2 = bitcast i8* %1 to <4 x i32>*
977  store <4 x i32> %val, <4 x i32>* %2, align 4
978  ret void
979}
980define void @__rsAllocationVStoreXImpl_int3(%struct.rs_allocation* nocapture readonly %a, <4 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
981  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
982  %2 = bitcast i8* %1 to <3 x i32>*
983  %3 = shufflevector <4 x i32> %val, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
984  store <3 x i32> %3, <3 x i32>* %2, align 4
985  ret void
986}
987define void @__rsAllocationVStoreXImpl_int2(%struct.rs_allocation* nocapture readonly %a, <2 x i32> %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 i32>*
990  store <2 x i32> %val, <2 x i32>* %2, align 4
991  ret void
992}
993
994define void @__rsAllocationVStoreXImpl_uint4(%struct.rs_allocation* nocapture readonly %a, <4 x i32> %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 i32>*
997  store <4 x i32> %val, <4 x i32>* %2, align 4
998  ret void
999}
1000define void @__rsAllocationVStoreXImpl_uint3(%struct.rs_allocation* nocapture readonly %a, <4 x 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 i32>*
1003  %3 = shufflevector <4 x i32> %val, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
1004  store <3 x i32> %3, <3 x i32>* %2, align 4
1005  ret void
1006}
1007define void @__rsAllocationVStoreXImpl_uint2(%struct.rs_allocation* nocapture readonly %a, <2 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
1008  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1009  %2 = bitcast i8* %1 to <2 x i32>*
1010  store <2 x i32> %val, <2 x i32>* %2, align 4
1011  ret void
1012}
1013
1014define void @__rsAllocationVStoreXImpl_short4(%struct.rs_allocation* nocapture readonly %a, <4 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
1015  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1016  %2 = bitcast i8* %1 to <4 x i16>*
1017  store <4 x i16> %val, <4 x i16>* %2, align 2
1018  ret void
1019}
1020define void @__rsAllocationVStoreXImpl_short3(%struct.rs_allocation* nocapture readonly %a, <2 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
1021  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1022  %2 = bitcast i8* %1 to <3 x i16>*
1023  %3 = bitcast <2 x i32> %val to <4 x i16>
1024  %4 = shufflevector <4 x i16> %3, <4 x i16> undef, <3 x i32> <i32 0, i32 1, i32 2>
1025  store <3 x i16> %4, <3 x i16>* %2, align 2
1026  ret void
1027}
1028define void @__rsAllocationVStoreXImpl_short2(%struct.rs_allocation* nocapture readonly %a, <2 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
1029  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1030  %2 = bitcast i8* %1 to <2 x i16>*
1031  store <2 x i16> %val, <2 x i16>* %2, align 2
1032  ret void
1033}
1034
1035define void @__rsAllocationVStoreXImpl_ushort4(%struct.rs_allocation* nocapture readonly %a, <4 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
1036  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1037  %2 = bitcast i8* %1 to <4 x i16>*
1038  store <4 x i16> %val, <4 x i16>* %2, align 2
1039  ret void
1040}
1041define void @__rsAllocationVStoreXImpl_ushort3(%struct.rs_allocation* nocapture readonly %a, <2 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
1042  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1043  %2 = bitcast i8* %1 to <3 x i16>*
1044  %3 = bitcast <2 x i32> %val to <4 x i16>
1045  %4 = shufflevector <4 x i16> %3, <4 x i16> undef, <3 x i32> <i32 0, i32 1, i32 2>
1046  store <3 x i16> %4, <3 x i16>* %2, align 2
1047  ret void
1048}
1049define void @__rsAllocationVStoreXImpl_ushort2(%struct.rs_allocation* nocapture readonly %a, <2 x i16> %val, i32 %x, i32 %y, i32 %z) #1 {
1050  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1051  %2 = bitcast i8* %1 to <2 x i16>*
1052  store <2 x i16> %val, <2 x i16>* %2, align 2
1053  ret void
1054}
1055
1056define void @__rsAllocationVStoreXImpl_char4(%struct.rs_allocation* nocapture readonly %a, <4 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
1057  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1058  %2 = bitcast i8* %1 to <4 x i8>*
1059  store <4 x i8> %val, <4 x i8>* %2, align 1
1060  ret void
1061}
1062define void @__rsAllocationVStoreXImpl_char3(%struct.rs_allocation* nocapture readonly %a, i32 %val, i32 %x, i32 %y, i32 %z) #1 {
1063  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1064  %2 = bitcast i8* %1 to <3 x i8>*
1065  %3 = bitcast i32 %val to <4 x i8>
1066  %4 = shufflevector <4 x i8> %3, <4 x i8> undef, <3 x i32> <i32 0, i32 1, i32 2>
1067  store <3 x i8> %4, <3 x i8>* %2, align 1
1068  ret void
1069}
1070define void @__rsAllocationVStoreXImpl_char2(%struct.rs_allocation* nocapture readonly %a, i16 %val, i32 %x, i32 %y, i32 %z) #1 {
1071  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1072  %2 = bitcast i8* %1 to <2 x i8>*
1073  %3 = bitcast i16 %val to <2 x i8>
1074  store <2 x i8> %3, <2 x i8>* %2, align 8
1075  ret void
1076}
1077
1078define void @__rsAllocationVStoreXImpl_uchar4(%struct.rs_allocation* nocapture readonly %a, <4 x i8> %val, i32 %x, i32 %y, i32 %z) #1 {
1079  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1080  %2 = bitcast i8* %1 to <4 x i8>*
1081  store <4 x i8> %val, <4 x i8>* %2, align 1
1082  ret void
1083}
1084define void @__rsAllocationVStoreXImpl_uchar3(%struct.rs_allocation* nocapture readonly %a, i32 %val, i32 %x, i32 %y, i32 %z) #1 {
1085  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1086  %2 = bitcast i8* %1 to <3 x i8>*
1087  %3 = bitcast i32 %val to <4 x i8>
1088  %4 = shufflevector <4 x i8> %3, <4 x i8> undef, <3 x i32> <i32 0, i32 1, i32 2>
1089  store <3 x i8> %4, <3 x i8>* %2, align 1
1090  ret void
1091}
1092define void @__rsAllocationVStoreXImpl_uchar2(%struct.rs_allocation* nocapture readonly %a, i16 %val, i32 %x, i32 %y, i32 %z) #1 {
1093  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1094  %2 = bitcast i8* %1 to <2 x i8>*
1095  %3 = bitcast i16 %val to <2 x i8>
1096  store <2 x i8> %3, <2 x i8>* %2, align 8
1097  ret void
1098}
1099
1100define void @__rsAllocationVStoreXImpl_float4(%struct.rs_allocation* nocapture readonly %a, <4 x float> %val, i32 %x, i32 %y, i32 %z) #1 {
1101  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1102  %2 = bitcast i8* %1 to <4 x float>*
1103  store <4 x float> %val, <4 x float>* %2, align 4
1104  ret void
1105}
1106define void @__rsAllocationVStoreXImpl_float3(%struct.rs_allocation* nocapture readonly %a, <4 x i32> %val, i32 %x, i32 %y, i32 %z) #1 {
1107  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1108  %2 = bitcast i8* %1 to <3 x float>*
1109  %3 = bitcast <4 x i32> %val to <4 x float>
1110  %4 = shufflevector <4 x float> %3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
1111  store <3 x float> %4, <3 x float>* %2, align 4
1112  ret void
1113}
1114define void @__rsAllocationVStoreXImpl_float2(%struct.rs_allocation* nocapture readonly %a, <2 x float> %val, i32 %x, i32 %y, i32 %z) #1 {
1115  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1116  %2 = bitcast i8* %1 to <2 x float>*
1117  store <2 x float> %val, <2 x float>* %2, align 4
1118  ret void
1119}
1120
1121define void @__rsAllocationVStoreXImpl_double4(%struct.rs_allocation* nocapture readonly %a, <4 x double>* %val, i32 %x, i32 %y, i32 %z) #1 {
1122  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1123  %2 = load <4 x double>, <4 x double>* %val
1124  %3 = bitcast i8* %1 to <4 x double>*
1125  store <4 x double> %2, <4 x double>* %3, align 8
1126  ret void
1127}
1128define void @__rsAllocationVStoreXImpl_double3(%struct.rs_allocation* nocapture readonly %a, <3 x double>* %val, i32 %x, i32 %y, i32 %z) #1 {
1129  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1130  %2 = load <3 x double>, <3 x double>* %val
1131  %3 = bitcast i8* %1 to <3 x double>*
1132  store <3 x double> %2, <3 x double>* %3, align 8
1133  ret void
1134}
1135define void @__rsAllocationVStoreXImpl_double2(%struct.rs_allocation* nocapture readonly %a, <2 x double> %val, i32 %x, i32 %y, i32 %z) #1 {
1136  %1 = tail call i8* @rsOffsetNs(%struct.rs_allocation* %a, i32 %x, i32 %y, i32 %z) #2
1137  %2 = bitcast i8* %1 to <2 x double>*
1138  store <2 x double> %val, <2 x double>* %2, align 8
1139  ret void
1140}
1141
1142
1143attributes #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" }
1144attributes #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" }
1145attributes #2 = { nobuiltin }
1146
1147