1414 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s3 4define <4 x i16> @normal_load_v4i8(ptr %p) {5; CHECK-LABEL: normal_load_v4i8:6; CHECK: // %bb.0:7; CHECK-NEXT: ldp s0, s1, [x0]8; CHECK-NEXT: uaddl v0.8h, v0.8b, v1.8b9; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q010; CHECK-NEXT: ret11 %l1 = load <4 x i8>, ptr %p12 %q = getelementptr i8, ptr %p, i32 413 %l2 = load <4 x i8>, ptr %q14 %e1 = zext <4 x i8> %l1 to <4 x i16>15 %e2 = zext <4 x i8> %l2 to <4 x i16>16 %a = add <4 x i16> %e1, %e217 ret <4 x i16> %a18}19 20define <4 x i32> @normal_load_v4i16_v4i32(ptr %p) {21; CHECK-LABEL: normal_load_v4i16_v4i32:22; CHECK: // %bb.0:23; CHECK-NEXT: ldp d0, d1, [x0]24; CHECK-NEXT: uaddl v0.4s, v0.4h, v1.4h25; CHECK-NEXT: ret26 %l1 = load <4 x i16>, ptr %p27 %q = getelementptr i8, ptr %p, i32 828 %l2 = load <4 x i16>, ptr %q29 %e1 = zext <4 x i16> %l1 to <4 x i32>30 %e2 = zext <4 x i16> %l2 to <4 x i32>31 %a = add <4 x i32> %e1, %e232 ret <4 x i32> %a33}34 35define <4 x i16> @load_v4i8(ptr %p) {36; CHECK-LABEL: load_v4i8:37; CHECK: // %bb.0:38; CHECK-NEXT: ldp s1, s0, [x0]39; CHECK-NEXT: ushll v0.8h, v0.8b, #040; CHECK-NEXT: shl v0.4h, v0.4h, #341; CHECK-NEXT: uaddw v0.8h, v0.8h, v1.8b42; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q043; CHECK-NEXT: ret44 %l1 = load <4 x i8>, ptr %p45 %q = getelementptr i8, ptr %p, i32 446 %l2 = load <4 x i8>, ptr %q47 %e1 = zext <4 x i8> %l1 to <4 x i16>48 %e2 = zext <4 x i8> %l2 to <4 x i16>49 %e3 = shl <4 x i16> %e2, <i16 3, i16 3, i16 3, i16 3>50 %a = add <4 x i16> %e1, %e351 ret <4 x i16> %a52}53 54define <4 x i32> @load_v4i16_v4i32(ptr %p) {55; CHECK-LABEL: load_v4i16_v4i32:56; CHECK: // %bb.0:57; CHECK-NEXT: ldr q0, [x0]58; CHECK-NEXT: ushll2 v1.4s, v0.8h, #359; CHECK-NEXT: uaddw v0.4s, v1.4s, v0.4h60; CHECK-NEXT: ret61 %l1 = load <4 x i16>, ptr %p62 %q = getelementptr i8, ptr %p, i32 863 %l2 = load <4 x i16>, ptr %q64 %e1 = zext <4 x i16> %l1 to <4 x i32>65 %e2 = zext <4 x i16> %l2 to <4 x i32>66 %e3 = shl <4 x i32> %e2, <i32 3, i32 3, i32 3, i32 3>67 %a = add <4 x i32> %e1, %e368 ret <4 x i32> %a69}70 71define <4 x i64> @load_v4i32_v4i64(ptr %p) {72; CHECK-LABEL: load_v4i32_v4i64:73; CHECK: // %bb.0:74; CHECK-NEXT: ldp q2, q0, [x0]75; CHECK-NEXT: ushll2 v1.2d, v0.4s, #376; CHECK-NEXT: ushll v0.2d, v0.2s, #377; CHECK-NEXT: uaddw2 v1.2d, v1.2d, v2.4s78; CHECK-NEXT: uaddw v0.2d, v0.2d, v2.2s79; CHECK-NEXT: ret80 %l1 = load <4 x i32>, ptr %p81 %q = getelementptr i8, ptr %p, i32 1682 %l2 = load <4 x i32>, ptr %q83 %e1 = zext <4 x i32> %l1 to <4 x i64>84 %e2 = zext <4 x i32> %l2 to <4 x i64>85 %e3 = shl <4 x i64> %e2, <i64 3, i64 3, i64 3, i64 3>86 %a = add <4 x i64> %e1, %e387 ret <4 x i64> %a88}89 90define <4 x i32> @load_v4i8_v4i32(ptr %p) {91; CHECK-LABEL: load_v4i8_v4i32:92; CHECK: // %bb.0:93; CHECK-NEXT: ldr d0, [x0]94; CHECK-NEXT: ushll v0.8h, v0.8b, #095; CHECK-NEXT: ushll2 v1.4s, v0.8h, #396; CHECK-NEXT: uaddw v0.4s, v1.4s, v0.4h97; CHECK-NEXT: ret98 %l1 = load <4 x i8>, ptr %p99 %q = getelementptr i8, ptr %p, i32 4100 %l2 = load <4 x i8>, ptr %q101 %e1 = zext <4 x i8> %l1 to <4 x i32>102 %e2 = zext <4 x i8> %l2 to <4 x i32>103 %e3 = shl <4 x i32> %e2, <i32 3, i32 3, i32 3, i32 3>104 %a = add <4 x i32> %e1, %e3105 ret <4 x i32> %a106}107 108define <4 x i32> @load_v4i12_v4i32(ptr %p) {109; CHECK-LABEL: load_v4i12_v4i32:110; CHECK: // %bb.0:111; CHECK-NEXT: ldr x8, [x0]112; CHECK-NEXT: ldr w9, [x0, #8]113; CHECK-NEXT: lsr x10, x8, #60114; CHECK-NEXT: ubfx x11, x8, #48, #12115; CHECK-NEXT: ubfx w12, w9, #8, #12116; CHECK-NEXT: orr w10, w10, w9, lsl #4117; CHECK-NEXT: fmov s0, w11118; CHECK-NEXT: and w11, w8, #0xfff119; CHECK-NEXT: fmov s1, w11120; CHECK-NEXT: lsr x9, x9, #20121; CHECK-NEXT: and w10, w10, #0xfff122; CHECK-NEXT: mov v0.h[1], w10123; CHECK-NEXT: ubfx w10, w8, #12, #12124; CHECK-NEXT: mov v1.h[1], w10125; CHECK-NEXT: ubfx x10, x8, #24, #12126; CHECK-NEXT: ubfx x8, x8, #36, #12127; CHECK-NEXT: mov v0.h[2], w12128; CHECK-NEXT: mov v1.h[2], w10129; CHECK-NEXT: mov v0.h[3], w9130; CHECK-NEXT: mov v1.h[3], w8131; CHECK-NEXT: ushll v0.4s, v0.4h, #3132; CHECK-NEXT: uaddw v0.4s, v0.4s, v1.4h133; CHECK-NEXT: ret134 %l1 = load <4 x i12>, ptr %p135 %q = getelementptr i8, ptr %p, i32 6136 %l2 = load <4 x i12>, ptr %q137 %e1 = zext <4 x i12> %l1 to <4 x i32>138 %e2 = zext <4 x i12> %l2 to <4 x i32>139 %e3 = shl <4 x i32> %e2, <i32 3, i32 3, i32 3, i32 3>140 %a = add <4 x i32> %e1, %e3141 ret <4 x i32> %a142}143 144define <8 x i16> @load_v8i8(ptr %p) {145; CHECK-LABEL: load_v8i8:146; CHECK: // %bb.0:147; CHECK-NEXT: ldr q0, [x0]148; CHECK-NEXT: ushll2 v1.8h, v0.16b, #3149; CHECK-NEXT: uaddw v0.8h, v1.8h, v0.8b150; CHECK-NEXT: ret151 %l1 = load <8 x i8>, ptr %p152 %q = getelementptr i8, ptr %p, i32 8153 %l2 = load <8 x i8>, ptr %q154 %e1 = zext <8 x i8> %l1 to <8 x i16>155 %e2 = zext <8 x i8> %l2 to <8 x i16>156 %e3 = shl <8 x i16> %e2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>157 %a = add <8 x i16> %e1, %e3158 ret <8 x i16> %a159}160 161define <8 x i16> @loadadd_v8i8(ptr %p1, ptr %p2) {162; CHECK-LABEL: loadadd_v8i8:163; CHECK: // %bb.0:164; CHECK-NEXT: ldr q0, [x0]165; CHECK-NEXT: ldr q1, [x1]166; CHECK-NEXT: add v0.16b, v0.16b, v1.16b167; CHECK-NEXT: ushll2 v1.8h, v0.16b, #3168; CHECK-NEXT: uaddw v0.8h, v1.8h, v0.8b169; CHECK-NEXT: ret170 %l11 = load <8 x i8>, ptr %p1171 %q1 = getelementptr i8, ptr %p1, i32 8172 %l12 = load <8 x i8>, ptr %q1173 %l21 = load <8 x i8>, ptr %p2174 %q2 = getelementptr i8, ptr %p2, i32 8175 %l22 = load <8 x i8>, ptr %q2176 %l1 = add <8 x i8> %l11, %l21177 %l2 = add <8 x i8> %l12, %l22178 %e1 = zext <8 x i8> %l1 to <8 x i16>179 %e2 = zext <8 x i8> %l2 to <8 x i16>180 %e3 = shl <8 x i16> %e2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>181 %a = add <8 x i16> %e1, %e3182 ret <8 x i16> %a183}184 185define <8 x i32> @loadaddext_v8i8(ptr %p1, ptr %p2) {186; CHECK-LABEL: loadaddext_v8i8:187; CHECK: // %bb.0:188; CHECK-NEXT: ldr q0, [x0]189; CHECK-NEXT: ldr q1, [x1]190; CHECK-NEXT: uaddl2 v2.8h, v0.16b, v1.16b191; CHECK-NEXT: uaddl v0.8h, v0.8b, v1.8b192; CHECK-NEXT: ushll2 v1.4s, v2.8h, #3193; CHECK-NEXT: ushll v2.4s, v2.4h, #3194; CHECK-NEXT: uaddw2 v1.4s, v1.4s, v0.8h195; CHECK-NEXT: uaddw v0.4s, v2.4s, v0.4h196; CHECK-NEXT: ret197 %l11 = load <8 x i8>, ptr %p1198 %q1 = getelementptr i8, ptr %p1, i32 8199 %l12 = load <8 x i8>, ptr %q1200 %l21 = load <8 x i8>, ptr %p2201 %q2 = getelementptr i8, ptr %p2, i32 8202 %l22 = load <8 x i8>, ptr %q2203 %le11 = zext <8 x i8> %l11 to <8 x i16>204 %le12 = zext <8 x i8> %l12 to <8 x i16>205 %le21 = zext <8 x i8> %l21 to <8 x i16>206 %le22 = zext <8 x i8> %l22 to <8 x i16>207 %l1 = add <8 x i16> %le11, %le21208 %l2 = add <8 x i16> %le12, %le22209 %e1 = zext <8 x i16> %l1 to <8 x i32>210 %e2 = zext <8 x i16> %l2 to <8 x i32>211 %e3 = shl <8 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>212 %a = add <8 x i32> %e1, %e3213 ret <8 x i32> %a214}215 216define <4 x i32> @loadaddext_v4i8(ptr %p1, ptr %p2) {217; CHECK-LABEL: loadaddext_v4i8:218; CHECK: // %bb.0:219; CHECK-NEXT: ldr d0, [x0]220; CHECK-NEXT: ldr d1, [x1]221; CHECK-NEXT: uaddl v0.8h, v0.8b, v1.8b222; CHECK-NEXT: ushll2 v1.4s, v0.8h, #3223; CHECK-NEXT: uaddw v0.4s, v1.4s, v0.4h224; CHECK-NEXT: ret225 %l11 = load <4 x i8>, ptr %p1226 %q1 = getelementptr i8, ptr %p1, i32 4227 %l12 = load <4 x i8>, ptr %q1228 %l21 = load <4 x i8>, ptr %p2229 %q2 = getelementptr i8, ptr %p2, i32 4230 %l22 = load <4 x i8>, ptr %q2231 %le11 = zext <4 x i8> %l11 to <4 x i16>232 %le12 = zext <4 x i8> %l12 to <4 x i16>233 %le21 = zext <4 x i8> %l21 to <4 x i16>234 %le22 = zext <4 x i8> %l22 to <4 x i16>235 %l1 = add <4 x i16> %le11, %le21236 %l2 = add <4 x i16> %le12, %le22237 %e1 = zext <4 x i16> %l1 to <4 x i32>238 %e2 = zext <4 x i16> %l2 to <4 x i32>239 %e3 = shl <4 x i32> %e2, <i32 3, i32 3, i32 3, i32 3>240 %a = add <4 x i32> %e1, %e3241 ret <4 x i32> %a242}243 244define <16 x i16> @load_v16i8(ptr %p) {245; CHECK-LABEL: load_v16i8:246; CHECK: // %bb.0:247; CHECK-NEXT: ldp q2, q0, [x0]248; CHECK-NEXT: ushll2 v1.8h, v0.16b, #3249; CHECK-NEXT: ushll v0.8h, v0.8b, #3250; CHECK-NEXT: uaddw2 v1.8h, v1.8h, v2.16b251; CHECK-NEXT: uaddw v0.8h, v0.8h, v2.8b252; CHECK-NEXT: ret253 %l1 = load <16 x i8>, ptr %p254 %q = getelementptr i8, ptr %p, i32 16255 %l2 = load <16 x i8>, ptr %q256 %e1 = zext <16 x i8> %l1 to <16 x i16>257 %e2 = zext <16 x i8> %l2 to <16 x i16>258 %e3 = shl <16 x i16> %e2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>259 %a = add <16 x i16> %e1, %e3260 ret <16 x i16> %a261}262 263define <2 x i16> @std_v2i8_v2i16(ptr %p) {264; CHECK-LABEL: std_v2i8_v2i16:265; CHECK: // %bb.0:266; CHECK-NEXT: ldr h0, [x0, #2]267; CHECK-NEXT: ldr h1, [x0]268; CHECK-NEXT: ushll v0.8h, v0.8b, #0269; CHECK-NEXT: ushll v1.8h, v1.8b, #0270; CHECK-NEXT: ushll v0.4s, v0.4h, #0271; CHECK-NEXT: shl v0.2s, v0.2s, #3272; CHECK-NEXT: uaddw v0.4s, v0.4s, v1.4h273; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0274; CHECK-NEXT: ret275 %l1 = load <2 x i8>, ptr %p276 %q = getelementptr i8, ptr %p, i32 2277 %l2 = load <2 x i8>, ptr %q278 %e1 = zext <2 x i8> %l1 to <2 x i16>279 %e2 = zext <2 x i8> %l2 to <2 x i16>280 %se2 = shl <2 x i16> %e2, <i16 3, i16 3>281 %a = add <2 x i16> %e1, %se2282 ret <2 x i16> %a283}284 285define <8 x i16> @load_bv_v4i8(ptr %p, ptr %q) {286; CHECK-LABEL: load_bv_v4i8:287; CHECK: // %bb.0:288; CHECK-NEXT: ldp s0, s1, [x0]289; CHECK-NEXT: ld1 { v0.s }[1], [x1], #4290; CHECK-NEXT: ld1 { v1.s }[1], [x1]291; CHECK-NEXT: ushll v1.8h, v1.8b, #3292; CHECK-NEXT: uaddw v0.8h, v1.8h, v0.8b293; CHECK-NEXT: ret294 %j1 = load <4 x i8>, ptr %p295 %p1 = getelementptr i8, ptr %p, i32 4296 %j2 = load <4 x i8>, ptr %p1297 %k1 = load <4 x i8>, ptr %q298 %q1 = getelementptr i8, ptr %q, i32 4299 %k2 = load <4 x i8>, ptr %q1300 %l1 = shufflevector <4 x i8> %j1, <4 x i8> %k1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>301 %l2 = shufflevector <4 x i8> %j2, <4 x i8> %k2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>302 %e1 = zext <8 x i8> %l1 to <8 x i16>303 %e2 = zext <8 x i8> %l2 to <8 x i16>304 %e3 = shl <8 x i16> %e2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>305 %a = add <8 x i16> %e1, %e3306 ret <8 x i16> %a307}308 309define <8 x i32> @load_bv_v4i8_i32(ptr %p, ptr %q) {310; CHECK-LABEL: load_bv_v4i8_i32:311; CHECK: // %bb.0:312; CHECK-NEXT: ldr d0, [x0]313; CHECK-NEXT: ldr d1, [x1]314; CHECK-NEXT: ushll v0.8h, v0.8b, #0315; CHECK-NEXT: ushll v1.8h, v1.8b, #0316; CHECK-NEXT: ushll2 v2.4s, v0.8h, #3317; CHECK-NEXT: ushll2 v3.4s, v1.8h, #3318; CHECK-NEXT: uaddw v0.4s, v2.4s, v0.4h319; CHECK-NEXT: uaddw v1.4s, v3.4s, v1.4h320; CHECK-NEXT: ret321 %j1 = load <4 x i8>, ptr %p322 %p1 = getelementptr i8, ptr %p, i32 4323 %j2 = load <4 x i8>, ptr %p1324 %k1 = load <4 x i8>, ptr %q325 %q1 = getelementptr i8, ptr %q, i32 4326 %k2 = load <4 x i8>, ptr %q1327 %l1 = shufflevector <4 x i8> %j1, <4 x i8> %k1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>328 %l2 = shufflevector <4 x i8> %j2, <4 x i8> %k2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>329 %e1 = zext <8 x i8> %l1 to <8 x i32>330 %e2 = zext <8 x i8> %l2 to <8 x i32>331 %e3 = shl <8 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>332 %a = add <8 x i32> %e1, %e3333 ret <8 x i32> %a334}335 336define <8 x i32> @load_bv_v4i16_i32(ptr %p, ptr %q) {337; CHECK-LABEL: load_bv_v4i16_i32:338; CHECK: // %bb.0:339; CHECK-NEXT: ldr q0, [x0]340; CHECK-NEXT: ldr q1, [x1]341; CHECK-NEXT: ushll2 v2.4s, v0.8h, #3342; CHECK-NEXT: ushll2 v3.4s, v1.8h, #3343; CHECK-NEXT: uaddw v0.4s, v2.4s, v0.4h344; CHECK-NEXT: uaddw v1.4s, v3.4s, v1.4h345; CHECK-NEXT: ret346 %j1 = load <4 x i16>, ptr %p347 %p1 = getelementptr i8, ptr %p, i32 8348 %j2 = load <4 x i16>, ptr %p1349 %k1 = load <4 x i16>, ptr %q350 %q1 = getelementptr i8, ptr %q, i32 8351 %k2 = load <4 x i16>, ptr %q1352 %l1 = shufflevector <4 x i16> %j1, <4 x i16> %k1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>353 %l2 = shufflevector <4 x i16> %j2, <4 x i16> %k2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>354 %e1 = zext <8 x i16> %l1 to <8 x i32>355 %e2 = zext <8 x i16> %l2 to <8 x i32>356 %e3 = shl <8 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>357 %a = add <8 x i32> %e1, %e3358 ret <8 x i32> %a359}360 361define <12 x i32> @load_bv_3xv4i8_i32(ptr %p, ptr %q, ptr %r) {362; CHECK-LABEL: load_bv_3xv4i8_i32:363; CHECK: // %bb.0:364; CHECK-NEXT: ldp s0, s1, [x0]365; CHECK-NEXT: ld1 { v0.s }[1], [x1], #4366; CHECK-NEXT: ld1 { v1.s }[1], [x1]367; CHECK-NEXT: ldp s3, s2, [x2]368; CHECK-NEXT: ushll v1.8h, v1.8b, #0369; CHECK-NEXT: ushll v0.8h, v0.8b, #0370; CHECK-NEXT: ushll v2.8h, v2.8b, #0371; CHECK-NEXT: ushll v3.8h, v3.8b, #0372; CHECK-NEXT: ushll2 v4.4s, v1.8h, #3373; CHECK-NEXT: ushll v1.4s, v1.4h, #3374; CHECK-NEXT: ushll v2.4s, v2.4h, #3375; CHECK-NEXT: uaddw v2.4s, v2.4s, v3.4h376; CHECK-NEXT: uaddw2 v3.4s, v4.4s, v0.8h377; CHECK-NEXT: uaddw v0.4s, v1.4s, v0.4h378; CHECK-NEXT: stp q3, q2, [x8, #16]379; CHECK-NEXT: str q0, [x8]380; CHECK-NEXT: ret381 %j1 = load <4 x i8>, ptr %p382 %p1 = getelementptr i8, ptr %p, i32 4383 %j2 = load <4 x i8>, ptr %p1384 %k1 = load <4 x i8>, ptr %q385 %q1 = getelementptr i8, ptr %q, i32 4386 %k2 = load <4 x i8>, ptr %q1387 %m1 = load <4 x i8>, ptr %r388 %r1 = getelementptr i8, ptr %r, i32 4389 %m2 = load <4 x i8>, ptr %r1390 %jk1 = shufflevector <4 x i8> %j1, <4 x i8> %k1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>391 %jk2 = shufflevector <4 x i8> %j2, <4 x i8> %k2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>392 %mn1 = shufflevector <4 x i8> %m1, <4 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>393 %mn2 = shufflevector <4 x i8> %m2, <4 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>394 %l1 = shufflevector <8 x i8> %jk1, <8 x i8> %mn1, <12 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>395 %l2 = shufflevector <8 x i8> %jk2, <8 x i8> %mn2, <12 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>396 %e1 = zext <12 x i8> %l1 to <12 x i32>397 %e2 = zext <12 x i8> %l2 to <12 x i32>398 %e3 = shl <12 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>399 %a = add <12 x i32> %e1, %e3400 ret <12 x i32> %a401}402 403define <16 x i16> @load_bv_4xv4i8_i32(ptr %p, ptr %q, ptr %r, ptr %s) {404; CHECK-LABEL: load_bv_4xv4i8_i32:405; CHECK: // %bb.0:406; CHECK-NEXT: ldp s0, s1, [x0]407; CHECK-NEXT: ld1 { v0.s }[1], [x1], #4408; CHECK-NEXT: ld1 { v1.s }[1], [x1]409; CHECK-NEXT: ldp s2, s3, [x2]410; CHECK-NEXT: uaddl v0.8h, v0.8b, v1.8b411; CHECK-NEXT: ld1 { v2.s }[1], [x3], #4412; CHECK-NEXT: ld1 { v3.s }[1], [x3]413; CHECK-NEXT: uaddl v1.8h, v2.8b, v3.8b414; CHECK-NEXT: ret415 %j1 = load <4 x i8>, ptr %p416 %p1 = getelementptr i8, ptr %p, i32 4417 %j2 = load <4 x i8>, ptr %p1418 %k1 = load <4 x i8>, ptr %q419 %q1 = getelementptr i8, ptr %q, i32 4420 %k2 = load <4 x i8>, ptr %q1421 %m1 = load <4 x i8>, ptr %r422 %r1 = getelementptr i8, ptr %r, i32 4423 %m2 = load <4 x i8>, ptr %r1424 %n1 = load <4 x i8>, ptr %s425 %s1 = getelementptr i8, ptr %s, i32 4426 %n2 = load <4 x i8>, ptr %s1427 %jk1 = shufflevector <4 x i8> %j1, <4 x i8> %k1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>428 %jk2 = shufflevector <4 x i8> %j2, <4 x i8> %k2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>429 %mn1 = shufflevector <4 x i8> %m1, <4 x i8> %n1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>430 %mn2 = shufflevector <4 x i8> %m2, <4 x i8> %n2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>431 %l1 = shufflevector <8 x i8> %jk1, <8 x i8> %mn1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>432 %l2 = shufflevector <8 x i8> %jk2, <8 x i8> %mn2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>433 %e1 = zext <16 x i8> %l1 to <16 x i16>434 %e2 = zext <16 x i8> %l2 to <16 x i16>435 %e3 = shl <16 x i16> %e2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>436 %a = add <16 x i16> %e1, %e2437 ret <16 x i16> %a438}439 440define <8 x i32> @double_bv_2xv4i8_i32(ptr %p, ptr %q, ptr %r, ptr %s) {441; CHECK-LABEL: double_bv_2xv4i8_i32:442; CHECK: // %bb.0:443; CHECK-NEXT: ldp s0, s1, [x0]444; CHECK-NEXT: ld1 { v0.s }[1], [x1], #4445; CHECK-NEXT: ld1 { v1.s }[1], [x1]446; CHECK-NEXT: ldp s2, s3, [x2]447; CHECK-NEXT: usubl v0.8h, v0.8b, v1.8b448; CHECK-NEXT: ld1 { v2.s }[1], [x3], #4449; CHECK-NEXT: ld1 { v3.s }[1], [x3]450; CHECK-NEXT: usubl v2.8h, v2.8b, v3.8b451; CHECK-NEXT: shll v3.4s, v2.4h, #16452; CHECK-NEXT: shll2 v1.4s, v2.8h, #16453; CHECK-NEXT: saddw2 v1.4s, v1.4s, v0.8h454; CHECK-NEXT: saddw v0.4s, v3.4s, v0.4h455; CHECK-NEXT: ret456 %j1 = load <4 x i8>, ptr %p457 %p1 = getelementptr i8, ptr %p, i32 4458 %j2 = load <4 x i8>, ptr %p1459 %k1 = load <4 x i8>, ptr %q460 %q1 = getelementptr i8, ptr %q, i32 4461 %k2 = load <4 x i8>, ptr %q1462 %m1 = load <4 x i8>, ptr %r463 %r1 = getelementptr i8, ptr %r, i32 4464 %m2 = load <4 x i8>, ptr %r1465 %n1 = load <4 x i8>, ptr %s466 %s1 = getelementptr i8, ptr %s, i32 4467 %n2 = load <4 x i8>, ptr %s1468 %jk1 = shufflevector <4 x i8> %j1, <4 x i8> %k1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>469 %jk2 = shufflevector <4 x i8> %j2, <4 x i8> %k2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>470 %mn1 = shufflevector <4 x i8> %m1, <4 x i8> %n1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>471 %mn2 = shufflevector <4 x i8> %m2, <4 x i8> %n2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>472 %ejk1 = zext <8 x i8> %jk1 to <8 x i16>473 %ejk2 = zext <8 x i8> %jk2 to <8 x i16>474 %ajk = sub <8 x i16> %ejk1, %ejk2475 %enm1 = zext <8 x i8> %mn1 to <8 x i16>476 %enm2 = zext <8 x i8> %mn2 to <8 x i16>477 %anm = sub <8 x i16> %enm1, %enm2478 %x = sext <8 x i16> %ajk to <8 x i32>479 %y = zext <8 x i16> %anm to <8 x i32>480 %ys = shl <8 x i32> %y, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>481 %a = add <8 x i32> %x, %ys482 ret <8 x i32> %a483}484 485define <16 x i32> @double_bv_4xv4i8_i32(ptr %p, ptr %q, ptr %r, ptr %s, ptr %t, ptr %u, ptr %v, ptr %w) {486; CHECK-LABEL: double_bv_4xv4i8_i32:487; CHECK: // %bb.0:488; CHECK-NEXT: ldp s0, s1, [x0]489; CHECK-NEXT: ld1 { v0.s }[1], [x1], #4490; CHECK-NEXT: ld1 { v1.s }[1], [x1]491; CHECK-NEXT: ldp s2, s3, [x2]492; CHECK-NEXT: usubl v1.8h, v0.8b, v1.8b493; CHECK-NEXT: ld1 { v2.s }[1], [x3], #4494; CHECK-NEXT: ld1 { v3.s }[1], [x3]495; CHECK-NEXT: ldp s4, s5, [x4]496; CHECK-NEXT: usubl v2.8h, v2.8b, v3.8b497; CHECK-NEXT: ld1 { v4.s }[1], [x5], #4498; CHECK-NEXT: ld1 { v5.s }[1], [x5]499; CHECK-NEXT: ldp s6, s7, [x6]500; CHECK-NEXT: usubl v4.8h, v4.8b, v5.8b501; CHECK-NEXT: ld1 { v6.s }[1], [x7], #4502; CHECK-NEXT: ld1 { v7.s }[1], [x7]503; CHECK-NEXT: shll v0.4s, v4.4h, #16504; CHECK-NEXT: shll2 v4.4s, v4.8h, #16505; CHECK-NEXT: usubl v5.8h, v6.8b, v7.8b506; CHECK-NEXT: saddw v0.4s, v0.4s, v1.4h507; CHECK-NEXT: saddw2 v1.4s, v4.4s, v1.8h508; CHECK-NEXT: shll v6.4s, v5.4h, #16509; CHECK-NEXT: shll2 v3.4s, v5.8h, #16510; CHECK-NEXT: saddw2 v3.4s, v3.4s, v2.8h511; CHECK-NEXT: saddw v2.4s, v6.4s, v2.4h512; CHECK-NEXT: ret513 %j1 = load <4 x i8>, ptr %p514 %p1 = getelementptr i8, ptr %p, i32 4515 %j2 = load <4 x i8>, ptr %p1516 %k1 = load <4 x i8>, ptr %q517 %q1 = getelementptr i8, ptr %q, i32 4518 %k2 = load <4 x i8>, ptr %q1519 %m1 = load <4 x i8>, ptr %r520 %r1 = getelementptr i8, ptr %r, i32 4521 %m2 = load <4 x i8>, ptr %r1522 %n1 = load <4 x i8>, ptr %s523 %s1 = getelementptr i8, ptr %s, i32 4524 %n2 = load <4 x i8>, ptr %s1525 %j3 = load <4 x i8>, ptr %t526 %t3 = getelementptr i8, ptr %t, i32 4527 %j4 = load <4 x i8>, ptr %t3528 %k3 = load <4 x i8>, ptr %u529 %u3 = getelementptr i8, ptr %u, i32 4530 %k4 = load <4 x i8>, ptr %u3531 %m3 = load <4 x i8>, ptr %v532 %v3 = getelementptr i8, ptr %v, i32 4533 %m4 = load <4 x i8>, ptr %v3534 %n3 = load <4 x i8>, ptr %w535 %w3 = getelementptr i8, ptr %w, i32 4536 %n4 = load <4 x i8>, ptr %w3537 %jk1 = shufflevector <4 x i8> %j1, <4 x i8> %k1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>538 %jk2 = shufflevector <4 x i8> %j2, <4 x i8> %k2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>539 %mn1 = shufflevector <4 x i8> %m1, <4 x i8> %n1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>540 %mn2 = shufflevector <4 x i8> %m2, <4 x i8> %n2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>541 %jk3 = shufflevector <4 x i8> %j3, <4 x i8> %k3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>542 %jk4 = shufflevector <4 x i8> %j4, <4 x i8> %k4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>543 %mn3 = shufflevector <4 x i8> %m3, <4 x i8> %n3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>544 %mn4 = shufflevector <4 x i8> %m4, <4 x i8> %n4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>545 %l1 = shufflevector <8 x i8> %jk1, <8 x i8> %mn1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>546 %l2 = shufflevector <8 x i8> %jk2, <8 x i8> %mn2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>547 %l3 = shufflevector <8 x i8> %jk3, <8 x i8> %mn3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>548 %l4 = shufflevector <8 x i8> %jk4, <8 x i8> %mn4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>549 %ejk1 = zext <16 x i8> %l1 to <16 x i16>550 %ejk2 = zext <16 x i8> %l2 to <16 x i16>551 %ajk = sub <16 x i16> %ejk1, %ejk2552 %enm1 = zext <16 x i8> %l3 to <16 x i16>553 %enm2 = zext <16 x i8> %l4 to <16 x i16>554 %anm = sub <16 x i16> %enm1, %enm2555 %x = sext <16 x i16> %ajk to <16 x i32>556 %y = zext <16 x i16> %anm to <16 x i32>557 %ys = shl <16 x i32> %y, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>558 %a = add <16 x i32> %x, %ys559 ret <16 x i32> %a560}561 562define <16 x i32> @double2_bv_4xv4i8_i32(ptr %p, ptr %q, ptr %r, ptr %s, ptr %t, ptr %u, ptr %v, ptr %w) {563; CHECK-LABEL: double2_bv_4xv4i8_i32:564; CHECK: // %bb.0:565; CHECK-NEXT: ldr d0, [x2]566; CHECK-NEXT: ldr d1, [x0]567; CHECK-NEXT: ldr d2, [x1]568; CHECK-NEXT: ldr d3, [x3]569; CHECK-NEXT: ldr d4, [x4]570; CHECK-NEXT: ldr d5, [x5]571; CHECK-NEXT: ldr d6, [x6]572; CHECK-NEXT: ldr d7, [x7]573; CHECK-NEXT: usubl v1.8h, v1.8b, v4.8b574; CHECK-NEXT: usubl v2.8h, v2.8b, v5.8b575; CHECK-NEXT: usubl v3.8h, v3.8b, v7.8b576; CHECK-NEXT: usubl v4.8h, v0.8b, v6.8b577; CHECK-NEXT: shll2 v0.4s, v1.8h, #16578; CHECK-NEXT: shll2 v5.4s, v2.8h, #16579; CHECK-NEXT: shll2 v6.4s, v4.8h, #16580; CHECK-NEXT: shll2 v7.4s, v3.8h, #16581; CHECK-NEXT: saddw v0.4s, v0.4s, v1.4h582; CHECK-NEXT: saddw v1.4s, v5.4s, v2.4h583; CHECK-NEXT: saddw v2.4s, v6.4s, v4.4h584; CHECK-NEXT: saddw v3.4s, v7.4s, v3.4h585; CHECK-NEXT: ret586 %j1 = load <4 x i8>, ptr %p587 %p1 = getelementptr i8, ptr %p, i32 4588 %j2 = load <4 x i8>, ptr %p1589 %k1 = load <4 x i8>, ptr %q590 %q1 = getelementptr i8, ptr %q, i32 4591 %k2 = load <4 x i8>, ptr %q1592 %m1 = load <4 x i8>, ptr %r593 %r1 = getelementptr i8, ptr %r, i32 4594 %m2 = load <4 x i8>, ptr %r1595 %n1 = load <4 x i8>, ptr %s596 %s1 = getelementptr i8, ptr %s, i32 4597 %n2 = load <4 x i8>, ptr %s1598 %j3 = load <4 x i8>, ptr %t599 %t3 = getelementptr i8, ptr %t, i32 4600 %j4 = load <4 x i8>, ptr %t3601 %k3 = load <4 x i8>, ptr %u602 %u3 = getelementptr i8, ptr %u, i32 4603 %k4 = load <4 x i8>, ptr %u3604 %m3 = load <4 x i8>, ptr %v605 %v3 = getelementptr i8, ptr %v, i32 4606 %m4 = load <4 x i8>, ptr %v3607 %n3 = load <4 x i8>, ptr %w608 %w3 = getelementptr i8, ptr %w, i32 4609 %n4 = load <4 x i8>, ptr %w3610 %jk1 = shufflevector <4 x i8> %j1, <4 x i8> %k1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>611 %m1l = shufflevector <4 x i8> %m1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>612 %jkm1 = shufflevector <16 x i8> %jk1, <16 x i8> %m1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>613 %n1l = shufflevector <4 x i8> %n1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>614 %l1 = shufflevector <16 x i8> %jkm1, <16 x i8> %n1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>615 %jk2 = shufflevector <4 x i8> %j2, <4 x i8> %k2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>616 %m2l = shufflevector <4 x i8> %m2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>617 %jkm2 = shufflevector <16 x i8> %jk2, <16 x i8> %m2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>618 %n2l = shufflevector <4 x i8> %n2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>619 %l2 = shufflevector <16 x i8> %jkm2, <16 x i8> %n2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>620 %jk3 = shufflevector <4 x i8> %j3, <4 x i8> %k3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>621 %m3l = shufflevector <4 x i8> %m3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>622 %jkm3 = shufflevector <16 x i8> %jk3, <16 x i8> %m3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>623 %n3l = shufflevector <4 x i8> %n3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>624 %l3 = shufflevector <16 x i8> %jkm3, <16 x i8> %n3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>625 %jk4 = shufflevector <4 x i8> %j4, <4 x i8> %k4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>626 %m4l = shufflevector <4 x i8> %m4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>627 %jkm4 = shufflevector <16 x i8> %jk4, <16 x i8> %m4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>628 %n4l = shufflevector <4 x i8> %n4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>629 %l4 = shufflevector <16 x i8> %jkm4, <16 x i8> %n4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>630 %ejk1 = zext <16 x i8> %l1 to <16 x i16>631 %ejk2 = zext <16 x i8> %l3 to <16 x i16>632 %ajk = sub <16 x i16> %ejk1, %ejk2633 %enm1 = zext <16 x i8> %l2 to <16 x i16>634 %enm2 = zext <16 x i8> %l4 to <16 x i16>635 %anm = sub <16 x i16> %enm1, %enm2636 %x = sext <16 x i16> %ajk to <16 x i32>637 %y = zext <16 x i16> %anm to <16 x i32>638 %ys = shl <16 x i32> %y, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>639 %a = add <16 x i32> %x, %ys640 ret <16 x i32> %a641}642 643define <16 x i32> @extrause_load(ptr %p, ptr %q, ptr %r, ptr %s, ptr %z) {644; CHECK-LABEL: extrause_load:645; CHECK: // %bb.0:646; CHECK-NEXT: ldr s1, [x0]647; CHECK-NEXT: add x8, x3, #8648; CHECK-NEXT: add x11, x1, #12649; CHECK-NEXT: str s1, [x4]650; CHECK-NEXT: zip1 v1.8b, v1.8b, v1.8b651; CHECK-NEXT: ldr s0, [x2]652; CHECK-NEXT: ushll v2.8h, v0.8b, #0653; CHECK-NEXT: umov w9, v2.h[0]654; CHECK-NEXT: umov w10, v2.h[1]655; CHECK-NEXT: mov v0.b[8], w9656; CHECK-NEXT: umov w9, v2.h[2]657; CHECK-NEXT: mov v0.b[9], w10658; CHECK-NEXT: umov w10, v2.h[3]659; CHECK-NEXT: ldr s2, [x1]660; CHECK-NEXT: zip1 v2.8b, v2.8b, v2.8b661; CHECK-NEXT: mov v0.b[10], w9662; CHECK-NEXT: add x9, x1, #4663; CHECK-NEXT: mov v1.d[1], v2.d[0]664; CHECK-NEXT: mov v0.b[11], w10665; CHECK-NEXT: add x10, x3, #12666; CHECK-NEXT: bic v1.8h, #255, lsl #8667; CHECK-NEXT: ld1 { v0.s }[3], [x3], #4668; CHECK-NEXT: ldr s4, [x0, #12]669; CHECK-NEXT: ldp s5, s2, [x2, #4]670; CHECK-NEXT: ldr s6, [x2, #12]671; CHECK-NEXT: ldp s3, s7, [x0, #4]672; CHECK-NEXT: ld1 { v4.s }[1], [x11]673; CHECK-NEXT: ld1 { v6.s }[1], [x10]674; CHECK-NEXT: ld1 { v2.s }[1], [x8]675; CHECK-NEXT: ld1 { v5.s }[1], [x3]676; CHECK-NEXT: add x8, x1, #8677; CHECK-NEXT: ld1 { v3.s }[1], [x9]678; CHECK-NEXT: ld1 { v7.s }[1], [x8]679; CHECK-NEXT: ushll v2.8h, v2.8b, #0680; CHECK-NEXT: uaddl v3.8h, v3.8b, v4.8b681; CHECK-NEXT: uaddl v4.8h, v5.8b, v6.8b682; CHECK-NEXT: uaddw v1.8h, v1.8h, v7.8b683; CHECK-NEXT: uaddw2 v2.8h, v2.8h, v0.16b684; CHECK-NEXT: ushll v0.4s, v3.4h, #3685; CHECK-NEXT: ushll v5.4s, v4.4h, #3686; CHECK-NEXT: ushll2 v4.4s, v4.8h, #3687; CHECK-NEXT: ushll2 v3.4s, v3.8h, #3688; CHECK-NEXT: uaddw v0.4s, v0.4s, v1.4h689; CHECK-NEXT: uaddw2 v1.4s, v3.4s, v1.8h690; CHECK-NEXT: uaddw2 v3.4s, v4.4s, v2.8h691; CHECK-NEXT: uaddw v2.4s, v5.4s, v2.4h692; CHECK-NEXT: ret693 %lp1 = load <4 x i8>, ptr %p694 store <4 x i8> %lp1, ptr %z695 %p2 = getelementptr i8, ptr %p, i32 4696 %lp2 = load <4 x i8>, ptr %p2697 %p3 = getelementptr i8, ptr %p, i32 8698 %lp3 = load <4 x i8>, ptr %p3699 %p4 = getelementptr i8, ptr %p, i32 12700 %lp4 = load <4 x i8>, ptr %p4701 %lq1 = load <4 x i8>, ptr %q702 %q2 = getelementptr i8, ptr %q, i32 4703 %lq2 = load <4 x i8>, ptr %q2704 %q3 = getelementptr i8, ptr %q, i32 8705 %lq3 = load <4 x i8>, ptr %q3706 %q4 = getelementptr i8, ptr %q, i32 12707 %lq4 = load <4 x i8>, ptr %q4708 %lr1 = load <4 x i8>, ptr %r709 %r2 = getelementptr i8, ptr %r, i32 4710 %lr2 = load <4 x i8>, ptr %r2711 %r3 = getelementptr i8, ptr %r, i32 8712 %lr3 = load <4 x i8>, ptr %r3713 %r4 = getelementptr i8, ptr %r, i32 12714 %lr4 = load <4 x i8>, ptr %r4715 %ls1 = load <4 x i8>, ptr %s716 %s2 = getelementptr i8, ptr %s, i32 4717 %ls2 = load <4 x i8>, ptr %s2718 %s3 = getelementptr i8, ptr %s, i32 8719 %ls3 = load <4 x i8>, ptr %s3720 %s4 = getelementptr i8, ptr %s, i32 12721 %ls4 = load <4 x i8>, ptr %s4722 723 %jk1 = shufflevector <4 x i8> %lp1, <4 x i8> %lq1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>724 %m1l = shufflevector <4 x i8> %lr1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>725 %jkm1 = shufflevector <16 x i8> %jk1, <16 x i8> %m1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>726 %n1l = shufflevector <4 x i8> %ls1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>727 %l1 = shufflevector <16 x i8> %jkm1, <16 x i8> %n1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>728 %jk2 = shufflevector <4 x i8> %lp2, <4 x i8> %lq2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>729 %m2l = shufflevector <4 x i8> %lr2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>730 %jkm2 = shufflevector <16 x i8> %jk2, <16 x i8> %m2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>731 %n2l = shufflevector <4 x i8> %ls2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>732 %l2 = shufflevector <16 x i8> %jkm2, <16 x i8> %n2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>733 %jk3 = shufflevector <4 x i8> %lp3, <4 x i8> %lq3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>734 %m3l = shufflevector <4 x i8> %lr3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>735 %jkm3 = shufflevector <16 x i8> %jk3, <16 x i8> %m3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>736 %n3l = shufflevector <4 x i8> %ls3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>737 %l3 = shufflevector <16 x i8> %jkm3, <16 x i8> %n3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>738 %jk4 = shufflevector <4 x i8> %lp4, <4 x i8> %lq4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>739 %m4l = shufflevector <4 x i8> %lr4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>740 %jkm4 = shufflevector <16 x i8> %jk4, <16 x i8> %m4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>741 %n4l = shufflevector <4 x i8> %ls4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>742 %l4 = shufflevector <16 x i8> %jkm4, <16 x i8> %n4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>743 744 %le11 = zext <16 x i8> %l1 to <16 x i16>745 %le12 = zext <16 x i8> %l3 to <16 x i16>746 %le21 = zext <16 x i8> %l2 to <16 x i16>747 %le22 = zext <16 x i8> %l4 to <16 x i16>748 %la1 = add <16 x i16> %le11, %le12749 %la2 = add <16 x i16> %le21, %le22750 %e1 = zext <16 x i16> %la1 to <16 x i32>751 %e2 = zext <16 x i16> %la2 to <16 x i32>752 %se2 = shl <16 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>753 %a = add <16 x i32> %e1, %se2754 ret <16 x i32> %a755}756 757define <16 x i32> @extrause_shuffle(ptr %p, ptr %q, ptr %r, ptr %s, ptr %z) {758; CHECK-LABEL: extrause_shuffle:759; CHECK: // %bb.0:760; CHECK-NEXT: ldp s17, s0, [x0, #8]761; CHECK-NEXT: add x8, x3, #8762; CHECK-NEXT: ldr s3, [x1, #12]763; CHECK-NEXT: ldp s2, s16, [x2]764; CHECK-NEXT: ldr s5, [x2, #12]765; CHECK-NEXT: add x9, x1, #8766; CHECK-NEXT: ldr s1, [x3, #12]767; CHECK-NEXT: mov v4.16b, v0.16b768; CHECK-NEXT: mov v0.s[1], v3.s[0]769; CHECK-NEXT: ld1 { v2.s }[1], [x3], #4770; CHECK-NEXT: ldp s6, s7, [x0]771; CHECK-NEXT: mov v4.s[1], v3.s[0]772; CHECK-NEXT: ld1 { v6.s }[1], [x1], #4773; CHECK-NEXT: ld1 { v7.s }[1], [x1]774; CHECK-NEXT: ld1 { v16.s }[1], [x3]775; CHECK-NEXT: ldr s3, [x2, #8]776; CHECK-NEXT: ld1 { v17.s }[1], [x9]777; CHECK-NEXT: mov v4.s[2], v5.s[0]778; CHECK-NEXT: mov v5.s[1], v1.s[0]779; CHECK-NEXT: ld1 { v3.s }[1], [x8]780; CHECK-NEXT: uaddl v0.8h, v7.8b, v0.8b781; CHECK-NEXT: uaddl v6.8h, v6.8b, v17.8b782; CHECK-NEXT: uaddl v5.8h, v16.8b, v5.8b783; CHECK-NEXT: uaddl v2.8h, v2.8b, v3.8b784; CHECK-NEXT: ushll v3.4s, v0.4h, #3785; CHECK-NEXT: ushll2 v16.4s, v0.8h, #3786; CHECK-NEXT: mov v4.s[3], v1.s[0]787; CHECK-NEXT: ushll v7.4s, v5.4h, #3788; CHECK-NEXT: ushll2 v5.4s, v5.8h, #3789; CHECK-NEXT: uaddw v0.4s, v3.4s, v6.4h790; CHECK-NEXT: uaddw2 v1.4s, v16.4s, v6.8h791; CHECK-NEXT: str q4, [x4]792; CHECK-NEXT: uaddw2 v3.4s, v5.4s, v2.8h793; CHECK-NEXT: uaddw v2.4s, v7.4s, v2.4h794; CHECK-NEXT: ret795 %lp1 = load <4 x i8>, ptr %p796 %p2 = getelementptr i8, ptr %p, i32 4797 %lp2 = load <4 x i8>, ptr %p2798 %p3 = getelementptr i8, ptr %p, i32 8799 %lp3 = load <4 x i8>, ptr %p3800 %p4 = getelementptr i8, ptr %p, i32 12801 %lp4 = load <4 x i8>, ptr %p4802 %lq1 = load <4 x i8>, ptr %q803 %q2 = getelementptr i8, ptr %q, i32 4804 %lq2 = load <4 x i8>, ptr %q2805 %q3 = getelementptr i8, ptr %q, i32 8806 %lq3 = load <4 x i8>, ptr %q3807 %q4 = getelementptr i8, ptr %q, i32 12808 %lq4 = load <4 x i8>, ptr %q4809 %lr1 = load <4 x i8>, ptr %r810 %r2 = getelementptr i8, ptr %r, i32 4811 %lr2 = load <4 x i8>, ptr %r2812 %r3 = getelementptr i8, ptr %r, i32 8813 %lr3 = load <4 x i8>, ptr %r3814 %r4 = getelementptr i8, ptr %r, i32 12815 %lr4 = load <4 x i8>, ptr %r4816 %ls1 = load <4 x i8>, ptr %s817 %s2 = getelementptr i8, ptr %s, i32 4818 %ls2 = load <4 x i8>, ptr %s2819 %s3 = getelementptr i8, ptr %s, i32 8820 %ls3 = load <4 x i8>, ptr %s3821 %s4 = getelementptr i8, ptr %s, i32 12822 %ls4 = load <4 x i8>, ptr %s4823 824 %jk1 = shufflevector <4 x i8> %lp1, <4 x i8> %lq1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>825 %m1l = shufflevector <4 x i8> %lr1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>826 %jkm1 = shufflevector <16 x i8> %jk1, <16 x i8> %m1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>827 %n1l = shufflevector <4 x i8> %ls1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>828 %l1 = shufflevector <16 x i8> %jkm1, <16 x i8> %n1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>829 %jk2 = shufflevector <4 x i8> %lp2, <4 x i8> %lq2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>830 %m2l = shufflevector <4 x i8> %lr2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>831 %jkm2 = shufflevector <16 x i8> %jk2, <16 x i8> %m2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>832 %n2l = shufflevector <4 x i8> %ls2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>833 %l2 = shufflevector <16 x i8> %jkm2, <16 x i8> %n2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>834 %jk3 = shufflevector <4 x i8> %lp3, <4 x i8> %lq3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>835 %m3l = shufflevector <4 x i8> %lr3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>836 %jkm3 = shufflevector <16 x i8> %jk3, <16 x i8> %m3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>837 %n3l = shufflevector <4 x i8> %ls3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>838 %l3 = shufflevector <16 x i8> %jkm3, <16 x i8> %n3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>839 %jk4 = shufflevector <4 x i8> %lp4, <4 x i8> %lq4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>840 %m4l = shufflevector <4 x i8> %lr4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>841 %jkm4 = shufflevector <16 x i8> %jk4, <16 x i8> %m4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>842 %n4l = shufflevector <4 x i8> %ls4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>843 %l4 = shufflevector <16 x i8> %jkm4, <16 x i8> %n4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>844 store <16 x i8> %l4, ptr %z845 846 %le11 = zext <16 x i8> %l1 to <16 x i16>847 %le12 = zext <16 x i8> %l3 to <16 x i16>848 %le21 = zext <16 x i8> %l2 to <16 x i16>849 %le22 = zext <16 x i8> %l4 to <16 x i16>850 %la1 = add <16 x i16> %le11, %le12851 %la2 = add <16 x i16> %le21, %le22852 %e1 = zext <16 x i16> %la1 to <16 x i32>853 %e2 = zext <16 x i16> %la2 to <16 x i32>854 %se2 = shl <16 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>855 %a = add <16 x i32> %e1, %se2856 ret <16 x i32> %a857}858 859define <16 x i32> @extrause_ext(ptr %p, ptr %q, ptr %r, ptr %s, ptr %z) {860; CHECK-LABEL: extrause_ext:861; CHECK: // %bb.0:862; CHECK-NEXT: ldp s0, s5, [x2]863; CHECK-NEXT: add x8, x3, #8864; CHECK-NEXT: add x9, x3, #12865; CHECK-NEXT: add x10, x1, #8866; CHECK-NEXT: add x11, x1, #12867; CHECK-NEXT: ld1 { v0.s }[1], [x3], #4868; CHECK-NEXT: ldp s1, s2, [x0]869; CHECK-NEXT: ld1 { v1.s }[1], [x1], #4870; CHECK-NEXT: ld1 { v2.s }[1], [x1]871; CHECK-NEXT: ldp s7, s4, [x0, #8]872; CHECK-NEXT: ld1 { v5.s }[1], [x3]873; CHECK-NEXT: ldp s6, s3, [x2, #8]874; CHECK-NEXT: ld1 { v4.s }[1], [x11]875; CHECK-NEXT: ld1 { v7.s }[1], [x10]876; CHECK-NEXT: ld1 { v3.s }[1], [x9]877; CHECK-NEXT: ld1 { v6.s }[1], [x8]878; CHECK-NEXT: uaddl v2.8h, v2.8b, v4.8b879; CHECK-NEXT: uaddl v1.8h, v1.8b, v7.8b880; CHECK-NEXT: ushll v4.8h, v4.8b, #0881; CHECK-NEXT: uaddl v5.8h, v5.8b, v3.8b882; CHECK-NEXT: uaddl v6.8h, v0.8b, v6.8b883; CHECK-NEXT: ushll v16.8h, v3.8b, #0884; CHECK-NEXT: ushll v0.4s, v2.4h, #3885; CHECK-NEXT: ushll2 v2.4s, v2.8h, #3886; CHECK-NEXT: ushll v7.4s, v5.4h, #3887; CHECK-NEXT: ushll2 v5.4s, v5.8h, #3888; CHECK-NEXT: stp q4, q16, [x4]889; CHECK-NEXT: uaddw v0.4s, v0.4s, v1.4h890; CHECK-NEXT: uaddw2 v1.4s, v2.4s, v1.8h891; CHECK-NEXT: uaddw2 v3.4s, v5.4s, v6.8h892; CHECK-NEXT: uaddw v2.4s, v7.4s, v6.4h893; CHECK-NEXT: ret894 %lp1 = load <4 x i8>, ptr %p895 %p2 = getelementptr i8, ptr %p, i32 4896 %lp2 = load <4 x i8>, ptr %p2897 %p3 = getelementptr i8, ptr %p, i32 8898 %lp3 = load <4 x i8>, ptr %p3899 %p4 = getelementptr i8, ptr %p, i32 12900 %lp4 = load <4 x i8>, ptr %p4901 %lq1 = load <4 x i8>, ptr %q902 %q2 = getelementptr i8, ptr %q, i32 4903 %lq2 = load <4 x i8>, ptr %q2904 %q3 = getelementptr i8, ptr %q, i32 8905 %lq3 = load <4 x i8>, ptr %q3906 %q4 = getelementptr i8, ptr %q, i32 12907 %lq4 = load <4 x i8>, ptr %q4908 %lr1 = load <4 x i8>, ptr %r909 %r2 = getelementptr i8, ptr %r, i32 4910 %lr2 = load <4 x i8>, ptr %r2911 %r3 = getelementptr i8, ptr %r, i32 8912 %lr3 = load <4 x i8>, ptr %r3913 %r4 = getelementptr i8, ptr %r, i32 12914 %lr4 = load <4 x i8>, ptr %r4915 %ls1 = load <4 x i8>, ptr %s916 %s2 = getelementptr i8, ptr %s, i32 4917 %ls2 = load <4 x i8>, ptr %s2918 %s3 = getelementptr i8, ptr %s, i32 8919 %ls3 = load <4 x i8>, ptr %s3920 %s4 = getelementptr i8, ptr %s, i32 12921 %ls4 = load <4 x i8>, ptr %s4922 923 %jk1 = shufflevector <4 x i8> %lp1, <4 x i8> %lq1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>924 %m1l = shufflevector <4 x i8> %lr1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>925 %jkm1 = shufflevector <16 x i8> %jk1, <16 x i8> %m1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>926 %n1l = shufflevector <4 x i8> %ls1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>927 %l1 = shufflevector <16 x i8> %jkm1, <16 x i8> %n1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>928 %jk2 = shufflevector <4 x i8> %lp2, <4 x i8> %lq2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>929 %m2l = shufflevector <4 x i8> %lr2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>930 %jkm2 = shufflevector <16 x i8> %jk2, <16 x i8> %m2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>931 %n2l = shufflevector <4 x i8> %ls2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>932 %l2 = shufflevector <16 x i8> %jkm2, <16 x i8> %n2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>933 %jk3 = shufflevector <4 x i8> %lp3, <4 x i8> %lq3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>934 %m3l = shufflevector <4 x i8> %lr3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>935 %jkm3 = shufflevector <16 x i8> %jk3, <16 x i8> %m3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>936 %n3l = shufflevector <4 x i8> %ls3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>937 %l3 = shufflevector <16 x i8> %jkm3, <16 x i8> %n3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>938 %jk4 = shufflevector <4 x i8> %lp4, <4 x i8> %lq4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>939 %m4l = shufflevector <4 x i8> %lr4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>940 %jkm4 = shufflevector <16 x i8> %jk4, <16 x i8> %m4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>941 %n4l = shufflevector <4 x i8> %ls4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>942 %l4 = shufflevector <16 x i8> %jkm4, <16 x i8> %n4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>943 944 %le11 = zext <16 x i8> %l1 to <16 x i16>945 %le12 = zext <16 x i8> %l3 to <16 x i16>946 %le21 = zext <16 x i8> %l2 to <16 x i16>947 %le22 = zext <16 x i8> %l4 to <16 x i16>948 store <16 x i16> %le22, ptr %z949 %la1 = add <16 x i16> %le11, %le12950 %la2 = add <16 x i16> %le21, %le22951 %e1 = zext <16 x i16> %la1 to <16 x i32>952 %e2 = zext <16 x i16> %la2 to <16 x i32>953 %se2 = shl <16 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>954 %a = add <16 x i32> %e1, %se2955 ret <16 x i32> %a956}957 958define <16 x i32> @extrause_add(ptr %p, ptr %q, ptr %r, ptr %s, ptr %z) {959; CHECK-LABEL: extrause_add:960; CHECK: // %bb.0:961; CHECK-NEXT: ldp s0, s5, [x2]962; CHECK-NEXT: add x8, x3, #8963; CHECK-NEXT: add x9, x3, #12964; CHECK-NEXT: add x10, x1, #8965; CHECK-NEXT: add x11, x1, #12966; CHECK-NEXT: ld1 { v0.s }[1], [x3], #4967; CHECK-NEXT: ldp s1, s2, [x0]968; CHECK-NEXT: ld1 { v1.s }[1], [x1], #4969; CHECK-NEXT: ld1 { v2.s }[1], [x1]970; CHECK-NEXT: ldp s7, s3, [x0, #8]971; CHECK-NEXT: ld1 { v5.s }[1], [x3]972; CHECK-NEXT: ldp s6, s4, [x2, #8]973; CHECK-NEXT: ld1 { v3.s }[1], [x11]974; CHECK-NEXT: ld1 { v7.s }[1], [x10]975; CHECK-NEXT: ld1 { v4.s }[1], [x9]976; CHECK-NEXT: ld1 { v6.s }[1], [x8]977; CHECK-NEXT: uaddl v16.8h, v2.8b, v3.8b978; CHECK-NEXT: uaddl v1.8h, v1.8b, v7.8b979; CHECK-NEXT: uaddl v4.8h, v5.8b, v4.8b980; CHECK-NEXT: uaddl v2.8h, v0.8b, v6.8b981; CHECK-NEXT: ushll v0.4s, v16.4h, #3982; CHECK-NEXT: ushll2 v6.4s, v16.8h, #3983; CHECK-NEXT: ushll v5.4s, v4.4h, #3984; CHECK-NEXT: ushll2 v3.4s, v4.8h, #3985; CHECK-NEXT: stp q16, q4, [x4]986; CHECK-NEXT: uaddw v0.4s, v0.4s, v1.4h987; CHECK-NEXT: uaddw2 v1.4s, v6.4s, v1.8h988; CHECK-NEXT: uaddw2 v3.4s, v3.4s, v2.8h989; CHECK-NEXT: uaddw v2.4s, v5.4s, v2.4h990; CHECK-NEXT: ret991 %lp1 = load <4 x i8>, ptr %p992 %p2 = getelementptr i8, ptr %p, i32 4993 %lp2 = load <4 x i8>, ptr %p2994 %p3 = getelementptr i8, ptr %p, i32 8995 %lp3 = load <4 x i8>, ptr %p3996 %p4 = getelementptr i8, ptr %p, i32 12997 %lp4 = load <4 x i8>, ptr %p4998 %lq1 = load <4 x i8>, ptr %q999 %q2 = getelementptr i8, ptr %q, i32 41000 %lq2 = load <4 x i8>, ptr %q21001 %q3 = getelementptr i8, ptr %q, i32 81002 %lq3 = load <4 x i8>, ptr %q31003 %q4 = getelementptr i8, ptr %q, i32 121004 %lq4 = load <4 x i8>, ptr %q41005 %lr1 = load <4 x i8>, ptr %r1006 %r2 = getelementptr i8, ptr %r, i32 41007 %lr2 = load <4 x i8>, ptr %r21008 %r3 = getelementptr i8, ptr %r, i32 81009 %lr3 = load <4 x i8>, ptr %r31010 %r4 = getelementptr i8, ptr %r, i32 121011 %lr4 = load <4 x i8>, ptr %r41012 %ls1 = load <4 x i8>, ptr %s1013 %s2 = getelementptr i8, ptr %s, i32 41014 %ls2 = load <4 x i8>, ptr %s21015 %s3 = getelementptr i8, ptr %s, i32 81016 %ls3 = load <4 x i8>, ptr %s31017 %s4 = getelementptr i8, ptr %s, i32 121018 %ls4 = load <4 x i8>, ptr %s41019 1020 %jk1 = shufflevector <4 x i8> %lp1, <4 x i8> %lq1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1021 %m1l = shufflevector <4 x i8> %lr1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1022 %jkm1 = shufflevector <16 x i8> %jk1, <16 x i8> %m1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1023 %n1l = shufflevector <4 x i8> %ls1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1024 %l1 = shufflevector <16 x i8> %jkm1, <16 x i8> %n1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1025 %jk2 = shufflevector <4 x i8> %lp2, <4 x i8> %lq2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1026 %m2l = shufflevector <4 x i8> %lr2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1027 %jkm2 = shufflevector <16 x i8> %jk2, <16 x i8> %m2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1028 %n2l = shufflevector <4 x i8> %ls2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1029 %l2 = shufflevector <16 x i8> %jkm2, <16 x i8> %n2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1030 %jk3 = shufflevector <4 x i8> %lp3, <4 x i8> %lq3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1031 %m3l = shufflevector <4 x i8> %lr3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1032 %jkm3 = shufflevector <16 x i8> %jk3, <16 x i8> %m3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1033 %n3l = shufflevector <4 x i8> %ls3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1034 %l3 = shufflevector <16 x i8> %jkm3, <16 x i8> %n3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1035 %jk4 = shufflevector <4 x i8> %lp4, <4 x i8> %lq4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1036 %m4l = shufflevector <4 x i8> %lr4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1037 %jkm4 = shufflevector <16 x i8> %jk4, <16 x i8> %m4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1038 %n4l = shufflevector <4 x i8> %ls4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1039 %l4 = shufflevector <16 x i8> %jkm4, <16 x i8> %n4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1040 1041 %le11 = zext <16 x i8> %l1 to <16 x i16>1042 %le12 = zext <16 x i8> %l3 to <16 x i16>1043 %le21 = zext <16 x i8> %l2 to <16 x i16>1044 %le22 = zext <16 x i8> %l4 to <16 x i16>1045 %la1 = add <16 x i16> %le11, %le121046 %la2 = add <16 x i16> %le21, %le221047 store <16 x i16> %la2, ptr %z1048 %e1 = zext <16 x i16> %la1 to <16 x i32>1049 %e2 = zext <16 x i16> %la2 to <16 x i32>1050 %se2 = shl <16 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>1051 %a = add <16 x i32> %e1, %se21052 ret <16 x i32> %a1053}1054 1055define <16 x i32> @extrause_ext2(ptr %p, ptr %q, ptr %r, ptr %s, ptr %z) {1056; CHECK-LABEL: extrause_ext2:1057; CHECK: // %bb.0:1058; CHECK-NEXT: ldp s0, s4, [x2]1059; CHECK-NEXT: add x8, x3, #81060; CHECK-NEXT: add x9, x3, #121061; CHECK-NEXT: add x10, x1, #81062; CHECK-NEXT: add x11, x1, #121063; CHECK-NEXT: ld1 { v0.s }[1], [x3], #41064; CHECK-NEXT: ldp s1, s2, [x0]1065; CHECK-NEXT: ld1 { v1.s }[1], [x1], #41066; CHECK-NEXT: ld1 { v2.s }[1], [x1]1067; CHECK-NEXT: ldp s6, s3, [x0, #8]1068; CHECK-NEXT: ld1 { v4.s }[1], [x3]1069; CHECK-NEXT: ldp s7, s5, [x2, #8]1070; CHECK-NEXT: ld1 { v3.s }[1], [x11]1071; CHECK-NEXT: ld1 { v6.s }[1], [x10]1072; CHECK-NEXT: ld1 { v5.s }[1], [x9]1073; CHECK-NEXT: ld1 { v7.s }[1], [x8]1074; CHECK-NEXT: uaddl v2.8h, v2.8b, v3.8b1075; CHECK-NEXT: uaddl v1.8h, v1.8b, v6.8b1076; CHECK-NEXT: uaddl v3.8h, v4.8b, v5.8b1077; CHECK-NEXT: uaddl v4.8h, v0.8b, v7.8b1078; CHECK-NEXT: ushll2 v0.4s, v2.8h, #01079; CHECK-NEXT: ushll v5.4s, v2.4h, #31080; CHECK-NEXT: ushll2 v16.4s, v2.8h, #31081; CHECK-NEXT: ushll v6.4s, v3.4h, #31082; CHECK-NEXT: ushll2 v7.4s, v3.8h, #31083; CHECK-NEXT: ushll v17.4s, v2.4h, #01084; CHECK-NEXT: ushll2 v18.4s, v3.8h, #01085; CHECK-NEXT: ushll v19.4s, v3.4h, #01086; CHECK-NEXT: stp q17, q0, [x4]1087; CHECK-NEXT: uaddw v0.4s, v5.4s, v1.4h1088; CHECK-NEXT: uaddw2 v1.4s, v16.4s, v1.8h1089; CHECK-NEXT: uaddw2 v3.4s, v7.4s, v4.8h1090; CHECK-NEXT: uaddw v2.4s, v6.4s, v4.4h1091; CHECK-NEXT: stp q19, q18, [x4, #32]1092; CHECK-NEXT: ret1093 %lp1 = load <4 x i8>, ptr %p1094 %p2 = getelementptr i8, ptr %p, i32 41095 %lp2 = load <4 x i8>, ptr %p21096 %p3 = getelementptr i8, ptr %p, i32 81097 %lp3 = load <4 x i8>, ptr %p31098 %p4 = getelementptr i8, ptr %p, i32 121099 %lp4 = load <4 x i8>, ptr %p41100 %lq1 = load <4 x i8>, ptr %q1101 %q2 = getelementptr i8, ptr %q, i32 41102 %lq2 = load <4 x i8>, ptr %q21103 %q3 = getelementptr i8, ptr %q, i32 81104 %lq3 = load <4 x i8>, ptr %q31105 %q4 = getelementptr i8, ptr %q, i32 121106 %lq4 = load <4 x i8>, ptr %q41107 %lr1 = load <4 x i8>, ptr %r1108 %r2 = getelementptr i8, ptr %r, i32 41109 %lr2 = load <4 x i8>, ptr %r21110 %r3 = getelementptr i8, ptr %r, i32 81111 %lr3 = load <4 x i8>, ptr %r31112 %r4 = getelementptr i8, ptr %r, i32 121113 %lr4 = load <4 x i8>, ptr %r41114 %ls1 = load <4 x i8>, ptr %s1115 %s2 = getelementptr i8, ptr %s, i32 41116 %ls2 = load <4 x i8>, ptr %s21117 %s3 = getelementptr i8, ptr %s, i32 81118 %ls3 = load <4 x i8>, ptr %s31119 %s4 = getelementptr i8, ptr %s, i32 121120 %ls4 = load <4 x i8>, ptr %s41121 1122 %jk1 = shufflevector <4 x i8> %lp1, <4 x i8> %lq1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1123 %m1l = shufflevector <4 x i8> %lr1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1124 %jkm1 = shufflevector <16 x i8> %jk1, <16 x i8> %m1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1125 %n1l = shufflevector <4 x i8> %ls1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1126 %l1 = shufflevector <16 x i8> %jkm1, <16 x i8> %n1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1127 %jk2 = shufflevector <4 x i8> %lp2, <4 x i8> %lq2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1128 %m2l = shufflevector <4 x i8> %lr2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1129 %jkm2 = shufflevector <16 x i8> %jk2, <16 x i8> %m2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1130 %n2l = shufflevector <4 x i8> %ls2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1131 %l2 = shufflevector <16 x i8> %jkm2, <16 x i8> %n2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1132 %jk3 = shufflevector <4 x i8> %lp3, <4 x i8> %lq3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1133 %m3l = shufflevector <4 x i8> %lr3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1134 %jkm3 = shufflevector <16 x i8> %jk3, <16 x i8> %m3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1135 %n3l = shufflevector <4 x i8> %ls3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1136 %l3 = shufflevector <16 x i8> %jkm3, <16 x i8> %n3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1137 %jk4 = shufflevector <4 x i8> %lp4, <4 x i8> %lq4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1138 %m4l = shufflevector <4 x i8> %lr4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1139 %jkm4 = shufflevector <16 x i8> %jk4, <16 x i8> %m4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1140 %n4l = shufflevector <4 x i8> %ls4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1141 %l4 = shufflevector <16 x i8> %jkm4, <16 x i8> %n4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1142 1143 %le11 = zext <16 x i8> %l1 to <16 x i16>1144 %le12 = zext <16 x i8> %l3 to <16 x i16>1145 %le21 = zext <16 x i8> %l2 to <16 x i16>1146 %le22 = zext <16 x i8> %l4 to <16 x i16>1147 %la1 = add <16 x i16> %le11, %le121148 %la2 = add <16 x i16> %le21, %le221149 %e1 = zext <16 x i16> %la1 to <16 x i32>1150 %e2 = zext <16 x i16> %la2 to <16 x i32>1151 store <16 x i32> %e2, ptr %z1152 %se2 = shl <16 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>1153 %a = add <16 x i32> %e1, %se21154 ret <16 x i32> %a1155}1156 1157define <16 x i32> @extrause_shl(ptr %p, ptr %q, ptr %r, ptr %s, ptr %z) {1158; CHECK-LABEL: extrause_shl:1159; CHECK: // %bb.0:1160; CHECK-NEXT: ldp s0, s4, [x2]1161; CHECK-NEXT: add x8, x3, #81162; CHECK-NEXT: add x9, x3, #121163; CHECK-NEXT: add x10, x1, #81164; CHECK-NEXT: add x11, x1, #121165; CHECK-NEXT: ld1 { v0.s }[1], [x3], #41166; CHECK-NEXT: ldp s1, s2, [x0]1167; CHECK-NEXT: ld1 { v1.s }[1], [x1], #41168; CHECK-NEXT: ld1 { v2.s }[1], [x1]1169; CHECK-NEXT: ldp s6, s3, [x0, #8]1170; CHECK-NEXT: ld1 { v4.s }[1], [x3]1171; CHECK-NEXT: ldp s7, s5, [x2, #8]1172; CHECK-NEXT: ld1 { v3.s }[1], [x11]1173; CHECK-NEXT: ld1 { v6.s }[1], [x10]1174; CHECK-NEXT: ld1 { v5.s }[1], [x9]1175; CHECK-NEXT: ld1 { v7.s }[1], [x8]1176; CHECK-NEXT: uaddl v2.8h, v2.8b, v3.8b1177; CHECK-NEXT: uaddl v1.8h, v1.8b, v6.8b1178; CHECK-NEXT: uaddl v3.8h, v4.8b, v5.8b1179; CHECK-NEXT: uaddl v5.8h, v0.8b, v7.8b1180; CHECK-NEXT: ushll v4.4s, v2.4h, #31181; CHECK-NEXT: ushll2 v2.4s, v2.8h, #31182; CHECK-NEXT: ushll v6.4s, v3.4h, #31183; CHECK-NEXT: ushll2 v7.4s, v3.8h, #31184; CHECK-NEXT: uaddw v0.4s, v4.4s, v1.4h1185; CHECK-NEXT: uaddw2 v1.4s, v2.4s, v1.8h1186; CHECK-NEXT: str q4, [x4]1187; CHECK-NEXT: stp q2, q6, [x4, #16]1188; CHECK-NEXT: uaddw2 v3.4s, v7.4s, v5.8h1189; CHECK-NEXT: uaddw v2.4s, v6.4s, v5.4h1190; CHECK-NEXT: str q7, [x4, #48]1191; CHECK-NEXT: ret1192 %lp1 = load <4 x i8>, ptr %p1193 %p2 = getelementptr i8, ptr %p, i32 41194 %lp2 = load <4 x i8>, ptr %p21195 %p3 = getelementptr i8, ptr %p, i32 81196 %lp3 = load <4 x i8>, ptr %p31197 %p4 = getelementptr i8, ptr %p, i32 121198 %lp4 = load <4 x i8>, ptr %p41199 %lq1 = load <4 x i8>, ptr %q1200 %q2 = getelementptr i8, ptr %q, i32 41201 %lq2 = load <4 x i8>, ptr %q21202 %q3 = getelementptr i8, ptr %q, i32 81203 %lq3 = load <4 x i8>, ptr %q31204 %q4 = getelementptr i8, ptr %q, i32 121205 %lq4 = load <4 x i8>, ptr %q41206 %lr1 = load <4 x i8>, ptr %r1207 %r2 = getelementptr i8, ptr %r, i32 41208 %lr2 = load <4 x i8>, ptr %r21209 %r3 = getelementptr i8, ptr %r, i32 81210 %lr3 = load <4 x i8>, ptr %r31211 %r4 = getelementptr i8, ptr %r, i32 121212 %lr4 = load <4 x i8>, ptr %r41213 %ls1 = load <4 x i8>, ptr %s1214 %s2 = getelementptr i8, ptr %s, i32 41215 %ls2 = load <4 x i8>, ptr %s21216 %s3 = getelementptr i8, ptr %s, i32 81217 %ls3 = load <4 x i8>, ptr %s31218 %s4 = getelementptr i8, ptr %s, i32 121219 %ls4 = load <4 x i8>, ptr %s41220 1221 %jk1 = shufflevector <4 x i8> %lp1, <4 x i8> %lq1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1222 %m1l = shufflevector <4 x i8> %lr1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1223 %jkm1 = shufflevector <16 x i8> %jk1, <16 x i8> %m1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1224 %n1l = shufflevector <4 x i8> %ls1, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1225 %l1 = shufflevector <16 x i8> %jkm1, <16 x i8> %n1l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1226 %jk2 = shufflevector <4 x i8> %lp2, <4 x i8> %lq2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1227 %m2l = shufflevector <4 x i8> %lr2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1228 %jkm2 = shufflevector <16 x i8> %jk2, <16 x i8> %m2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1229 %n2l = shufflevector <4 x i8> %ls2, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1230 %l2 = shufflevector <16 x i8> %jkm2, <16 x i8> %n2l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1231 %jk3 = shufflevector <4 x i8> %lp3, <4 x i8> %lq3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1232 %m3l = shufflevector <4 x i8> %lr3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1233 %jkm3 = shufflevector <16 x i8> %jk3, <16 x i8> %m3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1234 %n3l = shufflevector <4 x i8> %ls3, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1235 %l3 = shufflevector <16 x i8> %jkm3, <16 x i8> %n3l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1236 %jk4 = shufflevector <4 x i8> %lp4, <4 x i8> %lq4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1237 %m4l = shufflevector <4 x i8> %lr4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1238 %jkm4 = shufflevector <16 x i8> %jk4, <16 x i8> %m4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1239 %n4l = shufflevector <4 x i8> %ls4, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1240 %l4 = shufflevector <16 x i8> %jkm4, <16 x i8> %n4l, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1241 1242 %le11 = zext <16 x i8> %l1 to <16 x i16>1243 %le12 = zext <16 x i8> %l3 to <16 x i16>1244 %le21 = zext <16 x i8> %l2 to <16 x i16>1245 %le22 = zext <16 x i8> %l4 to <16 x i16>1246 %la1 = add <16 x i16> %le11, %le121247 %la2 = add <16 x i16> %le21, %le221248 %e1 = zext <16 x i16> %la1 to <16 x i32>1249 %e2 = zext <16 x i16> %la2 to <16 x i32>1250 %se2 = shl <16 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>1251 store <16 x i32> %se2, ptr %z1252 %a = add <16 x i32> %e1, %se21253 ret <16 x i32> %a1254}1255 1256 1257define <8 x i32> @commuted_loads(ptr %p1, ptr %p2) {1258; CHECK-LABEL: commuted_loads:1259; CHECK: // %bb.0:1260; CHECK-NEXT: ldr q0, [x0]1261; CHECK-NEXT: ldr q1, [x1]1262; CHECK-NEXT: add v0.16b, v1.16b, v0.16b1263; CHECK-NEXT: ushll2 v1.8h, v0.16b, #01264; CHECK-NEXT: ushll v0.8h, v0.8b, #01265; CHECK-NEXT: ushll2 v2.4s, v1.8h, #31266; CHECK-NEXT: ushll v3.4s, v1.4h, #31267; CHECK-NEXT: uaddw2 v1.4s, v2.4s, v0.8h1268; CHECK-NEXT: uaddw v0.4s, v3.4s, v0.4h1269; CHECK-NEXT: ret1270 %l11 = load <8 x i8>, ptr %p11271 %q1 = getelementptr i8, ptr %p1, i32 81272 %l12 = load <8 x i8>, ptr %q11273 %l21 = load <8 x i8>, ptr %p21274 %q2 = getelementptr i8, ptr %p2, i32 81275 %l22 = load <8 x i8>, ptr %q21276 %l1 = add <8 x i8> %l21, %l111277 %l2 = add <8 x i8> %l22, %l121278 %e1 = zext <8 x i8> %l1 to <8 x i32>1279 %e2 = zext <8 x i8> %l2 to <8 x i32>1280 %se2 = shl <8 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>1281 %a = add <8 x i32> %e1, %se21282 ret <8 x i32> %a1283}1284 1285define <8 x i32> @commuted_loads2(ptr %p1, ptr %p2) {1286; CHECK-LABEL: commuted_loads2:1287; CHECK: // %bb.0:1288; CHECK-NEXT: ldp d0, d3, [x1]1289; CHECK-NEXT: ldp d1, d2, [x0]1290; CHECK-NEXT: add v0.8b, v1.8b, v0.8b1291; CHECK-NEXT: add v1.8b, v2.8b, v3.8b1292; CHECK-NEXT: ushll v0.8h, v0.8b, #01293; CHECK-NEXT: ushll v2.8h, v1.8b, #01294; CHECK-NEXT: ushll v3.4s, v0.4h, #31295; CHECK-NEXT: ushll2 v0.4s, v0.8h, #31296; CHECK-NEXT: uaddw2 v1.4s, v0.4s, v2.8h1297; CHECK-NEXT: uaddw v0.4s, v3.4s, v2.4h1298; CHECK-NEXT: ret1299 %l11 = load <8 x i8>, ptr %p11300 %q1 = getelementptr i8, ptr %p1, i32 81301 %l12 = load <8 x i8>, ptr %q11302 %l21 = load <8 x i8>, ptr %p21303 %q2 = getelementptr i8, ptr %p2, i32 81304 %l22 = load <8 x i8>, ptr %q21305 %l1 = add <8 x i8> %l11, %l211306 %l2 = add <8 x i8> %l12, %l221307 %e1 = zext <8 x i8> %l2 to <8 x i32>1308 %e2 = zext <8 x i8> %l1 to <8 x i32>1309 %se2 = shl <8 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>1310 %a = add <8 x i32> %e1, %se21311 ret <8 x i32> %a1312}1313 1314define <8 x i32> @commuted_sub(ptr %p1, ptr %p2) {1315; CHECK-LABEL: commuted_sub:1316; CHECK: // %bb.0:1317; CHECK-NEXT: ldp d2, d1, [x1]1318; CHECK-NEXT: ldr d0, [x0, #8]1319; CHECK-NEXT: add v0.8b, v0.8b, v1.8b1320; CHECK-NEXT: ldr d1, [x0]1321; CHECK-NEXT: add v1.8b, v1.8b, v2.8b1322; CHECK-NEXT: ushll v0.8h, v0.8b, #01323; CHECK-NEXT: ushll v2.8h, v1.8b, #01324; CHECK-NEXT: ushll v3.4s, v0.4h, #31325; CHECK-NEXT: ushll2 v0.4s, v0.8h, #31326; CHECK-NEXT: usubw2 v1.4s, v0.4s, v2.8h1327; CHECK-NEXT: usubw v0.4s, v3.4s, v2.4h1328; CHECK-NEXT: ret1329 %l11 = load <8 x i8>, ptr %p11330 %q1 = getelementptr i8, ptr %p1, i32 81331 %l12 = load <8 x i8>, ptr %q11332 %l21 = load <8 x i8>, ptr %p21333 %q2 = getelementptr i8, ptr %p2, i32 81334 %l22 = load <8 x i8>, ptr %q21335 %l1 = add <8 x i8> %l11, %l211336 %l2 = add <8 x i8> %l12, %l221337 %e1 = zext <8 x i8> %l1 to <8 x i32>1338 %e2 = zext <8 x i8> %l2 to <8 x i32>1339 %se2 = shl <8 x i32> %e2, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>1340 %a = sub <8 x i32> %se2, %e11341 ret <8 x i32> %a1342}1343 1344define <4 x i32> @bitcast(ptr %p) {1345; CHECK-LABEL: bitcast:1346; CHECK: // %bb.0:1347; CHECK-NEXT: ldr d0, [x0]1348; CHECK-NEXT: ushll v0.8h, v0.8b, #01349; CHECK-NEXT: ushll2 v1.4s, v0.8h, #31350; CHECK-NEXT: uaddw v0.4s, v1.4s, v0.4h1351; CHECK-NEXT: ret1352 %l1b = load float, ptr %p1353 %l1 = bitcast float %l1b to <4 x i8>1354 %q = getelementptr i8, ptr %p, i32 41355 %l2b = load float, ptr %q1356 %l2 = bitcast float %l2b to <4 x i8>1357 %e1 = zext <4 x i8> %l1 to <4 x i32>1358 %e2 = zext <4 x i8> %l2 to <4 x i32>1359 %e3 = shl <4 x i32> %e2, <i32 3, i32 3, i32 3, i32 3>1360 %a = add <4 x i32> %e1, %e31361 ret <4 x i32> %a1362}1363 1364define <4 x i32> @atomic(ptr %p) {1365; CHECK-LABEL: atomic:1366; CHECK: // %bb.0:1367; CHECK-NEXT: ldar w8, [x0]1368; CHECK-NEXT: movi v0.2d, #0x0000ff000000ff1369; CHECK-NEXT: ldr s1, [x0, #4]1370; CHECK-NEXT: fmov s2, w81371; CHECK-NEXT: ushll v1.8h, v1.8b, #01372; CHECK-NEXT: zip1 v2.8b, v2.8b, v0.8b1373; CHECK-NEXT: ushll v1.4s, v1.4h, #31374; CHECK-NEXT: ushll v2.4s, v2.4h, #01375; CHECK-NEXT: and v0.16b, v2.16b, v0.16b1376; CHECK-NEXT: add v0.4s, v0.4s, v1.4s1377; CHECK-NEXT: ret1378 %l1b = load atomic float, ptr %p acquire, align 41379 %l1 = bitcast float %l1b to <4 x i8>1380 %q = getelementptr i8, ptr %p, i32 41381 %l2b = load float, ptr %q1382 %l2 = bitcast float %l2b to <4 x i8>1383 %e1 = zext <4 x i8> %l1 to <4 x i32>1384 %e2 = zext <4 x i8> %l2 to <4 x i32>1385 %e3 = shl <4 x i32> %e2, <i32 3, i32 3, i32 3, i32 3>1386 %a = add <4 x i32> %e1, %e31387 ret <4 x i32> %a1388}1389 1390define <4 x i32> @volatile(ptr %p) {1391; CHECK-LABEL: volatile:1392; CHECK: // %bb.0:1393; CHECK-NEXT: sub sp, sp, #161394; CHECK-NEXT: .cfi_def_cfa_offset 161395; CHECK-NEXT: ldr s0, [x0, #4]1396; CHECK-NEXT: ldr s1, [x0]1397; CHECK-NEXT: ushll v0.8h, v0.8b, #01398; CHECK-NEXT: ushll v1.8h, v1.8b, #01399; CHECK-NEXT: ushll v0.4s, v0.4h, #31400; CHECK-NEXT: uaddw v0.4s, v0.4s, v1.4h1401; CHECK-NEXT: add sp, sp, #161402; CHECK-NEXT: ret1403 %l1b = load volatile float, ptr %p1404 %l1 = bitcast float %l1b to <4 x i8>1405 %q = getelementptr i8, ptr %p, i32 41406 %l2b = load float, ptr %q1407 %l2 = bitcast float %l2b to <4 x i8>1408 %e1 = zext <4 x i8> %l1 to <4 x i32>1409 %e2 = zext <4 x i8> %l2 to <4 x i32>1410 %e3 = shl <4 x i32> %e2, <i32 3, i32 3, i32 3, i32 3>1411 %a = add <4 x i32> %e1, %e31412 ret <4 x i32> %a1413}1414