734 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64--linux-gnu | FileCheck %s3 4 5; i86 7define <16 x i8> @insert_v16i8_2_1(float %tmp, <16 x i8> %b, <16 x i8> %a) {8; CHECK-LABEL: insert_v16i8_2_1:9; CHECK: // %bb.0:10; CHECK-NEXT: mov v0.16b, v1.16b11; CHECK-NEXT: mov v0.h[0], v2.h[0]12; CHECK-NEXT: ret13 %s2 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>14 ret <16 x i8> %s215}16 17define <16 x i8> @insert_v16i8_2_2(float %tmp, <16 x i8> %b, <16 x i8> %a) {18; CHECK-LABEL: insert_v16i8_2_2:19; CHECK: // %bb.0:20; CHECK-NEXT: mov v0.16b, v1.16b21; CHECK-NEXT: mov v0.h[1], v2.h[0]22; CHECK-NEXT: ret23 %s2 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 0, i32 1, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>24 ret <16 x i8> %s225}26 27define <16 x i8> @insert_v16i8_2_6(float %tmp, <16 x i8> %b, <16 x i8> %a) {28; CHECK-LABEL: insert_v16i8_2_6:29; CHECK: // %bb.0:30; CHECK-NEXT: mov v0.16b, v1.16b31; CHECK-NEXT: mov v0.h[6], v2.h[0]32; CHECK-NEXT: ret33 %s2 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 0, i32 1, i32 30, i32 31>34 ret <16 x i8> %s235}36 37define <16 x i8> @insert_v16i8_4_1(float %tmp, <16 x i8> %b, <16 x i8> %a) {38; CHECK-LABEL: insert_v16i8_4_1:39; CHECK: // %bb.0:40; CHECK-NEXT: mov v0.16b, v1.16b41; CHECK-NEXT: mov v0.s[0], v2.s[0]42; CHECK-NEXT: ret43 %s2 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>44 ret <16 x i8> %s245}46 47define <16 x i8> @insert_v16i8_4_15(float %tmp, <16 x i8> %b, <16 x i8> %a) {48; CHECK-LABEL: insert_v16i8_4_15:49; CHECK: // %bb.0:50; CHECK-NEXT: // kill: def $q2 killed $q2 def $q2_q351; CHECK-NEXT: adrp x8, .LCPI4_052; CHECK-NEXT: mov v3.16b, v1.16b53; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI4_0]54; CHECK-NEXT: tbl v0.16b, { v2.16b, v3.16b }, v0.16b55; CHECK-NEXT: ret56 %s2 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 0, i32 1, i32 2, i32 3, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>57 ret <16 x i8> %s258}59 60define <16 x i8> @insert_v16i8_4_2(float %tmp, <16 x i8> %b, <16 x i8> %a) {61; CHECK-LABEL: insert_v16i8_4_2:62; CHECK: // %bb.0:63; CHECK-NEXT: mov v0.16b, v1.16b64; CHECK-NEXT: mov v0.s[1], v2.s[0]65; CHECK-NEXT: ret66 %s2 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 0, i32 1, i32 2, i32 3, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>67 ret <16 x i8> %s268}69 70define <16 x i8> @insert_v16i8_4_3(float %tmp, <16 x i8> %b, <16 x i8> %a) {71; CHECK-LABEL: insert_v16i8_4_3:72; CHECK: // %bb.0:73; CHECK-NEXT: mov v0.16b, v1.16b74; CHECK-NEXT: mov v0.s[2], v2.s[0]75; CHECK-NEXT: ret76 %s2 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 0, i32 1, i32 2, i32 3, i32 28, i32 29, i32 30, i32 31>77 ret <16 x i8> %s278}79 80define <16 x i8> @insert_v16i8_4_4(float %tmp, <16 x i8> %b, <16 x i8> %a) {81; CHECK-LABEL: insert_v16i8_4_4:82; CHECK: // %bb.0:83; CHECK-NEXT: mov v0.16b, v1.16b84; CHECK-NEXT: mov v0.s[3], v2.s[0]85; CHECK-NEXT: ret86 %s2 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 0, i32 1, i32 2, i32 3>87 ret <16 x i8> %s288}89 90define <8 x i8> @insert_v8i8_4_1(float %tmp, <8 x i8> %b, <8 x i8> %a) {91; CHECK-LABEL: insert_v8i8_4_1:92; CHECK: // %bb.0:93; CHECK-NEXT: fmov d0, d294; CHECK-NEXT: // kill: def $d1 killed $d1 def $q195; CHECK-NEXT: mov v0.s[1], v1.s[1]96; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q097; CHECK-NEXT: ret98 %s2 = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>99 ret <8 x i8> %s2100}101 102define <8 x i8> @insert_v8i8_4_2(float %tmp, <8 x i8> %b, <8 x i8> %a) {103; CHECK-LABEL: insert_v8i8_4_2:104; CHECK: // %bb.0:105; CHECK-NEXT: zip1 v0.2s, v1.2s, v2.2s106; CHECK-NEXT: ret107 %s2 = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 2, i32 3>108 ret <8 x i8> %s2109}110 111define <16 x i8> @insert_v16i8_8_1(float %tmp, <16 x i8> %b, <16 x i8> %a) {112; CHECK-LABEL: insert_v16i8_8_1:113; CHECK: // %bb.0:114; CHECK-NEXT: mov v0.16b, v2.16b115; CHECK-NEXT: mov v0.d[1], v1.d[1]116; CHECK-NEXT: ret117 %s2 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>118 ret <16 x i8> %s2119}120 121define <16 x i8> @insert_v16i8_8_2(float %tmp, <16 x i8> %b, <16 x i8> %a) {122; CHECK-LABEL: insert_v16i8_8_2:123; CHECK: // %bb.0:124; CHECK-NEXT: zip1 v0.2d, v1.2d, v2.2d125; CHECK-NEXT: ret126 %s2 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>127 ret <16 x i8> %s2128}129 130; i16131 132define <8 x i16> @insert_v8i16_2_1(float %tmp, <8 x i16> %b, <8 x i16> %a) {133; CHECK-LABEL: insert_v8i16_2_1:134; CHECK: // %bb.0:135; CHECK-NEXT: mov v0.16b, v1.16b136; CHECK-NEXT: mov v0.s[0], v2.s[0]137; CHECK-NEXT: ret138 %s2 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>139 ret <8 x i16> %s2140}141 142define <8 x i16> @insert_v8i16_2_15(float %tmp, <8 x i16> %b, <8 x i16> %a) {143; CHECK-LABEL: insert_v8i16_2_15:144; CHECK: // %bb.0:145; CHECK-NEXT: // kill: def $q2 killed $q2 def $q2_q3146; CHECK-NEXT: adrp x8, .LCPI13_0147; CHECK-NEXT: mov v3.16b, v1.16b148; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI13_0]149; CHECK-NEXT: tbl v0.16b, { v2.16b, v3.16b }, v0.16b150; CHECK-NEXT: ret151 %s2 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 0, i32 1, i32 11, i32 12, i32 13, i32 14, i32 15>152 ret <8 x i16> %s2153}154 155define <8 x i16> @insert_v8i16_2_2(float %tmp, <8 x i16> %b, <8 x i16> %a) {156; CHECK-LABEL: insert_v8i16_2_2:157; CHECK: // %bb.0:158; CHECK-NEXT: mov v0.16b, v1.16b159; CHECK-NEXT: mov v0.s[1], v2.s[0]160; CHECK-NEXT: ret161 %s2 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 0, i32 1, i32 12, i32 13, i32 14, i32 15>162 ret <8 x i16> %s2163}164 165define <8 x i16> @insert_v8i16_2_3(float %tmp, <8 x i16> %b, <8 x i16> %a) {166; CHECK-LABEL: insert_v8i16_2_3:167; CHECK: // %bb.0:168; CHECK-NEXT: mov v0.16b, v1.16b169; CHECK-NEXT: mov v0.s[2], v2.s[0]170; CHECK-NEXT: ret171 %s2 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 14, i32 15>172 ret <8 x i16> %s2173}174 175define <8 x i16> @insert_v8i16_2_4(float %tmp, <8 x i16> %b, <8 x i16> %a) {176; CHECK-LABEL: insert_v8i16_2_4:177; CHECK: // %bb.0:178; CHECK-NEXT: mov v0.16b, v1.16b179; CHECK-NEXT: mov v0.s[3], v2.s[0]180; CHECK-NEXT: ret181 %s2 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 0, i32 1>182 ret <8 x i16> %s2183}184 185define <4 x i16> @insert_v4i16_2_1(float %tmp, <4 x i16> %b, <4 x i16> %a) {186; CHECK-LABEL: insert_v4i16_2_1:187; CHECK: // %bb.0:188; CHECK-NEXT: fmov d0, d2189; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1190; CHECK-NEXT: mov v0.s[1], v1.s[1]191; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0192; CHECK-NEXT: ret193 %s2 = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 1, i32 6, i32 7>194 ret <4 x i16> %s2195}196 197define <4 x i16> @insert_v4i16_2_2(float %tmp, <4 x i16> %b, <4 x i16> %a) {198; CHECK-LABEL: insert_v4i16_2_2:199; CHECK: // %bb.0:200; CHECK-NEXT: zip1 v0.2s, v1.2s, v2.2s201; CHECK-NEXT: ret202 %s2 = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>203 ret <4 x i16> %s2204}205 206define <8 x i16> @insert_v8i16_4_1(float %tmp, <8 x i16> %b, <8 x i16> %a) {207; CHECK-LABEL: insert_v8i16_4_1:208; CHECK: // %bb.0:209; CHECK-NEXT: mov v0.16b, v2.16b210; CHECK-NEXT: mov v0.d[1], v1.d[1]211; CHECK-NEXT: ret212 %s2 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>213 ret <8 x i16> %s2214}215 216define <8 x i16> @insert_v8i16_4_2(float %tmp, <8 x i16> %b, <8 x i16> %a) {217; CHECK-LABEL: insert_v8i16_4_2:218; CHECK: // %bb.0:219; CHECK-NEXT: zip1 v0.2d, v1.2d, v2.2d220; CHECK-NEXT: ret221 %s2 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 2, i32 3>222 ret <8 x i16> %s2223}224 225; i32226 227define <4 x i32> @insert_v4i32_2_1(float %tmp, <4 x i32> %b, <4 x i32> %a) {228; CHECK-LABEL: insert_v4i32_2_1:229; CHECK: // %bb.0:230; CHECK-NEXT: mov v0.16b, v2.16b231; CHECK-NEXT: mov v0.d[1], v1.d[1]232; CHECK-NEXT: ret233 %s2 = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 1, i32 6, i32 7>234 ret <4 x i32> %s2235}236 237define <4 x i32> @insert_v4i32_2_2(float %tmp, <4 x i32> %b, <4 x i32> %a) {238; CHECK-LABEL: insert_v4i32_2_2:239; CHECK: // %bb.0:240; CHECK-NEXT: zip1 v0.2d, v1.2d, v2.2d241; CHECK-NEXT: ret242 %s2 = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>243 ret <4 x i32> %s2244}245 246 247 248 249; i8250 251define <16 x i8> @load_v16i8_4_1(float %tmp, <16 x i8> %b, ptr %a) {252; CHECK-LABEL: load_v16i8_4_1:253; CHECK: // %bb.0:254; CHECK-NEXT: mov v0.16b, v1.16b255; CHECK-NEXT: ld1 { v0.s }[0], [x0]256; CHECK-NEXT: ret257 %l = load <4 x i8>, ptr %a258 %s1 = shufflevector <4 x i8> %l, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>259 %s2 = shufflevector <16 x i8> %s1, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>260 ret <16 x i8> %s2261}262 263define <16 x i8> @load_v16i8_4_15(float %tmp, <16 x i8> %b, ptr %a) {264; CHECK-LABEL: load_v16i8_4_15:265; CHECK: // %bb.0:266; CHECK-NEXT: // kill: def $q1 killed $q1 def $q0_q1267; CHECK-NEXT: adrp x8, .LCPI24_0268; CHECK-NEXT: ldr s0, [x0]269; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI24_0]270; CHECK-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b271; CHECK-NEXT: ret272 %l = load <4 x i8>, ptr %a273 %s1 = shufflevector <4 x i8> %l, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>274 %s2 = shufflevector <16 x i8> %s1, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 0, i32 1, i32 2, i32 3, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>275 ret <16 x i8> %s2276}277 278define <16 x i8> @load_v16i8_4_2(float %tmp, <16 x i8> %b, ptr %a) {279; CHECK-LABEL: load_v16i8_4_2:280; CHECK: // %bb.0:281; CHECK-NEXT: mov v0.16b, v1.16b282; CHECK-NEXT: ld1 { v0.s }[1], [x0]283; CHECK-NEXT: ret284 %l = load <4 x i8>, ptr %a285 %s1 = shufflevector <4 x i8> %l, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>286 %s2 = shufflevector <16 x i8> %s1, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 0, i32 1, i32 2, i32 3, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>287 ret <16 x i8> %s2288}289 290define <16 x i8> @load_v16i8_4_3(float %tmp, <16 x i8> %b, ptr %a) {291; CHECK-LABEL: load_v16i8_4_3:292; CHECK: // %bb.0:293; CHECK-NEXT: mov v0.16b, v1.16b294; CHECK-NEXT: ld1 { v0.s }[2], [x0]295; CHECK-NEXT: ret296 %l = load <4 x i8>, ptr %a297 %s1 = shufflevector <4 x i8> %l, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>298 %s2 = shufflevector <16 x i8> %s1, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 0, i32 1, i32 2, i32 3, i32 28, i32 29, i32 30, i32 31>299 ret <16 x i8> %s2300}301 302define <16 x i8> @load_v16i8_4_4(float %tmp, <16 x i8> %b, ptr %a) {303; CHECK-LABEL: load_v16i8_4_4:304; CHECK: // %bb.0:305; CHECK-NEXT: mov v0.16b, v1.16b306; CHECK-NEXT: ld1 { v0.s }[3], [x0]307; CHECK-NEXT: ret308 %l = load <4 x i8>, ptr %a309 %s1 = shufflevector <4 x i8> %l, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>310 %s2 = shufflevector <16 x i8> %s1, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 0, i32 1, i32 2, i32 3>311 ret <16 x i8> %s2312}313 314define <8 x i8> @load_v8i8_4_1(float %tmp, <8 x i8> %b, ptr %a) {315; CHECK-LABEL: load_v8i8_4_1:316; CHECK: // %bb.0:317; CHECK-NEXT: ldr s0, [x0]318; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1319; CHECK-NEXT: mov v0.s[1], v1.s[1]320; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0321; CHECK-NEXT: ret322 %l = load <4 x i8>, ptr %a323 %s1 = shufflevector <4 x i8> %l, <4 x i8> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>324 %s2 = shufflevector <8 x i8> %s1, <8 x i8> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>325 ret <8 x i8> %s2326}327 328define <8 x i8> @load_v8i8_4_2(float %tmp, <8 x i8> %b, ptr %a) {329; CHECK-LABEL: load_v8i8_4_2:330; CHECK: // %bb.0:331; CHECK-NEXT: ldr s0, [x0]332; CHECK-NEXT: zip1 v0.2s, v1.2s, v0.2s333; CHECK-NEXT: ret334 %l = load <4 x i8>, ptr %a335 %s1 = shufflevector <4 x i8> %l, <4 x i8> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>336 %s2 = shufflevector <8 x i8> %s1, <8 x i8> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 2, i32 3>337 ret <8 x i8> %s2338}339 340define <16 x i8> @load_v16i8_8_1(float %tmp, <16 x i8> %b, ptr %a) {341; CHECK-LABEL: load_v16i8_8_1:342; CHECK: // %bb.0:343; CHECK-NEXT: ext v1.16b, v1.16b, v1.16b, #8344; CHECK-NEXT: ldr d0, [x0]345; CHECK-NEXT: mov v0.d[1], v1.d[0]346; CHECK-NEXT: ret347 %l = load <8 x i8>, ptr %a348 %s1 = shufflevector <8 x i8> %l, <8 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>349 %s2 = shufflevector <16 x i8> %s1, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>350 ret <16 x i8> %s2351}352 353define <16 x i8> @load_v16i8_8_2(float %tmp, <16 x i8> %b, ptr %a) {354; CHECK-LABEL: load_v16i8_8_2:355; CHECK: // %bb.0:356; CHECK-NEXT: mov v0.16b, v1.16b357; CHECK-NEXT: ldr d2, [x0]358; CHECK-NEXT: mov v0.d[1], v2.d[0]359; CHECK-NEXT: ret360 %l = load <8 x i8>, ptr %a361 %s1 = shufflevector <8 x i8> %l, <8 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>362 %s2 = shufflevector <16 x i8> %s1, <16 x i8> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>363 ret <16 x i8> %s2364}365 366define <8 x i8> @load_v8i8_2_1(float %tmp, <8 x i8> %b, ptr %a) {367; CHECK-LABEL: load_v8i8_2_1:368; CHECK: // %bb.0:369; CHECK-NEXT: fmov d0, d1370; CHECK-NEXT: ldr h2, [x0]371; CHECK-NEXT: mov v0.h[0], v2.h[0]372; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0373; CHECK-NEXT: ret374 %l = load <2 x i8>, ptr %a375 %s1 = shufflevector <2 x i8> %l, <2 x i8> poison, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>376 %s2 = shufflevector <8 x i8> %s1, <8 x i8> %b, <8 x i32> <i32 0, i32 1, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>377 ret <8 x i8> %s2378}379 380define <8 x i8> @load_v8i8_2_15(float %tmp, <8 x i8> %b, ptr %a) {381; CHECK-LABEL: load_v8i8_2_15:382; CHECK: // %bb.0:383; CHECK-NEXT: ldr h0, [x0]384; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1385; CHECK-NEXT: adrp x8, .LCPI33_0386; CHECK-NEXT: mov v0.d[1], v1.d[0]387; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI33_0]388; CHECK-NEXT: tbl v0.8b, { v0.16b }, v1.8b389; CHECK-NEXT: ret390 %l = load <2 x i8>, ptr %a391 %s1 = shufflevector <2 x i8> %l, <2 x i8> poison, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>392 %s2 = shufflevector <8 x i8> %s1, <8 x i8> %b, <8 x i32> <i32 8, i32 0, i32 1, i32 11, i32 12, i32 13, i32 14, i32 15>393 ret <8 x i8> %s2394}395 396define <8 x i8> @load_v8i8_2_2(float %tmp, <8 x i8> %b, ptr %a) {397; CHECK-LABEL: load_v8i8_2_2:398; CHECK: // %bb.0:399; CHECK-NEXT: fmov d0, d1400; CHECK-NEXT: ldr h2, [x0]401; CHECK-NEXT: mov v0.h[1], v2.h[0]402; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0403; CHECK-NEXT: ret404 %l = load <2 x i8>, ptr %a405 %s1 = shufflevector <2 x i8> %l, <2 x i8> poison, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>406 %s2 = shufflevector <8 x i8> %s1, <8 x i8> %b, <8 x i32> <i32 8, i32 9, i32 0, i32 1, i32 12, i32 13, i32 14, i32 15>407 ret <8 x i8> %s2408}409 410define <8 x i8> @load_v8i8_2_3(float %tmp, <8 x i8> %b, ptr %a) {411; CHECK-LABEL: load_v8i8_2_3:412; CHECK: // %bb.0:413; CHECK-NEXT: fmov d0, d1414; CHECK-NEXT: ldr h2, [x0]415; CHECK-NEXT: mov v0.h[2], v2.h[0]416; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0417; CHECK-NEXT: ret418 %l = load <2 x i8>, ptr %a419 %s1 = shufflevector <2 x i8> %l, <2 x i8> poison, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>420 %s2 = shufflevector <8 x i8> %s1, <8 x i8> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 14, i32 15>421 ret <8 x i8> %s2422}423 424define <8 x i8> @load_v8i8_2_4(float %tmp, <8 x i8> %b, ptr %a) {425; CHECK-LABEL: load_v8i8_2_4:426; CHECK: // %bb.0:427; CHECK-NEXT: fmov d0, d1428; CHECK-NEXT: ldr h2, [x0]429; CHECK-NEXT: mov v0.h[3], v2.h[0]430; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0431; CHECK-NEXT: ret432 %l = load <2 x i8>, ptr %a433 %s1 = shufflevector <2 x i8> %l, <2 x i8> poison, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>434 %s2 = shufflevector <8 x i8> %s1, <8 x i8> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 0, i32 1>435 ret <8 x i8> %s2436}437 438define <4 x i8> @load_v4i8_2_1(float %tmp, <4 x i8> %b, ptr %a) {439; CHECK-LABEL: load_v4i8_2_1:440; CHECK: // %bb.0:441; CHECK-NEXT: ldr h0, [x0]442; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1443; CHECK-NEXT: zip1 v0.8b, v0.8b, v0.8b444; CHECK-NEXT: mov v0.s[1], v1.s[1]445; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0446; CHECK-NEXT: ret447 %l = load <2 x i8>, ptr %a448 %s1 = shufflevector <2 x i8> %l, <2 x i8> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>449 %s2 = shufflevector <4 x i8> %s1, <4 x i8> %b, <4 x i32> <i32 0, i32 1, i32 6, i32 7>450 ret <4 x i8> %s2451}452 453define <4 x i8> @load_v4i8_2_2(float %tmp, <4 x i8> %b, ptr %a) {454; CHECK-LABEL: load_v4i8_2_2:455; CHECK: // %bb.0:456; CHECK-NEXT: ldr h0, [x0]457; CHECK-NEXT: zip1 v0.8b, v0.8b, v0.8b458; CHECK-NEXT: zip1 v0.2s, v1.2s, v0.2s459; CHECK-NEXT: ret460 %l = load <2 x i8>, ptr %a461 %s1 = shufflevector <2 x i8> %l, <2 x i8> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>462 %s2 = shufflevector <4 x i8> %s1, <4 x i8> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>463 ret <4 x i8> %s2464}465 466; i16467 468define <8 x i16> @load_v8i16_2_1(float %tmp, <8 x i16> %b, ptr %a) {469; CHECK-LABEL: load_v8i16_2_1:470; CHECK: // %bb.0:471; CHECK-NEXT: mov v0.16b, v1.16b472; CHECK-NEXT: ld1 { v0.s }[0], [x0]473; CHECK-NEXT: ret474 %l = load <2 x i16>, ptr %a475 %s1 = shufflevector <2 x i16> %l, <2 x i16> poison, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>476 %s2 = shufflevector <8 x i16> %s1, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>477 ret <8 x i16> %s2478}479 480define <8 x i16> @load_v8i16_2_15(float %tmp, <8 x i16> %b, ptr %a) {481; CHECK-LABEL: load_v8i16_2_15:482; CHECK: // %bb.0:483; CHECK-NEXT: // kill: def $q1 killed $q1 def $q0_q1484; CHECK-NEXT: adrp x8, .LCPI40_0485; CHECK-NEXT: ldr s0, [x0]486; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI40_0]487; CHECK-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b488; CHECK-NEXT: ret489 %l = load <2 x i16>, ptr %a490 %s1 = shufflevector <2 x i16> %l, <2 x i16> poison, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>491 %s2 = shufflevector <8 x i16> %s1, <8 x i16> %b, <8 x i32> <i32 8, i32 0, i32 1, i32 11, i32 12, i32 13, i32 14, i32 15>492 ret <8 x i16> %s2493}494 495define <8 x i16> @load_v8i16_2_2(float %tmp, <8 x i16> %b, ptr %a) {496; CHECK-LABEL: load_v8i16_2_2:497; CHECK: // %bb.0:498; CHECK-NEXT: mov v0.16b, v1.16b499; CHECK-NEXT: ld1 { v0.s }[1], [x0]500; CHECK-NEXT: ret501 %l = load <2 x i16>, ptr %a502 %s1 = shufflevector <2 x i16> %l, <2 x i16> poison, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>503 %s2 = shufflevector <8 x i16> %s1, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 0, i32 1, i32 12, i32 13, i32 14, i32 15>504 ret <8 x i16> %s2505}506 507define <8 x i16> @load_v8i16_2_3(float %tmp, <8 x i16> %b, ptr %a) {508; CHECK-LABEL: load_v8i16_2_3:509; CHECK: // %bb.0:510; CHECK-NEXT: mov v0.16b, v1.16b511; CHECK-NEXT: ld1 { v0.s }[2], [x0]512; CHECK-NEXT: ret513 %l = load <2 x i16>, ptr %a514 %s1 = shufflevector <2 x i16> %l, <2 x i16> poison, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>515 %s2 = shufflevector <8 x i16> %s1, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 14, i32 15>516 ret <8 x i16> %s2517}518 519define <8 x i16> @load_v8i16_2_4(float %tmp, <8 x i16> %b, ptr %a) {520; CHECK-LABEL: load_v8i16_2_4:521; CHECK: // %bb.0:522; CHECK-NEXT: mov v0.16b, v1.16b523; CHECK-NEXT: ld1 { v0.s }[3], [x0]524; CHECK-NEXT: ret525 %l = load <2 x i16>, ptr %a526 %s1 = shufflevector <2 x i16> %l, <2 x i16> poison, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>527 %s2 = shufflevector <8 x i16> %s1, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 0, i32 1>528 ret <8 x i16> %s2529}530 531define <4 x i16> @load_v4i16_2_1(float %tmp, <4 x i16> %b, ptr %a) {532; CHECK-LABEL: load_v4i16_2_1:533; CHECK: // %bb.0:534; CHECK-NEXT: ldr s0, [x0]535; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1536; CHECK-NEXT: mov v0.s[1], v1.s[1]537; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0538; CHECK-NEXT: ret539 %l = load <2 x i16>, ptr %a540 %s1 = shufflevector <2 x i16> %l, <2 x i16> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>541 %s2 = shufflevector <4 x i16> %s1, <4 x i16> %b, <4 x i32> <i32 0, i32 1, i32 6, i32 7>542 ret <4 x i16> %s2543}544 545define <4 x i16> @load_v4i16_2_2(float %tmp, <4 x i16> %b, ptr %a) {546; CHECK-LABEL: load_v4i16_2_2:547; CHECK: // %bb.0:548; CHECK-NEXT: ldr s0, [x0]549; CHECK-NEXT: zip1 v0.2s, v1.2s, v0.2s550; CHECK-NEXT: ret551 %l = load <2 x i16>, ptr %a552 %s1 = shufflevector <2 x i16> %l, <2 x i16> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>553 %s2 = shufflevector <4 x i16> %s1, <4 x i16> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>554 ret <4 x i16> %s2555}556 557define <8 x i16> @load_v8i16_4_1(float %tmp, <8 x i16> %b, ptr %a) {558; CHECK-LABEL: load_v8i16_4_1:559; CHECK: // %bb.0:560; CHECK-NEXT: ext v1.16b, v1.16b, v1.16b, #8561; CHECK-NEXT: ldr d0, [x0]562; CHECK-NEXT: mov v0.d[1], v1.d[0]563; CHECK-NEXT: ret564 %l = load <4 x i16>, ptr %a565 %s1 = shufflevector <4 x i16> %l, <4 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>566 %s2 = shufflevector <8 x i16> %s1, <8 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>567 ret <8 x i16> %s2568}569 570define <8 x i16> @load_v8i16_4_2(float %tmp, <8 x i16> %b, ptr %a) {571; CHECK-LABEL: load_v8i16_4_2:572; CHECK: // %bb.0:573; CHECK-NEXT: mov v0.16b, v1.16b574; CHECK-NEXT: ldr d2, [x0]575; CHECK-NEXT: mov v0.d[1], v2.d[0]576; CHECK-NEXT: ret577 %l = load <4 x i16>, ptr %a578 %s1 = shufflevector <4 x i16> %l, <4 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>579 %s2 = shufflevector <8 x i16> %s1, <8 x i16> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 2, i32 3>580 ret <8 x i16> %s2581}582 583; i32584 585define <4 x i32> @load_v4i32_2_1(float %tmp, <4 x i32> %b, ptr %a) {586; CHECK-LABEL: load_v4i32_2_1:587; CHECK: // %bb.0:588; CHECK-NEXT: ext v1.16b, v1.16b, v1.16b, #8589; CHECK-NEXT: ldr d0, [x0]590; CHECK-NEXT: mov v0.d[1], v1.d[0]591; CHECK-NEXT: ret592 %l = load <2 x i32>, ptr %a593 %s1 = shufflevector <2 x i32> %l, <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>594 %s2 = shufflevector <4 x i32> %s1, <4 x i32> %b, <4 x i32> <i32 0, i32 1, i32 6, i32 7>595 ret <4 x i32> %s2596}597 598define <4 x i32> @load_v4i32_2_2(float %tmp, <4 x i32> %b, ptr %a) {599; CHECK-LABEL: load_v4i32_2_2:600; CHECK: // %bb.0:601; CHECK-NEXT: mov v0.16b, v1.16b602; CHECK-NEXT: ldr d2, [x0]603; CHECK-NEXT: mov v0.d[1], v2.d[0]604; CHECK-NEXT: ret605 %l = load <2 x i32>, ptr %a606 %s1 = shufflevector <2 x i32> %l, <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>607 %s2 = shufflevector <4 x i32> %s1, <4 x i32> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>608 ret <4 x i32> %s2609}610 611; More than a single vector612 613define <8 x i8> @load2_v4i8(float %tmp, ptr %a, ptr %b) {614; CHECK-LABEL: load2_v4i8:615; CHECK: // %bb.0:616; CHECK-NEXT: ldr s0, [x0]617; CHECK-NEXT: ld1 { v0.s }[1], [x1]618; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0619; CHECK-NEXT: ret620 %la = load <4 x i8>, ptr %a621 %lb = load <4 x i8>, ptr %b622 %s1 = shufflevector <4 x i8> %la, <4 x i8> %lb, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>623 ret <8 x i8> %s1624}625 626define <16 x i8> @load3_v4i8(float %tmp, ptr %a, ptr %b) {627; CHECK-LABEL: load3_v4i8:628; CHECK: // %bb.0:629; CHECK-NEXT: ldp s0, s1, [x0]630; CHECK-NEXT: ld1 { v0.s }[1], [x1]631; CHECK-NEXT: mov v0.d[1], v1.d[0]632; CHECK-NEXT: ret633 %la = load <4 x i8>, ptr %a634 %lb = load <4 x i8>, ptr %b635 %c = getelementptr <4 x i8>, ptr %a, i64 1636 %d = getelementptr <4 x i8>, ptr %b, i64 1637 %lc = load <4 x i8>, ptr %c638 %s1 = shufflevector <4 x i8> %la, <4 x i8> %lb, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>639 %s2 = shufflevector <4 x i8> %lc, <4 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>640 %s3 = shufflevector <8 x i8> %s1, <8 x i8> %s2, <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>641 ret <16 x i8> %s3642}643 644define <16 x i8> @load4_v4i8(float %tmp, ptr %a, ptr %b) {645; CHECK-LABEL: load4_v4i8:646; CHECK: // %bb.0:647; CHECK-NEXT: ldp s0, s1, [x0]648; CHECK-NEXT: ld1 { v0.s }[1], [x1], #4649; CHECK-NEXT: ld1 { v1.s }[1], [x1]650; CHECK-NEXT: mov v0.d[1], v1.d[0]651; CHECK-NEXT: ret652 %la = load <4 x i8>, ptr %a653 %lb = load <4 x i8>, ptr %b654 %c = getelementptr <4 x i8>, ptr %a, i64 1655 %d = getelementptr <4 x i8>, ptr %b, i64 1656 %lc = load <4 x i8>, ptr %c657 %ld = load <4 x i8>, ptr %d658 %s1 = shufflevector <4 x i8> %la, <4 x i8> %lb, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>659 %s2 = shufflevector <4 x i8> %lc, <4 x i8> %ld, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>660 %s3 = shufflevector <8 x i8> %s1, <8 x i8> %s2, <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>661 ret <16 x i8> %s3662}663 664define <16 x i8> @load2multi1_v4i8(float %tmp, ptr %a, ptr %b) {665; CHECK-LABEL: load2multi1_v4i8:666; CHECK: // %bb.0:667; CHECK-NEXT: ldr s0, [x0]668; CHECK-NEXT: ld1 { v0.s }[1], [x1]669; CHECK-NEXT: mov v0.d[1], v0.d[0]670; CHECK-NEXT: ret671 %la = load <4 x i8>, ptr %a672 %lb = load <4 x i8>, ptr %b673 %s1 = shufflevector <4 x i8> %la, <4 x i8> %lb, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>674 %s3 = shufflevector <8 x i8> %s1, <8 x i8> %s1, <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>675 ret <16 x i8> %s3676}677 678define <16 x i8> @load2multi2_v4i8(float %tmp, ptr %a, ptr %b) {679; CHECK-LABEL: load2multi2_v4i8:680; CHECK: // %bb.0:681; CHECK-NEXT: ldr s0, [x0]682; CHECK-NEXT: ldr s1, [x1]683; CHECK-NEXT: ushll v0.8h, v0.8b, #0684; CHECK-NEXT: ushll v1.8h, v1.8b, #0685; CHECK-NEXT: mov v1.d[1], v1.d[0]686; CHECK-NEXT: mov v0.d[1], v0.d[0]687; CHECK-NEXT: uzp1 v0.16b, v0.16b, v1.16b688; CHECK-NEXT: ret689 %la = load <4 x i8>, ptr %a690 %lb = load <4 x i8>, ptr %b691 %s1 = shufflevector <4 x i8> %la, <4 x i8> %la, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>692 %s2 = shufflevector <4 x i8> %lb, <4 x i8> %lb, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>693 %s3 = shufflevector <8 x i8> %s1, <8 x i8> %s2, <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>694 ret <16 x i8> %s3695}696 697define void @loads_before_stores(ptr %i44) {698; CHECK-LABEL: loads_before_stores:699; CHECK: // %bb.0: // %bb700; CHECK-NEXT: ldr s0, [x0, #28]701; CHECK-NEXT: add x8, x0, #20702; CHECK-NEXT: ldrh w9, [x0, #26]703; CHECK-NEXT: ldrh w10, [x0, #24]704; CHECK-NEXT: ld1 { v0.s }[1], [x8]705; CHECK-NEXT: strh w9, [x0, #20]706; CHECK-NEXT: strh w10, [x0, #30]707; CHECK-NEXT: stur d0, [x0, #22]708; CHECK-NEXT: ret709bb:710 %i45 = getelementptr inbounds i8, ptr %i44, i64 20711 %i46 = getelementptr inbounds i8, ptr %i44, i64 26712 %i48 = load i8, ptr %i46, align 1713 %i49 = getelementptr inbounds i8, ptr %i44, i64 21714 %i50 = getelementptr inbounds i8, ptr %i44, i64 27715 %i52 = load i8, ptr %i50, align 1716 %i53 = getelementptr inbounds i8, ptr %i44, i64 22717 %i54 = getelementptr inbounds i8, ptr %i44, i64 28718 %i61 = getelementptr inbounds i8, ptr %i44, i64 24719 %i62 = getelementptr inbounds i8, ptr %i44, i64 30720 %i63 = load i8, ptr %i61, align 1721 %i65 = getelementptr inbounds i8, ptr %i44, i64 25722 %i66 = getelementptr inbounds i8, ptr %i44, i64 31723 %i67 = load i8, ptr %i65, align 1724 %0 = load <4 x i8>, ptr %i45, align 1725 store i8 %i48, ptr %i45, align 1726 store i8 %i52, ptr %i49, align 1727 %1 = load <4 x i8>, ptr %i54, align 1728 store i8 %i63, ptr %i62, align 1729 %2 = shufflevector <4 x i8> %1, <4 x i8> %0, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>730 store <8 x i8> %2, ptr %i53, align 1731 store i8 %i67, ptr %i66, align 1732 ret void733}734