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