brintos

brintos / llvm-project-archived public Read only

0
0
Text · 46.2 KiB · 11b0115 Raw
1720 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, #4]!9; 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 %z, 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, #3]!22; 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:    adds r0, #328; CHECK-BE-NEXT:    vldrw.u32 q0, [r0]29; 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 %z, 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, #-4]!42; 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 %z, 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, #508]!55; 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 %z, 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:    add.w r0, r0, #51268; CHECK-NEXT:    vldrw.u32 q0, [r0]69; 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 %z, 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, #-508]!82; 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 %z, 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:    sub.w r0, r0, #51295; CHECK-NEXT:    vldrw.u32 q0, [r0]96; 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 %z, 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, #4]!110; 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 %z, 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:    adds r0, #3124; CHECK-NEXT:    vldrh.u32 q0, [r0]125; 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 %z, 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, #2]!139; 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 %z, 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, #254]!153; 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 %z, 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:    add.w r0, r0, #256167; CHECK-NEXT:    vldrh.u32 q0, [r0]168; 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 %z, 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, #-254]!182; 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 %z, 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:    sub.w r0, r0, #256196; CHECK-NEXT:    vldrh.u32 q0, [r0]197; 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 %z, 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, #4]!212; 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 %z, 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:    adds r0, #3226; CHECK-NEXT:    vldrh.s32 q0, [r0]227; 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 %z, 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, #2]!241; 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 %z, 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, #254]!255; 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 %z, 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:    add.w r0, r0, #256269; CHECK-NEXT:    vldrh.s32 q0, [r0]270; 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 %z, 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, #-254]!284; 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 %z, 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:    sub.w r0, r0, #256298; CHECK-NEXT:    vldrh.s32 q0, [r0]299; 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 %z, 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, #4]!314; 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 %z, 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, #3]!327; 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:    adds r0, #3333; CHECK-BE-NEXT:    vldrh.u16 q0, [r0]334; 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 %z, 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, #2]!347; 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 %z, 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, #254]!360; 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 %z, 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:    add.w r0, r0, #256373; CHECK-NEXT:    vldrh.u16 q0, [r0]374; 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 %z, 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, #-254]!387; 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 %z, 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:    sub.w r0, r0, #256400; CHECK-NEXT:    vldrh.u16 q0, [r0]401; 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 %z, 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, #4]!415; 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 %z, 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, #3]!429; 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 %z, 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, #127]!443; 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 %z, 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:    adds r0, #128457; CHECK-NEXT:    vldrb.u32 q0, [r0]458; 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 %z, 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, #-127]!472; 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 %z, 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:    subs r0, #128486; CHECK-NEXT:    vldrb.u32 q0, [r0]487; 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 %z, 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, #4]!502; 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 %z, 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, #3]!516; 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 %z, 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, #127]!530; 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 %z, 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:    adds r0, #128544; CHECK-NEXT:    vldrb.s32 q0, [r0]545; 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 %z, 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, #-127]!559; 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 %z, 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:    subs r0, #128573; CHECK-NEXT:    vldrb.s32 q0, [r0]574; 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 %z, 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, #4]!589; 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 %z, 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, #3]!603; 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 %z, 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, #127]!617; 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 %z, 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:    adds r0, #128631; CHECK-NEXT:    vldrb.u16 q0, [r0]632; 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 %z, 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, #-127]!646; 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 %z, 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:    subs r0, #128660; CHECK-NEXT:    vldrb.u16 q0, [r0]661; 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 %z, 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, #4]!676; 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 %z, 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, #3]!690; 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 %z, 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, #127]!704; 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 %z, 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:    adds r0, #128718; CHECK-NEXT:    vldrb.s16 q0, [r0]719; 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 %z, 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, #-127]!733; 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 %z, 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:    subs r0, #128747; CHECK-NEXT:    vldrb.s16 q0, [r0]748; 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 %z, 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, #4]!763; 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 %z, 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, #3]!776; 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 %z, 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, #127]!789; 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 %z, 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:    adds r0, #128802; CHECK-NEXT:    vldrb.u8 q0, [r0]803; 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 %z, 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, #-127]!816; 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 %z, 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:    subs r0, #128829; CHECK-NEXT:    vldrb.u8 q0, [r0]830; 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 %z, 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, #4]!844; 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 %z, 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, #4]!857; 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 %z, 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, #3]!870; 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, #3]876; CHECK-BE-NEXT:    adds r0, #3877; CHECK-BE-NEXT:    vrev32.8 q0, q0878; CHECK-BE-NEXT:    vstrw.32 q0, [r1]879; CHECK-BE-NEXT:    bx lr880entry:881  %z = getelementptr inbounds i8, ptr %x, i32 3882  %0 = load <4 x i32>, ptr %z, align 1883  store <4 x i32> %0, ptr %y, align 4884  ret ptr %z885}886 887define ptr @ldrhi16_align1(ptr %x, ptr %y) {888; CHECK-LE-LABEL: ldrhi16_align1:889; CHECK-LE:       @ %bb.0: @ %entry890; CHECK-LE-NEXT:    vldrb.u8 q0, [r0, #3]!891; CHECK-LE-NEXT:    vstrh.16 q0, [r1]892; CHECK-LE-NEXT:    bx lr893;894; CHECK-BE-LABEL: ldrhi16_align1:895; CHECK-BE:       @ %bb.0: @ %entry896; CHECK-BE-NEXT:    vldrb.u8 q0, [r0, #3]897; CHECK-BE-NEXT:    adds r0, #3898; CHECK-BE-NEXT:    vrev16.8 q0, q0899; CHECK-BE-NEXT:    vstrh.16 q0, [r1]900; CHECK-BE-NEXT:    bx lr901entry:902  %z = getelementptr inbounds i8, ptr %x, i32 3903  %0 = load <8 x i16>, ptr %z, align 1904  store <8 x i16> %0, ptr %y, align 2905  ret ptr %z906}907 908define ptr @ldrhi32_align1(ptr %x, ptr %y) {909; CHECK-LABEL: ldrhi32_align1:910; CHECK:       @ %bb.0: @ %entry911; CHECK-NEXT:    .pad #8912; CHECK-NEXT:    sub sp, #8913; CHECK-NEXT:    ldr r2, [r0, #3]!914; CHECK-NEXT:    str r2, [sp]915; CHECK-NEXT:    ldr r2, [r0, #4]916; CHECK-NEXT:    str r2, [sp, #4]917; CHECK-NEXT:    mov r2, sp918; CHECK-NEXT:    vldrh.s32 q0, [r2]919; CHECK-NEXT:    vstrw.32 q0, [r1]920; CHECK-NEXT:    add sp, #8921; CHECK-NEXT:    bx lr922entry:923  %z = getelementptr inbounds i8, ptr %x, i32 3924  %0 = load <4 x i16>, ptr %z, align 1925  %1 = sext <4 x i16> %0 to <4 x i32>926  store <4 x i32> %1, ptr %y, align 4927  ret ptr %z928}929 930define ptr @ldrf32_align1(ptr %x, ptr %y) {931; CHECK-LE-LABEL: ldrf32_align1:932; CHECK-LE:       @ %bb.0: @ %entry933; CHECK-LE-NEXT:    vldrb.u8 q0, [r0, #3]!934; CHECK-LE-NEXT:    vstrw.32 q0, [r1]935; CHECK-LE-NEXT:    bx lr936;937; CHECK-BE-LABEL: ldrf32_align1:938; CHECK-BE:       @ %bb.0: @ %entry939; CHECK-BE-NEXT:    vldrb.u8 q0, [r0, #3]940; CHECK-BE-NEXT:    adds r0, #3941; CHECK-BE-NEXT:    vrev32.8 q0, q0942; CHECK-BE-NEXT:    vstrw.32 q0, [r1]943; CHECK-BE-NEXT:    bx lr944entry:945  %z = getelementptr inbounds i8, ptr %x, i32 3946  %0 = load <4 x float>, ptr %z, align 1947  store <4 x float> %0, ptr %y, align 4948  ret ptr %z949}950 951define ptr @ldrf16_align1(ptr %x, ptr %y) {952; CHECK-LE-LABEL: ldrf16_align1:953; CHECK-LE:       @ %bb.0: @ %entry954; CHECK-LE-NEXT:    vldrb.u8 q0, [r0, #3]!955; CHECK-LE-NEXT:    vstrh.16 q0, [r1]956; CHECK-LE-NEXT:    bx lr957;958; CHECK-BE-LABEL: ldrf16_align1:959; CHECK-BE:       @ %bb.0: @ %entry960; CHECK-BE-NEXT:    vldrb.u8 q0, [r0, #3]961; CHECK-BE-NEXT:    adds r0, #3962; CHECK-BE-NEXT:    vrev16.8 q0, q0963; CHECK-BE-NEXT:    vstrh.16 q0, [r1]964; CHECK-BE-NEXT:    bx lr965entry:966  %z = getelementptr inbounds i8, ptr %x, i32 3967  %0 = load <8 x half>, ptr %z, align 1968  store <8 x half> %0, ptr %y, align 2969  ret ptr %z970}971 972define ptr @ldrh16_align8(ptr %x, ptr %y) {973; CHECK-LE-LABEL: ldrh16_align8:974; CHECK-LE:       @ %bb.0: @ %entry975; CHECK-LE-NEXT:    vldrw.u32 q0, [r0, #4]!976; CHECK-LE-NEXT:    vstrh.16 q0, [r1]977; CHECK-LE-NEXT:    bx lr978;979; CHECK-BE-LABEL: ldrh16_align8:980; CHECK-BE:       @ %bb.0: @ %entry981; CHECK-BE-NEXT:    vldrh.u16 q0, [r0, #4]!982; CHECK-BE-NEXT:    vstrh.16 q0, [r1]983; CHECK-BE-NEXT:    bx lr984entry:985  %z = getelementptr inbounds i8, ptr %x, i32 4986  %0 = load <8 x i16>, ptr %z, align 8987  store <8 x i16> %0, ptr %y, align 2988  ret ptr %z989}990 991 992 993 994 995define ptr @strw32_4(ptr %y, ptr %x) {996; CHECK-LE-LABEL: strw32_4:997; CHECK-LE:       @ %bb.0: @ %entry998; CHECK-LE-NEXT:    vldrw.u32 q0, [r1]999; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #4]!1000; CHECK-LE-NEXT:    bx lr1001;1002; CHECK-BE-LABEL: strw32_4:1003; CHECK-BE:       @ %bb.0: @ %entry1004; CHECK-BE-NEXT:    vldrw.u32 q0, [r1]1005; CHECK-BE-NEXT:    vstrw.32 q0, [r0, #4]!1006; CHECK-BE-NEXT:    bx lr1007entry:1008  %z = getelementptr inbounds i8, ptr %y, i32 41009  %0 = load <4 x i32>, ptr %x, align 41010  store <4 x i32> %0, ptr %z, align 41011  ret ptr %z1012}1013 1014define ptr @strw32_3(ptr %y, ptr %x) {1015; CHECK-LE-LABEL: strw32_3:1016; CHECK-LE:       @ %bb.0: @ %entry1017; CHECK-LE-NEXT:    vldrw.u32 q0, [r1]1018; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #3]!1019; CHECK-LE-NEXT:    bx lr1020;1021; CHECK-BE-LABEL: strw32_3:1022; CHECK-BE:       @ %bb.0: @ %entry1023; CHECK-BE-NEXT:    adds r0, #31024; CHECK-BE-NEXT:    vldrw.u32 q0, [r1]1025; CHECK-BE-NEXT:    vstrw.32 q0, [r0]1026; CHECK-BE-NEXT:    bx lr1027entry:1028  %z = getelementptr inbounds i8, ptr %y, i32 31029  %0 = load <4 x i32>, ptr %x, align 41030  store <4 x i32> %0, ptr %z, align 41031  ret ptr %z1032}1033 1034define ptr @strw32_m4(ptr %y, ptr %x) {1035; CHECK-LE-LABEL: strw32_m4:1036; CHECK-LE:       @ %bb.0: @ %entry1037; CHECK-LE-NEXT:    vldrw.u32 q0, [r1]1038; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #-4]!1039; CHECK-LE-NEXT:    bx lr1040;1041; CHECK-BE-LABEL: strw32_m4:1042; CHECK-BE:       @ %bb.0: @ %entry1043; CHECK-BE-NEXT:    vldrw.u32 q0, [r1]1044; CHECK-BE-NEXT:    vstrw.32 q0, [r0, #-4]!1045; CHECK-BE-NEXT:    bx lr1046entry:1047  %z = getelementptr inbounds i8, ptr %y, i32 -41048  %0 = load <4 x i32>, ptr %x, align 41049  store <4 x i32> %0, ptr %z, align 41050  ret ptr %z1051}1052 1053define ptr @strw32_508(ptr %y, ptr %x) {1054; CHECK-LABEL: strw32_508:1055; CHECK:       @ %bb.0: @ %entry1056; CHECK-NEXT:    vldrw.u32 q0, [r1]1057; CHECK-NEXT:    vstrw.32 q0, [r0, #508]!1058; CHECK-NEXT:    bx lr1059entry:1060  %z = getelementptr inbounds i8, ptr %y, i32 5081061  %0 = load <4 x i32>, ptr %x, align 41062  store <4 x i32> %0, ptr %z, align 41063  ret ptr %z1064}1065 1066define ptr @strw32_512(ptr %y, ptr %x) {1067; CHECK-LABEL: strw32_512:1068; CHECK:       @ %bb.0: @ %entry1069; CHECK-NEXT:    add.w r0, r0, #5121070; CHECK-NEXT:    vldrw.u32 q0, [r1]1071; CHECK-NEXT:    vstrw.32 q0, [r0]1072; CHECK-NEXT:    bx lr1073entry:1074  %z = getelementptr inbounds i8, ptr %y, i32 5121075  %0 = load <4 x i32>, ptr %x, align 41076  store <4 x i32> %0, ptr %z, align 41077  ret ptr %z1078}1079 1080define ptr @strw32_m508(ptr %y, ptr %x) {1081; CHECK-LABEL: strw32_m508:1082; CHECK:       @ %bb.0: @ %entry1083; CHECK-NEXT:    vldrw.u32 q0, [r1]1084; CHECK-NEXT:    vstrw.32 q0, [r0, #-508]!1085; CHECK-NEXT:    bx lr1086entry:1087  %z = getelementptr inbounds i8, ptr %y, i32 -5081088  %0 = load <4 x i32>, ptr %x, align 41089  store <4 x i32> %0, ptr %z, align 41090  ret ptr %z1091}1092 1093define ptr @strw32_m512(ptr %y, ptr %x) {1094; CHECK-LABEL: strw32_m512:1095; CHECK:       @ %bb.0: @ %entry1096; CHECK-NEXT:    sub.w r0, r0, #5121097; CHECK-NEXT:    vldrw.u32 q0, [r1]1098; CHECK-NEXT:    vstrw.32 q0, [r0]1099; CHECK-NEXT:    bx lr1100entry:1101  %z = getelementptr inbounds i8, ptr %y, i32 -5121102  %0 = load <4 x i32>, ptr %x, align 41103  store <4 x i32> %0, ptr %z, align 41104  ret ptr %z1105}1106 1107 1108define ptr @strh32_4(ptr %y, ptr %x) {1109; CHECK-LABEL: strh32_4:1110; CHECK:       @ %bb.0: @ %entry1111; CHECK-NEXT:    vldrh.u32 q0, [r1]1112; CHECK-NEXT:    vstrh.32 q0, [r0, #4]!1113; CHECK-NEXT:    bx lr1114entry:1115  %z = getelementptr inbounds i8, ptr %y, i32 41116  %0 = load <4 x i16>, ptr %x, align 21117  store <4 x i16> %0, ptr %z, align 21118  ret ptr %z1119}1120 1121define ptr @strh32_3(ptr %y, ptr %x) {1122; CHECK-LABEL: strh32_3:1123; CHECK:       @ %bb.0: @ %entry1124; CHECK-NEXT:    adds r0, #31125; CHECK-NEXT:    vldrh.u32 q0, [r1]1126; CHECK-NEXT:    vstrh.32 q0, [r0]1127; CHECK-NEXT:    bx lr1128entry:1129  %z = getelementptr inbounds i8, ptr %y, i32 31130  %0 = load <4 x i16>, ptr %x, align 21131  store <4 x i16> %0, ptr %z, align 21132  ret ptr %z1133}1134 1135define ptr @strh32_2(ptr %y, ptr %x) {1136; CHECK-LABEL: strh32_2:1137; CHECK:       @ %bb.0: @ %entry1138; CHECK-NEXT:    vldrh.u32 q0, [r1]1139; CHECK-NEXT:    vstrh.32 q0, [r0, #2]!1140; CHECK-NEXT:    bx lr1141entry:1142  %z = getelementptr inbounds i8, ptr %y, i32 21143  %0 = load <4 x i16>, ptr %x, align 21144  store <4 x i16> %0, ptr %z, align 21145  ret ptr %z1146}1147 1148define ptr @strh32_254(ptr %y, ptr %x) {1149; CHECK-LABEL: strh32_254:1150; CHECK:       @ %bb.0: @ %entry1151; CHECK-NEXT:    vldrh.u32 q0, [r1]1152; CHECK-NEXT:    vstrh.32 q0, [r0, #254]!1153; CHECK-NEXT:    bx lr1154entry:1155  %z = getelementptr inbounds i8, ptr %y, i32 2541156  %0 = load <4 x i16>, ptr %x, align 21157  store <4 x i16> %0, ptr %z, align 21158  ret ptr %z1159}1160 1161define ptr @strh32_256(ptr %y, ptr %x) {1162; CHECK-LABEL: strh32_256:1163; CHECK:       @ %bb.0: @ %entry1164; CHECK-NEXT:    add.w r0, r0, #2561165; CHECK-NEXT:    vldrh.u32 q0, [r1]1166; CHECK-NEXT:    vstrh.32 q0, [r0]1167; CHECK-NEXT:    bx lr1168entry:1169  %z = getelementptr inbounds i8, ptr %y, i32 2561170  %0 = load <4 x i16>, ptr %x, align 21171  store <4 x i16> %0, ptr %z, align 21172  ret ptr %z1173}1174 1175define ptr @strh32_m254(ptr %y, ptr %x) {1176; CHECK-LABEL: strh32_m254:1177; CHECK:       @ %bb.0: @ %entry1178; CHECK-NEXT:    vldrh.u32 q0, [r1]1179; CHECK-NEXT:    vstrh.32 q0, [r0, #-254]!1180; CHECK-NEXT:    bx lr1181entry:1182  %z = getelementptr inbounds i8, ptr %y, i32 -2541183  %0 = load <4 x i16>, ptr %x, align 21184  store <4 x i16> %0, ptr %z, align 21185  ret ptr %z1186}1187 1188define ptr @strh32_m256(ptr %y, ptr %x) {1189; CHECK-LABEL: strh32_m256:1190; CHECK:       @ %bb.0: @ %entry1191; CHECK-NEXT:    sub.w r0, r0, #2561192; CHECK-NEXT:    vldrh.u32 q0, [r1]1193; CHECK-NEXT:    vstrh.32 q0, [r0]1194; CHECK-NEXT:    bx lr1195entry:1196  %z = getelementptr inbounds i8, ptr %y, i32 -2561197  %0 = load <4 x i16>, ptr %x, align 21198  store <4 x i16> %0, ptr %z, align 21199  ret ptr %z1200}1201 1202 1203define ptr @strh16_4(ptr %y, ptr %x) {1204; CHECK-LE-LABEL: strh16_4:1205; CHECK-LE:       @ %bb.0: @ %entry1206; CHECK-LE-NEXT:    vldrh.u16 q0, [r1]1207; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #4]!1208; CHECK-LE-NEXT:    bx lr1209;1210; CHECK-BE-LABEL: strh16_4:1211; CHECK-BE:       @ %bb.0: @ %entry1212; CHECK-BE-NEXT:    vldrh.u16 q0, [r1]1213; CHECK-BE-NEXT:    vstrh.16 q0, [r0, #4]!1214; CHECK-BE-NEXT:    bx lr1215entry:1216  %z = getelementptr inbounds i8, ptr %y, i32 41217  %0 = load <8 x i16>, ptr %x, align 21218  store <8 x i16> %0, ptr %z, align 21219  ret ptr %z1220}1221 1222define ptr @strh16_3(ptr %y, ptr %x) {1223; CHECK-LE-LABEL: strh16_3:1224; CHECK-LE:       @ %bb.0: @ %entry1225; CHECK-LE-NEXT:    vldrh.u16 q0, [r1]1226; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #3]!1227; CHECK-LE-NEXT:    bx lr1228;1229; CHECK-BE-LABEL: strh16_3:1230; CHECK-BE:       @ %bb.0: @ %entry1231; CHECK-BE-NEXT:    adds r0, #31232; CHECK-BE-NEXT:    vldrh.u16 q0, [r1]1233; CHECK-BE-NEXT:    vstrh.16 q0, [r0]1234; CHECK-BE-NEXT:    bx lr1235entry:1236  %z = getelementptr inbounds i8, ptr %y, i32 31237  %0 = load <8 x i16>, ptr %x, align 21238  store <8 x i16> %0, ptr %z, align 21239  ret ptr %z1240}1241 1242define ptr @strh16_2(ptr %y, ptr %x) {1243; CHECK-LE-LABEL: strh16_2:1244; CHECK-LE:       @ %bb.0: @ %entry1245; CHECK-LE-NEXT:    vldrh.u16 q0, [r1]1246; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #2]!1247; CHECK-LE-NEXT:    bx lr1248;1249; CHECK-BE-LABEL: strh16_2:1250; CHECK-BE:       @ %bb.0: @ %entry1251; CHECK-BE-NEXT:    vldrh.u16 q0, [r1]1252; CHECK-BE-NEXT:    vstrh.16 q0, [r0, #2]!1253; CHECK-BE-NEXT:    bx lr1254entry:1255  %z = getelementptr inbounds i8, ptr %y, i32 21256  %0 = load <8 x i16>, ptr %x, align 21257  store <8 x i16> %0, ptr %z, align 21258  ret ptr %z1259}1260 1261define ptr @strh16_254(ptr %y, ptr %x) {1262; CHECK-LABEL: strh16_254:1263; CHECK:       @ %bb.0: @ %entry1264; CHECK-NEXT:    vldrh.u16 q0, [r1]1265; CHECK-NEXT:    vstrh.16 q0, [r0, #254]!1266; CHECK-NEXT:    bx lr1267entry:1268  %z = getelementptr inbounds i8, ptr %y, i32 2541269  %0 = load <8 x i16>, ptr %x, align 21270  store <8 x i16> %0, ptr %z, align 21271  ret ptr %z1272}1273 1274define ptr @strh16_256(ptr %y, ptr %x) {1275; CHECK-LABEL: strh16_256:1276; CHECK:       @ %bb.0: @ %entry1277; CHECK-NEXT:    add.w r0, r0, #2561278; CHECK-NEXT:    vldrh.u16 q0, [r1]1279; CHECK-NEXT:    vstrh.16 q0, [r0]1280; CHECK-NEXT:    bx lr1281entry:1282  %z = getelementptr inbounds i8, ptr %y, i32 2561283  %0 = load <8 x i16>, ptr %x, align 21284  store <8 x i16> %0, ptr %z, align 21285  ret ptr %z1286}1287 1288define ptr @strh16_m254(ptr %y, ptr %x) {1289; CHECK-LABEL: strh16_m254:1290; CHECK:       @ %bb.0: @ %entry1291; CHECK-NEXT:    vldrh.u16 q0, [r1]1292; CHECK-NEXT:    vstrh.16 q0, [r0, #-254]!1293; CHECK-NEXT:    bx lr1294entry:1295  %z = getelementptr inbounds i8, ptr %y, i32 -2541296  %0 = load <8 x i16>, ptr %x, align 21297  store <8 x i16> %0, ptr %z, align 21298  ret ptr %z1299}1300 1301define ptr @strh16_m256(ptr %y, ptr %x) {1302; CHECK-LABEL: strh16_m256:1303; CHECK:       @ %bb.0: @ %entry1304; CHECK-NEXT:    sub.w r0, r0, #2561305; CHECK-NEXT:    vldrh.u16 q0, [r1]1306; CHECK-NEXT:    vstrh.16 q0, [r0]1307; CHECK-NEXT:    bx lr1308entry:1309  %z = getelementptr inbounds i8, ptr %y, i32 -2561310  %0 = load <8 x i16>, ptr %x, align 21311  store <8 x i16> %0, ptr %z, align 21312  ret ptr %z1313}1314 1315 1316define ptr @strb32_4(ptr %y, ptr %x) {1317; CHECK-LABEL: strb32_4:1318; CHECK:       @ %bb.0: @ %entry1319; CHECK-NEXT:    vldrb.u32 q0, [r1]1320; CHECK-NEXT:    vstrb.32 q0, [r0, #4]!1321; CHECK-NEXT:    bx lr1322entry:1323  %z = getelementptr inbounds i8, ptr %y, i32 41324  %0 = load <4 x i8>, ptr %x, align 11325  store <4 x i8> %0, ptr %z, align 11326  ret ptr %z1327}1328 1329define ptr @strb32_3(ptr %y, ptr %x) {1330; CHECK-LABEL: strb32_3:1331; CHECK:       @ %bb.0: @ %entry1332; CHECK-NEXT:    vldrb.u32 q0, [r1]1333; CHECK-NEXT:    vstrb.32 q0, [r0, #3]!1334; CHECK-NEXT:    bx lr1335entry:1336  %z = getelementptr inbounds i8, ptr %y, i32 31337  %0 = load <4 x i8>, ptr %x, align 11338  store <4 x i8> %0, ptr %z, align 11339  ret ptr %z1340}1341 1342define ptr @strb32_127(ptr %y, ptr %x) {1343; CHECK-LABEL: strb32_127:1344; CHECK:       @ %bb.0: @ %entry1345; CHECK-NEXT:    vldrb.u32 q0, [r1]1346; CHECK-NEXT:    vstrb.32 q0, [r0, #127]!1347; CHECK-NEXT:    bx lr1348entry:1349  %z = getelementptr inbounds i8, ptr %y, i32 1271350  %0 = load <4 x i8>, ptr %x, align 11351  store <4 x i8> %0, ptr %z, align 11352  ret ptr %z1353}1354 1355define ptr @strb32_128(ptr %y, ptr %x) {1356; CHECK-LABEL: strb32_128:1357; CHECK:       @ %bb.0: @ %entry1358; CHECK-NEXT:    adds r0, #1281359; CHECK-NEXT:    vldrb.u32 q0, [r1]1360; CHECK-NEXT:    vstrb.32 q0, [r0]1361; CHECK-NEXT:    bx lr1362entry:1363  %z = getelementptr inbounds i8, ptr %y, i32 1281364  %0 = load <4 x i8>, ptr %x, align 11365  store <4 x i8> %0, ptr %z, align 11366  ret ptr %z1367}1368 1369define ptr @strb32_m127(ptr %y, ptr %x) {1370; CHECK-LABEL: strb32_m127:1371; CHECK:       @ %bb.0: @ %entry1372; CHECK-NEXT:    vldrb.u32 q0, [r1]1373; CHECK-NEXT:    vstrb.32 q0, [r0, #-127]!1374; CHECK-NEXT:    bx lr1375entry:1376  %z = getelementptr inbounds i8, ptr %y, i32 -1271377  %0 = load <4 x i8>, ptr %x, align 11378  store <4 x i8> %0, ptr %z, align 11379  ret ptr %z1380}1381 1382define ptr @strb32_m128(ptr %y, ptr %x) {1383; CHECK-LABEL: strb32_m128:1384; CHECK:       @ %bb.0: @ %entry1385; CHECK-NEXT:    subs r0, #1281386; CHECK-NEXT:    vldrb.u32 q0, [r1]1387; CHECK-NEXT:    vstrb.32 q0, [r0]1388; CHECK-NEXT:    bx lr1389entry:1390  %z = getelementptr inbounds i8, ptr %y, i32 -1281391  %0 = load <4 x i8>, ptr %x, align 11392  store <4 x i8> %0, ptr %z, align 11393  ret ptr %z1394}1395 1396 1397define ptr @strb16_4(ptr %y, ptr %x) {1398; CHECK-LABEL: strb16_4:1399; CHECK:       @ %bb.0: @ %entry1400; CHECK-NEXT:    vldrb.u16 q0, [r1]1401; CHECK-NEXT:    vstrb.16 q0, [r0, #4]!1402; CHECK-NEXT:    bx lr1403entry:1404  %z = getelementptr inbounds i8, ptr %y, i32 41405  %0 = load <8 x i8>, ptr %x, align 11406  store <8 x i8> %0, ptr %z, align 11407  ret ptr %z1408}1409 1410define ptr @strb16_3(ptr %y, ptr %x) {1411; CHECK-LABEL: strb16_3:1412; CHECK:       @ %bb.0: @ %entry1413; CHECK-NEXT:    vldrb.u16 q0, [r1]1414; CHECK-NEXT:    vstrb.16 q0, [r0, #3]!1415; CHECK-NEXT:    bx lr1416entry:1417  %z = getelementptr inbounds i8, ptr %y, i32 31418  %0 = load <8 x i8>, ptr %x, align 11419  store <8 x i8> %0, ptr %z, align 11420  ret ptr %z1421}1422 1423define ptr @strb16_127(ptr %y, ptr %x) {1424; CHECK-LABEL: strb16_127:1425; CHECK:       @ %bb.0: @ %entry1426; CHECK-NEXT:    vldrb.u16 q0, [r1]1427; CHECK-NEXT:    vstrb.16 q0, [r0, #127]!1428; CHECK-NEXT:    bx lr1429entry:1430  %z = getelementptr inbounds i8, ptr %y, i32 1271431  %0 = load <8 x i8>, ptr %x, align 11432  store <8 x i8> %0, ptr %z, align 11433  ret ptr %z1434}1435 1436define ptr @strb16_128(ptr %y, ptr %x) {1437; CHECK-LABEL: strb16_128:1438; CHECK:       @ %bb.0: @ %entry1439; CHECK-NEXT:    adds r0, #1281440; CHECK-NEXT:    vldrb.u16 q0, [r1]1441; CHECK-NEXT:    vstrb.16 q0, [r0]1442; CHECK-NEXT:    bx lr1443entry:1444  %z = getelementptr inbounds i8, ptr %y, i32 1281445  %0 = load <8 x i8>, ptr %x, align 11446  store <8 x i8> %0, ptr %z, align 11447  ret ptr %z1448}1449 1450define ptr @strb16_m127(ptr %y, ptr %x) {1451; CHECK-LABEL: strb16_m127:1452; CHECK:       @ %bb.0: @ %entry1453; CHECK-NEXT:    vldrb.u16 q0, [r1]1454; CHECK-NEXT:    vstrb.16 q0, [r0, #-127]!1455; CHECK-NEXT:    bx lr1456entry:1457  %z = getelementptr inbounds i8, ptr %y, i32 -1271458  %0 = load <8 x i8>, ptr %x, align 11459  store <8 x i8> %0, ptr %z, align 11460  ret ptr %z1461}1462 1463define ptr @strb16_m128(ptr %y, ptr %x) {1464; CHECK-LABEL: strb16_m128:1465; CHECK:       @ %bb.0: @ %entry1466; CHECK-NEXT:    subs r0, #1281467; CHECK-NEXT:    vldrb.u16 q0, [r1]1468; CHECK-NEXT:    vstrb.16 q0, [r0]1469; CHECK-NEXT:    bx lr1470entry:1471  %z = getelementptr inbounds i8, ptr %y, i32 -1281472  %0 = load <8 x i8>, ptr %x, align 11473  store <8 x i8> %0, ptr %z, align 11474  ret ptr %z1475}1476 1477 1478define ptr @strb8_4(ptr %y, ptr %x) {1479; CHECK-LABEL: strb8_4:1480; CHECK:       @ %bb.0: @ %entry1481; CHECK-NEXT:    vldrb.u8 q0, [r1]1482; CHECK-NEXT:    vstrb.8 q0, [r0, #4]!1483; CHECK-NEXT:    bx lr1484entry:1485  %z = getelementptr inbounds i8, ptr %y, i32 41486  %0 = load <16 x i8>, ptr %x, align 11487  store <16 x i8> %0, ptr %z, align 11488  ret ptr %z1489}1490 1491define ptr @strb8_3(ptr %y, ptr %x) {1492; CHECK-LABEL: strb8_3:1493; CHECK:       @ %bb.0: @ %entry1494; CHECK-NEXT:    vldrb.u8 q0, [r1]1495; CHECK-NEXT:    vstrb.8 q0, [r0, #3]!1496; CHECK-NEXT:    bx lr1497entry:1498  %z = getelementptr inbounds i8, ptr %y, i32 31499  %0 = load <16 x i8>, ptr %x, align 11500  store <16 x i8> %0, ptr %z, align 11501  ret ptr %z1502}1503 1504define ptr @strb8_127(ptr %y, ptr %x) {1505; CHECK-LABEL: strb8_127:1506; CHECK:       @ %bb.0: @ %entry1507; CHECK-NEXT:    vldrb.u8 q0, [r1]1508; CHECK-NEXT:    vstrb.8 q0, [r0, #127]!1509; CHECK-NEXT:    bx lr1510entry:1511  %z = getelementptr inbounds i8, ptr %y, i32 1271512  %0 = load <16 x i8>, ptr %x, align 11513  store <16 x i8> %0, ptr %z, align 11514  ret ptr %z1515}1516 1517define ptr @strb8_128(ptr %y, ptr %x) {1518; CHECK-LABEL: strb8_128:1519; CHECK:       @ %bb.0: @ %entry1520; CHECK-NEXT:    adds r0, #1281521; CHECK-NEXT:    vldrb.u8 q0, [r1]1522; CHECK-NEXT:    vstrb.8 q0, [r0]1523; CHECK-NEXT:    bx lr1524entry:1525  %z = getelementptr inbounds i8, ptr %y, i32 1281526  %0 = load <16 x i8>, ptr %x, align 11527  store <16 x i8> %0, ptr %z, align 11528  ret ptr %z1529}1530 1531define ptr @strb8_m127(ptr %y, ptr %x) {1532; CHECK-LABEL: strb8_m127:1533; CHECK:       @ %bb.0: @ %entry1534; CHECK-NEXT:    vldrb.u8 q0, [r1]1535; CHECK-NEXT:    vstrb.8 q0, [r0, #-127]!1536; CHECK-NEXT:    bx lr1537entry:1538  %z = getelementptr inbounds i8, ptr %y, i32 -1271539  %0 = load <16 x i8>, ptr %x, align 11540  store <16 x i8> %0, ptr %z, align 11541  ret ptr %z1542}1543 1544define ptr @strb8_m128(ptr %y, ptr %x) {1545; CHECK-LABEL: strb8_m128:1546; CHECK:       @ %bb.0: @ %entry1547; CHECK-NEXT:    subs r0, #1281548; CHECK-NEXT:    vldrb.u8 q0, [r1]1549; CHECK-NEXT:    vstrb.8 q0, [r0]1550; CHECK-NEXT:    bx lr1551entry:1552  %z = getelementptr inbounds i8, ptr %y, i32 -1281553  %0 = load <16 x i8>, ptr %x, align 11554  store <16 x i8> %0, ptr %z, align 11555  ret ptr %z1556}1557 1558 1559define ptr @strf32_4(ptr %y, ptr %x) {1560; CHECK-LE-LABEL: strf32_4:1561; CHECK-LE:       @ %bb.0: @ %entry1562; CHECK-LE-NEXT:    vldrw.u32 q0, [r1]1563; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #4]!1564; CHECK-LE-NEXT:    bx lr1565;1566; CHECK-BE-LABEL: strf32_4:1567; CHECK-BE:       @ %bb.0: @ %entry1568; CHECK-BE-NEXT:    vldrw.u32 q0, [r1]1569; CHECK-BE-NEXT:    vstrw.32 q0, [r0, #4]!1570; CHECK-BE-NEXT:    bx lr1571entry:1572  %z = getelementptr inbounds i8, ptr %y, i32 41573  %0 = load <4 x float>, ptr %x, align 41574  store <4 x float> %0, ptr %z, align 41575  ret ptr %z1576}1577 1578define ptr @strf16_4(ptr %y, ptr %x) {1579; CHECK-LE-LABEL: strf16_4:1580; CHECK-LE:       @ %bb.0: @ %entry1581; CHECK-LE-NEXT:    vldrh.u16 q0, [r1]1582; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #4]!1583; CHECK-LE-NEXT:    bx lr1584;1585; CHECK-BE-LABEL: strf16_4:1586; CHECK-BE:       @ %bb.0: @ %entry1587; CHECK-BE-NEXT:    vldrh.u16 q0, [r1]1588; CHECK-BE-NEXT:    vstrh.16 q0, [r0, #4]!1589; CHECK-BE-NEXT:    bx lr1590entry:1591  %z = getelementptr inbounds i8, ptr %y, i32 41592  %0 = load <8 x half>, ptr %x, align 21593  store <8 x half> %0, ptr %z, align 21594  ret ptr %z1595}1596 1597define ptr @strwi32_align1(ptr %y, ptr %x) {1598; CHECK-LE-LABEL: strwi32_align1:1599; CHECK-LE:       @ %bb.0: @ %entry1600; CHECK-LE-NEXT:    vldrw.u32 q0, [r1]1601; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #3]!1602; CHECK-LE-NEXT:    bx lr1603;1604; CHECK-BE-LABEL: strwi32_align1:1605; CHECK-BE:       @ %bb.0: @ %entry1606; CHECK-BE-NEXT:    vldrw.u32 q0, [r1]1607; CHECK-BE-NEXT:    vrev32.8 q0, q01608; CHECK-BE-NEXT:    vstrb.8 q0, [r0, #3]1609; CHECK-BE-NEXT:    adds r0, #31610; CHECK-BE-NEXT:    bx lr1611entry:1612  %z = getelementptr inbounds i8, ptr %y, i32 31613  %0 = load <4 x i32>, ptr %x, align 41614  store <4 x i32> %0, ptr %z, align 11615  ret ptr %z1616}1617 1618define ptr @strhi16_align1(ptr %y, ptr %x) {1619; CHECK-LE-LABEL: strhi16_align1:1620; CHECK-LE:       @ %bb.0: @ %entry1621; CHECK-LE-NEXT:    vldrh.u16 q0, [r1]1622; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #3]!1623; CHECK-LE-NEXT:    bx lr1624;1625; CHECK-BE-LABEL: strhi16_align1:1626; CHECK-BE:       @ %bb.0: @ %entry1627; CHECK-BE-NEXT:    vldrh.u16 q0, [r1]1628; CHECK-BE-NEXT:    vrev16.8 q0, q01629; CHECK-BE-NEXT:    vstrb.8 q0, [r0, #3]1630; CHECK-BE-NEXT:    adds r0, #31631; CHECK-BE-NEXT:    bx lr1632entry:1633  %z = getelementptr inbounds i8, ptr %y, i32 31634  %0 = load <8 x i16>, ptr %x, align 21635  store <8 x i16> %0, ptr %z, align 11636  ret ptr %z1637}1638 1639define ptr @strhi32_align1(ptr %y, ptr %x) {1640; CHECK-LABEL: strhi32_align1:1641; CHECK:       @ %bb.0: @ %entry1642; CHECK-NEXT:    .pad #81643; CHECK-NEXT:    sub sp, #81644; CHECK-NEXT:    vldrw.u32 q0, [r1]1645; CHECK-NEXT:    mov r1, sp1646; CHECK-NEXT:    vstrh.32 q0, [r1]1647; CHECK-NEXT:    ldrd r1, r2, [sp]1648; CHECK-NEXT:    str r1, [r0, #3]!1649; CHECK-NEXT:    str r2, [r0, #4]1650; CHECK-NEXT:    add sp, #81651; CHECK-NEXT:    bx lr1652entry:1653  %z = getelementptr inbounds i8, ptr %y, i32 31654  %0 = load <4 x i32>, ptr %x, align 41655  %1 = trunc <4 x i32> %0 to <4 x i16>1656  store <4 x i16> %1, ptr %z, align 11657  ret ptr %z1658}1659 1660define ptr @strf32_align1(ptr %y, ptr %x) {1661; CHECK-LE-LABEL: strf32_align1:1662; CHECK-LE:       @ %bb.0: @ %entry1663; CHECK-LE-NEXT:    vldrw.u32 q0, [r1]1664; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #3]!1665; CHECK-LE-NEXT:    bx lr1666;1667; CHECK-BE-LABEL: strf32_align1:1668; CHECK-BE:       @ %bb.0: @ %entry1669; CHECK-BE-NEXT:    vldrw.u32 q0, [r1]1670; CHECK-BE-NEXT:    vrev32.8 q0, q01671; CHECK-BE-NEXT:    vstrb.8 q0, [r0, #3]1672; CHECK-BE-NEXT:    adds r0, #31673; CHECK-BE-NEXT:    bx lr1674entry:1675  %z = getelementptr inbounds i8, ptr %y, i32 31676  %0 = load <4 x float>, ptr %x, align 41677  store <4 x float> %0, ptr %z, align 11678  ret ptr %z1679}1680 1681define ptr @strf16_align1(ptr %y, ptr %x) {1682; CHECK-LE-LABEL: strf16_align1:1683; CHECK-LE:       @ %bb.0: @ %entry1684; CHECK-LE-NEXT:    vldrh.u16 q0, [r1]1685; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #3]!1686; CHECK-LE-NEXT:    bx lr1687;1688; CHECK-BE-LABEL: strf16_align1:1689; CHECK-BE:       @ %bb.0: @ %entry1690; CHECK-BE-NEXT:    vldrh.u16 q0, [r1]1691; CHECK-BE-NEXT:    vrev16.8 q0, q01692; CHECK-BE-NEXT:    vstrb.8 q0, [r0, #3]1693; CHECK-BE-NEXT:    adds r0, #31694; CHECK-BE-NEXT:    bx lr1695entry:1696  %z = getelementptr inbounds i8, ptr %y, i32 31697  %0 = load <8 x half>, ptr %x, align 21698  store <8 x half> %0, ptr %z, align 11699  ret ptr %z1700}1701 1702define ptr @strf16_align8(ptr %y, ptr %x) {1703; CHECK-LE-LABEL: strf16_align8:1704; CHECK-LE:       @ %bb.0: @ %entry1705; CHECK-LE-NEXT:    vldrh.u16 q0, [r1]1706; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #16]!1707; CHECK-LE-NEXT:    bx lr1708;1709; CHECK-BE-LABEL: strf16_align8:1710; CHECK-BE:       @ %bb.0: @ %entry1711; CHECK-BE-NEXT:    vldrh.u16 q0, [r1]1712; CHECK-BE-NEXT:    vstrh.16 q0, [r0, #16]!1713; CHECK-BE-NEXT:    bx lr1714entry:1715  %z = getelementptr inbounds i8, ptr %y, i32 161716  %0 = load <8 x i16>, ptr %x, align 21717  store <8 x i16> %0, ptr %z, align 81718  ret ptr %z1719}1720