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