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