brintos

brintos / llvm-project-archived public Read only

0
0
Text · 45.9 KiB · a9be723 Raw
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