1713 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-LE3; RUN: llc -mtriple=thumbebv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-BE4 5define ptr @ldrwu32_4(ptr %x, ptr %y) {6; CHECK-LABEL: ldrwu32_4:7; CHECK: @ %bb.0: @ %entry8; CHECK-NEXT: vldrw.u32 q0, [r0], #49; CHECK-NEXT: vstrw.32 q0, [r1]10; CHECK-NEXT: bx lr11entry:12 %z = getelementptr inbounds i8, ptr %x, i32 413 %0 = load <4 x i32>, ptr %x, align 414 store <4 x i32> %0, ptr %y, align 415 ret ptr %z16}17 18define ptr @ldrwu32_3(ptr %x, ptr %y) {19; CHECK-LE-LABEL: ldrwu32_3:20; CHECK-LE: @ %bb.0: @ %entry21; CHECK-LE-NEXT: vldrb.u8 q0, [r0], #322; CHECK-LE-NEXT: vstrw.32 q0, [r1]23; CHECK-LE-NEXT: bx lr24;25; CHECK-BE-LABEL: ldrwu32_3:26; CHECK-BE: @ %bb.0: @ %entry27; CHECK-BE-NEXT: vldrw.u32 q0, [r0]28; CHECK-BE-NEXT: adds r0, #329; CHECK-BE-NEXT: vstrw.32 q0, [r1]30; CHECK-BE-NEXT: bx lr31entry:32 %z = getelementptr inbounds i8, ptr %x, i32 333 %0 = load <4 x i32>, ptr %x, align 434 store <4 x i32> %0, ptr %y, align 435 ret ptr %z36}37 38define ptr @ldrwu32_m4(ptr %x, ptr %y) {39; CHECK-LABEL: ldrwu32_m4:40; CHECK: @ %bb.0: @ %entry41; CHECK-NEXT: vldrw.u32 q0, [r0], #-442; CHECK-NEXT: vstrw.32 q0, [r1]43; CHECK-NEXT: bx lr44entry:45 %z = getelementptr inbounds i8, ptr %x, i32 -446 %0 = load <4 x i32>, ptr %x, align 447 store <4 x i32> %0, ptr %y, align 448 ret ptr %z49}50 51define ptr @ldrwu32_508(ptr %x, ptr %y) {52; CHECK-LABEL: ldrwu32_508:53; CHECK: @ %bb.0: @ %entry54; CHECK-NEXT: vldrw.u32 q0, [r0], #50855; CHECK-NEXT: vstrw.32 q0, [r1]56; CHECK-NEXT: bx lr57entry:58 %z = getelementptr inbounds i8, ptr %x, i32 50859 %0 = load <4 x i32>, ptr %x, align 460 store <4 x i32> %0, ptr %y, align 461 ret ptr %z62}63 64define ptr @ldrwu32_512(ptr %x, ptr %y) {65; CHECK-LABEL: ldrwu32_512:66; CHECK: @ %bb.0: @ %entry67; CHECK-NEXT: vldrw.u32 q0, [r0]68; CHECK-NEXT: add.w r0, r0, #51269; CHECK-NEXT: vstrw.32 q0, [r1]70; CHECK-NEXT: bx lr71entry:72 %z = getelementptr inbounds i8, ptr %x, i32 51273 %0 = load <4 x i32>, ptr %x, align 474 store <4 x i32> %0, ptr %y, align 475 ret ptr %z76}77 78define ptr @ldrwu32_m508(ptr %x, ptr %y) {79; CHECK-LABEL: ldrwu32_m508:80; CHECK: @ %bb.0: @ %entry81; CHECK-NEXT: vldrw.u32 q0, [r0], #-50882; CHECK-NEXT: vstrw.32 q0, [r1]83; CHECK-NEXT: bx lr84entry:85 %z = getelementptr inbounds i8, ptr %x, i32 -50886 %0 = load <4 x i32>, ptr %x, align 487 store <4 x i32> %0, ptr %y, align 488 ret ptr %z89}90 91define ptr @ldrwu32_m512(ptr %x, ptr %y) {92; CHECK-LABEL: ldrwu32_m512:93; CHECK: @ %bb.0: @ %entry94; CHECK-NEXT: vldrw.u32 q0, [r0]95; CHECK-NEXT: sub.w r0, r0, #51296; CHECK-NEXT: vstrw.32 q0, [r1]97; CHECK-NEXT: bx lr98entry:99 %z = getelementptr inbounds i8, ptr %x, i32 -512100 %0 = load <4 x i32>, ptr %x, align 4101 store <4 x i32> %0, ptr %y, align 4102 ret ptr %z103}104 105 106define ptr @ldrhu32_4(ptr %x, ptr %y) {107; CHECK-LABEL: ldrhu32_4:108; CHECK: @ %bb.0: @ %entry109; CHECK-NEXT: vldrh.u32 q0, [r0], #4110; CHECK-NEXT: vstrw.32 q0, [r1]111; CHECK-NEXT: bx lr112entry:113 %z = getelementptr inbounds i8, ptr %x, i32 4114 %0 = load <4 x i16>, ptr %x, align 2115 %1 = zext <4 x i16> %0 to <4 x i32>116 store <4 x i32> %1, ptr %y, align 4117 ret ptr %z118}119 120define ptr @ldrhu32_3(ptr %x, ptr %y) {121; CHECK-LABEL: ldrhu32_3:122; CHECK: @ %bb.0: @ %entry123; CHECK-NEXT: vldrh.u32 q0, [r0]124; CHECK-NEXT: adds r0, #3125; CHECK-NEXT: vstrw.32 q0, [r1]126; CHECK-NEXT: bx lr127entry:128 %z = getelementptr inbounds i8, ptr %x, i32 3129 %0 = load <4 x i16>, ptr %x, align 2130 %1 = zext <4 x i16> %0 to <4 x i32>131 store <4 x i32> %1, ptr %y, align 4132 ret ptr %z133}134 135define ptr @ldrhu32_2(ptr %x, ptr %y) {136; CHECK-LABEL: ldrhu32_2:137; CHECK: @ %bb.0: @ %entry138; CHECK-NEXT: vldrh.u32 q0, [r0], #2139; CHECK-NEXT: vstrw.32 q0, [r1]140; CHECK-NEXT: bx lr141entry:142 %z = getelementptr inbounds i8, ptr %x, i32 2143 %0 = load <4 x i16>, ptr %x, align 2144 %1 = zext <4 x i16> %0 to <4 x i32>145 store <4 x i32> %1, ptr %y, align 4146 ret ptr %z147}148 149define ptr @ldrhu32_254(ptr %x, ptr %y) {150; CHECK-LABEL: ldrhu32_254:151; CHECK: @ %bb.0: @ %entry152; CHECK-NEXT: vldrh.u32 q0, [r0], #254153; CHECK-NEXT: vstrw.32 q0, [r1]154; CHECK-NEXT: bx lr155entry:156 %z = getelementptr inbounds i8, ptr %x, i32 254157 %0 = load <4 x i16>, ptr %x, align 2158 %1 = zext <4 x i16> %0 to <4 x i32>159 store <4 x i32> %1, ptr %y, align 4160 ret ptr %z161}162 163define ptr @ldrhu32_256(ptr %x, ptr %y) {164; CHECK-LABEL: ldrhu32_256:165; CHECK: @ %bb.0: @ %entry166; CHECK-NEXT: vldrh.u32 q0, [r0]167; CHECK-NEXT: add.w r0, r0, #256168; CHECK-NEXT: vstrw.32 q0, [r1]169; CHECK-NEXT: bx lr170entry:171 %z = getelementptr inbounds i8, ptr %x, i32 256172 %0 = load <4 x i16>, ptr %x, align 2173 %1 = zext <4 x i16> %0 to <4 x i32>174 store <4 x i32> %1, ptr %y, align 4175 ret ptr %z176}177 178define ptr @ldrhu32_m254(ptr %x, ptr %y) {179; CHECK-LABEL: ldrhu32_m254:180; CHECK: @ %bb.0: @ %entry181; CHECK-NEXT: vldrh.u32 q0, [r0], #-254182; CHECK-NEXT: vstrw.32 q0, [r1]183; CHECK-NEXT: bx lr184entry:185 %z = getelementptr inbounds i8, ptr %x, i32 -254186 %0 = load <4 x i16>, ptr %x, align 2187 %1 = zext <4 x i16> %0 to <4 x i32>188 store <4 x i32> %1, ptr %y, align 4189 ret ptr %z190}191 192define ptr @ldrhu32_m256(ptr %x, ptr %y) {193; CHECK-LABEL: ldrhu32_m256:194; CHECK: @ %bb.0: @ %entry195; CHECK-NEXT: vldrh.u32 q0, [r0]196; CHECK-NEXT: sub.w r0, r0, #256197; CHECK-NEXT: vstrw.32 q0, [r1]198; CHECK-NEXT: bx lr199entry:200 %z = getelementptr inbounds i8, ptr %x, i32 -256201 %0 = load <4 x i16>, ptr %x, align 2202 %1 = zext <4 x i16> %0 to <4 x i32>203 store <4 x i32> %1, ptr %y, align 4204 ret ptr %z205}206 207 208define ptr @ldrhs32_4(ptr %x, ptr %y) {209; CHECK-LABEL: ldrhs32_4:210; CHECK: @ %bb.0: @ %entry211; CHECK-NEXT: vldrh.s32 q0, [r0], #4212; CHECK-NEXT: vstrw.32 q0, [r1]213; CHECK-NEXT: bx lr214entry:215 %z = getelementptr inbounds i8, ptr %x, i32 4216 %0 = load <4 x i16>, ptr %x, align 2217 %1 = sext <4 x i16> %0 to <4 x i32>218 store <4 x i32> %1, ptr %y, align 4219 ret ptr %z220}221 222define ptr @ldrhs32_3(ptr %x, ptr %y) {223; CHECK-LABEL: ldrhs32_3:224; CHECK: @ %bb.0: @ %entry225; CHECK-NEXT: vldrh.s32 q0, [r0]226; CHECK-NEXT: adds r0, #3227; CHECK-NEXT: vstrw.32 q0, [r1]228; CHECK-NEXT: bx lr229entry:230 %z = getelementptr inbounds i8, ptr %x, i32 3231 %0 = load <4 x i16>, ptr %x, align 2232 %1 = sext <4 x i16> %0 to <4 x i32>233 store <4 x i32> %1, ptr %y, align 4234 ret ptr %z235}236 237define ptr @ldrhs32_2(ptr %x, ptr %y) {238; CHECK-LABEL: ldrhs32_2:239; CHECK: @ %bb.0: @ %entry240; CHECK-NEXT: vldrh.s32 q0, [r0], #2241; CHECK-NEXT: vstrw.32 q0, [r1]242; CHECK-NEXT: bx lr243entry:244 %z = getelementptr inbounds i8, ptr %x, i32 2245 %0 = load <4 x i16>, ptr %x, align 2246 %1 = sext <4 x i16> %0 to <4 x i32>247 store <4 x i32> %1, ptr %y, align 4248 ret ptr %z249}250 251define ptr @ldrhs32_254(ptr %x, ptr %y) {252; CHECK-LABEL: ldrhs32_254:253; CHECK: @ %bb.0: @ %entry254; CHECK-NEXT: vldrh.s32 q0, [r0], #254255; CHECK-NEXT: vstrw.32 q0, [r1]256; CHECK-NEXT: bx lr257entry:258 %z = getelementptr inbounds i8, ptr %x, i32 254259 %0 = load <4 x i16>, ptr %x, align 2260 %1 = sext <4 x i16> %0 to <4 x i32>261 store <4 x i32> %1, ptr %y, align 4262 ret ptr %z263}264 265define ptr @ldrhs32_256(ptr %x, ptr %y) {266; CHECK-LABEL: ldrhs32_256:267; CHECK: @ %bb.0: @ %entry268; CHECK-NEXT: vldrh.s32 q0, [r0]269; CHECK-NEXT: add.w r0, r0, #256270; CHECK-NEXT: vstrw.32 q0, [r1]271; CHECK-NEXT: bx lr272entry:273 %z = getelementptr inbounds i8, ptr %x, i32 256274 %0 = load <4 x i16>, ptr %x, align 2275 %1 = sext <4 x i16> %0 to <4 x i32>276 store <4 x i32> %1, ptr %y, align 4277 ret ptr %z278}279 280define ptr @ldrhs32_m254(ptr %x, ptr %y) {281; CHECK-LABEL: ldrhs32_m254:282; CHECK: @ %bb.0: @ %entry283; CHECK-NEXT: vldrh.s32 q0, [r0], #-254284; CHECK-NEXT: vstrw.32 q0, [r1]285; CHECK-NEXT: bx lr286entry:287 %z = getelementptr inbounds i8, ptr %x, i32 -254288 %0 = load <4 x i16>, ptr %x, align 2289 %1 = sext <4 x i16> %0 to <4 x i32>290 store <4 x i32> %1, ptr %y, align 4291 ret ptr %z292}293 294define ptr @ldrhs32_m256(ptr %x, ptr %y) {295; CHECK-LABEL: ldrhs32_m256:296; CHECK: @ %bb.0: @ %entry297; CHECK-NEXT: vldrh.s32 q0, [r0]298; CHECK-NEXT: sub.w r0, r0, #256299; CHECK-NEXT: vstrw.32 q0, [r1]300; CHECK-NEXT: bx lr301entry:302 %z = getelementptr inbounds i8, ptr %x, i32 -256303 %0 = load <4 x i16>, ptr %x, align 2304 %1 = sext <4 x i16> %0 to <4 x i32>305 store <4 x i32> %1, ptr %y, align 4306 ret ptr %z307}308 309 310define ptr @ldrhu16_4(ptr %x, ptr %y) {311; CHECK-LABEL: ldrhu16_4:312; CHECK: @ %bb.0: @ %entry313; CHECK-NEXT: vldrh.u16 q0, [r0], #4314; CHECK-NEXT: vstrh.16 q0, [r1]315; CHECK-NEXT: bx lr316entry:317 %z = getelementptr inbounds i8, ptr %x, i32 4318 %0 = load <8 x i16>, ptr %x, align 2319 store <8 x i16> %0, ptr %y, align 2320 ret ptr %z321}322 323define ptr @ldrhu16_3(ptr %x, ptr %y) {324; CHECK-LE-LABEL: ldrhu16_3:325; CHECK-LE: @ %bb.0: @ %entry326; CHECK-LE-NEXT: vldrb.u8 q0, [r0], #3327; CHECK-LE-NEXT: vstrh.16 q0, [r1]328; CHECK-LE-NEXT: bx lr329;330; CHECK-BE-LABEL: ldrhu16_3:331; CHECK-BE: @ %bb.0: @ %entry332; CHECK-BE-NEXT: vldrh.u16 q0, [r0]333; CHECK-BE-NEXT: adds r0, #3334; CHECK-BE-NEXT: vstrh.16 q0, [r1]335; CHECK-BE-NEXT: bx lr336entry:337 %z = getelementptr inbounds i8, ptr %x, i32 3338 %0 = load <8 x i16>, ptr %x, align 2339 store <8 x i16> %0, ptr %y, align 2340 ret ptr %z341}342 343define ptr @ldrhu16_2(ptr %x, ptr %y) {344; CHECK-LABEL: ldrhu16_2:345; CHECK: @ %bb.0: @ %entry346; CHECK-NEXT: vldrh.u16 q0, [r0], #2347; CHECK-NEXT: vstrh.16 q0, [r1]348; CHECK-NEXT: bx lr349entry:350 %z = getelementptr inbounds i8, ptr %x, i32 2351 %0 = load <8 x i16>, ptr %x, align 2352 store <8 x i16> %0, ptr %y, align 2353 ret ptr %z354}355 356define ptr @ldrhu16_254(ptr %x, ptr %y) {357; CHECK-LABEL: ldrhu16_254:358; CHECK: @ %bb.0: @ %entry359; CHECK-NEXT: vldrh.u16 q0, [r0], #254360; CHECK-NEXT: vstrh.16 q0, [r1]361; CHECK-NEXT: bx lr362entry:363 %z = getelementptr inbounds i8, ptr %x, i32 254364 %0 = load <8 x i16>, ptr %x, align 2365 store <8 x i16> %0, ptr %y, align 2366 ret ptr %z367}368 369define ptr @ldrhu16_256(ptr %x, ptr %y) {370; CHECK-LABEL: ldrhu16_256:371; CHECK: @ %bb.0: @ %entry372; CHECK-NEXT: vldrh.u16 q0, [r0]373; CHECK-NEXT: add.w r0, r0, #256374; CHECK-NEXT: vstrh.16 q0, [r1]375; CHECK-NEXT: bx lr376entry:377 %z = getelementptr inbounds i8, ptr %x, i32 256378 %0 = load <8 x i16>, ptr %x, align 2379 store <8 x i16> %0, ptr %y, align 2380 ret ptr %z381}382 383define ptr @ldrhu16_m254(ptr %x, ptr %y) {384; CHECK-LABEL: ldrhu16_m254:385; CHECK: @ %bb.0: @ %entry386; CHECK-NEXT: vldrh.u16 q0, [r0], #-254387; CHECK-NEXT: vstrh.16 q0, [r1]388; CHECK-NEXT: bx lr389entry:390 %z = getelementptr inbounds i8, ptr %x, i32 -254391 %0 = load <8 x i16>, ptr %x, align 2392 store <8 x i16> %0, ptr %y, align 2393 ret ptr %z394}395 396define ptr @ldrhu16_m256(ptr %x, ptr %y) {397; CHECK-LABEL: ldrhu16_m256:398; CHECK: @ %bb.0: @ %entry399; CHECK-NEXT: vldrh.u16 q0, [r0]400; CHECK-NEXT: sub.w r0, r0, #256401; CHECK-NEXT: vstrh.16 q0, [r1]402; CHECK-NEXT: bx lr403entry:404 %z = getelementptr inbounds i8, ptr %x, i32 -256405 %0 = load <8 x i16>, ptr %x, align 2406 store <8 x i16> %0, ptr %y, align 2407 ret ptr %z408}409 410 411define ptr @ldrbu32_4(ptr %x, ptr %y) {412; CHECK-LABEL: ldrbu32_4:413; CHECK: @ %bb.0: @ %entry414; CHECK-NEXT: vldrb.u32 q0, [r0], #4415; CHECK-NEXT: vstrw.32 q0, [r1]416; CHECK-NEXT: bx lr417entry:418 %z = getelementptr inbounds i8, ptr %x, i32 4419 %0 = load <4 x i8>, ptr %x, align 1420 %1 = zext <4 x i8> %0 to <4 x i32>421 store <4 x i32> %1, ptr %y, align 4422 ret ptr %z423}424 425define ptr @ldrbu32_3(ptr %x, ptr %y) {426; CHECK-LABEL: ldrbu32_3:427; CHECK: @ %bb.0: @ %entry428; CHECK-NEXT: vldrb.u32 q0, [r0], #3429; CHECK-NEXT: vstrw.32 q0, [r1]430; CHECK-NEXT: bx lr431entry:432 %z = getelementptr inbounds i8, ptr %x, i32 3433 %0 = load <4 x i8>, ptr %x, align 1434 %1 = zext <4 x i8> %0 to <4 x i32>435 store <4 x i32> %1, ptr %y, align 4436 ret ptr %z437}438 439define ptr @ldrbu32_127(ptr %x, ptr %y) {440; CHECK-LABEL: ldrbu32_127:441; CHECK: @ %bb.0: @ %entry442; CHECK-NEXT: vldrb.u32 q0, [r0], #127443; CHECK-NEXT: vstrw.32 q0, [r1]444; CHECK-NEXT: bx lr445entry:446 %z = getelementptr inbounds i8, ptr %x, i32 127447 %0 = load <4 x i8>, ptr %x, align 1448 %1 = zext <4 x i8> %0 to <4 x i32>449 store <4 x i32> %1, ptr %y, align 4450 ret ptr %z451}452 453define ptr @ldrbu32_128(ptr %x, ptr %y) {454; CHECK-LABEL: ldrbu32_128:455; CHECK: @ %bb.0: @ %entry456; CHECK-NEXT: vldrb.u32 q0, [r0]457; CHECK-NEXT: adds r0, #128458; CHECK-NEXT: vstrw.32 q0, [r1]459; CHECK-NEXT: bx lr460entry:461 %z = getelementptr inbounds i8, ptr %x, i32 128462 %0 = load <4 x i8>, ptr %x, align 1463 %1 = zext <4 x i8> %0 to <4 x i32>464 store <4 x i32> %1, ptr %y, align 4465 ret ptr %z466}467 468define ptr @ldrbu32_m127(ptr %x, ptr %y) {469; CHECK-LABEL: ldrbu32_m127:470; CHECK: @ %bb.0: @ %entry471; CHECK-NEXT: vldrb.u32 q0, [r0], #-127472; CHECK-NEXT: vstrw.32 q0, [r1]473; CHECK-NEXT: bx lr474entry:475 %z = getelementptr inbounds i8, ptr %x, i32 -127476 %0 = load <4 x i8>, ptr %x, align 1477 %1 = zext <4 x i8> %0 to <4 x i32>478 store <4 x i32> %1, ptr %y, align 4479 ret ptr %z480}481 482define ptr @ldrbu32_m128(ptr %x, ptr %y) {483; CHECK-LABEL: ldrbu32_m128:484; CHECK: @ %bb.0: @ %entry485; CHECK-NEXT: vldrb.u32 q0, [r0]486; CHECK-NEXT: subs r0, #128487; CHECK-NEXT: vstrw.32 q0, [r1]488; CHECK-NEXT: bx lr489entry:490 %z = getelementptr inbounds i8, ptr %x, i32 -128491 %0 = load <4 x i8>, ptr %x, align 1492 %1 = zext <4 x i8> %0 to <4 x i32>493 store <4 x i32> %1, ptr %y, align 4494 ret ptr %z495}496 497 498define ptr @ldrbs32_4(ptr %x, ptr %y) {499; CHECK-LABEL: ldrbs32_4:500; CHECK: @ %bb.0: @ %entry501; CHECK-NEXT: vldrb.s32 q0, [r0], #4502; CHECK-NEXT: vstrw.32 q0, [r1]503; CHECK-NEXT: bx lr504entry:505 %z = getelementptr inbounds i8, ptr %x, i32 4506 %0 = load <4 x i8>, ptr %x, align 1507 %1 = sext <4 x i8> %0 to <4 x i32>508 store <4 x i32> %1, ptr %y, align 4509 ret ptr %z510}511 512define ptr @ldrbs32_3(ptr %x, ptr %y) {513; CHECK-LABEL: ldrbs32_3:514; CHECK: @ %bb.0: @ %entry515; CHECK-NEXT: vldrb.s32 q0, [r0], #3516; CHECK-NEXT: vstrw.32 q0, [r1]517; CHECK-NEXT: bx lr518entry:519 %z = getelementptr inbounds i8, ptr %x, i32 3520 %0 = load <4 x i8>, ptr %x, align 1521 %1 = sext <4 x i8> %0 to <4 x i32>522 store <4 x i32> %1, ptr %y, align 4523 ret ptr %z524}525 526define ptr @ldrbs32_127(ptr %x, ptr %y) {527; CHECK-LABEL: ldrbs32_127:528; CHECK: @ %bb.0: @ %entry529; CHECK-NEXT: vldrb.s32 q0, [r0], #127530; CHECK-NEXT: vstrw.32 q0, [r1]531; CHECK-NEXT: bx lr532entry:533 %z = getelementptr inbounds i8, ptr %x, i32 127534 %0 = load <4 x i8>, ptr %x, align 1535 %1 = sext <4 x i8> %0 to <4 x i32>536 store <4 x i32> %1, ptr %y, align 4537 ret ptr %z538}539 540define ptr @ldrbs32_128(ptr %x, ptr %y) {541; CHECK-LABEL: ldrbs32_128:542; CHECK: @ %bb.0: @ %entry543; CHECK-NEXT: vldrb.s32 q0, [r0]544; CHECK-NEXT: adds r0, #128545; CHECK-NEXT: vstrw.32 q0, [r1]546; CHECK-NEXT: bx lr547entry:548 %z = getelementptr inbounds i8, ptr %x, i32 128549 %0 = load <4 x i8>, ptr %x, align 1550 %1 = sext <4 x i8> %0 to <4 x i32>551 store <4 x i32> %1, ptr %y, align 4552 ret ptr %z553}554 555define ptr @ldrbs32_m127(ptr %x, ptr %y) {556; CHECK-LABEL: ldrbs32_m127:557; CHECK: @ %bb.0: @ %entry558; CHECK-NEXT: vldrb.s32 q0, [r0], #-127559; CHECK-NEXT: vstrw.32 q0, [r1]560; CHECK-NEXT: bx lr561entry:562 %z = getelementptr inbounds i8, ptr %x, i32 -127563 %0 = load <4 x i8>, ptr %x, align 1564 %1 = sext <4 x i8> %0 to <4 x i32>565 store <4 x i32> %1, ptr %y, align 4566 ret ptr %z567}568 569define ptr @ldrbs32_m128(ptr %x, ptr %y) {570; CHECK-LABEL: ldrbs32_m128:571; CHECK: @ %bb.0: @ %entry572; CHECK-NEXT: vldrb.s32 q0, [r0]573; CHECK-NEXT: subs r0, #128574; CHECK-NEXT: vstrw.32 q0, [r1]575; CHECK-NEXT: bx lr576entry:577 %z = getelementptr inbounds i8, ptr %x, i32 -128578 %0 = load <4 x i8>, ptr %x, align 1579 %1 = sext <4 x i8> %0 to <4 x i32>580 store <4 x i32> %1, ptr %y, align 4581 ret ptr %z582}583 584 585define ptr @ldrbu16_4(ptr %x, ptr %y) {586; CHECK-LABEL: ldrbu16_4:587; CHECK: @ %bb.0: @ %entry588; CHECK-NEXT: vldrb.u16 q0, [r0], #4589; CHECK-NEXT: vstrh.16 q0, [r1]590; CHECK-NEXT: bx lr591entry:592 %z = getelementptr inbounds i8, ptr %x, i32 4593 %0 = load <8 x i8>, ptr %x, align 1594 %1 = zext <8 x i8> %0 to <8 x i16>595 store <8 x i16> %1, ptr %y, align 2596 ret ptr %z597}598 599define ptr @ldrbu16_3(ptr %x, ptr %y) {600; CHECK-LABEL: ldrbu16_3:601; CHECK: @ %bb.0: @ %entry602; CHECK-NEXT: vldrb.u16 q0, [r0], #3603; CHECK-NEXT: vstrh.16 q0, [r1]604; CHECK-NEXT: bx lr605entry:606 %z = getelementptr inbounds i8, ptr %x, i32 3607 %0 = load <8 x i8>, ptr %x, align 1608 %1 = zext <8 x i8> %0 to <8 x i16>609 store <8 x i16> %1, ptr %y, align 2610 ret ptr %z611}612 613define ptr @ldrbu16_127(ptr %x, ptr %y) {614; CHECK-LABEL: ldrbu16_127:615; CHECK: @ %bb.0: @ %entry616; CHECK-NEXT: vldrb.u16 q0, [r0], #127617; CHECK-NEXT: vstrh.16 q0, [r1]618; CHECK-NEXT: bx lr619entry:620 %z = getelementptr inbounds i8, ptr %x, i32 127621 %0 = load <8 x i8>, ptr %x, align 1622 %1 = zext <8 x i8> %0 to <8 x i16>623 store <8 x i16> %1, ptr %y, align 2624 ret ptr %z625}626 627define ptr @ldrbu16_128(ptr %x, ptr %y) {628; CHECK-LABEL: ldrbu16_128:629; CHECK: @ %bb.0: @ %entry630; CHECK-NEXT: vldrb.u16 q0, [r0]631; CHECK-NEXT: adds r0, #128632; CHECK-NEXT: vstrh.16 q0, [r1]633; CHECK-NEXT: bx lr634entry:635 %z = getelementptr inbounds i8, ptr %x, i32 128636 %0 = load <8 x i8>, ptr %x, align 1637 %1 = zext <8 x i8> %0 to <8 x i16>638 store <8 x i16> %1, ptr %y, align 2639 ret ptr %z640}641 642define ptr @ldrbu16_m127(ptr %x, ptr %y) {643; CHECK-LABEL: ldrbu16_m127:644; CHECK: @ %bb.0: @ %entry645; CHECK-NEXT: vldrb.u16 q0, [r0], #-127646; CHECK-NEXT: vstrh.16 q0, [r1]647; CHECK-NEXT: bx lr648entry:649 %z = getelementptr inbounds i8, ptr %x, i32 -127650 %0 = load <8 x i8>, ptr %x, align 1651 %1 = zext <8 x i8> %0 to <8 x i16>652 store <8 x i16> %1, ptr %y, align 2653 ret ptr %z654}655 656define ptr @ldrbu16_m128(ptr %x, ptr %y) {657; CHECK-LABEL: ldrbu16_m128:658; CHECK: @ %bb.0: @ %entry659; CHECK-NEXT: vldrb.u16 q0, [r0]660; CHECK-NEXT: subs r0, #128661; CHECK-NEXT: vstrh.16 q0, [r1]662; CHECK-NEXT: bx lr663entry:664 %z = getelementptr inbounds i8, ptr %x, i32 -128665 %0 = load <8 x i8>, ptr %x, align 1666 %1 = zext <8 x i8> %0 to <8 x i16>667 store <8 x i16> %1, ptr %y, align 2668 ret ptr %z669}670 671 672define ptr @ldrbs16_4(ptr %x, ptr %y) {673; CHECK-LABEL: ldrbs16_4:674; CHECK: @ %bb.0: @ %entry675; CHECK-NEXT: vldrb.s16 q0, [r0], #4676; CHECK-NEXT: vstrh.16 q0, [r1]677; CHECK-NEXT: bx lr678entry:679 %z = getelementptr inbounds i8, ptr %x, i32 4680 %0 = load <8 x i8>, ptr %x, align 1681 %1 = sext <8 x i8> %0 to <8 x i16>682 store <8 x i16> %1, ptr %y, align 2683 ret ptr %z684}685 686define ptr @ldrbs16_3(ptr %x, ptr %y) {687; CHECK-LABEL: ldrbs16_3:688; CHECK: @ %bb.0: @ %entry689; CHECK-NEXT: vldrb.s16 q0, [r0], #3690; CHECK-NEXT: vstrh.16 q0, [r1]691; CHECK-NEXT: bx lr692entry:693 %z = getelementptr inbounds i8, ptr %x, i32 3694 %0 = load <8 x i8>, ptr %x, align 1695 %1 = sext <8 x i8> %0 to <8 x i16>696 store <8 x i16> %1, ptr %y, align 2697 ret ptr %z698}699 700define ptr @ldrbs16_127(ptr %x, ptr %y) {701; CHECK-LABEL: ldrbs16_127:702; CHECK: @ %bb.0: @ %entry703; CHECK-NEXT: vldrb.s16 q0, [r0], #127704; CHECK-NEXT: vstrh.16 q0, [r1]705; CHECK-NEXT: bx lr706entry:707 %z = getelementptr inbounds i8, ptr %x, i32 127708 %0 = load <8 x i8>, ptr %x, align 1709 %1 = sext <8 x i8> %0 to <8 x i16>710 store <8 x i16> %1, ptr %y, align 2711 ret ptr %z712}713 714define ptr @ldrbs16_128(ptr %x, ptr %y) {715; CHECK-LABEL: ldrbs16_128:716; CHECK: @ %bb.0: @ %entry717; CHECK-NEXT: vldrb.s16 q0, [r0]718; CHECK-NEXT: adds r0, #128719; CHECK-NEXT: vstrh.16 q0, [r1]720; CHECK-NEXT: bx lr721entry:722 %z = getelementptr inbounds i8, ptr %x, i32 128723 %0 = load <8 x i8>, ptr %x, align 1724 %1 = sext <8 x i8> %0 to <8 x i16>725 store <8 x i16> %1, ptr %y, align 2726 ret ptr %z727}728 729define ptr @ldrbs16_m127(ptr %x, ptr %y) {730; CHECK-LABEL: ldrbs16_m127:731; CHECK: @ %bb.0: @ %entry732; CHECK-NEXT: vldrb.s16 q0, [r0], #-127733; CHECK-NEXT: vstrh.16 q0, [r1]734; CHECK-NEXT: bx lr735entry:736 %z = getelementptr inbounds i8, ptr %x, i32 -127737 %0 = load <8 x i8>, ptr %x, align 1738 %1 = sext <8 x i8> %0 to <8 x i16>739 store <8 x i16> %1, ptr %y, align 2740 ret ptr %z741}742 743define ptr @ldrbs16_m128(ptr %x, ptr %y) {744; CHECK-LABEL: ldrbs16_m128:745; CHECK: @ %bb.0: @ %entry746; CHECK-NEXT: vldrb.s16 q0, [r0]747; CHECK-NEXT: subs r0, #128748; CHECK-NEXT: vstrh.16 q0, [r1]749; CHECK-NEXT: bx lr750entry:751 %z = getelementptr inbounds i8, ptr %x, i32 -128752 %0 = load <8 x i8>, ptr %x, align 1753 %1 = sext <8 x i8> %0 to <8 x i16>754 store <8 x i16> %1, ptr %y, align 2755 ret ptr %z756}757 758 759define ptr @ldrbu8_4(ptr %x, ptr %y) {760; CHECK-LABEL: ldrbu8_4:761; CHECK: @ %bb.0: @ %entry762; CHECK-NEXT: vldrb.u8 q0, [r0], #4763; CHECK-NEXT: vstrb.8 q0, [r1]764; CHECK-NEXT: bx lr765entry:766 %z = getelementptr inbounds i8, ptr %x, i32 4767 %0 = load <16 x i8>, ptr %x, align 1768 store <16 x i8> %0, ptr %y, align 1769 ret ptr %z770}771 772define ptr @ldrbu8_3(ptr %x, ptr %y) {773; CHECK-LABEL: ldrbu8_3:774; CHECK: @ %bb.0: @ %entry775; CHECK-NEXT: vldrb.u8 q0, [r0], #3776; CHECK-NEXT: vstrb.8 q0, [r1]777; CHECK-NEXT: bx lr778entry:779 %z = getelementptr inbounds i8, ptr %x, i32 3780 %0 = load <16 x i8>, ptr %x, align 1781 store <16 x i8> %0, ptr %y, align 1782 ret ptr %z783}784 785define ptr @ldrbu8_127(ptr %x, ptr %y) {786; CHECK-LABEL: ldrbu8_127:787; CHECK: @ %bb.0: @ %entry788; CHECK-NEXT: vldrb.u8 q0, [r0], #127789; CHECK-NEXT: vstrb.8 q0, [r1]790; CHECK-NEXT: bx lr791entry:792 %z = getelementptr inbounds i8, ptr %x, i32 127793 %0 = load <16 x i8>, ptr %x, align 1794 store <16 x i8> %0, ptr %y, align 1795 ret ptr %z796}797 798define ptr @ldrbu8_128(ptr %x, ptr %y) {799; CHECK-LABEL: ldrbu8_128:800; CHECK: @ %bb.0: @ %entry801; CHECK-NEXT: vldrb.u8 q0, [r0]802; CHECK-NEXT: adds r0, #128803; CHECK-NEXT: vstrb.8 q0, [r1]804; CHECK-NEXT: bx lr805entry:806 %z = getelementptr inbounds i8, ptr %x, i32 128807 %0 = load <16 x i8>, ptr %x, align 1808 store <16 x i8> %0, ptr %y, align 1809 ret ptr %z810}811 812define ptr @ldrbu8_m127(ptr %x, ptr %y) {813; CHECK-LABEL: ldrbu8_m127:814; CHECK: @ %bb.0: @ %entry815; CHECK-NEXT: vldrb.u8 q0, [r0], #-127816; CHECK-NEXT: vstrb.8 q0, [r1]817; CHECK-NEXT: bx lr818entry:819 %z = getelementptr inbounds i8, ptr %x, i32 -127820 %0 = load <16 x i8>, ptr %x, align 1821 store <16 x i8> %0, ptr %y, align 1822 ret ptr %z823}824 825define ptr @ldrbu8_m128(ptr %x, ptr %y) {826; CHECK-LABEL: ldrbu8_m128:827; CHECK: @ %bb.0: @ %entry828; CHECK-NEXT: vldrb.u8 q0, [r0]829; CHECK-NEXT: subs r0, #128830; CHECK-NEXT: vstrb.8 q0, [r1]831; CHECK-NEXT: bx lr832entry:833 %z = getelementptr inbounds i8, ptr %x, i32 -128834 %0 = load <16 x i8>, ptr %x, align 1835 store <16 x i8> %0, ptr %y, align 1836 ret ptr %z837}838 839 840define ptr @ldrwf32_4(ptr %x, ptr %y) {841; CHECK-LABEL: ldrwf32_4:842; CHECK: @ %bb.0: @ %entry843; CHECK-NEXT: vldrw.u32 q0, [r0], #4844; CHECK-NEXT: vstrw.32 q0, [r1]845; CHECK-NEXT: bx lr846entry:847 %z = getelementptr inbounds i8, ptr %x, i32 4848 %0 = load <4 x float>, ptr %x, align 4849 store <4 x float> %0, ptr %y, align 4850 ret ptr %z851}852 853define ptr @ldrwf16_4(ptr %x, ptr %y) {854; CHECK-LABEL: ldrwf16_4:855; CHECK: @ %bb.0: @ %entry856; CHECK-NEXT: vldrh.u16 q0, [r0], #4857; CHECK-NEXT: vstrh.16 q0, [r1]858; CHECK-NEXT: bx lr859entry:860 %z = getelementptr inbounds i8, ptr %x, i32 4861 %0 = load <8 x half>, ptr %x, align 2862 store <8 x half> %0, ptr %y, align 2863 ret ptr %z864}865 866define ptr @ldrwi32_align1(ptr %x, ptr %y) {867; CHECK-LE-LABEL: ldrwi32_align1:868; CHECK-LE: @ %bb.0: @ %entry869; CHECK-LE-NEXT: vldrb.u8 q0, [r0], #3870; CHECK-LE-NEXT: vstrw.32 q0, [r1]871; CHECK-LE-NEXT: bx lr872;873; CHECK-BE-LABEL: ldrwi32_align1:874; CHECK-BE: @ %bb.0: @ %entry875; CHECK-BE-NEXT: vldrb.u8 q0, [r0], #3876; CHECK-BE-NEXT: vrev32.8 q0, q0877; CHECK-BE-NEXT: vstrw.32 q0, [r1]878; CHECK-BE-NEXT: bx lr879entry:880 %z = getelementptr inbounds i8, ptr %x, i32 3881 %0 = load <4 x i32>, ptr %x, align 1882 store <4 x i32> %0, ptr %y, align 4883 ret ptr %z884}885 886define ptr @ldrhi16_align1(ptr %x, ptr %y) {887; CHECK-LE-LABEL: ldrhi16_align1:888; CHECK-LE: @ %bb.0: @ %entry889; CHECK-LE-NEXT: vldrb.u8 q0, [r0], #3890; CHECK-LE-NEXT: vstrh.16 q0, [r1]891; CHECK-LE-NEXT: bx lr892;893; CHECK-BE-LABEL: ldrhi16_align1:894; CHECK-BE: @ %bb.0: @ %entry895; CHECK-BE-NEXT: vldrb.u8 q0, [r0], #3896; CHECK-BE-NEXT: vrev16.8 q0, q0897; CHECK-BE-NEXT: vstrh.16 q0, [r1]898; CHECK-BE-NEXT: bx lr899entry:900 %z = getelementptr inbounds i8, ptr %x, i32 3901 %0 = load <8 x i16>, ptr %x, align 1902 store <8 x i16> %0, ptr %y, align 2903 ret ptr %z904}905 906define ptr @ldrhi32_align1(ptr %x, ptr %y) {907; CHECK-LABEL: ldrhi32_align1:908; CHECK: @ %bb.0: @ %entry909; CHECK-NEXT: .pad #8910; CHECK-NEXT: sub sp, #8911; CHECK-NEXT: ldr r3, [r0, #4]912; CHECK-NEXT: ldr r2, [r0]913; CHECK-NEXT: adds r0, #3914; CHECK-NEXT: strd r2, r3, [sp]915; CHECK-NEXT: mov r2, sp916; CHECK-NEXT: vldrh.s32 q0, [r2]917; CHECK-NEXT: vstrw.32 q0, [r1]918; CHECK-NEXT: add sp, #8919; CHECK-NEXT: bx lr920entry:921 %z = getelementptr inbounds i8, ptr %x, i32 3922 %0 = load <4 x i16>, ptr %x, align 1923 %1 = sext <4 x i16> %0 to <4 x i32>924 store <4 x i32> %1, ptr %y, align 4925 ret ptr %z926}927 928define ptr @ldrf32_align1(ptr %x, ptr %y) {929; CHECK-LE-LABEL: ldrf32_align1:930; CHECK-LE: @ %bb.0: @ %entry931; CHECK-LE-NEXT: vldrb.u8 q0, [r0], #3932; CHECK-LE-NEXT: vstrw.32 q0, [r1]933; CHECK-LE-NEXT: bx lr934;935; CHECK-BE-LABEL: ldrf32_align1:936; CHECK-BE: @ %bb.0: @ %entry937; CHECK-BE-NEXT: vldrb.u8 q0, [r0], #3938; CHECK-BE-NEXT: vrev32.8 q0, q0939; CHECK-BE-NEXT: vstrw.32 q0, [r1]940; CHECK-BE-NEXT: bx lr941entry:942 %z = getelementptr inbounds i8, ptr %x, i32 3943 %0 = load <4 x float>, ptr %x, align 1944 store <4 x float> %0, ptr %y, align 4945 ret ptr %z946}947 948define ptr @ldrf16_align1(ptr %x, ptr %y) {949; CHECK-LE-LABEL: ldrf16_align1:950; CHECK-LE: @ %bb.0: @ %entry951; CHECK-LE-NEXT: vldrb.u8 q0, [r0], #3952; CHECK-LE-NEXT: vstrh.16 q0, [r1]953; CHECK-LE-NEXT: bx lr954;955; CHECK-BE-LABEL: ldrf16_align1:956; CHECK-BE: @ %bb.0: @ %entry957; CHECK-BE-NEXT: vldrb.u8 q0, [r0], #3958; CHECK-BE-NEXT: vrev16.8 q0, q0959; CHECK-BE-NEXT: vstrh.16 q0, [r1]960; CHECK-BE-NEXT: bx lr961entry:962 %z = getelementptr inbounds i8, ptr %x, i32 3963 %0 = load <8 x half>, ptr %x, align 1964 store <8 x half> %0, ptr %y, align 2965 ret ptr %z966}967 968define ptr @ldrh16_align8(ptr %x, ptr %y) {969; CHECK-LE-LABEL: ldrh16_align8:970; CHECK-LE: @ %bb.0: @ %entry971; CHECK-LE-NEXT: vldrw.u32 q0, [r0], #4972; CHECK-LE-NEXT: vstrh.16 q0, [r1]973; CHECK-LE-NEXT: bx lr974;975; CHECK-BE-LABEL: ldrh16_align8:976; CHECK-BE: @ %bb.0: @ %entry977; CHECK-BE-NEXT: vldrh.u16 q0, [r0], #4978; CHECK-BE-NEXT: vstrh.16 q0, [r1]979; CHECK-BE-NEXT: bx lr980entry:981 %z = getelementptr inbounds i8, ptr %x, i32 4982 %0 = load <8 x i16>, ptr %x, align 8983 store <8 x i16> %0, ptr %y, align 2984 ret ptr %z985}986 987 988 989 990 991define ptr @strw32_4(ptr %y, ptr %x) {992; CHECK-LE-LABEL: strw32_4:993; CHECK-LE: @ %bb.0: @ %entry994; CHECK-LE-NEXT: vldrw.u32 q0, [r1]995; CHECK-LE-NEXT: vstrb.8 q0, [r0], #4996; CHECK-LE-NEXT: bx lr997;998; CHECK-BE-LABEL: strw32_4:999; CHECK-BE: @ %bb.0: @ %entry1000; CHECK-BE-NEXT: vldrw.u32 q0, [r1]1001; CHECK-BE-NEXT: vstrw.32 q0, [r0], #41002; CHECK-BE-NEXT: bx lr1003entry:1004 %z = getelementptr inbounds i8, ptr %y, i32 41005 %0 = load <4 x i32>, ptr %x, align 41006 store <4 x i32> %0, ptr %y, align 41007 ret ptr %z1008}1009 1010define ptr @strw32_3(ptr %y, ptr %x) {1011; CHECK-LE-LABEL: strw32_3:1012; CHECK-LE: @ %bb.0: @ %entry1013; CHECK-LE-NEXT: vldrw.u32 q0, [r1]1014; CHECK-LE-NEXT: vstrb.8 q0, [r0], #31015; CHECK-LE-NEXT: bx lr1016;1017; CHECK-BE-LABEL: strw32_3:1018; CHECK-BE: @ %bb.0: @ %entry1019; CHECK-BE-NEXT: vldrw.u32 q0, [r1]1020; CHECK-BE-NEXT: vstrw.32 q0, [r0]1021; CHECK-BE-NEXT: adds r0, #31022; CHECK-BE-NEXT: bx lr1023entry:1024 %z = getelementptr inbounds i8, ptr %y, i32 31025 %0 = load <4 x i32>, ptr %x, align 41026 store <4 x i32> %0, ptr %y, align 41027 ret ptr %z1028}1029 1030define ptr @strw32_m4(ptr %y, ptr %x) {1031; CHECK-LE-LABEL: strw32_m4:1032; CHECK-LE: @ %bb.0: @ %entry1033; CHECK-LE-NEXT: vldrw.u32 q0, [r1]1034; CHECK-LE-NEXT: vstrb.8 q0, [r0], #-41035; CHECK-LE-NEXT: bx lr1036;1037; CHECK-BE-LABEL: strw32_m4:1038; CHECK-BE: @ %bb.0: @ %entry1039; CHECK-BE-NEXT: vldrw.u32 q0, [r1]1040; CHECK-BE-NEXT: vstrw.32 q0, [r0], #-41041; CHECK-BE-NEXT: bx lr1042entry:1043 %z = getelementptr inbounds i8, ptr %y, i32 -41044 %0 = load <4 x i32>, ptr %x, align 41045 store <4 x i32> %0, ptr %y, align 41046 ret ptr %z1047}1048 1049define ptr @strw32_508(ptr %y, ptr %x) {1050; CHECK-LABEL: strw32_508:1051; CHECK: @ %bb.0: @ %entry1052; CHECK-NEXT: vldrw.u32 q0, [r1]1053; CHECK-NEXT: vstrw.32 q0, [r0], #5081054; CHECK-NEXT: bx lr1055entry:1056 %z = getelementptr inbounds i8, ptr %y, i32 5081057 %0 = load <4 x i32>, ptr %x, align 41058 store <4 x i32> %0, ptr %y, align 41059 ret ptr %z1060}1061 1062define ptr @strw32_512(ptr %y, ptr %x) {1063; CHECK-LABEL: strw32_512:1064; CHECK: @ %bb.0: @ %entry1065; CHECK-NEXT: vldrw.u32 q0, [r1]1066; CHECK-NEXT: vstrw.32 q0, [r0]1067; CHECK-NEXT: add.w r0, r0, #5121068; CHECK-NEXT: bx lr1069entry:1070 %z = getelementptr inbounds i8, ptr %y, i32 5121071 %0 = load <4 x i32>, ptr %x, align 41072 store <4 x i32> %0, ptr %y, align 41073 ret ptr %z1074}1075 1076define ptr @strw32_m508(ptr %y, ptr %x) {1077; CHECK-LABEL: strw32_m508:1078; CHECK: @ %bb.0: @ %entry1079; CHECK-NEXT: vldrw.u32 q0, [r1]1080; CHECK-NEXT: vstrw.32 q0, [r0], #-5081081; CHECK-NEXT: bx lr1082entry:1083 %z = getelementptr inbounds i8, ptr %y, i32 -5081084 %0 = load <4 x i32>, ptr %x, align 41085 store <4 x i32> %0, ptr %y, align 41086 ret ptr %z1087}1088 1089define ptr @strw32_m512(ptr %y, ptr %x) {1090; CHECK-LABEL: strw32_m512:1091; CHECK: @ %bb.0: @ %entry1092; CHECK-NEXT: vldrw.u32 q0, [r1]1093; CHECK-NEXT: vstrw.32 q0, [r0]1094; CHECK-NEXT: sub.w r0, r0, #5121095; CHECK-NEXT: bx lr1096entry:1097 %z = getelementptr inbounds i8, ptr %y, i32 -5121098 %0 = load <4 x i32>, ptr %x, align 41099 store <4 x i32> %0, ptr %y, align 41100 ret ptr %z1101}1102 1103 1104define ptr @strh32_4(ptr %y, ptr %x) {1105; CHECK-LABEL: strh32_4:1106; CHECK: @ %bb.0: @ %entry1107; CHECK-NEXT: vldrh.u32 q0, [r1]1108; CHECK-NEXT: vstrh.32 q0, [r0], #41109; CHECK-NEXT: bx lr1110entry:1111 %z = getelementptr inbounds i8, ptr %y, i32 41112 %0 = load <4 x i16>, ptr %x, align 21113 store <4 x i16> %0, ptr %y, align 21114 ret ptr %z1115}1116 1117define ptr @strh32_3(ptr %y, ptr %x) {1118; CHECK-LABEL: strh32_3:1119; CHECK: @ %bb.0: @ %entry1120; CHECK-NEXT: vldrh.u32 q0, [r1]1121; CHECK-NEXT: vstrh.32 q0, [r0]1122; CHECK-NEXT: adds r0, #31123; CHECK-NEXT: bx lr1124entry:1125 %z = getelementptr inbounds i8, ptr %y, i32 31126 %0 = load <4 x i16>, ptr %x, align 21127 store <4 x i16> %0, ptr %y, align 21128 ret ptr %z1129}1130 1131define ptr @strh32_2(ptr %y, ptr %x) {1132; CHECK-LABEL: strh32_2:1133; CHECK: @ %bb.0: @ %entry1134; CHECK-NEXT: vldrh.u32 q0, [r1]1135; CHECK-NEXT: vstrh.32 q0, [r0], #21136; CHECK-NEXT: bx lr1137entry:1138 %z = getelementptr inbounds i8, ptr %y, i32 21139 %0 = load <4 x i16>, ptr %x, align 21140 store <4 x i16> %0, ptr %y, align 21141 ret ptr %z1142}1143 1144define ptr @strh32_254(ptr %y, ptr %x) {1145; CHECK-LABEL: strh32_254:1146; CHECK: @ %bb.0: @ %entry1147; CHECK-NEXT: vldrh.u32 q0, [r1]1148; CHECK-NEXT: vstrh.32 q0, [r0], #2541149; CHECK-NEXT: bx lr1150entry:1151 %z = getelementptr inbounds i8, ptr %y, i32 2541152 %0 = load <4 x i16>, ptr %x, align 21153 store <4 x i16> %0, ptr %y, align 21154 ret ptr %z1155}1156 1157define ptr @strh32_256(ptr %y, ptr %x) {1158; CHECK-LABEL: strh32_256:1159; CHECK: @ %bb.0: @ %entry1160; CHECK-NEXT: vldrh.u32 q0, [r1]1161; CHECK-NEXT: vstrh.32 q0, [r0]1162; CHECK-NEXT: add.w r0, r0, #2561163; CHECK-NEXT: bx lr1164entry:1165 %z = getelementptr inbounds i8, ptr %y, i32 2561166 %0 = load <4 x i16>, ptr %x, align 21167 store <4 x i16> %0, ptr %y, align 21168 ret ptr %z1169}1170 1171define ptr @strh32_m254(ptr %y, ptr %x) {1172; CHECK-LABEL: strh32_m254:1173; CHECK: @ %bb.0: @ %entry1174; CHECK-NEXT: vldrh.u32 q0, [r1]1175; CHECK-NEXT: vstrh.32 q0, [r0], #-2541176; CHECK-NEXT: bx lr1177entry:1178 %z = getelementptr inbounds i8, ptr %y, i32 -2541179 %0 = load <4 x i16>, ptr %x, align 21180 store <4 x i16> %0, ptr %y, align 21181 ret ptr %z1182}1183 1184define ptr @strh32_m256(ptr %y, ptr %x) {1185; CHECK-LABEL: strh32_m256:1186; CHECK: @ %bb.0: @ %entry1187; CHECK-NEXT: vldrh.u32 q0, [r1]1188; CHECK-NEXT: vstrh.32 q0, [r0]1189; CHECK-NEXT: sub.w r0, r0, #2561190; CHECK-NEXT: bx lr1191entry:1192 %z = getelementptr inbounds i8, ptr %y, i32 -2561193 %0 = load <4 x i16>, ptr %x, align 21194 store <4 x i16> %0, ptr %y, align 21195 ret ptr %z1196}1197 1198 1199define ptr @strh16_4(ptr %y, ptr %x) {1200; CHECK-LE-LABEL: strh16_4:1201; CHECK-LE: @ %bb.0: @ %entry1202; CHECK-LE-NEXT: vldrh.u16 q0, [r1]1203; CHECK-LE-NEXT: vstrb.8 q0, [r0], #41204; CHECK-LE-NEXT: bx lr1205;1206; CHECK-BE-LABEL: strh16_4:1207; CHECK-BE: @ %bb.0: @ %entry1208; CHECK-BE-NEXT: vldrh.u16 q0, [r1]1209; CHECK-BE-NEXT: vstrh.16 q0, [r0], #41210; CHECK-BE-NEXT: bx lr1211entry:1212 %z = getelementptr inbounds i8, ptr %y, i32 41213 %0 = load <8 x i16>, ptr %x, align 21214 store <8 x i16> %0, ptr %y, align 21215 ret ptr %z1216}1217 1218define ptr @strh16_3(ptr %y, ptr %x) {1219; CHECK-LE-LABEL: strh16_3:1220; CHECK-LE: @ %bb.0: @ %entry1221; CHECK-LE-NEXT: vldrh.u16 q0, [r1]1222; CHECK-LE-NEXT: vstrb.8 q0, [r0], #31223; CHECK-LE-NEXT: bx lr1224;1225; CHECK-BE-LABEL: strh16_3:1226; CHECK-BE: @ %bb.0: @ %entry1227; CHECK-BE-NEXT: vldrh.u16 q0, [r1]1228; CHECK-BE-NEXT: vstrh.16 q0, [r0]1229; CHECK-BE-NEXT: adds r0, #31230; CHECK-BE-NEXT: bx lr1231entry:1232 %z = getelementptr inbounds i8, ptr %y, i32 31233 %0 = load <8 x i16>, ptr %x, align 21234 store <8 x i16> %0, ptr %y, align 21235 ret ptr %z1236}1237 1238define ptr @strh16_2(ptr %y, ptr %x) {1239; CHECK-LE-LABEL: strh16_2:1240; CHECK-LE: @ %bb.0: @ %entry1241; CHECK-LE-NEXT: vldrh.u16 q0, [r1]1242; CHECK-LE-NEXT: vstrb.8 q0, [r0], #21243; CHECK-LE-NEXT: bx lr1244;1245; CHECK-BE-LABEL: strh16_2:1246; CHECK-BE: @ %bb.0: @ %entry1247; CHECK-BE-NEXT: vldrh.u16 q0, [r1]1248; CHECK-BE-NEXT: vstrh.16 q0, [r0], #21249; CHECK-BE-NEXT: bx lr1250entry:1251 %z = getelementptr inbounds i8, ptr %y, i32 21252 %0 = load <8 x i16>, ptr %x, align 21253 store <8 x i16> %0, ptr %y, align 21254 ret ptr %z1255}1256 1257define ptr @strh16_254(ptr %y, ptr %x) {1258; CHECK-LABEL: strh16_254:1259; CHECK: @ %bb.0: @ %entry1260; CHECK-NEXT: vldrh.u16 q0, [r1]1261; CHECK-NEXT: vstrh.16 q0, [r0], #2541262; CHECK-NEXT: bx lr1263entry:1264 %z = getelementptr inbounds i8, ptr %y, i32 2541265 %0 = load <8 x i16>, ptr %x, align 21266 store <8 x i16> %0, ptr %y, align 21267 ret ptr %z1268}1269 1270define ptr @strh16_256(ptr %y, ptr %x) {1271; CHECK-LABEL: strh16_256:1272; CHECK: @ %bb.0: @ %entry1273; CHECK-NEXT: vldrh.u16 q0, [r1]1274; CHECK-NEXT: vstrh.16 q0, [r0]1275; CHECK-NEXT: add.w r0, r0, #2561276; CHECK-NEXT: bx lr1277entry:1278 %z = getelementptr inbounds i8, ptr %y, i32 2561279 %0 = load <8 x i16>, ptr %x, align 21280 store <8 x i16> %0, ptr %y, align 21281 ret ptr %z1282}1283 1284define ptr @strh16_m254(ptr %y, ptr %x) {1285; CHECK-LABEL: strh16_m254:1286; CHECK: @ %bb.0: @ %entry1287; CHECK-NEXT: vldrh.u16 q0, [r1]1288; CHECK-NEXT: vstrh.16 q0, [r0], #-2541289; CHECK-NEXT: bx lr1290entry:1291 %z = getelementptr inbounds i8, ptr %y, i32 -2541292 %0 = load <8 x i16>, ptr %x, align 21293 store <8 x i16> %0, ptr %y, align 21294 ret ptr %z1295}1296 1297define ptr @strh16_m256(ptr %y, ptr %x) {1298; CHECK-LABEL: strh16_m256:1299; CHECK: @ %bb.0: @ %entry1300; CHECK-NEXT: vldrh.u16 q0, [r1]1301; CHECK-NEXT: vstrh.16 q0, [r0]1302; CHECK-NEXT: sub.w r0, r0, #2561303; CHECK-NEXT: bx lr1304entry:1305 %z = getelementptr inbounds i8, ptr %y, i32 -2561306 %0 = load <8 x i16>, ptr %x, align 21307 store <8 x i16> %0, ptr %y, align 21308 ret ptr %z1309}1310 1311 1312define ptr @strb32_4(ptr %y, ptr %x) {1313; CHECK-LABEL: strb32_4:1314; CHECK: @ %bb.0: @ %entry1315; CHECK-NEXT: vldrb.u32 q0, [r1]1316; CHECK-NEXT: vstrb.32 q0, [r0], #41317; CHECK-NEXT: bx lr1318entry:1319 %z = getelementptr inbounds i8, ptr %y, i32 41320 %0 = load <4 x i8>, ptr %x, align 11321 store <4 x i8> %0, ptr %y, align 11322 ret ptr %z1323}1324 1325define ptr @strb32_3(ptr %y, ptr %x) {1326; CHECK-LABEL: strb32_3:1327; CHECK: @ %bb.0: @ %entry1328; CHECK-NEXT: vldrb.u32 q0, [r1]1329; CHECK-NEXT: vstrb.32 q0, [r0], #31330; CHECK-NEXT: bx lr1331entry:1332 %z = getelementptr inbounds i8, ptr %y, i32 31333 %0 = load <4 x i8>, ptr %x, align 11334 store <4 x i8> %0, ptr %y, align 11335 ret ptr %z1336}1337 1338define ptr @strb32_127(ptr %y, ptr %x) {1339; CHECK-LABEL: strb32_127:1340; CHECK: @ %bb.0: @ %entry1341; CHECK-NEXT: vldrb.u32 q0, [r1]1342; CHECK-NEXT: vstrb.32 q0, [r0], #1271343; CHECK-NEXT: bx lr1344entry:1345 %z = getelementptr inbounds i8, ptr %y, i32 1271346 %0 = load <4 x i8>, ptr %x, align 11347 store <4 x i8> %0, ptr %y, align 11348 ret ptr %z1349}1350 1351define ptr @strb32_128(ptr %y, ptr %x) {1352; CHECK-LABEL: strb32_128:1353; CHECK: @ %bb.0: @ %entry1354; CHECK-NEXT: vldrb.u32 q0, [r1]1355; CHECK-NEXT: vstrb.32 q0, [r0]1356; CHECK-NEXT: adds r0, #1281357; CHECK-NEXT: bx lr1358entry:1359 %z = getelementptr inbounds i8, ptr %y, i32 1281360 %0 = load <4 x i8>, ptr %x, align 11361 store <4 x i8> %0, ptr %y, align 11362 ret ptr %z1363}1364 1365define ptr @strb32_m127(ptr %y, ptr %x) {1366; CHECK-LABEL: strb32_m127:1367; CHECK: @ %bb.0: @ %entry1368; CHECK-NEXT: vldrb.u32 q0, [r1]1369; CHECK-NEXT: vstrb.32 q0, [r0], #-1271370; CHECK-NEXT: bx lr1371entry:1372 %z = getelementptr inbounds i8, ptr %y, i32 -1271373 %0 = load <4 x i8>, ptr %x, align 11374 store <4 x i8> %0, ptr %y, align 11375 ret ptr %z1376}1377 1378define ptr @strb32_m128(ptr %y, ptr %x) {1379; CHECK-LABEL: strb32_m128:1380; CHECK: @ %bb.0: @ %entry1381; CHECK-NEXT: vldrb.u32 q0, [r1]1382; CHECK-NEXT: vstrb.32 q0, [r0]1383; CHECK-NEXT: subs r0, #1281384; CHECK-NEXT: bx lr1385entry:1386 %z = getelementptr inbounds i8, ptr %y, i32 -1281387 %0 = load <4 x i8>, ptr %x, align 11388 store <4 x i8> %0, ptr %y, align 11389 ret ptr %z1390}1391 1392 1393define ptr @strb16_4(ptr %y, ptr %x) {1394; CHECK-LABEL: strb16_4:1395; CHECK: @ %bb.0: @ %entry1396; CHECK-NEXT: vldrb.u16 q0, [r1]1397; CHECK-NEXT: vstrb.16 q0, [r0], #41398; CHECK-NEXT: bx lr1399entry:1400 %z = getelementptr inbounds i8, ptr %y, i32 41401 %0 = load <8 x i8>, ptr %x, align 11402 store <8 x i8> %0, ptr %y, align 11403 ret ptr %z1404}1405 1406define ptr @strb16_3(ptr %y, ptr %x) {1407; CHECK-LABEL: strb16_3:1408; CHECK: @ %bb.0: @ %entry1409; CHECK-NEXT: vldrb.u16 q0, [r1]1410; CHECK-NEXT: vstrb.16 q0, [r0], #31411; CHECK-NEXT: bx lr1412entry:1413 %z = getelementptr inbounds i8, ptr %y, i32 31414 %0 = load <8 x i8>, ptr %x, align 11415 store <8 x i8> %0, ptr %y, align 11416 ret ptr %z1417}1418 1419define ptr @strb16_127(ptr %y, ptr %x) {1420; CHECK-LABEL: strb16_127:1421; CHECK: @ %bb.0: @ %entry1422; CHECK-NEXT: vldrb.u16 q0, [r1]1423; CHECK-NEXT: vstrb.16 q0, [r0], #1271424; CHECK-NEXT: bx lr1425entry:1426 %z = getelementptr inbounds i8, ptr %y, i32 1271427 %0 = load <8 x i8>, ptr %x, align 11428 store <8 x i8> %0, ptr %y, align 11429 ret ptr %z1430}1431 1432define ptr @strb16_128(ptr %y, ptr %x) {1433; CHECK-LABEL: strb16_128:1434; CHECK: @ %bb.0: @ %entry1435; CHECK-NEXT: vldrb.u16 q0, [r1]1436; CHECK-NEXT: vstrb.16 q0, [r0]1437; CHECK-NEXT: adds r0, #1281438; CHECK-NEXT: bx lr1439entry:1440 %z = getelementptr inbounds i8, ptr %y, i32 1281441 %0 = load <8 x i8>, ptr %x, align 11442 store <8 x i8> %0, ptr %y, align 11443 ret ptr %z1444}1445 1446define ptr @strb16_m127(ptr %y, ptr %x) {1447; CHECK-LABEL: strb16_m127:1448; CHECK: @ %bb.0: @ %entry1449; CHECK-NEXT: vldrb.u16 q0, [r1]1450; CHECK-NEXT: vstrb.16 q0, [r0], #-1271451; CHECK-NEXT: bx lr1452entry:1453 %z = getelementptr inbounds i8, ptr %y, i32 -1271454 %0 = load <8 x i8>, ptr %x, align 11455 store <8 x i8> %0, ptr %y, align 11456 ret ptr %z1457}1458 1459define ptr @strb16_m128(ptr %y, ptr %x) {1460; CHECK-LABEL: strb16_m128:1461; CHECK: @ %bb.0: @ %entry1462; CHECK-NEXT: vldrb.u16 q0, [r1]1463; CHECK-NEXT: vstrb.16 q0, [r0]1464; CHECK-NEXT: subs r0, #1281465; CHECK-NEXT: bx lr1466entry:1467 %z = getelementptr inbounds i8, ptr %y, i32 -1281468 %0 = load <8 x i8>, ptr %x, align 11469 store <8 x i8> %0, ptr %y, align 11470 ret ptr %z1471}1472 1473 1474define ptr @strb8_4(ptr %y, ptr %x) {1475; CHECK-LABEL: strb8_4:1476; CHECK: @ %bb.0: @ %entry1477; CHECK-NEXT: vldrb.u8 q0, [r1]1478; CHECK-NEXT: vstrb.8 q0, [r0], #41479; CHECK-NEXT: bx lr1480entry:1481 %z = getelementptr inbounds i8, ptr %y, i32 41482 %0 = load <16 x i8>, ptr %x, align 11483 store <16 x i8> %0, ptr %y, align 11484 ret ptr %z1485}1486 1487define ptr @strb8_3(ptr %y, ptr %x) {1488; CHECK-LABEL: strb8_3:1489; CHECK: @ %bb.0: @ %entry1490; CHECK-NEXT: vldrb.u8 q0, [r1]1491; CHECK-NEXT: vstrb.8 q0, [r0], #31492; CHECK-NEXT: bx lr1493entry:1494 %z = getelementptr inbounds i8, ptr %y, i32 31495 %0 = load <16 x i8>, ptr %x, align 11496 store <16 x i8> %0, ptr %y, align 11497 ret ptr %z1498}1499 1500define ptr @strb8_127(ptr %y, ptr %x) {1501; CHECK-LABEL: strb8_127:1502; CHECK: @ %bb.0: @ %entry1503; CHECK-NEXT: vldrb.u8 q0, [r1]1504; CHECK-NEXT: vstrb.8 q0, [r0], #1271505; CHECK-NEXT: bx lr1506entry:1507 %z = getelementptr inbounds i8, ptr %y, i32 1271508 %0 = load <16 x i8>, ptr %x, align 11509 store <16 x i8> %0, ptr %y, align 11510 ret ptr %z1511}1512 1513define ptr @strb8_128(ptr %y, ptr %x) {1514; CHECK-LABEL: strb8_128:1515; CHECK: @ %bb.0: @ %entry1516; CHECK-NEXT: vldrb.u8 q0, [r1]1517; CHECK-NEXT: vstrb.8 q0, [r0]1518; CHECK-NEXT: adds r0, #1281519; CHECK-NEXT: bx lr1520entry:1521 %z = getelementptr inbounds i8, ptr %y, i32 1281522 %0 = load <16 x i8>, ptr %x, align 11523 store <16 x i8> %0, ptr %y, align 11524 ret ptr %z1525}1526 1527define ptr @strb8_m127(ptr %y, ptr %x) {1528; CHECK-LABEL: strb8_m127:1529; CHECK: @ %bb.0: @ %entry1530; CHECK-NEXT: vldrb.u8 q0, [r1]1531; CHECK-NEXT: vstrb.8 q0, [r0], #-1271532; CHECK-NEXT: bx lr1533entry:1534 %z = getelementptr inbounds i8, ptr %y, i32 -1271535 %0 = load <16 x i8>, ptr %x, align 11536 store <16 x i8> %0, ptr %y, align 11537 ret ptr %z1538}1539 1540define ptr @strb8_m128(ptr %y, ptr %x) {1541; CHECK-LABEL: strb8_m128:1542; CHECK: @ %bb.0: @ %entry1543; CHECK-NEXT: vldrb.u8 q0, [r1]1544; CHECK-NEXT: vstrb.8 q0, [r0]1545; CHECK-NEXT: subs r0, #1281546; CHECK-NEXT: bx lr1547entry:1548 %z = getelementptr inbounds i8, ptr %y, i32 -1281549 %0 = load <16 x i8>, ptr %x, align 11550 store <16 x i8> %0, ptr %y, align 11551 ret ptr %z1552}1553 1554 1555define ptr @strf32_4(ptr %y, ptr %x) {1556; CHECK-LE-LABEL: strf32_4:1557; CHECK-LE: @ %bb.0: @ %entry1558; CHECK-LE-NEXT: vldrw.u32 q0, [r1]1559; CHECK-LE-NEXT: vstrb.8 q0, [r0], #41560; CHECK-LE-NEXT: bx lr1561;1562; CHECK-BE-LABEL: strf32_4:1563; CHECK-BE: @ %bb.0: @ %entry1564; CHECK-BE-NEXT: vldrw.u32 q0, [r1]1565; CHECK-BE-NEXT: vstrw.32 q0, [r0], #41566; CHECK-BE-NEXT: bx lr1567entry:1568 %z = getelementptr inbounds i8, ptr %y, i32 41569 %0 = load <4 x float>, ptr %x, align 41570 store <4 x float> %0, ptr %y, align 41571 ret ptr %z1572}1573 1574define ptr @strf16_4(ptr %y, ptr %x) {1575; CHECK-LE-LABEL: strf16_4:1576; CHECK-LE: @ %bb.0: @ %entry1577; CHECK-LE-NEXT: vldrh.u16 q0, [r1]1578; CHECK-LE-NEXT: vstrb.8 q0, [r0], #41579; CHECK-LE-NEXT: bx lr1580;1581; CHECK-BE-LABEL: strf16_4:1582; CHECK-BE: @ %bb.0: @ %entry1583; CHECK-BE-NEXT: vldrh.u16 q0, [r1]1584; CHECK-BE-NEXT: vstrh.16 q0, [r0], #41585; CHECK-BE-NEXT: bx lr1586entry:1587 %z = getelementptr inbounds i8, ptr %y, i32 41588 %0 = load <8 x half>, ptr %x, align 21589 store <8 x half> %0, ptr %y, align 21590 ret ptr %z1591}1592 1593define ptr @strwi32_align1(ptr %y, ptr %x) {1594; CHECK-LE-LABEL: strwi32_align1:1595; CHECK-LE: @ %bb.0: @ %entry1596; CHECK-LE-NEXT: vldrw.u32 q0, [r1]1597; CHECK-LE-NEXT: vstrb.8 q0, [r0], #31598; CHECK-LE-NEXT: bx lr1599;1600; CHECK-BE-LABEL: strwi32_align1:1601; CHECK-BE: @ %bb.0: @ %entry1602; CHECK-BE-NEXT: vldrw.u32 q0, [r1]1603; CHECK-BE-NEXT: vrev32.8 q0, q01604; CHECK-BE-NEXT: vstrb.8 q0, [r0], #31605; CHECK-BE-NEXT: bx lr1606entry:1607 %z = getelementptr inbounds i8, ptr %y, i32 31608 %0 = load <4 x i32>, ptr %x, align 41609 store <4 x i32> %0, ptr %y, align 11610 ret ptr %z1611}1612 1613define ptr @strhi16_align1(ptr %y, ptr %x) {1614; CHECK-LE-LABEL: strhi16_align1:1615; CHECK-LE: @ %bb.0: @ %entry1616; CHECK-LE-NEXT: vldrh.u16 q0, [r1]1617; CHECK-LE-NEXT: vstrb.8 q0, [r0], #31618; CHECK-LE-NEXT: bx lr1619;1620; CHECK-BE-LABEL: strhi16_align1:1621; CHECK-BE: @ %bb.0: @ %entry1622; CHECK-BE-NEXT: vldrh.u16 q0, [r1]1623; CHECK-BE-NEXT: vrev16.8 q0, q01624; CHECK-BE-NEXT: vstrb.8 q0, [r0], #31625; CHECK-BE-NEXT: bx lr1626entry:1627 %z = getelementptr inbounds i8, ptr %y, i32 31628 %0 = load <8 x i16>, ptr %x, align 21629 store <8 x i16> %0, ptr %y, align 11630 ret ptr %z1631}1632 1633define ptr @strhi32_align1(ptr %y, ptr %x) {1634; CHECK-LABEL: strhi32_align1:1635; CHECK: @ %bb.0: @ %entry1636; CHECK-NEXT: .pad #81637; CHECK-NEXT: sub sp, #81638; CHECK-NEXT: vldrw.u32 q0, [r1]1639; CHECK-NEXT: mov r1, sp1640; CHECK-NEXT: vstrh.32 q0, [r1]1641; CHECK-NEXT: ldrd r1, r2, [sp]1642; CHECK-NEXT: str r1, [r0]1643; CHECK-NEXT: str r2, [r0, #4]1644; CHECK-NEXT: adds r0, #31645; CHECK-NEXT: add sp, #81646; CHECK-NEXT: bx lr1647entry:1648 %z = getelementptr inbounds i8, ptr %y, i32 31649 %0 = load <4 x i32>, ptr %x, align 41650 %1 = trunc <4 x i32> %0 to <4 x i16>1651 store <4 x i16> %1, ptr %y, align 11652 ret ptr %z1653}1654 1655define ptr @strf32_align1(ptr %y, ptr %x) {1656; CHECK-LE-LABEL: strf32_align1:1657; CHECK-LE: @ %bb.0: @ %entry1658; CHECK-LE-NEXT: vldrw.u32 q0, [r1]1659; CHECK-LE-NEXT: vstrb.8 q0, [r0], #31660; CHECK-LE-NEXT: bx lr1661;1662; CHECK-BE-LABEL: strf32_align1:1663; CHECK-BE: @ %bb.0: @ %entry1664; CHECK-BE-NEXT: vldrw.u32 q0, [r1]1665; CHECK-BE-NEXT: vrev32.8 q0, q01666; CHECK-BE-NEXT: vstrb.8 q0, [r0], #31667; CHECK-BE-NEXT: bx lr1668entry:1669 %z = getelementptr inbounds i8, ptr %y, i32 31670 %0 = load <4 x float>, ptr %x, align 41671 store <4 x float> %0, ptr %y, align 11672 ret ptr %z1673}1674 1675define ptr @strf16_align1(ptr %y, ptr %x) {1676; CHECK-LE-LABEL: strf16_align1:1677; CHECK-LE: @ %bb.0: @ %entry1678; CHECK-LE-NEXT: vldrh.u16 q0, [r1]1679; CHECK-LE-NEXT: vstrb.8 q0, [r0], #31680; CHECK-LE-NEXT: bx lr1681;1682; CHECK-BE-LABEL: strf16_align1:1683; CHECK-BE: @ %bb.0: @ %entry1684; CHECK-BE-NEXT: vldrh.u16 q0, [r1]1685; CHECK-BE-NEXT: vrev16.8 q0, q01686; CHECK-BE-NEXT: vstrb.8 q0, [r0], #31687; CHECK-BE-NEXT: bx lr1688entry:1689 %z = getelementptr inbounds i8, ptr %y, i32 31690 %0 = load <8 x half>, ptr %x, align 21691 store <8 x half> %0, ptr %y, align 11692 ret ptr %z1693}1694 1695define ptr @strf16_align8(ptr %y, ptr %x) {1696; CHECK-LE-LABEL: strf16_align8:1697; CHECK-LE: @ %bb.0: @ %entry1698; CHECK-LE-NEXT: vldrh.u16 q0, [r1]1699; CHECK-LE-NEXT: vstrb.8 q0, [r0], #161700; CHECK-LE-NEXT: bx lr1701;1702; CHECK-BE-LABEL: strf16_align8:1703; CHECK-BE: @ %bb.0: @ %entry1704; CHECK-BE-NEXT: vldrh.u16 q0, [r1]1705; CHECK-BE-NEXT: vstrh.16 q0, [r0], #161706; CHECK-BE-NEXT: bx lr1707entry:1708 %z = getelementptr inbounds i8, ptr %y, i32 161709 %0 = load <8 x i16>, ptr %x, align 21710 store <8 x i16> %0, ptr %y, align 81711 ret ptr %z1712}1713