brintos

brintos / llvm-project-archived public Read only

0
0
Text · 44.1 KiB · 4f9ca25 Raw
1651 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 %x16}17 18define ptr @ldrwu32_3(ptr %x, ptr %y) {19; CHECK-LABEL: ldrwu32_3:20; CHECK:       @ %bb.0: @ %entry21; CHECK-NEXT:    adds r2, r0, #322; CHECK-NEXT:    vldrw.u32 q0, [r2]23; CHECK-NEXT:    vstrw.32 q0, [r1]24; CHECK-NEXT:    bx lr25entry:26  %z = getelementptr inbounds i8, ptr %x, i32 327  %0 = load <4 x i32>, ptr %z, align 428  store <4 x i32> %0, ptr %y, align 429  ret ptr %x30}31 32define ptr @ldrwu32_m4(ptr %x, ptr %y) {33; CHECK-LABEL: ldrwu32_m4:34; CHECK:       @ %bb.0: @ %entry35; CHECK-NEXT:    vldrw.u32 q0, [r0, #-4]36; CHECK-NEXT:    vstrw.32 q0, [r1]37; CHECK-NEXT:    bx lr38entry:39  %z = getelementptr inbounds i8, ptr %x, i32 -440  %0 = load <4 x i32>, ptr %z, align 441  store <4 x i32> %0, ptr %y, align 442  ret ptr %x43}44 45define ptr @ldrwu32_508(ptr %x, ptr %y) {46; CHECK-LABEL: ldrwu32_508:47; CHECK:       @ %bb.0: @ %entry48; CHECK-NEXT:    vldrw.u32 q0, [r0, #508]49; CHECK-NEXT:    vstrw.32 q0, [r1]50; CHECK-NEXT:    bx lr51entry:52  %z = getelementptr inbounds i8, ptr %x, i32 50853  %0 = load <4 x i32>, ptr %z, align 454  store <4 x i32> %0, ptr %y, align 455  ret ptr %x56}57 58define ptr @ldrwu32_512(ptr %x, ptr %y) {59; CHECK-LABEL: ldrwu32_512:60; CHECK:       @ %bb.0: @ %entry61; CHECK-NEXT:    add.w r2, r0, #51262; CHECK-NEXT:    vldrw.u32 q0, [r2]63; CHECK-NEXT:    vstrw.32 q0, [r1]64; CHECK-NEXT:    bx lr65entry:66  %z = getelementptr inbounds i8, ptr %x, i32 51267  %0 = load <4 x i32>, ptr %z, align 468  store <4 x i32> %0, ptr %y, align 469  ret ptr %x70}71 72define ptr @ldrwu32_m508(ptr %x, ptr %y) {73; CHECK-LABEL: ldrwu32_m508:74; CHECK:       @ %bb.0: @ %entry75; CHECK-NEXT:    vldrw.u32 q0, [r0, #-508]76; CHECK-NEXT:    vstrw.32 q0, [r1]77; CHECK-NEXT:    bx lr78entry:79  %z = getelementptr inbounds i8, ptr %x, i32 -50880  %0 = load <4 x i32>, ptr %z, align 481  store <4 x i32> %0, ptr %y, align 482  ret ptr %x83}84 85define ptr @ldrwu32_m512(ptr %x, ptr %y) {86; CHECK-LABEL: ldrwu32_m512:87; CHECK:       @ %bb.0: @ %entry88; CHECK-NEXT:    sub.w r2, r0, #51289; CHECK-NEXT:    vldrw.u32 q0, [r2]90; CHECK-NEXT:    vstrw.32 q0, [r1]91; CHECK-NEXT:    bx lr92entry:93  %z = getelementptr inbounds i8, ptr %x, i32 -51294  %0 = load <4 x i32>, ptr %z, align 495  store <4 x i32> %0, ptr %y, align 496  ret ptr %x97}98 99 100define ptr @ldrhu32_4(ptr %x, ptr %y) {101; CHECK-LABEL: ldrhu32_4:102; CHECK:       @ %bb.0: @ %entry103; CHECK-NEXT:    vldrh.u32 q0, [r0, #4]104; CHECK-NEXT:    vstrw.32 q0, [r1]105; CHECK-NEXT:    bx lr106entry:107  %z = getelementptr inbounds i8, ptr %x, i32 4108  %0 = load <4 x i16>, ptr %z, align 2109  %1 = zext <4 x i16> %0 to <4 x i32>110  store <4 x i32> %1, ptr %y, align 4111  ret ptr %x112}113 114define ptr @ldrhu32_3(ptr %x, ptr %y) {115; CHECK-LABEL: ldrhu32_3:116; CHECK:       @ %bb.0: @ %entry117; CHECK-NEXT:    adds r2, r0, #3118; CHECK-NEXT:    vldrh.u32 q0, [r2]119; CHECK-NEXT:    vstrw.32 q0, [r1]120; CHECK-NEXT:    bx lr121entry:122  %z = getelementptr inbounds i8, ptr %x, i32 3123  %0 = load <4 x i16>, ptr %z, align 2124  %1 = zext <4 x i16> %0 to <4 x i32>125  store <4 x i32> %1, ptr %y, align 4126  ret ptr %x127}128 129define ptr @ldrhu32_2(ptr %x, ptr %y) {130; CHECK-LABEL: ldrhu32_2:131; CHECK:       @ %bb.0: @ %entry132; CHECK-NEXT:    vldrh.u32 q0, [r0, #2]133; CHECK-NEXT:    vstrw.32 q0, [r1]134; CHECK-NEXT:    bx lr135entry:136  %z = getelementptr inbounds i8, ptr %x, i32 2137  %0 = load <4 x i16>, ptr %z, align 2138  %1 = zext <4 x i16> %0 to <4 x i32>139  store <4 x i32> %1, ptr %y, align 4140  ret ptr %x141}142 143define ptr @ldrhu32_254(ptr %x, ptr %y) {144; CHECK-LABEL: ldrhu32_254:145; CHECK:       @ %bb.0: @ %entry146; CHECK-NEXT:    vldrh.u32 q0, [r0, #254]147; CHECK-NEXT:    vstrw.32 q0, [r1]148; CHECK-NEXT:    bx lr149entry:150  %z = getelementptr inbounds i8, ptr %x, i32 254151  %0 = load <4 x i16>, ptr %z, align 2152  %1 = zext <4 x i16> %0 to <4 x i32>153  store <4 x i32> %1, ptr %y, align 4154  ret ptr %x155}156 157define ptr @ldrhu32_256(ptr %x, ptr %y) {158; CHECK-LABEL: ldrhu32_256:159; CHECK:       @ %bb.0: @ %entry160; CHECK-NEXT:    add.w r2, r0, #256161; CHECK-NEXT:    vldrh.u32 q0, [r2]162; CHECK-NEXT:    vstrw.32 q0, [r1]163; CHECK-NEXT:    bx lr164entry:165  %z = getelementptr inbounds i8, ptr %x, i32 256166  %0 = load <4 x i16>, ptr %z, align 2167  %1 = zext <4 x i16> %0 to <4 x i32>168  store <4 x i32> %1, ptr %y, align 4169  ret ptr %x170}171 172define ptr @ldrhu32_m254(ptr %x, ptr %y) {173; CHECK-LABEL: ldrhu32_m254:174; CHECK:       @ %bb.0: @ %entry175; CHECK-NEXT:    vldrh.u32 q0, [r0, #-254]176; CHECK-NEXT:    vstrw.32 q0, [r1]177; CHECK-NEXT:    bx lr178entry:179  %z = getelementptr inbounds i8, ptr %x, i32 -254180  %0 = load <4 x i16>, ptr %z, align 2181  %1 = zext <4 x i16> %0 to <4 x i32>182  store <4 x i32> %1, ptr %y, align 4183  ret ptr %x184}185 186define ptr @ldrhu32_m256(ptr %x, ptr %y) {187; CHECK-LABEL: ldrhu32_m256:188; CHECK:       @ %bb.0: @ %entry189; CHECK-NEXT:    sub.w r2, r0, #256190; CHECK-NEXT:    vldrh.u32 q0, [r2]191; CHECK-NEXT:    vstrw.32 q0, [r1]192; CHECK-NEXT:    bx lr193entry:194  %z = getelementptr inbounds i8, ptr %x, i32 -256195  %0 = load <4 x i16>, ptr %z, align 2196  %1 = zext <4 x i16> %0 to <4 x i32>197  store <4 x i32> %1, ptr %y, align 4198  ret ptr %x199}200 201 202define ptr @ldrhs32_4(ptr %x, ptr %y) {203; CHECK-LABEL: ldrhs32_4:204; CHECK:       @ %bb.0: @ %entry205; CHECK-NEXT:    vldrh.s32 q0, [r0, #4]206; CHECK-NEXT:    vstrw.32 q0, [r1]207; CHECK-NEXT:    bx lr208entry:209  %z = getelementptr inbounds i8, ptr %x, i32 4210  %0 = load <4 x i16>, ptr %z, align 2211  %1 = sext <4 x i16> %0 to <4 x i32>212  store <4 x i32> %1, ptr %y, align 4213  ret ptr %x214}215 216define ptr @ldrhs32_3(ptr %x, ptr %y) {217; CHECK-LABEL: ldrhs32_3:218; CHECK:       @ %bb.0: @ %entry219; CHECK-NEXT:    adds r2, r0, #3220; CHECK-NEXT:    vldrh.s32 q0, [r2]221; CHECK-NEXT:    vstrw.32 q0, [r1]222; CHECK-NEXT:    bx lr223entry:224  %z = getelementptr inbounds i8, ptr %x, i32 3225  %0 = load <4 x i16>, ptr %z, align 2226  %1 = sext <4 x i16> %0 to <4 x i32>227  store <4 x i32> %1, ptr %y, align 4228  ret ptr %x229}230 231define ptr @ldrhs32_2(ptr %x, ptr %y) {232; CHECK-LABEL: ldrhs32_2:233; CHECK:       @ %bb.0: @ %entry234; CHECK-NEXT:    vldrh.s32 q0, [r0, #2]235; CHECK-NEXT:    vstrw.32 q0, [r1]236; CHECK-NEXT:    bx lr237entry:238  %z = getelementptr inbounds i8, ptr %x, i32 2239  %0 = load <4 x i16>, ptr %z, align 2240  %1 = sext <4 x i16> %0 to <4 x i32>241  store <4 x i32> %1, ptr %y, align 4242  ret ptr %x243}244 245define ptr @ldrhs32_254(ptr %x, ptr %y) {246; CHECK-LABEL: ldrhs32_254:247; CHECK:       @ %bb.0: @ %entry248; CHECK-NEXT:    vldrh.s32 q0, [r0, #254]249; CHECK-NEXT:    vstrw.32 q0, [r1]250; CHECK-NEXT:    bx lr251entry:252  %z = getelementptr inbounds i8, ptr %x, i32 254253  %0 = load <4 x i16>, ptr %z, align 2254  %1 = sext <4 x i16> %0 to <4 x i32>255  store <4 x i32> %1, ptr %y, align 4256  ret ptr %x257}258 259define ptr @ldrhs32_256(ptr %x, ptr %y) {260; CHECK-LABEL: ldrhs32_256:261; CHECK:       @ %bb.0: @ %entry262; CHECK-NEXT:    add.w r2, r0, #256263; CHECK-NEXT:    vldrh.s32 q0, [r2]264; CHECK-NEXT:    vstrw.32 q0, [r1]265; CHECK-NEXT:    bx lr266entry:267  %z = getelementptr inbounds i8, ptr %x, i32 256268  %0 = load <4 x i16>, ptr %z, align 2269  %1 = sext <4 x i16> %0 to <4 x i32>270  store <4 x i32> %1, ptr %y, align 4271  ret ptr %x272}273 274define ptr @ldrhs32_m254(ptr %x, ptr %y) {275; CHECK-LABEL: ldrhs32_m254:276; CHECK:       @ %bb.0: @ %entry277; CHECK-NEXT:    vldrh.s32 q0, [r0, #-254]278; CHECK-NEXT:    vstrw.32 q0, [r1]279; CHECK-NEXT:    bx lr280entry:281  %z = getelementptr inbounds i8, ptr %x, i32 -254282  %0 = load <4 x i16>, ptr %z, align 2283  %1 = sext <4 x i16> %0 to <4 x i32>284  store <4 x i32> %1, ptr %y, align 4285  ret ptr %x286}287 288define ptr @ldrhs32_m256(ptr %x, ptr %y) {289; CHECK-LABEL: ldrhs32_m256:290; CHECK:       @ %bb.0: @ %entry291; CHECK-NEXT:    sub.w r2, r0, #256292; CHECK-NEXT:    vldrh.s32 q0, [r2]293; CHECK-NEXT:    vstrw.32 q0, [r1]294; CHECK-NEXT:    bx lr295entry:296  %z = getelementptr inbounds i8, ptr %x, i32 -256297  %0 = load <4 x i16>, ptr %z, align 2298  %1 = sext <4 x i16> %0 to <4 x i32>299  store <4 x i32> %1, ptr %y, align 4300  ret ptr %x301}302 303 304define ptr @ldrhu16_4(ptr %x, ptr %y) {305; CHECK-LABEL: ldrhu16_4:306; CHECK:       @ %bb.0: @ %entry307; CHECK-NEXT:    vldrh.u16 q0, [r0, #4]308; CHECK-NEXT:    vstrh.16 q0, [r1]309; CHECK-NEXT:    bx lr310entry:311  %z = getelementptr inbounds i8, ptr %x, i32 4312  %0 = load <8 x i16>, ptr %z, align 2313  store <8 x i16> %0, ptr %y, align 2314  ret ptr %x315}316 317define ptr @ldrhu16_3(ptr %x, ptr %y) {318; CHECK-LABEL: ldrhu16_3:319; CHECK:       @ %bb.0: @ %entry320; CHECK-NEXT:    adds r2, r0, #3321; CHECK-NEXT:    vldrh.u16 q0, [r2]322; CHECK-NEXT:    vstrh.16 q0, [r1]323; CHECK-NEXT:    bx lr324entry:325  %z = getelementptr inbounds i8, ptr %x, i32 3326  %0 = load <8 x i16>, ptr %z, align 2327  store <8 x i16> %0, ptr %y, align 2328  ret ptr %x329}330 331define ptr @ldrhu16_2(ptr %x, ptr %y) {332; CHECK-LABEL: ldrhu16_2:333; CHECK:       @ %bb.0: @ %entry334; CHECK-NEXT:    vldrh.u16 q0, [r0, #2]335; CHECK-NEXT:    vstrh.16 q0, [r1]336; CHECK-NEXT:    bx lr337entry:338  %z = getelementptr inbounds i8, ptr %x, i32 2339  %0 = load <8 x i16>, ptr %z, align 2340  store <8 x i16> %0, ptr %y, align 2341  ret ptr %x342}343 344define ptr @ldrhu16_254(ptr %x, ptr %y) {345; CHECK-LABEL: ldrhu16_254:346; CHECK:       @ %bb.0: @ %entry347; CHECK-NEXT:    vldrh.u16 q0, [r0, #254]348; CHECK-NEXT:    vstrh.16 q0, [r1]349; CHECK-NEXT:    bx lr350entry:351  %z = getelementptr inbounds i8, ptr %x, i32 254352  %0 = load <8 x i16>, ptr %z, align 2353  store <8 x i16> %0, ptr %y, align 2354  ret ptr %x355}356 357define ptr @ldrhu16_256(ptr %x, ptr %y) {358; CHECK-LABEL: ldrhu16_256:359; CHECK:       @ %bb.0: @ %entry360; CHECK-NEXT:    add.w r2, r0, #256361; CHECK-NEXT:    vldrh.u16 q0, [r2]362; CHECK-NEXT:    vstrh.16 q0, [r1]363; CHECK-NEXT:    bx lr364entry:365  %z = getelementptr inbounds i8, ptr %x, i32 256366  %0 = load <8 x i16>, ptr %z, align 2367  store <8 x i16> %0, ptr %y, align 2368  ret ptr %x369}370 371define ptr @ldrhu16_m254(ptr %x, ptr %y) {372; CHECK-LABEL: ldrhu16_m254:373; CHECK:       @ %bb.0: @ %entry374; CHECK-NEXT:    vldrh.u16 q0, [r0, #-254]375; CHECK-NEXT:    vstrh.16 q0, [r1]376; CHECK-NEXT:    bx lr377entry:378  %z = getelementptr inbounds i8, ptr %x, i32 -254379  %0 = load <8 x i16>, ptr %z, align 2380  store <8 x i16> %0, ptr %y, align 2381  ret ptr %x382}383 384define ptr @ldrhu16_m256(ptr %x, ptr %y) {385; CHECK-LABEL: ldrhu16_m256:386; CHECK:       @ %bb.0: @ %entry387; CHECK-NEXT:    sub.w r2, r0, #256388; CHECK-NEXT:    vldrh.u16 q0, [r2]389; CHECK-NEXT:    vstrh.16 q0, [r1]390; CHECK-NEXT:    bx lr391entry:392  %z = getelementptr inbounds i8, ptr %x, i32 -256393  %0 = load <8 x i16>, ptr %z, align 2394  store <8 x i16> %0, ptr %y, align 2395  ret ptr %x396}397 398 399define ptr @ldrbu32_4(ptr %x, ptr %y) {400; CHECK-LABEL: ldrbu32_4:401; CHECK:       @ %bb.0: @ %entry402; CHECK-NEXT:    vldrb.u32 q0, [r0, #4]403; CHECK-NEXT:    vstrw.32 q0, [r1]404; CHECK-NEXT:    bx lr405entry:406  %z = getelementptr inbounds i8, ptr %x, i32 4407  %0 = load <4 x i8>, ptr %z, align 1408  %1 = zext <4 x i8> %0 to <4 x i32>409  store <4 x i32> %1, ptr %y, align 4410  ret ptr %x411}412 413define ptr @ldrbu32_3(ptr %x, ptr %y) {414; CHECK-LABEL: ldrbu32_3:415; CHECK:       @ %bb.0: @ %entry416; CHECK-NEXT:    vldrb.u32 q0, [r0, #3]417; CHECK-NEXT:    vstrw.32 q0, [r1]418; CHECK-NEXT:    bx lr419entry:420  %z = getelementptr inbounds i8, ptr %x, i32 3421  %0 = load <4 x i8>, ptr %z, align 1422  %1 = zext <4 x i8> %0 to <4 x i32>423  store <4 x i32> %1, ptr %y, align 4424  ret ptr %x425}426 427define ptr @ldrbu32_127(ptr %x, ptr %y) {428; CHECK-LABEL: ldrbu32_127:429; CHECK:       @ %bb.0: @ %entry430; CHECK-NEXT:    vldrb.u32 q0, [r0, #127]431; CHECK-NEXT:    vstrw.32 q0, [r1]432; CHECK-NEXT:    bx lr433entry:434  %z = getelementptr inbounds i8, ptr %x, i32 127435  %0 = load <4 x i8>, ptr %z, align 1436  %1 = zext <4 x i8> %0 to <4 x i32>437  store <4 x i32> %1, ptr %y, align 4438  ret ptr %x439}440 441define ptr @ldrbu32_128(ptr %x, ptr %y) {442; CHECK-LABEL: ldrbu32_128:443; CHECK:       @ %bb.0: @ %entry444; CHECK-NEXT:    add.w r2, r0, #128445; CHECK-NEXT:    vldrb.u32 q0, [r2]446; CHECK-NEXT:    vstrw.32 q0, [r1]447; CHECK-NEXT:    bx lr448entry:449  %z = getelementptr inbounds i8, ptr %x, i32 128450  %0 = load <4 x i8>, ptr %z, align 1451  %1 = zext <4 x i8> %0 to <4 x i32>452  store <4 x i32> %1, ptr %y, align 4453  ret ptr %x454}455 456define ptr @ldrbu32_m127(ptr %x, ptr %y) {457; CHECK-LABEL: ldrbu32_m127:458; CHECK:       @ %bb.0: @ %entry459; CHECK-NEXT:    vldrb.u32 q0, [r0, #-127]460; CHECK-NEXT:    vstrw.32 q0, [r1]461; CHECK-NEXT:    bx lr462entry:463  %z = getelementptr inbounds i8, ptr %x, i32 -127464  %0 = load <4 x i8>, ptr %z, align 1465  %1 = zext <4 x i8> %0 to <4 x i32>466  store <4 x i32> %1, ptr %y, align 4467  ret ptr %x468}469 470define ptr @ldrbu32_m128(ptr %x, ptr %y) {471; CHECK-LABEL: ldrbu32_m128:472; CHECK:       @ %bb.0: @ %entry473; CHECK-NEXT:    sub.w r2, r0, #128474; CHECK-NEXT:    vldrb.u32 q0, [r2]475; CHECK-NEXT:    vstrw.32 q0, [r1]476; CHECK-NEXT:    bx lr477entry:478  %z = getelementptr inbounds i8, ptr %x, i32 -128479  %0 = load <4 x i8>, ptr %z, align 1480  %1 = zext <4 x i8> %0 to <4 x i32>481  store <4 x i32> %1, ptr %y, align 4482  ret ptr %x483}484 485 486define ptr @ldrbs32_4(ptr %x, ptr %y) {487; CHECK-LABEL: ldrbs32_4:488; CHECK:       @ %bb.0: @ %entry489; CHECK-NEXT:    vldrb.s32 q0, [r0, #4]490; CHECK-NEXT:    vstrw.32 q0, [r1]491; CHECK-NEXT:    bx lr492entry:493  %z = getelementptr inbounds i8, ptr %x, i32 4494  %0 = load <4 x i8>, ptr %z, align 1495  %1 = sext <4 x i8> %0 to <4 x i32>496  store <4 x i32> %1, ptr %y, align 4497  ret ptr %x498}499 500define ptr @ldrbs32_3(ptr %x, ptr %y) {501; CHECK-LABEL: ldrbs32_3:502; CHECK:       @ %bb.0: @ %entry503; CHECK-NEXT:    vldrb.s32 q0, [r0, #3]504; CHECK-NEXT:    vstrw.32 q0, [r1]505; CHECK-NEXT:    bx lr506entry:507  %z = getelementptr inbounds i8, ptr %x, i32 3508  %0 = load <4 x i8>, ptr %z, align 1509  %1 = sext <4 x i8> %0 to <4 x i32>510  store <4 x i32> %1, ptr %y, align 4511  ret ptr %x512}513 514define ptr @ldrbs32_127(ptr %x, ptr %y) {515; CHECK-LABEL: ldrbs32_127:516; CHECK:       @ %bb.0: @ %entry517; CHECK-NEXT:    vldrb.s32 q0, [r0, #127]518; CHECK-NEXT:    vstrw.32 q0, [r1]519; CHECK-NEXT:    bx lr520entry:521  %z = getelementptr inbounds i8, ptr %x, i32 127522  %0 = load <4 x i8>, ptr %z, align 1523  %1 = sext <4 x i8> %0 to <4 x i32>524  store <4 x i32> %1, ptr %y, align 4525  ret ptr %x526}527 528define ptr @ldrbs32_128(ptr %x, ptr %y) {529; CHECK-LABEL: ldrbs32_128:530; CHECK:       @ %bb.0: @ %entry531; CHECK-NEXT:    add.w r2, r0, #128532; CHECK-NEXT:    vldrb.s32 q0, [r2]533; CHECK-NEXT:    vstrw.32 q0, [r1]534; CHECK-NEXT:    bx lr535entry:536  %z = getelementptr inbounds i8, ptr %x, i32 128537  %0 = load <4 x i8>, ptr %z, align 1538  %1 = sext <4 x i8> %0 to <4 x i32>539  store <4 x i32> %1, ptr %y, align 4540  ret ptr %x541}542 543define ptr @ldrbs32_m127(ptr %x, ptr %y) {544; CHECK-LABEL: ldrbs32_m127:545; CHECK:       @ %bb.0: @ %entry546; CHECK-NEXT:    vldrb.s32 q0, [r0, #-127]547; CHECK-NEXT:    vstrw.32 q0, [r1]548; CHECK-NEXT:    bx lr549entry:550  %z = getelementptr inbounds i8, ptr %x, i32 -127551  %0 = load <4 x i8>, ptr %z, align 1552  %1 = sext <4 x i8> %0 to <4 x i32>553  store <4 x i32> %1, ptr %y, align 4554  ret ptr %x555}556 557define ptr @ldrbs32_m128(ptr %x, ptr %y) {558; CHECK-LABEL: ldrbs32_m128:559; CHECK:       @ %bb.0: @ %entry560; CHECK-NEXT:    sub.w r2, r0, #128561; CHECK-NEXT:    vldrb.s32 q0, [r2]562; CHECK-NEXT:    vstrw.32 q0, [r1]563; CHECK-NEXT:    bx lr564entry:565  %z = getelementptr inbounds i8, ptr %x, i32 -128566  %0 = load <4 x i8>, ptr %z, align 1567  %1 = sext <4 x i8> %0 to <4 x i32>568  store <4 x i32> %1, ptr %y, align 4569  ret ptr %x570}571 572 573define ptr @ldrbu16_4(ptr %x, ptr %y) {574; CHECK-LABEL: ldrbu16_4:575; CHECK:       @ %bb.0: @ %entry576; CHECK-NEXT:    vldrb.u16 q0, [r0, #4]577; CHECK-NEXT:    vstrh.16 q0, [r1]578; CHECK-NEXT:    bx lr579entry:580  %z = getelementptr inbounds i8, ptr %x, i32 4581  %0 = load <8 x i8>, ptr %z, align 1582  %1 = zext <8 x i8> %0 to <8 x i16>583  store <8 x i16> %1, ptr %y, align 2584  ret ptr %x585}586 587define ptr @ldrbu16_3(ptr %x, ptr %y) {588; CHECK-LABEL: ldrbu16_3:589; CHECK:       @ %bb.0: @ %entry590; CHECK-NEXT:    vldrb.u16 q0, [r0, #3]591; CHECK-NEXT:    vstrh.16 q0, [r1]592; CHECK-NEXT:    bx lr593entry:594  %z = getelementptr inbounds i8, ptr %x, i32 3595  %0 = load <8 x i8>, ptr %z, align 1596  %1 = zext <8 x i8> %0 to <8 x i16>597  store <8 x i16> %1, ptr %y, align 2598  ret ptr %x599}600 601define ptr @ldrbu16_127(ptr %x, ptr %y) {602; CHECK-LABEL: ldrbu16_127:603; CHECK:       @ %bb.0: @ %entry604; CHECK-NEXT:    vldrb.u16 q0, [r0, #127]605; CHECK-NEXT:    vstrh.16 q0, [r1]606; CHECK-NEXT:    bx lr607entry:608  %z = getelementptr inbounds i8, ptr %x, i32 127609  %0 = load <8 x i8>, ptr %z, align 1610  %1 = zext <8 x i8> %0 to <8 x i16>611  store <8 x i16> %1, ptr %y, align 2612  ret ptr %x613}614 615define ptr @ldrbu16_128(ptr %x, ptr %y) {616; CHECK-LABEL: ldrbu16_128:617; CHECK:       @ %bb.0: @ %entry618; CHECK-NEXT:    add.w r2, r0, #128619; CHECK-NEXT:    vldrb.u16 q0, [r2]620; CHECK-NEXT:    vstrh.16 q0, [r1]621; CHECK-NEXT:    bx lr622entry:623  %z = getelementptr inbounds i8, ptr %x, i32 128624  %0 = load <8 x i8>, ptr %z, align 1625  %1 = zext <8 x i8> %0 to <8 x i16>626  store <8 x i16> %1, ptr %y, align 2627  ret ptr %x628}629 630define ptr @ldrbu16_m127(ptr %x, ptr %y) {631; CHECK-LABEL: ldrbu16_m127:632; CHECK:       @ %bb.0: @ %entry633; CHECK-NEXT:    vldrb.u16 q0, [r0, #-127]634; CHECK-NEXT:    vstrh.16 q0, [r1]635; CHECK-NEXT:    bx lr636entry:637  %z = getelementptr inbounds i8, ptr %x, i32 -127638  %0 = load <8 x i8>, ptr %z, align 1639  %1 = zext <8 x i8> %0 to <8 x i16>640  store <8 x i16> %1, ptr %y, align 2641  ret ptr %x642}643 644define ptr @ldrbu16_m128(ptr %x, ptr %y) {645; CHECK-LABEL: ldrbu16_m128:646; CHECK:       @ %bb.0: @ %entry647; CHECK-NEXT:    sub.w r2, r0, #128648; CHECK-NEXT:    vldrb.u16 q0, [r2]649; CHECK-NEXT:    vstrh.16 q0, [r1]650; CHECK-NEXT:    bx lr651entry:652  %z = getelementptr inbounds i8, ptr %x, i32 -128653  %0 = load <8 x i8>, ptr %z, align 1654  %1 = zext <8 x i8> %0 to <8 x i16>655  store <8 x i16> %1, ptr %y, align 2656  ret ptr %x657}658 659 660define ptr @ldrbs16_4(ptr %x, ptr %y) {661; CHECK-LABEL: ldrbs16_4:662; CHECK:       @ %bb.0: @ %entry663; CHECK-NEXT:    vldrb.s16 q0, [r0, #4]664; CHECK-NEXT:    vstrh.16 q0, [r1]665; CHECK-NEXT:    bx lr666entry:667  %z = getelementptr inbounds i8, ptr %x, i32 4668  %0 = load <8 x i8>, ptr %z, align 1669  %1 = sext <8 x i8> %0 to <8 x i16>670  store <8 x i16> %1, ptr %y, align 2671  ret ptr %x672}673 674define ptr @ldrbs16_3(ptr %x, ptr %y) {675; CHECK-LABEL: ldrbs16_3:676; CHECK:       @ %bb.0: @ %entry677; CHECK-NEXT:    vldrb.s16 q0, [r0, #3]678; CHECK-NEXT:    vstrh.16 q0, [r1]679; CHECK-NEXT:    bx lr680entry:681  %z = getelementptr inbounds i8, ptr %x, i32 3682  %0 = load <8 x i8>, ptr %z, align 1683  %1 = sext <8 x i8> %0 to <8 x i16>684  store <8 x i16> %1, ptr %y, align 2685  ret ptr %x686}687 688define ptr @ldrbs16_127(ptr %x, ptr %y) {689; CHECK-LABEL: ldrbs16_127:690; CHECK:       @ %bb.0: @ %entry691; CHECK-NEXT:    vldrb.s16 q0, [r0, #127]692; CHECK-NEXT:    vstrh.16 q0, [r1]693; CHECK-NEXT:    bx lr694entry:695  %z = getelementptr inbounds i8, ptr %x, i32 127696  %0 = load <8 x i8>, ptr %z, align 1697  %1 = sext <8 x i8> %0 to <8 x i16>698  store <8 x i16> %1, ptr %y, align 2699  ret ptr %x700}701 702define ptr @ldrbs16_128(ptr %x, ptr %y) {703; CHECK-LABEL: ldrbs16_128:704; CHECK:       @ %bb.0: @ %entry705; CHECK-NEXT:    add.w r2, r0, #128706; CHECK-NEXT:    vldrb.s16 q0, [r2]707; CHECK-NEXT:    vstrh.16 q0, [r1]708; CHECK-NEXT:    bx lr709entry:710  %z = getelementptr inbounds i8, ptr %x, i32 128711  %0 = load <8 x i8>, ptr %z, align 1712  %1 = sext <8 x i8> %0 to <8 x i16>713  store <8 x i16> %1, ptr %y, align 2714  ret ptr %x715}716 717define ptr @ldrbs16_m127(ptr %x, ptr %y) {718; CHECK-LABEL: ldrbs16_m127:719; CHECK:       @ %bb.0: @ %entry720; CHECK-NEXT:    vldrb.s16 q0, [r0, #-127]721; CHECK-NEXT:    vstrh.16 q0, [r1]722; CHECK-NEXT:    bx lr723entry:724  %z = getelementptr inbounds i8, ptr %x, i32 -127725  %0 = load <8 x i8>, ptr %z, align 1726  %1 = sext <8 x i8> %0 to <8 x i16>727  store <8 x i16> %1, ptr %y, align 2728  ret ptr %x729}730 731define ptr @ldrbs16_m128(ptr %x, ptr %y) {732; CHECK-LABEL: ldrbs16_m128:733; CHECK:       @ %bb.0: @ %entry734; CHECK-NEXT:    sub.w r2, r0, #128735; CHECK-NEXT:    vldrb.s16 q0, [r2]736; CHECK-NEXT:    vstrh.16 q0, [r1]737; CHECK-NEXT:    bx lr738entry:739  %z = getelementptr inbounds i8, ptr %x, i32 -128740  %0 = load <8 x i8>, ptr %z, align 1741  %1 = sext <8 x i8> %0 to <8 x i16>742  store <8 x i16> %1, ptr %y, align 2743  ret ptr %x744}745 746 747define ptr @ldrbu8_4(ptr %x, ptr %y) {748; CHECK-LABEL: ldrbu8_4:749; CHECK:       @ %bb.0: @ %entry750; CHECK-NEXT:    vldrb.u8 q0, [r0, #4]751; CHECK-NEXT:    vstrb.8 q0, [r1]752; CHECK-NEXT:    bx lr753entry:754  %z = getelementptr inbounds i8, ptr %x, i32 4755  %0 = load <16 x i8>, ptr %z, align 1756  store <16 x i8> %0, ptr %y, align 1757  ret ptr %x758}759 760define ptr @ldrbu8_3(ptr %x, ptr %y) {761; CHECK-LABEL: ldrbu8_3:762; CHECK:       @ %bb.0: @ %entry763; CHECK-NEXT:    vldrb.u8 q0, [r0, #3]764; CHECK-NEXT:    vstrb.8 q0, [r1]765; CHECK-NEXT:    bx lr766entry:767  %z = getelementptr inbounds i8, ptr %x, i32 3768  %0 = load <16 x i8>, ptr %z, align 1769  store <16 x i8> %0, ptr %y, align 1770  ret ptr %x771}772 773define ptr @ldrbu8_127(ptr %x, ptr %y) {774; CHECK-LABEL: ldrbu8_127:775; CHECK:       @ %bb.0: @ %entry776; CHECK-NEXT:    vldrb.u8 q0, [r0, #127]777; CHECK-NEXT:    vstrb.8 q0, [r1]778; CHECK-NEXT:    bx lr779entry:780  %z = getelementptr inbounds i8, ptr %x, i32 127781  %0 = load <16 x i8>, ptr %z, align 1782  store <16 x i8> %0, ptr %y, align 1783  ret ptr %x784}785 786define ptr @ldrbu8_128(ptr %x, ptr %y) {787; CHECK-LABEL: ldrbu8_128:788; CHECK:       @ %bb.0: @ %entry789; CHECK-NEXT:    add.w r2, r0, #128790; CHECK-NEXT:    vldrb.u8 q0, [r2]791; CHECK-NEXT:    vstrb.8 q0, [r1]792; CHECK-NEXT:    bx lr793entry:794  %z = getelementptr inbounds i8, ptr %x, i32 128795  %0 = load <16 x i8>, ptr %z, align 1796  store <16 x i8> %0, ptr %y, align 1797  ret ptr %x798}799 800define ptr @ldrbu8_m127(ptr %x, ptr %y) {801; CHECK-LABEL: ldrbu8_m127:802; CHECK:       @ %bb.0: @ %entry803; CHECK-NEXT:    vldrb.u8 q0, [r0, #-127]804; CHECK-NEXT:    vstrb.8 q0, [r1]805; CHECK-NEXT:    bx lr806entry:807  %z = getelementptr inbounds i8, ptr %x, i32 -127808  %0 = load <16 x i8>, ptr %z, align 1809  store <16 x i8> %0, ptr %y, align 1810  ret ptr %x811}812 813define ptr @ldrbu8_m128(ptr %x, ptr %y) {814; CHECK-LABEL: ldrbu8_m128:815; CHECK:       @ %bb.0: @ %entry816; CHECK-NEXT:    sub.w r2, r0, #128817; CHECK-NEXT:    vldrb.u8 q0, [r2]818; CHECK-NEXT:    vstrb.8 q0, [r1]819; CHECK-NEXT:    bx lr820entry:821  %z = getelementptr inbounds i8, ptr %x, i32 -128822  %0 = load <16 x i8>, ptr %z, align 1823  store <16 x i8> %0, ptr %y, align 1824  ret ptr %x825}826 827 828define ptr @ldrwf32_4(ptr %x, ptr %y) {829; CHECK-LABEL: ldrwf32_4:830; CHECK:       @ %bb.0: @ %entry831; CHECK-NEXT:    vldrw.u32 q0, [r0, #4]832; CHECK-NEXT:    vstrw.32 q0, [r1]833; CHECK-NEXT:    bx lr834entry:835  %z = getelementptr inbounds i8, ptr %x, i32 4836  %0 = load <4 x float>, ptr %z, align 4837  store <4 x float> %0, ptr %y, align 4838  ret ptr %x839}840 841define ptr @ldrwf16_4(ptr %x, ptr %y) {842; CHECK-LABEL: ldrwf16_4:843; CHECK:       @ %bb.0: @ %entry844; CHECK-NEXT:    vldrh.u16 q0, [r0, #4]845; CHECK-NEXT:    vstrh.16 q0, [r1]846; CHECK-NEXT:    bx lr847entry:848  %z = getelementptr inbounds i8, ptr %x, i32 4849  %0 = load <8 x half>, ptr %z, align 2850  store <8 x half> %0, ptr %y, align 2851  ret ptr %x852}853 854define ptr @ldrwi32_align1(ptr %x, ptr %y) {855; CHECK-LE-LABEL: ldrwi32_align1:856; CHECK-LE:       @ %bb.0: @ %entry857; CHECK-LE-NEXT:    vldrb.u8 q0, [r0, #3]858; CHECK-LE-NEXT:    vstrw.32 q0, [r1]859; CHECK-LE-NEXT:    bx lr860;861; CHECK-BE-LABEL: ldrwi32_align1:862; CHECK-BE:       @ %bb.0: @ %entry863; CHECK-BE-NEXT:    vldrb.u8 q0, [r0, #3]864; CHECK-BE-NEXT:    vrev32.8 q0, q0865; CHECK-BE-NEXT:    vstrw.32 q0, [r1]866; CHECK-BE-NEXT:    bx lr867entry:868  %z = getelementptr inbounds i8, ptr %x, i32 3869  %0 = load <4 x i32>, ptr %z, align 1870  store <4 x i32> %0, ptr %y, align 4871  ret ptr %x872}873 874define ptr @ldrhi16_align1(ptr %x, ptr %y) {875; CHECK-LE-LABEL: ldrhi16_align1:876; CHECK-LE:       @ %bb.0: @ %entry877; CHECK-LE-NEXT:    vldrb.u8 q0, [r0, #3]878; CHECK-LE-NEXT:    vstrh.16 q0, [r1]879; CHECK-LE-NEXT:    bx lr880;881; CHECK-BE-LABEL: ldrhi16_align1:882; CHECK-BE:       @ %bb.0: @ %entry883; CHECK-BE-NEXT:    vldrb.u8 q0, [r0, #3]884; CHECK-BE-NEXT:    vrev16.8 q0, q0885; CHECK-BE-NEXT:    vstrh.16 q0, [r1]886; CHECK-BE-NEXT:    bx lr887entry:888  %z = getelementptr inbounds i8, ptr %x, i32 3889  %0 = load <8 x i16>, ptr %z, align 1890  store <8 x i16> %0, ptr %y, align 2891  ret ptr %x892}893 894define ptr @ldrhi32_align1(ptr %x, ptr %y) {895; CHECK-LABEL: ldrhi32_align1:896; CHECK:       @ %bb.0: @ %entry897; CHECK-NEXT:    .pad #8898; CHECK-NEXT:    sub sp, #8899; CHECK-NEXT:    ldr.w r3, [r0, #7]900; CHECK-NEXT:    ldr.w r2, [r0, #3]901; CHECK-NEXT:    strd r2, r3, [sp]902; CHECK-NEXT:    mov r2, sp903; CHECK-NEXT:    vldrh.s32 q0, [r2]904; CHECK-NEXT:    vstrw.32 q0, [r1]905; CHECK-NEXT:    add sp, #8906; CHECK-NEXT:    bx lr907entry:908  %z = getelementptr inbounds i8, ptr %x, i32 3909  %0 = load <4 x i16>, ptr %z, align 1910  %1 = sext <4 x i16> %0 to <4 x i32>911  store <4 x i32> %1, ptr %y, align 4912  ret ptr %x913}914 915define ptr @ldrf32_align1(ptr %x, ptr %y) {916; CHECK-LE-LABEL: ldrf32_align1:917; CHECK-LE:       @ %bb.0: @ %entry918; CHECK-LE-NEXT:    vldrb.u8 q0, [r0, #3]919; CHECK-LE-NEXT:    vstrw.32 q0, [r1]920; CHECK-LE-NEXT:    bx lr921;922; CHECK-BE-LABEL: ldrf32_align1:923; CHECK-BE:       @ %bb.0: @ %entry924; CHECK-BE-NEXT:    vldrb.u8 q0, [r0, #3]925; CHECK-BE-NEXT:    vrev32.8 q0, q0926; CHECK-BE-NEXT:    vstrw.32 q0, [r1]927; CHECK-BE-NEXT:    bx lr928entry:929  %z = getelementptr inbounds i8, ptr %x, i32 3930  %0 = load <4 x float>, ptr %z, align 1931  store <4 x float> %0, ptr %y, align 4932  ret ptr %x933}934 935define ptr @ldrf16_align1(ptr %x, ptr %y) {936; CHECK-LE-LABEL: ldrf16_align1:937; CHECK-LE:       @ %bb.0: @ %entry938; CHECK-LE-NEXT:    vldrb.u8 q0, [r0, #3]939; CHECK-LE-NEXT:    vstrh.16 q0, [r1]940; CHECK-LE-NEXT:    bx lr941;942; CHECK-BE-LABEL: ldrf16_align1:943; CHECK-BE:       @ %bb.0: @ %entry944; CHECK-BE-NEXT:    vldrb.u8 q0, [r0, #3]945; CHECK-BE-NEXT:    vrev16.8 q0, q0946; CHECK-BE-NEXT:    vstrh.16 q0, [r1]947; CHECK-BE-NEXT:    bx lr948entry:949  %z = getelementptr inbounds i8, ptr %x, i32 3950  %0 = load <8 x half>, ptr %z, align 1951  store <8 x half> %0, ptr %y, align 2952  ret ptr %x953}954 955define ptr @ldrh16_align8(ptr %x, ptr %y) {956; CHECK-LE-LABEL: ldrh16_align8:957; CHECK-LE:       @ %bb.0: @ %entry958; CHECK-LE-NEXT:    vldrw.u32 q0, [r0, #4]959; CHECK-LE-NEXT:    vstrh.16 q0, [r1]960; CHECK-LE-NEXT:    bx lr961;962; CHECK-BE-LABEL: ldrh16_align8:963; CHECK-BE:       @ %bb.0: @ %entry964; CHECK-BE-NEXT:    vldrh.u16 q0, [r0, #4]965; CHECK-BE-NEXT:    vstrh.16 q0, [r1]966; CHECK-BE-NEXT:    bx lr967entry:968  %z = getelementptr inbounds i8, ptr %x, i32 4969  %0 = load <8 x i16>, ptr %z, align 8970  store <8 x i16> %0, ptr %y, align 2971  ret ptr %x972}973 974 975 976 977 978define ptr @strw32_4(ptr %y, ptr %x) {979; CHECK-LABEL: strw32_4:980; CHECK:       @ %bb.0: @ %entry981; CHECK-NEXT:    vldrw.u32 q0, [r1]982; CHECK-NEXT:    vstrw.32 q0, [r0, #4]983; CHECK-NEXT:    bx lr984entry:985  %z = getelementptr inbounds i8, ptr %y, i32 4986  %0 = load <4 x i32>, ptr %x, align 4987  store <4 x i32> %0, ptr %z, align 4988  ret ptr %y989}990 991define ptr @strw32_3(ptr %y, ptr %x) {992; CHECK-LABEL: strw32_3:993; CHECK:       @ %bb.0: @ %entry994; CHECK-NEXT:    vldrw.u32 q0, [r1]995; CHECK-NEXT:    adds r1, r0, #3996; CHECK-NEXT:    vstrw.32 q0, [r1]997; CHECK-NEXT:    bx lr998entry:999  %z = getelementptr inbounds i8, ptr %y, i32 31000  %0 = load <4 x i32>, ptr %x, align 41001  store <4 x i32> %0, ptr %z, align 41002  ret ptr %y1003}1004 1005define ptr @strw32_m4(ptr %y, ptr %x) {1006; CHECK-LABEL: strw32_m4:1007; CHECK:       @ %bb.0: @ %entry1008; CHECK-NEXT:    vldrw.u32 q0, [r1]1009; CHECK-NEXT:    vstrw.32 q0, [r0, #-4]1010; CHECK-NEXT:    bx lr1011entry:1012  %z = getelementptr inbounds i8, ptr %y, i32 -41013  %0 = load <4 x i32>, ptr %x, align 41014  store <4 x i32> %0, ptr %z, align 41015  ret ptr %y1016}1017 1018define ptr @strw32_508(ptr %y, ptr %x) {1019; CHECK-LABEL: strw32_508:1020; CHECK:       @ %bb.0: @ %entry1021; CHECK-NEXT:    vldrw.u32 q0, [r1]1022; CHECK-NEXT:    vstrw.32 q0, [r0, #508]1023; CHECK-NEXT:    bx lr1024entry:1025  %z = getelementptr inbounds i8, ptr %y, i32 5081026  %0 = load <4 x i32>, ptr %x, align 41027  store <4 x i32> %0, ptr %z, align 41028  ret ptr %y1029}1030 1031define ptr @strw32_512(ptr %y, ptr %x) {1032; CHECK-LABEL: strw32_512:1033; CHECK:       @ %bb.0: @ %entry1034; CHECK-NEXT:    vldrw.u32 q0, [r1]1035; CHECK-NEXT:    add.w r1, r0, #5121036; CHECK-NEXT:    vstrw.32 q0, [r1]1037; CHECK-NEXT:    bx lr1038entry:1039  %z = getelementptr inbounds i8, ptr %y, i32 5121040  %0 = load <4 x i32>, ptr %x, align 41041  store <4 x i32> %0, ptr %z, align 41042  ret ptr %y1043}1044 1045define ptr @strw32_m508(ptr %y, ptr %x) {1046; CHECK-LABEL: strw32_m508:1047; CHECK:       @ %bb.0: @ %entry1048; CHECK-NEXT:    vldrw.u32 q0, [r1]1049; CHECK-NEXT:    vstrw.32 q0, [r0, #-508]1050; CHECK-NEXT:    bx lr1051entry:1052  %z = getelementptr inbounds i8, ptr %y, i32 -5081053  %0 = load <4 x i32>, ptr %x, align 41054  store <4 x i32> %0, ptr %z, align 41055  ret ptr %y1056}1057 1058define ptr @strw32_m512(ptr %y, ptr %x) {1059; CHECK-LABEL: strw32_m512:1060; CHECK:       @ %bb.0: @ %entry1061; CHECK-NEXT:    vldrw.u32 q0, [r1]1062; CHECK-NEXT:    sub.w r1, r0, #5121063; CHECK-NEXT:    vstrw.32 q0, [r1]1064; CHECK-NEXT:    bx lr1065entry:1066  %z = getelementptr inbounds i8, ptr %y, i32 -5121067  %0 = load <4 x i32>, ptr %x, align 41068  store <4 x i32> %0, ptr %z, align 41069  ret ptr %y1070}1071 1072 1073define ptr @strh32_4(ptr %y, ptr %x) {1074; CHECK-LABEL: strh32_4:1075; CHECK:       @ %bb.0: @ %entry1076; CHECK-NEXT:    vldrh.u32 q0, [r1]1077; CHECK-NEXT:    vstrh.32 q0, [r0, #4]1078; CHECK-NEXT:    bx lr1079entry:1080  %z = getelementptr inbounds i8, ptr %y, i32 41081  %0 = load <4 x i16>, ptr %x, align 21082  store <4 x i16> %0, ptr %z, align 21083  ret ptr %y1084}1085 1086define ptr @strh32_3(ptr %y, ptr %x) {1087; CHECK-LABEL: strh32_3:1088; CHECK:       @ %bb.0: @ %entry1089; CHECK-NEXT:    vldrh.u32 q0, [r1]1090; CHECK-NEXT:    adds r1, r0, #31091; CHECK-NEXT:    vstrh.32 q0, [r1]1092; CHECK-NEXT:    bx lr1093entry:1094  %z = getelementptr inbounds i8, ptr %y, i32 31095  %0 = load <4 x i16>, ptr %x, align 21096  store <4 x i16> %0, ptr %z, align 21097  ret ptr %y1098}1099 1100define ptr @strh32_2(ptr %y, ptr %x) {1101; CHECK-LABEL: strh32_2:1102; CHECK:       @ %bb.0: @ %entry1103; CHECK-NEXT:    vldrh.u32 q0, [r1]1104; CHECK-NEXT:    vstrh.32 q0, [r0, #2]1105; CHECK-NEXT:    bx lr1106entry:1107  %z = getelementptr inbounds i8, ptr %y, i32 21108  %0 = load <4 x i16>, ptr %x, align 21109  store <4 x i16> %0, ptr %z, align 21110  ret ptr %y1111}1112 1113define ptr @strh32_254(ptr %y, ptr %x) {1114; CHECK-LABEL: strh32_254:1115; CHECK:       @ %bb.0: @ %entry1116; CHECK-NEXT:    vldrh.u32 q0, [r1]1117; CHECK-NEXT:    vstrh.32 q0, [r0, #254]1118; CHECK-NEXT:    bx lr1119entry:1120  %z = getelementptr inbounds i8, ptr %y, i32 2541121  %0 = load <4 x i16>, ptr %x, align 21122  store <4 x i16> %0, ptr %z, align 21123  ret ptr %y1124}1125 1126define ptr @strh32_256(ptr %y, ptr %x) {1127; CHECK-LABEL: strh32_256:1128; CHECK:       @ %bb.0: @ %entry1129; CHECK-NEXT:    vldrh.u32 q0, [r1]1130; CHECK-NEXT:    add.w r1, r0, #2561131; CHECK-NEXT:    vstrh.32 q0, [r1]1132; CHECK-NEXT:    bx lr1133entry:1134  %z = getelementptr inbounds i8, ptr %y, i32 2561135  %0 = load <4 x i16>, ptr %x, align 21136  store <4 x i16> %0, ptr %z, align 21137  ret ptr %y1138}1139 1140define ptr @strh32_m254(ptr %y, ptr %x) {1141; CHECK-LABEL: strh32_m254:1142; CHECK:       @ %bb.0: @ %entry1143; CHECK-NEXT:    vldrh.u32 q0, [r1]1144; CHECK-NEXT:    vstrh.32 q0, [r0, #-254]1145; CHECK-NEXT:    bx lr1146entry:1147  %z = getelementptr inbounds i8, ptr %y, i32 -2541148  %0 = load <4 x i16>, ptr %x, align 21149  store <4 x i16> %0, ptr %z, align 21150  ret ptr %y1151}1152 1153define ptr @strh32_m256(ptr %y, ptr %x) {1154; CHECK-LABEL: strh32_m256:1155; CHECK:       @ %bb.0: @ %entry1156; CHECK-NEXT:    vldrh.u32 q0, [r1]1157; CHECK-NEXT:    sub.w r1, r0, #2561158; CHECK-NEXT:    vstrh.32 q0, [r1]1159; CHECK-NEXT:    bx lr1160entry:1161  %z = getelementptr inbounds i8, ptr %y, i32 -2561162  %0 = load <4 x i16>, ptr %x, align 21163  store <4 x i16> %0, ptr %z, align 21164  ret ptr %y1165}1166 1167 1168define ptr @strh16_4(ptr %y, ptr %x) {1169; CHECK-LABEL: strh16_4:1170; CHECK:       @ %bb.0: @ %entry1171; CHECK-NEXT:    vldrh.u16 q0, [r1]1172; CHECK-NEXT:    vstrh.16 q0, [r0, #4]1173; CHECK-NEXT:    bx lr1174entry:1175  %z = getelementptr inbounds i8, ptr %y, i32 41176  %0 = load <8 x i16>, ptr %x, align 21177  store <8 x i16> %0, ptr %z, align 21178  ret ptr %y1179}1180 1181define ptr @strh16_3(ptr %y, ptr %x) {1182; CHECK-LABEL: strh16_3:1183; CHECK:       @ %bb.0: @ %entry1184; CHECK-NEXT:    vldrh.u16 q0, [r1]1185; CHECK-NEXT:    adds r1, r0, #31186; CHECK-NEXT:    vstrh.16 q0, [r1]1187; CHECK-NEXT:    bx lr1188entry:1189  %z = getelementptr inbounds i8, ptr %y, i32 31190  %0 = load <8 x i16>, ptr %x, align 21191  store <8 x i16> %0, ptr %z, align 21192  ret ptr %y1193}1194 1195define ptr @strh16_2(ptr %y, ptr %x) {1196; CHECK-LABEL: strh16_2:1197; CHECK:       @ %bb.0: @ %entry1198; CHECK-NEXT:    vldrh.u16 q0, [r1]1199; CHECK-NEXT:    vstrh.16 q0, [r0, #2]1200; CHECK-NEXT:    bx lr1201entry:1202  %z = getelementptr inbounds i8, ptr %y, i32 21203  %0 = load <8 x i16>, ptr %x, align 21204  store <8 x i16> %0, ptr %z, align 21205  ret ptr %y1206}1207 1208define ptr @strh16_254(ptr %y, ptr %x) {1209; CHECK-LABEL: strh16_254:1210; CHECK:       @ %bb.0: @ %entry1211; CHECK-NEXT:    vldrh.u16 q0, [r1]1212; CHECK-NEXT:    vstrh.16 q0, [r0, #254]1213; CHECK-NEXT:    bx lr1214entry:1215  %z = getelementptr inbounds i8, ptr %y, i32 2541216  %0 = load <8 x i16>, ptr %x, align 21217  store <8 x i16> %0, ptr %z, align 21218  ret ptr %y1219}1220 1221define ptr @strh16_256(ptr %y, ptr %x) {1222; CHECK-LABEL: strh16_256:1223; CHECK:       @ %bb.0: @ %entry1224; CHECK-NEXT:    vldrh.u16 q0, [r1]1225; CHECK-NEXT:    add.w r1, r0, #2561226; CHECK-NEXT:    vstrh.16 q0, [r1]1227; CHECK-NEXT:    bx lr1228entry:1229  %z = getelementptr inbounds i8, ptr %y, i32 2561230  %0 = load <8 x i16>, ptr %x, align 21231  store <8 x i16> %0, ptr %z, align 21232  ret ptr %y1233}1234 1235define ptr @strh16_m254(ptr %y, ptr %x) {1236; CHECK-LABEL: strh16_m254:1237; CHECK:       @ %bb.0: @ %entry1238; CHECK-NEXT:    vldrh.u16 q0, [r1]1239; CHECK-NEXT:    vstrh.16 q0, [r0, #-254]1240; CHECK-NEXT:    bx lr1241entry:1242  %z = getelementptr inbounds i8, ptr %y, i32 -2541243  %0 = load <8 x i16>, ptr %x, align 21244  store <8 x i16> %0, ptr %z, align 21245  ret ptr %y1246}1247 1248define ptr @strh16_m256(ptr %y, ptr %x) {1249; CHECK-LABEL: strh16_m256:1250; CHECK:       @ %bb.0: @ %entry1251; CHECK-NEXT:    vldrh.u16 q0, [r1]1252; CHECK-NEXT:    sub.w r1, r0, #2561253; CHECK-NEXT:    vstrh.16 q0, [r1]1254; CHECK-NEXT:    bx lr1255entry:1256  %z = getelementptr inbounds i8, ptr %y, i32 -2561257  %0 = load <8 x i16>, ptr %x, align 21258  store <8 x i16> %0, ptr %z, align 21259  ret ptr %y1260}1261 1262 1263define ptr @strb32_4(ptr %y, ptr %x) {1264; CHECK-LABEL: strb32_4:1265; CHECK:       @ %bb.0: @ %entry1266; CHECK-NEXT:    vldrb.u32 q0, [r1]1267; CHECK-NEXT:    vstrb.32 q0, [r0, #4]1268; CHECK-NEXT:    bx lr1269entry:1270  %z = getelementptr inbounds i8, ptr %y, i32 41271  %0 = load <4 x i8>, ptr %x, align 11272  store <4 x i8> %0, ptr %z, align 11273  ret ptr %y1274}1275 1276define ptr @strb32_3(ptr %y, ptr %x) {1277; CHECK-LABEL: strb32_3:1278; CHECK:       @ %bb.0: @ %entry1279; CHECK-NEXT:    vldrb.u32 q0, [r1]1280; CHECK-NEXT:    vstrb.32 q0, [r0, #3]1281; CHECK-NEXT:    bx lr1282entry:1283  %z = getelementptr inbounds i8, ptr %y, i32 31284  %0 = load <4 x i8>, ptr %x, align 11285  store <4 x i8> %0, ptr %z, align 11286  ret ptr %y1287}1288 1289define ptr @strb32_127(ptr %y, ptr %x) {1290; CHECK-LABEL: strb32_127:1291; CHECK:       @ %bb.0: @ %entry1292; CHECK-NEXT:    vldrb.u32 q0, [r1]1293; CHECK-NEXT:    vstrb.32 q0, [r0, #127]1294; CHECK-NEXT:    bx lr1295entry:1296  %z = getelementptr inbounds i8, ptr %y, i32 1271297  %0 = load <4 x i8>, ptr %x, align 11298  store <4 x i8> %0, ptr %z, align 11299  ret ptr %y1300}1301 1302define ptr @strb32_128(ptr %y, ptr %x) {1303; CHECK-LABEL: strb32_128:1304; CHECK:       @ %bb.0: @ %entry1305; CHECK-NEXT:    vldrb.u32 q0, [r1]1306; CHECK-NEXT:    add.w r1, r0, #1281307; CHECK-NEXT:    vstrb.32 q0, [r1]1308; CHECK-NEXT:    bx lr1309entry:1310  %z = getelementptr inbounds i8, ptr %y, i32 1281311  %0 = load <4 x i8>, ptr %x, align 11312  store <4 x i8> %0, ptr %z, align 11313  ret ptr %y1314}1315 1316define ptr @strb32_m127(ptr %y, ptr %x) {1317; CHECK-LABEL: strb32_m127:1318; CHECK:       @ %bb.0: @ %entry1319; CHECK-NEXT:    vldrb.u32 q0, [r1]1320; CHECK-NEXT:    vstrb.32 q0, [r0, #-127]1321; CHECK-NEXT:    bx lr1322entry:1323  %z = getelementptr inbounds i8, ptr %y, i32 -1271324  %0 = load <4 x i8>, ptr %x, align 11325  store <4 x i8> %0, ptr %z, align 11326  ret ptr %y1327}1328 1329define ptr @strb32_m128(ptr %y, ptr %x) {1330; CHECK-LABEL: strb32_m128:1331; CHECK:       @ %bb.0: @ %entry1332; CHECK-NEXT:    vldrb.u32 q0, [r1]1333; CHECK-NEXT:    sub.w r1, r0, #1281334; CHECK-NEXT:    vstrb.32 q0, [r1]1335; CHECK-NEXT:    bx lr1336entry:1337  %z = getelementptr inbounds i8, ptr %y, i32 -1281338  %0 = load <4 x i8>, ptr %x, align 11339  store <4 x i8> %0, ptr %z, align 11340  ret ptr %y1341}1342 1343 1344define ptr @strb16_4(ptr %y, ptr %x) {1345; CHECK-LABEL: strb16_4:1346; CHECK:       @ %bb.0: @ %entry1347; CHECK-NEXT:    vldrb.u16 q0, [r1]1348; CHECK-NEXT:    vstrb.16 q0, [r0, #4]1349; CHECK-NEXT:    bx lr1350entry:1351  %z = getelementptr inbounds i8, ptr %y, i32 41352  %0 = load <8 x i8>, ptr %x, align 11353  store <8 x i8> %0, ptr %z, align 11354  ret ptr %y1355}1356 1357define ptr @strb16_3(ptr %y, ptr %x) {1358; CHECK-LABEL: strb16_3:1359; CHECK:       @ %bb.0: @ %entry1360; CHECK-NEXT:    vldrb.u16 q0, [r1]1361; CHECK-NEXT:    vstrb.16 q0, [r0, #3]1362; CHECK-NEXT:    bx lr1363entry:1364  %z = getelementptr inbounds i8, ptr %y, i32 31365  %0 = load <8 x i8>, ptr %x, align 11366  store <8 x i8> %0, ptr %z, align 11367  ret ptr %y1368}1369 1370define ptr @strb16_127(ptr %y, ptr %x) {1371; CHECK-LABEL: strb16_127:1372; CHECK:       @ %bb.0: @ %entry1373; CHECK-NEXT:    vldrb.u16 q0, [r1]1374; CHECK-NEXT:    vstrb.16 q0, [r0, #127]1375; CHECK-NEXT:    bx lr1376entry:1377  %z = getelementptr inbounds i8, ptr %y, i32 1271378  %0 = load <8 x i8>, ptr %x, align 11379  store <8 x i8> %0, ptr %z, align 11380  ret ptr %y1381}1382 1383define ptr @strb16_128(ptr %y, ptr %x) {1384; CHECK-LABEL: strb16_128:1385; CHECK:       @ %bb.0: @ %entry1386; CHECK-NEXT:    vldrb.u16 q0, [r1]1387; CHECK-NEXT:    add.w r1, r0, #1281388; CHECK-NEXT:    vstrb.16 q0, [r1]1389; CHECK-NEXT:    bx lr1390entry:1391  %z = getelementptr inbounds i8, ptr %y, i32 1281392  %0 = load <8 x i8>, ptr %x, align 11393  store <8 x i8> %0, ptr %z, align 11394  ret ptr %y1395}1396 1397define ptr @strb16_m127(ptr %y, ptr %x) {1398; CHECK-LABEL: strb16_m127:1399; CHECK:       @ %bb.0: @ %entry1400; CHECK-NEXT:    vldrb.u16 q0, [r1]1401; CHECK-NEXT:    vstrb.16 q0, [r0, #-127]1402; CHECK-NEXT:    bx lr1403entry:1404  %z = getelementptr inbounds i8, ptr %y, i32 -1271405  %0 = load <8 x i8>, ptr %x, align 11406  store <8 x i8> %0, ptr %z, align 11407  ret ptr %y1408}1409 1410define ptr @strb16_m128(ptr %y, ptr %x) {1411; CHECK-LABEL: strb16_m128:1412; CHECK:       @ %bb.0: @ %entry1413; CHECK-NEXT:    vldrb.u16 q0, [r1]1414; CHECK-NEXT:    sub.w r1, r0, #1281415; CHECK-NEXT:    vstrb.16 q0, [r1]1416; CHECK-NEXT:    bx lr1417entry:1418  %z = getelementptr inbounds i8, ptr %y, i32 -1281419  %0 = load <8 x i8>, ptr %x, align 11420  store <8 x i8> %0, ptr %z, align 11421  ret ptr %y1422}1423 1424 1425define ptr @strb8_4(ptr %y, ptr %x) {1426; CHECK-LABEL: strb8_4:1427; CHECK:       @ %bb.0: @ %entry1428; CHECK-NEXT:    vldrb.u8 q0, [r1]1429; CHECK-NEXT:    vstrb.8 q0, [r0, #4]1430; CHECK-NEXT:    bx lr1431entry:1432  %z = getelementptr inbounds i8, ptr %y, i32 41433  %0 = load <16 x i8>, ptr %x, align 11434  store <16 x i8> %0, ptr %z, align 11435  ret ptr %y1436}1437 1438define ptr @strb8_3(ptr %y, ptr %x) {1439; CHECK-LABEL: strb8_3:1440; CHECK:       @ %bb.0: @ %entry1441; CHECK-NEXT:    vldrb.u8 q0, [r1]1442; CHECK-NEXT:    vstrb.8 q0, [r0, #3]1443; CHECK-NEXT:    bx lr1444entry:1445  %z = getelementptr inbounds i8, ptr %y, i32 31446  %0 = load <16 x i8>, ptr %x, align 11447  store <16 x i8> %0, ptr %z, align 11448  ret ptr %y1449}1450 1451define ptr @strb8_127(ptr %y, ptr %x) {1452; CHECK-LABEL: strb8_127:1453; CHECK:       @ %bb.0: @ %entry1454; CHECK-NEXT:    vldrb.u8 q0, [r1]1455; CHECK-NEXT:    vstrb.8 q0, [r0, #127]1456; CHECK-NEXT:    bx lr1457entry:1458  %z = getelementptr inbounds i8, ptr %y, i32 1271459  %0 = load <16 x i8>, ptr %x, align 11460  store <16 x i8> %0, ptr %z, align 11461  ret ptr %y1462}1463 1464define ptr @strb8_128(ptr %y, ptr %x) {1465; CHECK-LABEL: strb8_128:1466; CHECK:       @ %bb.0: @ %entry1467; CHECK-NEXT:    vldrb.u8 q0, [r1]1468; CHECK-NEXT:    add.w r1, r0, #1281469; CHECK-NEXT:    vstrb.8 q0, [r1]1470; CHECK-NEXT:    bx lr1471entry:1472  %z = getelementptr inbounds i8, ptr %y, i32 1281473  %0 = load <16 x i8>, ptr %x, align 11474  store <16 x i8> %0, ptr %z, align 11475  ret ptr %y1476}1477 1478define ptr @strb8_m127(ptr %y, ptr %x) {1479; CHECK-LABEL: strb8_m127:1480; CHECK:       @ %bb.0: @ %entry1481; CHECK-NEXT:    vldrb.u8 q0, [r1]1482; CHECK-NEXT:    vstrb.8 q0, [r0, #-127]1483; CHECK-NEXT:    bx lr1484entry:1485  %z = getelementptr inbounds i8, ptr %y, i32 -1271486  %0 = load <16 x i8>, ptr %x, align 11487  store <16 x i8> %0, ptr %z, align 11488  ret ptr %y1489}1490 1491define ptr @strb8_m128(ptr %y, ptr %x) {1492; CHECK-LABEL: strb8_m128:1493; CHECK:       @ %bb.0: @ %entry1494; CHECK-NEXT:    vldrb.u8 q0, [r1]1495; CHECK-NEXT:    sub.w r1, r0, #1281496; CHECK-NEXT:    vstrb.8 q0, [r1]1497; CHECK-NEXT:    bx lr1498entry:1499  %z = getelementptr inbounds i8, ptr %y, i32 -1281500  %0 = load <16 x i8>, ptr %x, align 11501  store <16 x i8> %0, ptr %z, align 11502  ret ptr %y1503}1504 1505 1506define ptr @strf32_4(ptr %y, ptr %x) {1507; CHECK-LABEL: strf32_4:1508; CHECK:       @ %bb.0: @ %entry1509; CHECK-NEXT:    vldrw.u32 q0, [r1]1510; CHECK-NEXT:    vstrw.32 q0, [r0, #4]1511; CHECK-NEXT:    bx lr1512entry:1513  %z = getelementptr inbounds i8, ptr %y, i32 41514  %0 = load <4 x float>, ptr %x, align 41515  store <4 x float> %0, ptr %z, align 41516  ret ptr %y1517}1518 1519define ptr @strf16_4(ptr %y, ptr %x) {1520; CHECK-LABEL: strf16_4:1521; CHECK:       @ %bb.0: @ %entry1522; CHECK-NEXT:    vldrh.u16 q0, [r1]1523; CHECK-NEXT:    vstrh.16 q0, [r0, #4]1524; CHECK-NEXT:    bx lr1525entry:1526  %z = getelementptr inbounds i8, ptr %y, i32 41527  %0 = load <8 x half>, ptr %x, align 21528  store <8 x half> %0, ptr %z, align 21529  ret ptr %y1530}1531 1532define ptr @strwi32_align1(ptr %y, ptr %x) {1533; CHECK-LE-LABEL: strwi32_align1:1534; CHECK-LE:       @ %bb.0: @ %entry1535; CHECK-LE-NEXT:    vldrw.u32 q0, [r1]1536; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #3]1537; CHECK-LE-NEXT:    bx lr1538;1539; CHECK-BE-LABEL: strwi32_align1:1540; CHECK-BE:       @ %bb.0: @ %entry1541; CHECK-BE-NEXT:    vldrw.u32 q0, [r1]1542; CHECK-BE-NEXT:    vrev32.8 q0, q01543; CHECK-BE-NEXT:    vstrb.8 q0, [r0, #3]1544; CHECK-BE-NEXT:    bx lr1545entry:1546  %z = getelementptr inbounds i8, ptr %y, i32 31547  %0 = load <4 x i32>, ptr %x, align 41548  store <4 x i32> %0, ptr %z, align 11549  ret ptr %y1550}1551 1552define ptr @strhi16_align1(ptr %y, ptr %x) {1553; CHECK-LE-LABEL: strhi16_align1:1554; CHECK-LE:       @ %bb.0: @ %entry1555; CHECK-LE-NEXT:    vldrh.u16 q0, [r1]1556; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #3]1557; CHECK-LE-NEXT:    bx lr1558;1559; CHECK-BE-LABEL: strhi16_align1:1560; CHECK-BE:       @ %bb.0: @ %entry1561; CHECK-BE-NEXT:    vldrh.u16 q0, [r1]1562; CHECK-BE-NEXT:    vrev16.8 q0, q01563; CHECK-BE-NEXT:    vstrb.8 q0, [r0, #3]1564; CHECK-BE-NEXT:    bx lr1565entry:1566  %z = getelementptr inbounds i8, ptr %y, i32 31567  %0 = load <8 x i16>, ptr %x, align 21568  store <8 x i16> %0, ptr %z, align 11569  ret ptr %y1570}1571 1572define ptr @strhi32_align1(ptr %y, ptr %x) {1573; CHECK-LABEL: strhi32_align1:1574; CHECK:       @ %bb.0: @ %entry1575; CHECK-NEXT:    .pad #81576; CHECK-NEXT:    sub sp, #81577; CHECK-NEXT:    vldrw.u32 q0, [r1]1578; CHECK-NEXT:    mov r1, sp1579; CHECK-NEXT:    vstrh.32 q0, [r1]1580; CHECK-NEXT:    ldrd r1, r2, [sp]1581; CHECK-NEXT:    str.w r1, [r0, #3]1582; CHECK-NEXT:    str.w r2, [r0, #7]1583; CHECK-NEXT:    add sp, #81584; CHECK-NEXT:    bx lr1585entry:1586  %z = getelementptr inbounds i8, ptr %y, i32 31587  %0 = load <4 x i32>, ptr %x, align 41588  %1 = trunc <4 x i32> %0 to <4 x i16>1589  store <4 x i16> %1, ptr %z, align 11590  ret ptr %y1591}1592 1593define ptr @strf32_align1(ptr %y, ptr %x) {1594; CHECK-LE-LABEL: strf32_align1:1595; CHECK-LE:       @ %bb.0: @ %entry1596; CHECK-LE-NEXT:    vldrw.u32 q0, [r1]1597; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #3]1598; CHECK-LE-NEXT:    bx lr1599;1600; CHECK-BE-LABEL: strf32_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, #3]1605; CHECK-BE-NEXT:    bx lr1606entry:1607  %z = getelementptr inbounds i8, ptr %y, i32 31608  %0 = load <4 x float>, ptr %x, align 41609  store <4 x float> %0, ptr %z, align 11610  ret ptr %y1611}1612 1613define ptr @strf16_align1(ptr %y, ptr %x) {1614; CHECK-LE-LABEL: strf16_align1:1615; CHECK-LE:       @ %bb.0: @ %entry1616; CHECK-LE-NEXT:    vldrh.u16 q0, [r1]1617; CHECK-LE-NEXT:    vstrb.8 q0, [r0, #3]1618; CHECK-LE-NEXT:    bx lr1619;1620; CHECK-BE-LABEL: strf16_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, #3]1625; CHECK-BE-NEXT:    bx lr1626entry:1627  %z = getelementptr inbounds i8, ptr %y, i32 31628  %0 = load <8 x half>, ptr %x, align 21629  store <8 x half> %0, ptr %z, align 11630  ret ptr %y1631}1632 1633define ptr @strf16_align8(ptr %y, ptr %x) {1634; CHECK-LE-LABEL: strf16_align8:1635; CHECK-LE:       @ %bb.0: @ %entry1636; CHECK-LE-NEXT:    vldrh.u16 q0, [r1]1637; CHECK-LE-NEXT:    vstrw.32 q0, [r0, #16]1638; CHECK-LE-NEXT:    bx lr1639;1640; CHECK-BE-LABEL: strf16_align8:1641; CHECK-BE:       @ %bb.0: @ %entry1642; CHECK-BE-NEXT:    vldrh.u16 q0, [r1]1643; CHECK-BE-NEXT:    vstrh.16 q0, [r0, #16]1644; CHECK-BE-NEXT:    bx lr1645entry:1646  %z = getelementptr inbounds i8, ptr %y, i32 161647  %0 = load <8 x i16>, ptr %x, align 21648  store <8 x i16> %0, ptr %z, align 81649  ret ptr %y1650}1651