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