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