brintos

brintos / llvm-project-archived public Read only

0
0
Text · 78.7 KiB · 1934ef1 Raw
2381 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=CHECK3; RUN: llc -mtriple=thumbebv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK4 5define ptr @ldrwu32_4(ptr %x, ptr %y, ptr %m) {6; CHECK-LABEL: ldrwu32_4:7; CHECK:       @ %bb.0: @ %entry8; CHECK-NEXT:    vldrw.u32 q0, [r2]9; CHECK-NEXT:    vpt.i32 ne, q0, zr10; CHECK-NEXT:    vldrwt.u32 q0, [r0, #4]11; CHECK-NEXT:    vstrw.32 q0, [r1]12; CHECK-NEXT:    bx lr13entry:14  %z = getelementptr inbounds i8, ptr %x, i32 415  %mask = load <4 x i32>, ptr %m, align 416  %c = icmp ne <4 x i32> %mask, zeroinitializer17  %0 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x i32> undef)18  store <4 x i32> %0, ptr %y, align 419  ret ptr %x20}21 22define ptr @ldrwu32_3(ptr %x, ptr %y, ptr %m) {23; CHECK-LABEL: ldrwu32_3:24; CHECK:       @ %bb.0: @ %entry25; CHECK-NEXT:    vldrw.u32 q0, [r2]26; CHECK-NEXT:    adds r3, r0, #327; CHECK-NEXT:    vpt.i32 ne, q0, zr28; CHECK-NEXT:    vldrwt.u32 q0, [r3]29; CHECK-NEXT:    vstrw.32 q0, [r1]30; CHECK-NEXT:    bx lr31entry:32  %z = getelementptr inbounds i8, ptr %x, i32 333  %mask = load <4 x i32>, ptr %m, align 434  %c = icmp ne <4 x i32> %mask, zeroinitializer35  %0 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x i32> undef)36  store <4 x i32> %0, ptr %y, align 437  ret ptr %x38}39 40define ptr @ldrwu32_2(ptr %x, ptr %y, ptr %m) {41; CHECK-LABEL: ldrwu32_2:42; CHECK:       @ %bb.0: @ %entry43; CHECK-NEXT:    vldrw.u32 q0, [r2]44; CHECK-NEXT:    adds r3, r0, #245; CHECK-NEXT:    vpt.i32 ne, q0, zr46; CHECK-NEXT:    vldrwt.u32 q0, [r3]47; CHECK-NEXT:    vstrw.32 q0, [r1]48; CHECK-NEXT:    bx lr49entry:50  %z = getelementptr inbounds i8, ptr %x, i32 251  %mask = load <4 x i32>, ptr %m, align 452  %c = icmp ne <4 x i32> %mask, zeroinitializer53  %0 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x i32> undef)54  store <4 x i32> %0, ptr %y, align 455  ret ptr %x56}57 58define ptr @ldrwu32_508(ptr %x, ptr %y, ptr %m) {59; CHECK-LABEL: ldrwu32_508:60; CHECK:       @ %bb.0: @ %entry61; CHECK-NEXT:    vldrw.u32 q0, [r2]62; CHECK-NEXT:    vpt.i32 ne, q0, zr63; CHECK-NEXT:    vldrwt.u32 q0, [r0, #508]64; CHECK-NEXT:    vstrw.32 q0, [r1]65; CHECK-NEXT:    bx lr66entry:67  %z = getelementptr inbounds i8, ptr %x, i32 50868  %mask = load <4 x i32>, ptr %m, align 469  %c = icmp ne <4 x i32> %mask, zeroinitializer70  %0 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x i32> undef)71  store <4 x i32> %0, ptr %y, align 472  ret ptr %x73}74 75define ptr @ldrwu32_512(ptr %x, ptr %y, ptr %m) {76; CHECK-LABEL: ldrwu32_512:77; CHECK:       @ %bb.0: @ %entry78; CHECK-NEXT:    vldrw.u32 q0, [r2]79; CHECK-NEXT:    add.w r3, r0, #51280; CHECK-NEXT:    vpt.i32 ne, q0, zr81; CHECK-NEXT:    vldrwt.u32 q0, [r3]82; CHECK-NEXT:    vstrw.32 q0, [r1]83; CHECK-NEXT:    bx lr84entry:85  %z = getelementptr inbounds i8, ptr %x, i32 51286  %mask = load <4 x i32>, ptr %m, align 487  %c = icmp ne <4 x i32> %mask, zeroinitializer88  %0 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x i32> undef)89  store <4 x i32> %0, ptr %y, align 490  ret ptr %x91}92 93define ptr @ldrwu32_m508(ptr %x, ptr %y, ptr %m) {94; CHECK-LABEL: ldrwu32_m508:95; CHECK:       @ %bb.0: @ %entry96; CHECK-NEXT:    vldrw.u32 q0, [r2]97; CHECK-NEXT:    vpt.i32 ne, q0, zr98; CHECK-NEXT:    vldrwt.u32 q0, [r0, #-508]99; CHECK-NEXT:    vstrw.32 q0, [r1]100; CHECK-NEXT:    bx lr101entry:102  %z = getelementptr inbounds i8, ptr %x, i32 -508103  %mask = load <4 x i32>, ptr %m, align 4104  %c = icmp ne <4 x i32> %mask, zeroinitializer105  %0 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x i32> undef)106  store <4 x i32> %0, ptr %y, align 4107  ret ptr %x108}109 110define ptr @ldrwu32_m512(ptr %x, ptr %y, ptr %m) {111; CHECK-LABEL: ldrwu32_m512:112; CHECK:       @ %bb.0: @ %entry113; CHECK-NEXT:    vldrw.u32 q0, [r2]114; CHECK-NEXT:    sub.w r3, r0, #512115; CHECK-NEXT:    vpt.i32 ne, q0, zr116; CHECK-NEXT:    vldrwt.u32 q0, [r3]117; CHECK-NEXT:    vstrw.32 q0, [r1]118; CHECK-NEXT:    bx lr119entry:120  %z = getelementptr inbounds i8, ptr %x, i32 -512121  %mask = load <4 x i32>, ptr %m, align 4122  %c = icmp ne <4 x i32> %mask, zeroinitializer123  %0 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x i32> undef)124  store <4 x i32> %0, ptr %y, align 4125  ret ptr %x126}127 128define ptr @ldrhu32_4(ptr %x, ptr %y, ptr %m) {129; CHECK-LABEL: ldrhu32_4:130; CHECK:       @ %bb.0: @ %entry131; CHECK-NEXT:    vldrw.u32 q0, [r2]132; CHECK-NEXT:    vpt.i32 ne, q0, zr133; CHECK-NEXT:    vldrht.u32 q0, [r0, #4]134; CHECK-NEXT:    vstrw.32 q0, [r1]135; CHECK-NEXT:    bx lr136entry:137  %z = getelementptr inbounds i8, ptr %x, i32 4138  %mask = load <4 x i32>, ptr %m, align 4139  %c = icmp ne <4 x i32> %mask, zeroinitializer140  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)141  %1 = zext <4 x i16> %0 to <4 x i32>142  store <4 x i32> %1, ptr %y, align 4143  ret ptr %x144}145 146define ptr @ldrhu32_3(ptr %x, ptr %y, ptr %m) {147; CHECK-LABEL: ldrhu32_3:148; CHECK:       @ %bb.0: @ %entry149; CHECK-NEXT:    vldrw.u32 q0, [r2]150; CHECK-NEXT:    adds r3, r0, #3151; CHECK-NEXT:    vpt.i32 ne, q0, zr152; CHECK-NEXT:    vldrht.u32 q0, [r3]153; CHECK-NEXT:    vstrw.32 q0, [r1]154; CHECK-NEXT:    bx lr155entry:156  %z = getelementptr inbounds i8, ptr %x, i32 3157  %mask = load <4 x i32>, ptr %m, align 4158  %c = icmp ne <4 x i32> %mask, zeroinitializer159  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)160  %1 = zext <4 x i16> %0 to <4 x i32>161  store <4 x i32> %1, ptr %y, align 4162  ret ptr %x163}164 165define ptr @ldrhu32_2(ptr %x, ptr %y, ptr %m) {166; CHECK-LABEL: ldrhu32_2:167; CHECK:       @ %bb.0: @ %entry168; CHECK-NEXT:    vldrw.u32 q0, [r2]169; CHECK-NEXT:    vpt.i32 ne, q0, zr170; CHECK-NEXT:    vldrht.u32 q0, [r0, #2]171; CHECK-NEXT:    vstrw.32 q0, [r1]172; CHECK-NEXT:    bx lr173entry:174  %z = getelementptr inbounds i8, ptr %x, i32 2175  %mask = load <4 x i32>, ptr %m, align 4176  %c = icmp ne <4 x i32> %mask, zeroinitializer177  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)178  %1 = zext <4 x i16> %0 to <4 x i32>179  store <4 x i32> %1, ptr %y, align 4180  ret ptr %x181}182 183define ptr @ldrhu32_254(ptr %x, ptr %y, ptr %m) {184; CHECK-LABEL: ldrhu32_254:185; CHECK:       @ %bb.0: @ %entry186; CHECK-NEXT:    vldrw.u32 q0, [r2]187; CHECK-NEXT:    vpt.i32 ne, q0, zr188; CHECK-NEXT:    vldrht.u32 q0, [r0, #254]189; CHECK-NEXT:    vstrw.32 q0, [r1]190; CHECK-NEXT:    bx lr191entry:192  %z = getelementptr inbounds i8, ptr %x, i32 254193  %mask = load <4 x i32>, ptr %m, align 4194  %c = icmp ne <4 x i32> %mask, zeroinitializer195  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)196  %1 = zext <4 x i16> %0 to <4 x i32>197  store <4 x i32> %1, ptr %y, align 4198  ret ptr %x199}200 201define ptr @ldrhu32_256(ptr %x, ptr %y, ptr %m) {202; CHECK-LABEL: ldrhu32_256:203; CHECK:       @ %bb.0: @ %entry204; CHECK-NEXT:    vldrw.u32 q0, [r2]205; CHECK-NEXT:    add.w r3, r0, #256206; CHECK-NEXT:    vpt.i32 ne, q0, zr207; CHECK-NEXT:    vldrht.u32 q0, [r3]208; CHECK-NEXT:    vstrw.32 q0, [r1]209; CHECK-NEXT:    bx lr210entry:211  %z = getelementptr inbounds i8, ptr %x, i32 256212  %mask = load <4 x i32>, ptr %m, align 4213  %c = icmp ne <4 x i32> %mask, zeroinitializer214  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)215  %1 = zext <4 x i16> %0 to <4 x i32>216  store <4 x i32> %1, ptr %y, align 4217  ret ptr %x218}219 220define ptr @ldrhu32_m254(ptr %x, ptr %y, ptr %m) {221; CHECK-LABEL: ldrhu32_m254:222; CHECK:       @ %bb.0: @ %entry223; CHECK-NEXT:    vldrw.u32 q0, [r2]224; CHECK-NEXT:    vpt.i32 ne, q0, zr225; CHECK-NEXT:    vldrht.u32 q0, [r0, #-254]226; CHECK-NEXT:    vstrw.32 q0, [r1]227; CHECK-NEXT:    bx lr228entry:229  %z = getelementptr inbounds i8, ptr %x, i32 -254230  %mask = load <4 x i32>, ptr %m, align 4231  %c = icmp ne <4 x i32> %mask, zeroinitializer232  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)233  %1 = zext <4 x i16> %0 to <4 x i32>234  store <4 x i32> %1, ptr %y, align 4235  ret ptr %x236}237 238define ptr @ldrhu32_m256(ptr %x, ptr %y, ptr %m) {239; CHECK-LABEL: ldrhu32_m256:240; CHECK:       @ %bb.0: @ %entry241; CHECK-NEXT:    vldrw.u32 q0, [r2]242; CHECK-NEXT:    sub.w r3, r0, #256243; CHECK-NEXT:    vpt.i32 ne, q0, zr244; CHECK-NEXT:    vldrht.u32 q0, [r3]245; CHECK-NEXT:    vstrw.32 q0, [r1]246; CHECK-NEXT:    bx lr247entry:248  %z = getelementptr inbounds i8, ptr %x, i32 -256249  %mask = load <4 x i32>, ptr %m, align 4250  %c = icmp ne <4 x i32> %mask, zeroinitializer251  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)252  %1 = zext <4 x i16> %0 to <4 x i32>253  store <4 x i32> %1, ptr %y, align 4254  ret ptr %x255}256 257define ptr @ldrhs32_4(ptr %x, ptr %y, ptr %m) {258; CHECK-LABEL: ldrhs32_4:259; CHECK:       @ %bb.0: @ %entry260; CHECK-NEXT:    vldrw.u32 q0, [r2]261; CHECK-NEXT:    vpt.i32 ne, q0, zr262; CHECK-NEXT:    vldrht.s32 q0, [r0, #4]263; CHECK-NEXT:    vstrw.32 q0, [r1]264; CHECK-NEXT:    bx lr265entry:266  %z = getelementptr inbounds i8, ptr %x, i32 4267  %mask = load <4 x i32>, ptr %m, align 4268  %c = icmp ne <4 x i32> %mask, zeroinitializer269  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)270  %1 = sext <4 x i16> %0 to <4 x i32>271  store <4 x i32> %1, ptr %y, align 4272  ret ptr %x273}274 275define ptr @ldrhs32_3(ptr %x, ptr %y, ptr %m) {276; CHECK-LABEL: ldrhs32_3:277; CHECK:       @ %bb.0: @ %entry278; CHECK-NEXT:    vldrw.u32 q0, [r2]279; CHECK-NEXT:    adds r3, r0, #3280; CHECK-NEXT:    vpt.i32 ne, q0, zr281; CHECK-NEXT:    vldrht.s32 q0, [r3]282; CHECK-NEXT:    vstrw.32 q0, [r1]283; CHECK-NEXT:    bx lr284entry:285  %z = getelementptr inbounds i8, ptr %x, i32 3286  %mask = load <4 x i32>, ptr %m, align 4287  %c = icmp ne <4 x i32> %mask, zeroinitializer288  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)289  %1 = sext <4 x i16> %0 to <4 x i32>290  store <4 x i32> %1, ptr %y, align 4291  ret ptr %x292}293 294define ptr @ldrhs32_2(ptr %x, ptr %y, ptr %m) {295; CHECK-LABEL: ldrhs32_2:296; CHECK:       @ %bb.0: @ %entry297; CHECK-NEXT:    vldrw.u32 q0, [r2]298; CHECK-NEXT:    vpt.i32 ne, q0, zr299; CHECK-NEXT:    vldrht.s32 q0, [r0, #2]300; CHECK-NEXT:    vstrw.32 q0, [r1]301; CHECK-NEXT:    bx lr302entry:303  %z = getelementptr inbounds i8, ptr %x, i32 2304  %mask = load <4 x i32>, ptr %m, align 4305  %c = icmp ne <4 x i32> %mask, zeroinitializer306  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)307  %1 = sext <4 x i16> %0 to <4 x i32>308  store <4 x i32> %1, ptr %y, align 4309  ret ptr %x310}311 312define ptr @ldrhs32_254(ptr %x, ptr %y, ptr %m) {313; CHECK-LABEL: ldrhs32_254:314; CHECK:       @ %bb.0: @ %entry315; CHECK-NEXT:    vldrw.u32 q0, [r2]316; CHECK-NEXT:    vpt.i32 ne, q0, zr317; CHECK-NEXT:    vldrht.s32 q0, [r0, #254]318; CHECK-NEXT:    vstrw.32 q0, [r1]319; CHECK-NEXT:    bx lr320entry:321  %z = getelementptr inbounds i8, ptr %x, i32 254322  %mask = load <4 x i32>, ptr %m, align 4323  %c = icmp ne <4 x i32> %mask, zeroinitializer324  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)325  %1 = sext <4 x i16> %0 to <4 x i32>326  store <4 x i32> %1, ptr %y, align 4327  ret ptr %x328}329 330define ptr @ldrhs32_256(ptr %x, ptr %y, ptr %m) {331; CHECK-LABEL: ldrhs32_256:332; CHECK:       @ %bb.0: @ %entry333; CHECK-NEXT:    vldrw.u32 q0, [r2]334; CHECK-NEXT:    add.w r3, r0, #256335; CHECK-NEXT:    vpt.i32 ne, q0, zr336; CHECK-NEXT:    vldrht.s32 q0, [r3]337; CHECK-NEXT:    vstrw.32 q0, [r1]338; CHECK-NEXT:    bx lr339entry:340  %z = getelementptr inbounds i8, ptr %x, i32 256341  %mask = load <4 x i32>, ptr %m, align 4342  %c = icmp ne <4 x i32> %mask, zeroinitializer343  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)344  %1 = sext <4 x i16> %0 to <4 x i32>345  store <4 x i32> %1, ptr %y, align 4346  ret ptr %x347}348 349define ptr @ldrhs32_m254(ptr %x, ptr %y, ptr %m) {350; CHECK-LABEL: ldrhs32_m254:351; CHECK:       @ %bb.0: @ %entry352; CHECK-NEXT:    vldrw.u32 q0, [r2]353; CHECK-NEXT:    vpt.i32 ne, q0, zr354; CHECK-NEXT:    vldrht.s32 q0, [r0, #-254]355; CHECK-NEXT:    vstrw.32 q0, [r1]356; CHECK-NEXT:    bx lr357entry:358  %z = getelementptr inbounds i8, ptr %x, i32 -254359  %mask = load <4 x i32>, ptr %m, align 4360  %c = icmp ne <4 x i32> %mask, zeroinitializer361  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)362  %1 = sext <4 x i16> %0 to <4 x i32>363  store <4 x i32> %1, ptr %y, align 4364  ret ptr %x365}366 367define ptr @ldrhs32_m256(ptr %x, ptr %y, ptr %m) {368; CHECK-LABEL: ldrhs32_m256:369; CHECK:       @ %bb.0: @ %entry370; CHECK-NEXT:    vldrw.u32 q0, [r2]371; CHECK-NEXT:    sub.w r3, r0, #256372; CHECK-NEXT:    vpt.i32 ne, q0, zr373; CHECK-NEXT:    vldrht.s32 q0, [r3]374; CHECK-NEXT:    vstrw.32 q0, [r1]375; CHECK-NEXT:    bx lr376entry:377  %z = getelementptr inbounds i8, ptr %x, i32 -256378  %mask = load <4 x i32>, ptr %m, align 4379  %c = icmp ne <4 x i32> %mask, zeroinitializer380  %0 = call <4 x i16> @llvm.masked.load.v4i16.p0(ptr %z, i32 2, <4 x i1> %c, <4 x i16> undef)381  %1 = sext <4 x i16> %0 to <4 x i32>382  store <4 x i32> %1, ptr %y, align 4383  ret ptr %x384}385 386define ptr @ldrhu16_4(ptr %x, ptr %y, ptr %m) {387; CHECK-LABEL: ldrhu16_4:388; CHECK:       @ %bb.0: @ %entry389; CHECK-NEXT:    vldrh.u16 q0, [r2]390; CHECK-NEXT:    vpt.i16 ne, q0, zr391; CHECK-NEXT:    vldrht.u16 q0, [r0, #4]392; CHECK-NEXT:    vstrh.16 q0, [r1]393; CHECK-NEXT:    bx lr394entry:395  %z = getelementptr inbounds i8, ptr %x, i32 4396  %mask = load <8 x i16>, ptr %m, align 2397  %c = icmp ne <8 x i16> %mask, zeroinitializer398  %0 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x i16> undef)399  store <8 x i16> %0, ptr %y, align 2400  ret ptr %x401}402 403define ptr @ldrhu16_3(ptr %x, ptr %y, ptr %m) {404; CHECK-LABEL: ldrhu16_3:405; CHECK:       @ %bb.0: @ %entry406; CHECK-NEXT:    vldrh.u16 q0, [r2]407; CHECK-NEXT:    adds r3, r0, #3408; CHECK-NEXT:    vpt.i16 ne, q0, zr409; CHECK-NEXT:    vldrht.u16 q0, [r3]410; CHECK-NEXT:    vstrh.16 q0, [r1]411; CHECK-NEXT:    bx lr412entry:413  %z = getelementptr inbounds i8, ptr %x, i32 3414  %mask = load <8 x i16>, ptr %m, align 2415  %c = icmp ne <8 x i16> %mask, zeroinitializer416  %0 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x i16> undef)417  store <8 x i16> %0, ptr %y, align 2418  ret ptr %x419}420 421define ptr @ldrhu16_2(ptr %x, ptr %y, ptr %m) {422; CHECK-LABEL: ldrhu16_2:423; CHECK:       @ %bb.0: @ %entry424; CHECK-NEXT:    vldrh.u16 q0, [r2]425; CHECK-NEXT:    vpt.i16 ne, q0, zr426; CHECK-NEXT:    vldrht.u16 q0, [r0, #2]427; CHECK-NEXT:    vstrh.16 q0, [r1]428; CHECK-NEXT:    bx lr429entry:430  %z = getelementptr inbounds i8, ptr %x, i32 2431  %mask = load <8 x i16>, ptr %m, align 2432  %c = icmp ne <8 x i16> %mask, zeroinitializer433  %0 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x i16> undef)434  store <8 x i16> %0, ptr %y, align 2435  ret ptr %x436}437 438define ptr @ldrhu16_254(ptr %x, ptr %y, ptr %m) {439; CHECK-LABEL: ldrhu16_254:440; CHECK:       @ %bb.0: @ %entry441; CHECK-NEXT:    vldrh.u16 q0, [r2]442; CHECK-NEXT:    vpt.i16 ne, q0, zr443; CHECK-NEXT:    vldrht.u16 q0, [r0, #254]444; CHECK-NEXT:    vstrh.16 q0, [r1]445; CHECK-NEXT:    bx lr446entry:447  %z = getelementptr inbounds i8, ptr %x, i32 254448  %mask = load <8 x i16>, ptr %m, align 2449  %c = icmp ne <8 x i16> %mask, zeroinitializer450  %0 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x i16> undef)451  store <8 x i16> %0, ptr %y, align 2452  ret ptr %x453}454 455define ptr @ldrhu16_256(ptr %x, ptr %y, ptr %m) {456; CHECK-LABEL: ldrhu16_256:457; CHECK:       @ %bb.0: @ %entry458; CHECK-NEXT:    vldrh.u16 q0, [r2]459; CHECK-NEXT:    add.w r3, r0, #256460; CHECK-NEXT:    vpt.i16 ne, q0, zr461; CHECK-NEXT:    vldrht.u16 q0, [r3]462; CHECK-NEXT:    vstrh.16 q0, [r1]463; CHECK-NEXT:    bx lr464entry:465  %z = getelementptr inbounds i8, ptr %x, i32 256466  %mask = load <8 x i16>, ptr %m, align 2467  %c = icmp ne <8 x i16> %mask, zeroinitializer468  %0 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x i16> undef)469  store <8 x i16> %0, ptr %y, align 2470  ret ptr %x471}472 473define ptr @ldrhu16_m254(ptr %x, ptr %y, ptr %m) {474; CHECK-LABEL: ldrhu16_m254:475; CHECK:       @ %bb.0: @ %entry476; CHECK-NEXT:    vldrh.u16 q0, [r2]477; CHECK-NEXT:    vpt.i16 ne, q0, zr478; CHECK-NEXT:    vldrht.u16 q0, [r0, #-254]479; CHECK-NEXT:    vstrh.16 q0, [r1]480; CHECK-NEXT:    bx lr481entry:482  %z = getelementptr inbounds i8, ptr %x, i32 -254483  %mask = load <8 x i16>, ptr %m, align 2484  %c = icmp ne <8 x i16> %mask, zeroinitializer485  %0 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x i16> undef)486  store <8 x i16> %0, ptr %y, align 2487  ret ptr %x488}489 490define ptr @ldrhu16_m256(ptr %x, ptr %y, ptr %m) {491; CHECK-LABEL: ldrhu16_m256:492; CHECK:       @ %bb.0: @ %entry493; CHECK-NEXT:    vldrh.u16 q0, [r2]494; CHECK-NEXT:    sub.w r3, r0, #256495; CHECK-NEXT:    vpt.i16 ne, q0, zr496; CHECK-NEXT:    vldrht.u16 q0, [r3]497; CHECK-NEXT:    vstrh.16 q0, [r1]498; CHECK-NEXT:    bx lr499entry:500  %z = getelementptr inbounds i8, ptr %x, i32 -256501  %mask = load <8 x i16>, ptr %m, align 2502  %c = icmp ne <8 x i16> %mask, zeroinitializer503  %0 = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x i16> undef)504  store <8 x i16> %0, ptr %y, align 2505  ret ptr %x506}507 508define ptr @ldrbu32_4(ptr %x, ptr %y, ptr %m) {509; CHECK-LABEL: ldrbu32_4:510; CHECK:       @ %bb.0: @ %entry511; CHECK-NEXT:    vldrw.u32 q0, [r2]512; CHECK-NEXT:    vpt.i32 ne, q0, zr513; CHECK-NEXT:    vldrbt.u32 q0, [r0, #4]514; CHECK-NEXT:    vstrw.32 q0, [r1]515; CHECK-NEXT:    bx lr516entry:517  %z = getelementptr inbounds i8, ptr %x, i32 4518  %mask = load <4 x i32>, ptr %m, align 4519  %c = icmp ne <4 x i32> %mask, zeroinitializer520  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)521  %1 = zext <4 x i8> %0 to <4 x i32>522  store <4 x i32> %1, ptr %y, align 4523  ret ptr %x524}525 526define ptr @ldrbu32_3(ptr %x, ptr %y, ptr %m) {527; CHECK-LABEL: ldrbu32_3:528; CHECK:       @ %bb.0: @ %entry529; CHECK-NEXT:    vldrw.u32 q0, [r2]530; CHECK-NEXT:    vpt.i32 ne, q0, zr531; CHECK-NEXT:    vldrbt.u32 q0, [r0, #3]532; CHECK-NEXT:    vstrw.32 q0, [r1]533; CHECK-NEXT:    bx lr534entry:535  %z = getelementptr inbounds i8, ptr %x, i32 3536  %mask = load <4 x i32>, ptr %m, align 4537  %c = icmp ne <4 x i32> %mask, zeroinitializer538  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)539  %1 = zext <4 x i8> %0 to <4 x i32>540  store <4 x i32> %1, ptr %y, align 4541  ret ptr %x542}543 544define ptr @ldrbu32_2(ptr %x, ptr %y, ptr %m) {545; CHECK-LABEL: ldrbu32_2:546; CHECK:       @ %bb.0: @ %entry547; CHECK-NEXT:    vldrw.u32 q0, [r2]548; CHECK-NEXT:    vpt.i32 ne, q0, zr549; CHECK-NEXT:    vldrbt.u32 q0, [r0, #2]550; CHECK-NEXT:    vstrw.32 q0, [r1]551; CHECK-NEXT:    bx lr552entry:553  %z = getelementptr inbounds i8, ptr %x, i32 2554  %mask = load <4 x i32>, ptr %m, align 4555  %c = icmp ne <4 x i32> %mask, zeroinitializer556  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)557  %1 = zext <4 x i8> %0 to <4 x i32>558  store <4 x i32> %1, ptr %y, align 4559  ret ptr %x560}561 562define ptr @ldrbu32_127(ptr %x, ptr %y, ptr %m) {563; CHECK-LABEL: ldrbu32_127:564; CHECK:       @ %bb.0: @ %entry565; CHECK-NEXT:    vldrw.u32 q0, [r2]566; CHECK-NEXT:    vpt.i32 ne, q0, zr567; CHECK-NEXT:    vldrbt.u32 q0, [r0, #127]568; CHECK-NEXT:    vstrw.32 q0, [r1]569; CHECK-NEXT:    bx lr570entry:571  %z = getelementptr inbounds i8, ptr %x, i32 127572  %mask = load <4 x i32>, ptr %m, align 4573  %c = icmp ne <4 x i32> %mask, zeroinitializer574  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)575  %1 = zext <4 x i8> %0 to <4 x i32>576  store <4 x i32> %1, ptr %y, align 4577  ret ptr %x578}579 580define ptr @ldrbu32_128(ptr %x, ptr %y, ptr %m) {581; CHECK-LABEL: ldrbu32_128:582; CHECK:       @ %bb.0: @ %entry583; CHECK-NEXT:    vldrw.u32 q0, [r2]584; CHECK-NEXT:    add.w r3, r0, #128585; CHECK-NEXT:    vpt.i32 ne, q0, zr586; CHECK-NEXT:    vldrbt.u32 q0, [r3]587; CHECK-NEXT:    vstrw.32 q0, [r1]588; CHECK-NEXT:    bx lr589entry:590  %z = getelementptr inbounds i8, ptr %x, i32 128591  %mask = load <4 x i32>, ptr %m, align 4592  %c = icmp ne <4 x i32> %mask, zeroinitializer593  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)594  %1 = zext <4 x i8> %0 to <4 x i32>595  store <4 x i32> %1, ptr %y, align 4596  ret ptr %x597}598 599define ptr @ldrbu32_m127(ptr %x, ptr %y, ptr %m) {600; CHECK-LABEL: ldrbu32_m127:601; CHECK:       @ %bb.0: @ %entry602; CHECK-NEXT:    vldrw.u32 q0, [r2]603; CHECK-NEXT:    vpt.i32 ne, q0, zr604; CHECK-NEXT:    vldrbt.u32 q0, [r0, #-127]605; CHECK-NEXT:    vstrw.32 q0, [r1]606; CHECK-NEXT:    bx lr607entry:608  %z = getelementptr inbounds i8, ptr %x, i32 -127609  %mask = load <4 x i32>, ptr %m, align 4610  %c = icmp ne <4 x i32> %mask, zeroinitializer611  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)612  %1 = zext <4 x i8> %0 to <4 x i32>613  store <4 x i32> %1, ptr %y, align 4614  ret ptr %x615}616 617define ptr @ldrbu32_m128(ptr %x, ptr %y, ptr %m) {618; CHECK-LABEL: ldrbu32_m128:619; CHECK:       @ %bb.0: @ %entry620; CHECK-NEXT:    vldrw.u32 q0, [r2]621; CHECK-NEXT:    sub.w r3, r0, #128622; CHECK-NEXT:    vpt.i32 ne, q0, zr623; CHECK-NEXT:    vldrbt.u32 q0, [r3]624; CHECK-NEXT:    vstrw.32 q0, [r1]625; CHECK-NEXT:    bx lr626entry:627  %z = getelementptr inbounds i8, ptr %x, i32 -128628  %mask = load <4 x i32>, ptr %m, align 4629  %c = icmp ne <4 x i32> %mask, zeroinitializer630  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)631  %1 = zext <4 x i8> %0 to <4 x i32>632  store <4 x i32> %1, ptr %y, align 4633  ret ptr %x634}635 636define ptr @ldrbs32_4(ptr %x, ptr %y, ptr %m) {637; CHECK-LABEL: ldrbs32_4:638; CHECK:       @ %bb.0: @ %entry639; CHECK-NEXT:    vldrw.u32 q0, [r2]640; CHECK-NEXT:    vpt.i32 ne, q0, zr641; CHECK-NEXT:    vldrbt.s32 q0, [r0, #4]642; CHECK-NEXT:    vstrw.32 q0, [r1]643; CHECK-NEXT:    bx lr644entry:645  %z = getelementptr inbounds i8, ptr %x, i32 4646  %mask = load <4 x i32>, ptr %m, align 4647  %c = icmp ne <4 x i32> %mask, zeroinitializer648  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)649  %1 = sext <4 x i8> %0 to <4 x i32>650  store <4 x i32> %1, ptr %y, align 4651  ret ptr %x652}653 654define ptr @ldrbs32_3(ptr %x, ptr %y, ptr %m) {655; CHECK-LABEL: ldrbs32_3:656; CHECK:       @ %bb.0: @ %entry657; CHECK-NEXT:    vldrw.u32 q0, [r2]658; CHECK-NEXT:    vpt.i32 ne, q0, zr659; CHECK-NEXT:    vldrbt.s32 q0, [r0, #3]660; CHECK-NEXT:    vstrw.32 q0, [r1]661; CHECK-NEXT:    bx lr662entry:663  %z = getelementptr inbounds i8, ptr %x, i32 3664  %mask = load <4 x i32>, ptr %m, align 4665  %c = icmp ne <4 x i32> %mask, zeroinitializer666  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)667  %1 = sext <4 x i8> %0 to <4 x i32>668  store <4 x i32> %1, ptr %y, align 4669  ret ptr %x670}671 672define ptr @ldrbs32_2(ptr %x, ptr %y, ptr %m) {673; CHECK-LABEL: ldrbs32_2:674; CHECK:       @ %bb.0: @ %entry675; CHECK-NEXT:    vldrw.u32 q0, [r2]676; CHECK-NEXT:    vpt.i32 ne, q0, zr677; CHECK-NEXT:    vldrbt.s32 q0, [r0, #2]678; CHECK-NEXT:    vstrw.32 q0, [r1]679; CHECK-NEXT:    bx lr680entry:681  %z = getelementptr inbounds i8, ptr %x, i32 2682  %mask = load <4 x i32>, ptr %m, align 4683  %c = icmp ne <4 x i32> %mask, zeroinitializer684  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)685  %1 = sext <4 x i8> %0 to <4 x i32>686  store <4 x i32> %1, ptr %y, align 4687  ret ptr %x688}689 690define ptr @ldrbs32_127(ptr %x, ptr %y, ptr %m) {691; CHECK-LABEL: ldrbs32_127:692; CHECK:       @ %bb.0: @ %entry693; CHECK-NEXT:    vldrw.u32 q0, [r2]694; CHECK-NEXT:    vpt.i32 ne, q0, zr695; CHECK-NEXT:    vldrbt.s32 q0, [r0, #127]696; CHECK-NEXT:    vstrw.32 q0, [r1]697; CHECK-NEXT:    bx lr698entry:699  %z = getelementptr inbounds i8, ptr %x, i32 127700  %mask = load <4 x i32>, ptr %m, align 4701  %c = icmp ne <4 x i32> %mask, zeroinitializer702  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)703  %1 = sext <4 x i8> %0 to <4 x i32>704  store <4 x i32> %1, ptr %y, align 4705  ret ptr %x706}707 708define ptr @ldrbs32_128(ptr %x, ptr %y, ptr %m) {709; CHECK-LABEL: ldrbs32_128:710; CHECK:       @ %bb.0: @ %entry711; CHECK-NEXT:    vldrw.u32 q0, [r2]712; CHECK-NEXT:    add.w r3, r0, #128713; CHECK-NEXT:    vpt.i32 ne, q0, zr714; CHECK-NEXT:    vldrbt.s32 q0, [r3]715; CHECK-NEXT:    vstrw.32 q0, [r1]716; CHECK-NEXT:    bx lr717entry:718  %z = getelementptr inbounds i8, ptr %x, i32 128719  %mask = load <4 x i32>, ptr %m, align 4720  %c = icmp ne <4 x i32> %mask, zeroinitializer721  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)722  %1 = sext <4 x i8> %0 to <4 x i32>723  store <4 x i32> %1, ptr %y, align 4724  ret ptr %x725}726 727define ptr @ldrbs32_m127(ptr %x, ptr %y, ptr %m) {728; CHECK-LABEL: ldrbs32_m127:729; CHECK:       @ %bb.0: @ %entry730; CHECK-NEXT:    vldrw.u32 q0, [r2]731; CHECK-NEXT:    vpt.i32 ne, q0, zr732; CHECK-NEXT:    vldrbt.s32 q0, [r0, #-127]733; CHECK-NEXT:    vstrw.32 q0, [r1]734; CHECK-NEXT:    bx lr735entry:736  %z = getelementptr inbounds i8, ptr %x, i32 -127737  %mask = load <4 x i32>, ptr %m, align 4738  %c = icmp ne <4 x i32> %mask, zeroinitializer739  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)740  %1 = sext <4 x i8> %0 to <4 x i32>741  store <4 x i32> %1, ptr %y, align 4742  ret ptr %x743}744 745define ptr @ldrbs32_m128(ptr %x, ptr %y, ptr %m) {746; CHECK-LABEL: ldrbs32_m128:747; CHECK:       @ %bb.0: @ %entry748; CHECK-NEXT:    vldrw.u32 q0, [r2]749; CHECK-NEXT:    sub.w r3, r0, #128750; CHECK-NEXT:    vpt.i32 ne, q0, zr751; CHECK-NEXT:    vldrbt.s32 q0, [r3]752; CHECK-NEXT:    vstrw.32 q0, [r1]753; CHECK-NEXT:    bx lr754entry:755  %z = getelementptr inbounds i8, ptr %x, i32 -128756  %mask = load <4 x i32>, ptr %m, align 4757  %c = icmp ne <4 x i32> %mask, zeroinitializer758  %0 = call <4 x i8> @llvm.masked.load.v4i8.p0(ptr %z, i32 1, <4 x i1> %c, <4 x i8> undef)759  %1 = sext <4 x i8> %0 to <4 x i32>760  store <4 x i32> %1, ptr %y, align 4761  ret ptr %x762}763 764define ptr @ldrbu16_4(ptr %x, ptr %y, ptr %m) {765; CHECK-LABEL: ldrbu16_4:766; CHECK:       @ %bb.0: @ %entry767; CHECK-NEXT:    vldrh.u16 q0, [r2]768; CHECK-NEXT:    vpt.i16 ne, q0, zr769; CHECK-NEXT:    vldrbt.u16 q0, [r0, #4]770; CHECK-NEXT:    vstrh.16 q0, [r1]771; CHECK-NEXT:    bx lr772entry:773  %z = getelementptr inbounds i8, ptr %x, i32 4774  %mask = load <8 x i16>, ptr %m, align 2775  %c = icmp ne <8 x i16> %mask, zeroinitializer776  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)777  %1 = zext <8 x i8> %0 to <8 x i16>778  store <8 x i16> %1, ptr %y, align 2779  ret ptr %x780}781 782define ptr @ldrbu16_3(ptr %x, ptr %y, ptr %m) {783; CHECK-LABEL: ldrbu16_3:784; CHECK:       @ %bb.0: @ %entry785; CHECK-NEXT:    vldrh.u16 q0, [r2]786; CHECK-NEXT:    vpt.i16 ne, q0, zr787; CHECK-NEXT:    vldrbt.u16 q0, [r0, #3]788; CHECK-NEXT:    vstrh.16 q0, [r1]789; CHECK-NEXT:    bx lr790entry:791  %z = getelementptr inbounds i8, ptr %x, i32 3792  %mask = load <8 x i16>, ptr %m, align 2793  %c = icmp ne <8 x i16> %mask, zeroinitializer794  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)795  %1 = zext <8 x i8> %0 to <8 x i16>796  store <8 x i16> %1, ptr %y, align 2797  ret ptr %x798}799 800define ptr @ldrbu16_2(ptr %x, ptr %y, ptr %m) {801; CHECK-LABEL: ldrbu16_2:802; CHECK:       @ %bb.0: @ %entry803; CHECK-NEXT:    vldrh.u16 q0, [r2]804; CHECK-NEXT:    vpt.i16 ne, q0, zr805; CHECK-NEXT:    vldrbt.u16 q0, [r0, #2]806; CHECK-NEXT:    vstrh.16 q0, [r1]807; CHECK-NEXT:    bx lr808entry:809  %z = getelementptr inbounds i8, ptr %x, i32 2810  %mask = load <8 x i16>, ptr %m, align 2811  %c = icmp ne <8 x i16> %mask, zeroinitializer812  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)813  %1 = zext <8 x i8> %0 to <8 x i16>814  store <8 x i16> %1, ptr %y, align 2815  ret ptr %x816}817 818define ptr @ldrbu16_127(ptr %x, ptr %y, ptr %m) {819; CHECK-LABEL: ldrbu16_127:820; CHECK:       @ %bb.0: @ %entry821; CHECK-NEXT:    vldrh.u16 q0, [r2]822; CHECK-NEXT:    vpt.i16 ne, q0, zr823; CHECK-NEXT:    vldrbt.u16 q0, [r0, #127]824; CHECK-NEXT:    vstrh.16 q0, [r1]825; CHECK-NEXT:    bx lr826entry:827  %z = getelementptr inbounds i8, ptr %x, i32 127828  %mask = load <8 x i16>, ptr %m, align 2829  %c = icmp ne <8 x i16> %mask, zeroinitializer830  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)831  %1 = zext <8 x i8> %0 to <8 x i16>832  store <8 x i16> %1, ptr %y, align 2833  ret ptr %x834}835 836define ptr @ldrbu16_128(ptr %x, ptr %y, ptr %m) {837; CHECK-LABEL: ldrbu16_128:838; CHECK:       @ %bb.0: @ %entry839; CHECK-NEXT:    vldrh.u16 q0, [r2]840; CHECK-NEXT:    add.w r3, r0, #128841; CHECK-NEXT:    vpt.i16 ne, q0, zr842; CHECK-NEXT:    vldrbt.u16 q0, [r3]843; CHECK-NEXT:    vstrh.16 q0, [r1]844; CHECK-NEXT:    bx lr845entry:846  %z = getelementptr inbounds i8, ptr %x, i32 128847  %mask = load <8 x i16>, ptr %m, align 2848  %c = icmp ne <8 x i16> %mask, zeroinitializer849  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)850  %1 = zext <8 x i8> %0 to <8 x i16>851  store <8 x i16> %1, ptr %y, align 2852  ret ptr %x853}854 855define ptr @ldrbu16_m127(ptr %x, ptr %y, ptr %m) {856; CHECK-LABEL: ldrbu16_m127:857; CHECK:       @ %bb.0: @ %entry858; CHECK-NEXT:    vldrh.u16 q0, [r2]859; CHECK-NEXT:    vpt.i16 ne, q0, zr860; CHECK-NEXT:    vldrbt.u16 q0, [r0, #-127]861; CHECK-NEXT:    vstrh.16 q0, [r1]862; CHECK-NEXT:    bx lr863entry:864  %z = getelementptr inbounds i8, ptr %x, i32 -127865  %mask = load <8 x i16>, ptr %m, align 2866  %c = icmp ne <8 x i16> %mask, zeroinitializer867  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)868  %1 = zext <8 x i8> %0 to <8 x i16>869  store <8 x i16> %1, ptr %y, align 2870  ret ptr %x871}872 873define ptr @ldrbu16_m128(ptr %x, ptr %y, ptr %m) {874; CHECK-LABEL: ldrbu16_m128:875; CHECK:       @ %bb.0: @ %entry876; CHECK-NEXT:    vldrh.u16 q0, [r2]877; CHECK-NEXT:    sub.w r3, r0, #128878; CHECK-NEXT:    vpt.i16 ne, q0, zr879; CHECK-NEXT:    vldrbt.u16 q0, [r3]880; CHECK-NEXT:    vstrh.16 q0, [r1]881; CHECK-NEXT:    bx lr882entry:883  %z = getelementptr inbounds i8, ptr %x, i32 -128884  %mask = load <8 x i16>, ptr %m, align 2885  %c = icmp ne <8 x i16> %mask, zeroinitializer886  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)887  %1 = zext <8 x i8> %0 to <8 x i16>888  store <8 x i16> %1, ptr %y, align 2889  ret ptr %x890}891 892define ptr @ldrbs16_4(ptr %x, ptr %y, ptr %m) {893; CHECK-LABEL: ldrbs16_4:894; CHECK:       @ %bb.0: @ %entry895; CHECK-NEXT:    vldrh.u16 q0, [r2]896; CHECK-NEXT:    vpt.i16 ne, q0, zr897; CHECK-NEXT:    vldrbt.s16 q0, [r0, #4]898; CHECK-NEXT:    vstrh.16 q0, [r1]899; CHECK-NEXT:    bx lr900entry:901  %z = getelementptr inbounds i8, ptr %x, i32 4902  %mask = load <8 x i16>, ptr %m, align 2903  %c = icmp ne <8 x i16> %mask, zeroinitializer904  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)905  %1 = sext <8 x i8> %0 to <8 x i16>906  store <8 x i16> %1, ptr %y, align 2907  ret ptr %x908}909 910define ptr @ldrbs16_3(ptr %x, ptr %y, ptr %m) {911; CHECK-LABEL: ldrbs16_3:912; CHECK:       @ %bb.0: @ %entry913; CHECK-NEXT:    vldrh.u16 q0, [r2]914; CHECK-NEXT:    vpt.i16 ne, q0, zr915; CHECK-NEXT:    vldrbt.s16 q0, [r0, #3]916; CHECK-NEXT:    vstrh.16 q0, [r1]917; CHECK-NEXT:    bx lr918entry:919  %z = getelementptr inbounds i8, ptr %x, i32 3920  %mask = load <8 x i16>, ptr %m, align 2921  %c = icmp ne <8 x i16> %mask, zeroinitializer922  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)923  %1 = sext <8 x i8> %0 to <8 x i16>924  store <8 x i16> %1, ptr %y, align 2925  ret ptr %x926}927 928define ptr @ldrbs16_2(ptr %x, ptr %y, ptr %m) {929; CHECK-LABEL: ldrbs16_2:930; CHECK:       @ %bb.0: @ %entry931; CHECK-NEXT:    vldrh.u16 q0, [r2]932; CHECK-NEXT:    vpt.i16 ne, q0, zr933; CHECK-NEXT:    vldrbt.s16 q0, [r0, #2]934; CHECK-NEXT:    vstrh.16 q0, [r1]935; CHECK-NEXT:    bx lr936entry:937  %z = getelementptr inbounds i8, ptr %x, i32 2938  %mask = load <8 x i16>, ptr %m, align 2939  %c = icmp ne <8 x i16> %mask, zeroinitializer940  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)941  %1 = sext <8 x i8> %0 to <8 x i16>942  store <8 x i16> %1, ptr %y, align 2943  ret ptr %x944}945 946define ptr @ldrbs16_127(ptr %x, ptr %y, ptr %m) {947; CHECK-LABEL: ldrbs16_127:948; CHECK:       @ %bb.0: @ %entry949; CHECK-NEXT:    vldrh.u16 q0, [r2]950; CHECK-NEXT:    vpt.i16 ne, q0, zr951; CHECK-NEXT:    vldrbt.s16 q0, [r0, #127]952; CHECK-NEXT:    vstrh.16 q0, [r1]953; CHECK-NEXT:    bx lr954entry:955  %z = getelementptr inbounds i8, ptr %x, i32 127956  %mask = load <8 x i16>, ptr %m, align 2957  %c = icmp ne <8 x i16> %mask, zeroinitializer958  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)959  %1 = sext <8 x i8> %0 to <8 x i16>960  store <8 x i16> %1, ptr %y, align 2961  ret ptr %x962}963 964define ptr @ldrbs16_128(ptr %x, ptr %y, ptr %m) {965; CHECK-LABEL: ldrbs16_128:966; CHECK:       @ %bb.0: @ %entry967; CHECK-NEXT:    vldrh.u16 q0, [r2]968; CHECK-NEXT:    add.w r3, r0, #128969; CHECK-NEXT:    vpt.i16 ne, q0, zr970; CHECK-NEXT:    vldrbt.s16 q0, [r3]971; CHECK-NEXT:    vstrh.16 q0, [r1]972; CHECK-NEXT:    bx lr973entry:974  %z = getelementptr inbounds i8, ptr %x, i32 128975  %mask = load <8 x i16>, ptr %m, align 2976  %c = icmp ne <8 x i16> %mask, zeroinitializer977  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)978  %1 = sext <8 x i8> %0 to <8 x i16>979  store <8 x i16> %1, ptr %y, align 2980  ret ptr %x981}982 983define ptr @ldrbs16_m127(ptr %x, ptr %y, ptr %m) {984; CHECK-LABEL: ldrbs16_m127:985; CHECK:       @ %bb.0: @ %entry986; CHECK-NEXT:    vldrh.u16 q0, [r2]987; CHECK-NEXT:    vpt.i16 ne, q0, zr988; CHECK-NEXT:    vldrbt.s16 q0, [r0, #-127]989; CHECK-NEXT:    vstrh.16 q0, [r1]990; CHECK-NEXT:    bx lr991entry:992  %z = getelementptr inbounds i8, ptr %x, i32 -127993  %mask = load <8 x i16>, ptr %m, align 2994  %c = icmp ne <8 x i16> %mask, zeroinitializer995  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)996  %1 = sext <8 x i8> %0 to <8 x i16>997  store <8 x i16> %1, ptr %y, align 2998  ret ptr %x999}1000 1001define ptr @ldrbs16_m128(ptr %x, ptr %y, ptr %m) {1002; CHECK-LABEL: ldrbs16_m128:1003; CHECK:       @ %bb.0: @ %entry1004; CHECK-NEXT:    vldrh.u16 q0, [r2]1005; CHECK-NEXT:    sub.w r3, r0, #1281006; CHECK-NEXT:    vpt.i16 ne, q0, zr1007; CHECK-NEXT:    vldrbt.s16 q0, [r3]1008; CHECK-NEXT:    vstrh.16 q0, [r1]1009; CHECK-NEXT:    bx lr1010entry:1011  %z = getelementptr inbounds i8, ptr %x, i32 -1281012  %mask = load <8 x i16>, ptr %m, align 21013  %c = icmp ne <8 x i16> %mask, zeroinitializer1014  %0 = call <8 x i8> @llvm.masked.load.v8i8.p0(ptr %z, i32 1, <8 x i1> %c, <8 x i8> undef)1015  %1 = sext <8 x i8> %0 to <8 x i16>1016  store <8 x i16> %1, ptr %y, align 21017  ret ptr %x1018}1019 1020define ptr @ldrbu8_4(ptr %x, ptr %y, ptr %m) {1021; CHECK-LABEL: ldrbu8_4:1022; CHECK:       @ %bb.0: @ %entry1023; CHECK-NEXT:    vldrb.u8 q0, [r2]1024; CHECK-NEXT:    vpt.i8 ne, q0, zr1025; CHECK-NEXT:    vldrbt.u8 q0, [r0, #4]1026; CHECK-NEXT:    vstrb.8 q0, [r1]1027; CHECK-NEXT:    bx lr1028entry:1029  %z = getelementptr inbounds i8, ptr %x, i32 41030  %mask = load <16 x i8>, ptr %m, align 11031  %c = icmp ne <16 x i8> %mask, zeroinitializer1032  %0 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %z, i32 1, <16 x i1> %c, <16 x i8> undef)1033  store <16 x i8> %0, ptr %y, align 11034  ret ptr %x1035}1036 1037define ptr @ldrbu8_3(ptr %x, ptr %y, ptr %m) {1038; CHECK-LABEL: ldrbu8_3:1039; CHECK:       @ %bb.0: @ %entry1040; CHECK-NEXT:    vldrb.u8 q0, [r2]1041; CHECK-NEXT:    vpt.i8 ne, q0, zr1042; CHECK-NEXT:    vldrbt.u8 q0, [r0, #3]1043; CHECK-NEXT:    vstrb.8 q0, [r1]1044; CHECK-NEXT:    bx lr1045entry:1046  %z = getelementptr inbounds i8, ptr %x, i32 31047  %mask = load <16 x i8>, ptr %m, align 11048  %c = icmp ne <16 x i8> %mask, zeroinitializer1049  %0 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %z, i32 1, <16 x i1> %c, <16 x i8> undef)1050  store <16 x i8> %0, ptr %y, align 11051  ret ptr %x1052}1053 1054define ptr @ldrbu8_2(ptr %x, ptr %y, ptr %m) {1055; CHECK-LABEL: ldrbu8_2:1056; CHECK:       @ %bb.0: @ %entry1057; CHECK-NEXT:    vldrb.u8 q0, [r2]1058; CHECK-NEXT:    vpt.i8 ne, q0, zr1059; CHECK-NEXT:    vldrbt.u8 q0, [r0, #2]1060; CHECK-NEXT:    vstrb.8 q0, [r1]1061; CHECK-NEXT:    bx lr1062entry:1063  %z = getelementptr inbounds i8, ptr %x, i32 21064  %mask = load <16 x i8>, ptr %m, align 11065  %c = icmp ne <16 x i8> %mask, zeroinitializer1066  %0 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %z, i32 1, <16 x i1> %c, <16 x i8> undef)1067  store <16 x i8> %0, ptr %y, align 11068  ret ptr %x1069}1070 1071define ptr @ldrbu8_127(ptr %x, ptr %y, ptr %m) {1072; CHECK-LABEL: ldrbu8_127:1073; CHECK:       @ %bb.0: @ %entry1074; CHECK-NEXT:    vldrb.u8 q0, [r2]1075; CHECK-NEXT:    vpt.i8 ne, q0, zr1076; CHECK-NEXT:    vldrbt.u8 q0, [r0, #127]1077; CHECK-NEXT:    vstrb.8 q0, [r1]1078; CHECK-NEXT:    bx lr1079entry:1080  %z = getelementptr inbounds i8, ptr %x, i32 1271081  %mask = load <16 x i8>, ptr %m, align 11082  %c = icmp ne <16 x i8> %mask, zeroinitializer1083  %0 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %z, i32 1, <16 x i1> %c, <16 x i8> undef)1084  store <16 x i8> %0, ptr %y, align 11085  ret ptr %x1086}1087 1088define ptr @ldrbu8_128(ptr %x, ptr %y, ptr %m) {1089; CHECK-LABEL: ldrbu8_128:1090; CHECK:       @ %bb.0: @ %entry1091; CHECK-NEXT:    vldrb.u8 q0, [r2]1092; CHECK-NEXT:    add.w r3, r0, #1281093; CHECK-NEXT:    vpt.i8 ne, q0, zr1094; CHECK-NEXT:    vldrbt.u8 q0, [r3]1095; CHECK-NEXT:    vstrb.8 q0, [r1]1096; CHECK-NEXT:    bx lr1097entry:1098  %z = getelementptr inbounds i8, ptr %x, i32 1281099  %mask = load <16 x i8>, ptr %m, align 11100  %c = icmp ne <16 x i8> %mask, zeroinitializer1101  %0 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %z, i32 1, <16 x i1> %c, <16 x i8> undef)1102  store <16 x i8> %0, ptr %y, align 11103  ret ptr %x1104}1105 1106define ptr @ldrbu8_m127(ptr %x, ptr %y, ptr %m) {1107; CHECK-LABEL: ldrbu8_m127:1108; CHECK:       @ %bb.0: @ %entry1109; CHECK-NEXT:    vldrb.u8 q0, [r2]1110; CHECK-NEXT:    vpt.i8 ne, q0, zr1111; CHECK-NEXT:    vldrbt.u8 q0, [r0, #-127]1112; CHECK-NEXT:    vstrb.8 q0, [r1]1113; CHECK-NEXT:    bx lr1114entry:1115  %z = getelementptr inbounds i8, ptr %x, i32 -1271116  %mask = load <16 x i8>, ptr %m, align 11117  %c = icmp ne <16 x i8> %mask, zeroinitializer1118  %0 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %z, i32 1, <16 x i1> %c, <16 x i8> undef)1119  store <16 x i8> %0, ptr %y, align 11120  ret ptr %x1121}1122 1123define ptr @ldrbu8_m128(ptr %x, ptr %y, ptr %m) {1124; CHECK-LABEL: ldrbu8_m128:1125; CHECK:       @ %bb.0: @ %entry1126; CHECK-NEXT:    vldrb.u8 q0, [r2]1127; CHECK-NEXT:    sub.w r3, r0, #1281128; CHECK-NEXT:    vpt.i8 ne, q0, zr1129; CHECK-NEXT:    vldrbt.u8 q0, [r3]1130; CHECK-NEXT:    vstrb.8 q0, [r1]1131; CHECK-NEXT:    bx lr1132entry:1133  %z = getelementptr inbounds i8, ptr %x, i32 -1281134  %mask = load <16 x i8>, ptr %m, align 11135  %c = icmp ne <16 x i8> %mask, zeroinitializer1136  %0 = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %z, i32 1, <16 x i1> %c, <16 x i8> undef)1137  store <16 x i8> %0, ptr %y, align 11138  ret ptr %x1139}1140 1141define ptr @ldrwf32_4(ptr %x, ptr %y, ptr %m) {1142; CHECK-LABEL: ldrwf32_4:1143; CHECK:       @ %bb.0: @ %entry1144; CHECK-NEXT:    vldrw.u32 q0, [r2]1145; CHECK-NEXT:    vpt.i32 ne, q0, zr1146; CHECK-NEXT:    vldrwt.u32 q0, [r0, #4]1147; CHECK-NEXT:    vstrw.32 q0, [r1]1148; CHECK-NEXT:    bx lr1149entry:1150  %z = getelementptr inbounds i8, ptr %x, i32 41151  %mask = load <4 x i32>, ptr %m, align 41152  %c = icmp ne <4 x i32> %mask, zeroinitializer1153  %0 = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x float> undef)1154  store <4 x float> %0, ptr %y, align 41155  ret ptr %x1156}1157 1158define ptr @ldrwf32_3(ptr %x, ptr %y, ptr %m) {1159; CHECK-LABEL: ldrwf32_3:1160; CHECK:       @ %bb.0: @ %entry1161; CHECK-NEXT:    vldrw.u32 q0, [r2]1162; CHECK-NEXT:    adds r3, r0, #31163; CHECK-NEXT:    vpt.i32 ne, q0, zr1164; CHECK-NEXT:    vldrwt.u32 q0, [r3]1165; CHECK-NEXT:    vstrw.32 q0, [r1]1166; CHECK-NEXT:    bx lr1167entry:1168  %z = getelementptr inbounds i8, ptr %x, i32 31169  %mask = load <4 x i32>, ptr %m, align 41170  %c = icmp ne <4 x i32> %mask, zeroinitializer1171  %0 = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x float> undef)1172  store <4 x float> %0, ptr %y, align 41173  ret ptr %x1174}1175 1176define ptr @ldrwf32_2(ptr %x, ptr %y, ptr %m) {1177; CHECK-LABEL: ldrwf32_2:1178; CHECK:       @ %bb.0: @ %entry1179; CHECK-NEXT:    vldrw.u32 q0, [r2]1180; CHECK-NEXT:    adds r3, r0, #21181; CHECK-NEXT:    vpt.i32 ne, q0, zr1182; CHECK-NEXT:    vldrwt.u32 q0, [r3]1183; CHECK-NEXT:    vstrw.32 q0, [r1]1184; CHECK-NEXT:    bx lr1185entry:1186  %z = getelementptr inbounds i8, ptr %x, i32 21187  %mask = load <4 x i32>, ptr %m, align 41188  %c = icmp ne <4 x i32> %mask, zeroinitializer1189  %0 = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x float> undef)1190  store <4 x float> %0, ptr %y, align 41191  ret ptr %x1192}1193 1194define ptr @ldrwf32_508(ptr %x, ptr %y, ptr %m) {1195; CHECK-LABEL: ldrwf32_508:1196; CHECK:       @ %bb.0: @ %entry1197; CHECK-NEXT:    vldrw.u32 q0, [r2]1198; CHECK-NEXT:    vpt.i32 ne, q0, zr1199; CHECK-NEXT:    vldrwt.u32 q0, [r0, #508]1200; CHECK-NEXT:    vstrw.32 q0, [r1]1201; CHECK-NEXT:    bx lr1202entry:1203  %z = getelementptr inbounds i8, ptr %x, i32 5081204  %mask = load <4 x i32>, ptr %m, align 41205  %c = icmp ne <4 x i32> %mask, zeroinitializer1206  %0 = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x float> undef)1207  store <4 x float> %0, ptr %y, align 41208  ret ptr %x1209}1210 1211define ptr @ldrwf32_512(ptr %x, ptr %y, ptr %m) {1212; CHECK-LABEL: ldrwf32_512:1213; CHECK:       @ %bb.0: @ %entry1214; CHECK-NEXT:    vldrw.u32 q0, [r2]1215; CHECK-NEXT:    add.w r3, r0, #5121216; CHECK-NEXT:    vpt.i32 ne, q0, zr1217; CHECK-NEXT:    vldrwt.u32 q0, [r3]1218; CHECK-NEXT:    vstrw.32 q0, [r1]1219; CHECK-NEXT:    bx lr1220entry:1221  %z = getelementptr inbounds i8, ptr %x, i32 5121222  %mask = load <4 x i32>, ptr %m, align 41223  %c = icmp ne <4 x i32> %mask, zeroinitializer1224  %0 = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x float> undef)1225  store <4 x float> %0, ptr %y, align 41226  ret ptr %x1227}1228 1229define ptr @ldrwf32_m508(ptr %x, ptr %y, ptr %m) {1230; CHECK-LABEL: ldrwf32_m508:1231; CHECK:       @ %bb.0: @ %entry1232; CHECK-NEXT:    vldrw.u32 q0, [r2]1233; CHECK-NEXT:    vpt.i32 ne, q0, zr1234; CHECK-NEXT:    vldrwt.u32 q0, [r0, #-508]1235; CHECK-NEXT:    vstrw.32 q0, [r1]1236; CHECK-NEXT:    bx lr1237entry:1238  %z = getelementptr inbounds i8, ptr %x, i32 -5081239  %mask = load <4 x i32>, ptr %m, align 41240  %c = icmp ne <4 x i32> %mask, zeroinitializer1241  %0 = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x float> undef)1242  store <4 x float> %0, ptr %y, align 41243  ret ptr %x1244}1245 1246define ptr @ldrwf32_m512(ptr %x, ptr %y, ptr %m) {1247; CHECK-LABEL: ldrwf32_m512:1248; CHECK:       @ %bb.0: @ %entry1249; CHECK-NEXT:    vldrw.u32 q0, [r2]1250; CHECK-NEXT:    sub.w r3, r0, #5121251; CHECK-NEXT:    vpt.i32 ne, q0, zr1252; CHECK-NEXT:    vldrwt.u32 q0, [r3]1253; CHECK-NEXT:    vstrw.32 q0, [r1]1254; CHECK-NEXT:    bx lr1255entry:1256  %z = getelementptr inbounds i8, ptr %x, i32 -5121257  %mask = load <4 x i32>, ptr %m, align 41258  %c = icmp ne <4 x i32> %mask, zeroinitializer1259  %0 = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %z, i32 4, <4 x i1> %c, <4 x float> undef)1260  store <4 x float> %0, ptr %y, align 41261  ret ptr %x1262}1263 1264define ptr @ldrhf16_4(ptr %x, ptr %y, ptr %m) {1265; CHECK-LABEL: ldrhf16_4:1266; CHECK:       @ %bb.0: @ %entry1267; CHECK-NEXT:    vldrh.u16 q0, [r2]1268; CHECK-NEXT:    vpt.i16 ne, q0, zr1269; CHECK-NEXT:    vldrht.u16 q0, [r0, #4]1270; CHECK-NEXT:    vstrh.16 q0, [r1]1271; CHECK-NEXT:    bx lr1272entry:1273  %z = getelementptr inbounds i8, ptr %x, i32 41274  %mask = load <8 x i16>, ptr %m, align 21275  %c = icmp ne <8 x i16> %mask, zeroinitializer1276  %0 = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x half> undef)1277  store <8 x half> %0, ptr %y, align 21278  ret ptr %x1279}1280 1281define ptr @ldrhf16_3(ptr %x, ptr %y, ptr %m) {1282; CHECK-LABEL: ldrhf16_3:1283; CHECK:       @ %bb.0: @ %entry1284; CHECK-NEXT:    vldrh.u16 q0, [r2]1285; CHECK-NEXT:    adds r3, r0, #31286; CHECK-NEXT:    vpt.i16 ne, q0, zr1287; CHECK-NEXT:    vldrht.u16 q0, [r3]1288; CHECK-NEXT:    vstrh.16 q0, [r1]1289; CHECK-NEXT:    bx lr1290entry:1291  %z = getelementptr inbounds i8, ptr %x, i32 31292  %mask = load <8 x i16>, ptr %m, align 21293  %c = icmp ne <8 x i16> %mask, zeroinitializer1294  %0 = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x half> undef)1295  store <8 x half> %0, ptr %y, align 21296  ret ptr %x1297}1298 1299define ptr @ldrhf16_2(ptr %x, ptr %y, ptr %m) {1300; CHECK-LABEL: ldrhf16_2:1301; CHECK:       @ %bb.0: @ %entry1302; CHECK-NEXT:    vldrh.u16 q0, [r2]1303; CHECK-NEXT:    vpt.i16 ne, q0, zr1304; CHECK-NEXT:    vldrht.u16 q0, [r0, #2]1305; CHECK-NEXT:    vstrh.16 q0, [r1]1306; CHECK-NEXT:    bx lr1307entry:1308  %z = getelementptr inbounds i8, ptr %x, i32 21309  %mask = load <8 x i16>, ptr %m, align 21310  %c = icmp ne <8 x i16> %mask, zeroinitializer1311  %0 = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x half> undef)1312  store <8 x half> %0, ptr %y, align 21313  ret ptr %x1314}1315 1316define ptr @ldrhf16_254(ptr %x, ptr %y, ptr %m) {1317; CHECK-LABEL: ldrhf16_254:1318; CHECK:       @ %bb.0: @ %entry1319; CHECK-NEXT:    vldrh.u16 q0, [r2]1320; CHECK-NEXT:    vpt.i16 ne, q0, zr1321; CHECK-NEXT:    vldrht.u16 q0, [r0, #254]1322; CHECK-NEXT:    vstrh.16 q0, [r1]1323; CHECK-NEXT:    bx lr1324entry:1325  %z = getelementptr inbounds i8, ptr %x, i32 2541326  %mask = load <8 x i16>, ptr %m, align 21327  %c = icmp ne <8 x i16> %mask, zeroinitializer1328  %0 = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x half> undef)1329  store <8 x half> %0, ptr %y, align 21330  ret ptr %x1331}1332 1333define ptr @ldrhf16_256(ptr %x, ptr %y, ptr %m) {1334; CHECK-LABEL: ldrhf16_256:1335; CHECK:       @ %bb.0: @ %entry1336; CHECK-NEXT:    vldrh.u16 q0, [r2]1337; CHECK-NEXT:    add.w r3, r0, #2561338; CHECK-NEXT:    vpt.i16 ne, q0, zr1339; CHECK-NEXT:    vldrht.u16 q0, [r3]1340; CHECK-NEXT:    vstrh.16 q0, [r1]1341; CHECK-NEXT:    bx lr1342entry:1343  %z = getelementptr inbounds i8, ptr %x, i32 2561344  %mask = load <8 x i16>, ptr %m, align 21345  %c = icmp ne <8 x i16> %mask, zeroinitializer1346  %0 = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x half> undef)1347  store <8 x half> %0, ptr %y, align 21348  ret ptr %x1349}1350 1351define ptr @ldrhf16_m254(ptr %x, ptr %y, ptr %m) {1352; CHECK-LABEL: ldrhf16_m254:1353; CHECK:       @ %bb.0: @ %entry1354; CHECK-NEXT:    vldrh.u16 q0, [r2]1355; CHECK-NEXT:    vpt.i16 ne, q0, zr1356; CHECK-NEXT:    vldrht.u16 q0, [r0, #-254]1357; CHECK-NEXT:    vstrh.16 q0, [r1]1358; CHECK-NEXT:    bx lr1359entry:1360  %z = getelementptr inbounds i8, ptr %x, i32 -2541361  %mask = load <8 x i16>, ptr %m, align 21362  %c = icmp ne <8 x i16> %mask, zeroinitializer1363  %0 = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x half> undef)1364  store <8 x half> %0, ptr %y, align 21365  ret ptr %x1366}1367 1368define ptr @ldrhf16_m256(ptr %x, ptr %y, ptr %m) {1369; CHECK-LABEL: ldrhf16_m256:1370; CHECK:       @ %bb.0: @ %entry1371; CHECK-NEXT:    vldrh.u16 q0, [r2]1372; CHECK-NEXT:    sub.w r3, r0, #2561373; CHECK-NEXT:    vpt.i16 ne, q0, zr1374; CHECK-NEXT:    vldrht.u16 q0, [r3]1375; CHECK-NEXT:    vstrh.16 q0, [r1]1376; CHECK-NEXT:    bx lr1377entry:1378  %z = getelementptr inbounds i8, ptr %x, i32 -2561379  %mask = load <8 x i16>, ptr %m, align 21380  %c = icmp ne <8 x i16> %mask, zeroinitializer1381  %0 = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %z, i32 2, <8 x i1> %c, <8 x half> undef)1382  store <8 x half> %0, ptr %y, align 21383  ret ptr %x1384}1385 1386 1387 1388 1389define ptr @strw32_4(ptr %y, ptr %x, ptr %m) {1390; CHECK-LABEL: strw32_4:1391; CHECK:       @ %bb.0: @ %entry1392; CHECK-NEXT:    vldrw.u32 q1, [r2]1393; CHECK-NEXT:    vldrw.u32 q0, [r1]1394; CHECK-NEXT:    vpt.i32 ne, q1, zr1395; CHECK-NEXT:    vstrwt.32 q0, [r0, #4]1396; CHECK-NEXT:    bx lr1397entry:1398  %z = getelementptr inbounds i8, ptr %y, i32 41399  %mask = load <4 x i32>, ptr %m, align 41400  %c = icmp ne <4 x i32> %mask, zeroinitializer1401  %0 = load <4 x i32>, ptr %x, align 41402  call void @llvm.masked.store.v4i32.p0(<4 x i32> %0, ptr %z, i32 4, <4 x i1> %c)1403  ret ptr %y1404}1405 1406define ptr @strw32_3(ptr %y, ptr %x, ptr %m) {1407; CHECK-LABEL: strw32_3:1408; CHECK:       @ %bb.0: @ %entry1409; CHECK-NEXT:    vldrw.u32 q1, [r2]1410; CHECK-NEXT:    vldrw.u32 q0, [r1]1411; CHECK-NEXT:    adds r1, r0, #31412; CHECK-NEXT:    vpt.i32 ne, q1, zr1413; CHECK-NEXT:    vstrwt.32 q0, [r1]1414; CHECK-NEXT:    bx lr1415entry:1416  %z = getelementptr inbounds i8, ptr %y, i32 31417  %mask = load <4 x i32>, ptr %m, align 41418  %c = icmp ne <4 x i32> %mask, zeroinitializer1419  %0 = load <4 x i32>, ptr %x, align 41420  call void @llvm.masked.store.v4i32.p0(<4 x i32> %0, ptr %z, i32 4, <4 x i1> %c)1421  ret ptr %y1422}1423 1424define ptr @strw32_2(ptr %y, ptr %x, ptr %m) {1425; CHECK-LABEL: strw32_2:1426; CHECK:       @ %bb.0: @ %entry1427; CHECK-NEXT:    vldrw.u32 q1, [r2]1428; CHECK-NEXT:    vldrw.u32 q0, [r1]1429; CHECK-NEXT:    adds r1, r0, #21430; CHECK-NEXT:    vpt.i32 ne, q1, zr1431; CHECK-NEXT:    vstrwt.32 q0, [r1]1432; CHECK-NEXT:    bx lr1433entry:1434  %z = getelementptr inbounds i8, ptr %y, i32 21435  %mask = load <4 x i32>, ptr %m, align 41436  %c = icmp ne <4 x i32> %mask, zeroinitializer1437  %0 = load <4 x i32>, ptr %x, align 41438  call void @llvm.masked.store.v4i32.p0(<4 x i32> %0, ptr %z, i32 4, <4 x i1> %c)1439  ret ptr %y1440}1441 1442define ptr @strw32_508(ptr %y, ptr %x, ptr %m) {1443; CHECK-LABEL: strw32_508:1444; CHECK:       @ %bb.0: @ %entry1445; CHECK-NEXT:    vldrw.u32 q1, [r2]1446; CHECK-NEXT:    vldrw.u32 q0, [r1]1447; CHECK-NEXT:    vpt.i32 ne, q1, zr1448; CHECK-NEXT:    vstrwt.32 q0, [r0, #508]1449; CHECK-NEXT:    bx lr1450entry:1451  %z = getelementptr inbounds i8, ptr %y, i32 5081452  %mask = load <4 x i32>, ptr %m, align 41453  %c = icmp ne <4 x i32> %mask, zeroinitializer1454  %0 = load <4 x i32>, ptr %x, align 41455  call void @llvm.masked.store.v4i32.p0(<4 x i32> %0, ptr %z, i32 4, <4 x i1> %c)1456  ret ptr %y1457}1458 1459define ptr @strw32_512(ptr %y, ptr %x, ptr %m) {1460; CHECK-LABEL: strw32_512:1461; CHECK:       @ %bb.0: @ %entry1462; CHECK-NEXT:    vldrw.u32 q1, [r2]1463; CHECK-NEXT:    vldrw.u32 q0, [r1]1464; CHECK-NEXT:    add.w r1, r0, #5121465; CHECK-NEXT:    vpt.i32 ne, q1, zr1466; CHECK-NEXT:    vstrwt.32 q0, [r1]1467; CHECK-NEXT:    bx lr1468entry:1469  %z = getelementptr inbounds i8, ptr %y, i32 5121470  %mask = load <4 x i32>, ptr %m, align 41471  %c = icmp ne <4 x i32> %mask, zeroinitializer1472  %0 = load <4 x i32>, ptr %x, align 41473  call void @llvm.masked.store.v4i32.p0(<4 x i32> %0, ptr %z, i32 4, <4 x i1> %c)1474  ret ptr %y1475}1476 1477define ptr @strw32_m508(ptr %y, ptr %x, ptr %m) {1478; CHECK-LABEL: strw32_m508:1479; CHECK:       @ %bb.0: @ %entry1480; CHECK-NEXT:    vldrw.u32 q1, [r2]1481; CHECK-NEXT:    vldrw.u32 q0, [r1]1482; CHECK-NEXT:    vpt.i32 ne, q1, zr1483; CHECK-NEXT:    vstrwt.32 q0, [r0, #-508]1484; CHECK-NEXT:    bx lr1485entry:1486  %z = getelementptr inbounds i8, ptr %y, i32 -5081487  %mask = load <4 x i32>, ptr %m, align 41488  %c = icmp ne <4 x i32> %mask, zeroinitializer1489  %0 = load <4 x i32>, ptr %x, align 41490  call void @llvm.masked.store.v4i32.p0(<4 x i32> %0, ptr %z, i32 4, <4 x i1> %c)1491  ret ptr %y1492}1493 1494define ptr @strw32_m512(ptr %y, ptr %x, ptr %m) {1495; CHECK-LABEL: strw32_m512:1496; CHECK:       @ %bb.0: @ %entry1497; CHECK-NEXT:    vldrw.u32 q1, [r2]1498; CHECK-NEXT:    vldrw.u32 q0, [r1]1499; CHECK-NEXT:    sub.w r1, r0, #5121500; CHECK-NEXT:    vpt.i32 ne, q1, zr1501; CHECK-NEXT:    vstrwt.32 q0, [r1]1502; CHECK-NEXT:    bx lr1503entry:1504  %z = getelementptr inbounds i8, ptr %y, i32 -5121505  %mask = load <4 x i32>, ptr %m, align 41506  %c = icmp ne <4 x i32> %mask, zeroinitializer1507  %0 = load <4 x i32>, ptr %x, align 41508  call void @llvm.masked.store.v4i32.p0(<4 x i32> %0, ptr %z, i32 4, <4 x i1> %c)1509  ret ptr %y1510}1511 1512define ptr @strh32_4(ptr %y, ptr %x, ptr %m) {1513; CHECK-LABEL: strh32_4:1514; CHECK:       @ %bb.0: @ %entry1515; CHECK-NEXT:    vldrw.u32 q1, [r2]1516; CHECK-NEXT:    vldrh.u32 q0, [r1]1517; CHECK-NEXT:    vpt.i32 ne, q1, zr1518; CHECK-NEXT:    vstrht.32 q0, [r0, #4]1519; CHECK-NEXT:    bx lr1520entry:1521  %z = getelementptr inbounds i8, ptr %y, i32 41522  %mask = load <4 x i32>, ptr %m, align 41523  %c = icmp ne <4 x i32> %mask, zeroinitializer1524  %0 = load <4 x i16>, ptr %x, align 21525  call void @llvm.masked.store.v4i16.p0(<4 x i16> %0, ptr %z, i32 2, <4 x i1> %c)1526  ret ptr %y1527}1528 1529define ptr @strh32_3(ptr %y, ptr %x, ptr %m) {1530; CHECK-LABEL: strh32_3:1531; CHECK:       @ %bb.0: @ %entry1532; CHECK-NEXT:    vldrw.u32 q1, [r2]1533; CHECK-NEXT:    vldrh.u32 q0, [r1]1534; CHECK-NEXT:    adds r1, r0, #31535; CHECK-NEXT:    vpt.i32 ne, q1, zr1536; CHECK-NEXT:    vstrht.32 q0, [r1]1537; CHECK-NEXT:    bx lr1538entry:1539  %z = getelementptr inbounds i8, ptr %y, i32 31540  %mask = load <4 x i32>, ptr %m, align 41541  %c = icmp ne <4 x i32> %mask, zeroinitializer1542  %0 = load <4 x i16>, ptr %x, align 21543  call void @llvm.masked.store.v4i16.p0(<4 x i16> %0, ptr %z, i32 2, <4 x i1> %c)1544  ret ptr %y1545}1546 1547define ptr @strh32_2(ptr %y, ptr %x, ptr %m) {1548; CHECK-LABEL: strh32_2:1549; CHECK:       @ %bb.0: @ %entry1550; CHECK-NEXT:    vldrw.u32 q1, [r2]1551; CHECK-NEXT:    vldrh.u32 q0, [r1]1552; CHECK-NEXT:    vpt.i32 ne, q1, zr1553; CHECK-NEXT:    vstrht.32 q0, [r0, #2]1554; CHECK-NEXT:    bx lr1555entry:1556  %z = getelementptr inbounds i8, ptr %y, i32 21557  %mask = load <4 x i32>, ptr %m, align 41558  %c = icmp ne <4 x i32> %mask, zeroinitializer1559  %0 = load <4 x i16>, ptr %x, align 21560  call void @llvm.masked.store.v4i16.p0(<4 x i16> %0, ptr %z, i32 2, <4 x i1> %c)1561  ret ptr %y1562}1563 1564define ptr @strh32_254(ptr %y, ptr %x, ptr %m) {1565; CHECK-LABEL: strh32_254:1566; CHECK:       @ %bb.0: @ %entry1567; CHECK-NEXT:    vldrw.u32 q1, [r2]1568; CHECK-NEXT:    vldrh.u32 q0, [r1]1569; CHECK-NEXT:    vpt.i32 ne, q1, zr1570; CHECK-NEXT:    vstrht.32 q0, [r0, #254]1571; CHECK-NEXT:    bx lr1572entry:1573  %z = getelementptr inbounds i8, ptr %y, i32 2541574  %mask = load <4 x i32>, ptr %m, align 41575  %c = icmp ne <4 x i32> %mask, zeroinitializer1576  %0 = load <4 x i16>, ptr %x, align 21577  call void @llvm.masked.store.v4i16.p0(<4 x i16> %0, ptr %z, i32 2, <4 x i1> %c)1578  ret ptr %y1579}1580 1581define ptr @strh32_256(ptr %y, ptr %x, ptr %m) {1582; CHECK-LABEL: strh32_256:1583; CHECK:       @ %bb.0: @ %entry1584; CHECK-NEXT:    vldrw.u32 q1, [r2]1585; CHECK-NEXT:    vldrh.u32 q0, [r1]1586; CHECK-NEXT:    add.w r1, r0, #2561587; CHECK-NEXT:    vpt.i32 ne, q1, zr1588; CHECK-NEXT:    vstrht.32 q0, [r1]1589; CHECK-NEXT:    bx lr1590entry:1591  %z = getelementptr inbounds i8, ptr %y, i32 2561592  %mask = load <4 x i32>, ptr %m, align 41593  %c = icmp ne <4 x i32> %mask, zeroinitializer1594  %0 = load <4 x i16>, ptr %x, align 21595  call void @llvm.masked.store.v4i16.p0(<4 x i16> %0, ptr %z, i32 2, <4 x i1> %c)1596  ret ptr %y1597}1598 1599define ptr @strh32_m254(ptr %y, ptr %x, ptr %m) {1600; CHECK-LABEL: strh32_m254:1601; CHECK:       @ %bb.0: @ %entry1602; CHECK-NEXT:    vldrw.u32 q1, [r2]1603; CHECK-NEXT:    vldrh.u32 q0, [r1]1604; CHECK-NEXT:    vpt.i32 ne, q1, zr1605; CHECK-NEXT:    vstrht.32 q0, [r0, #-254]1606; CHECK-NEXT:    bx lr1607entry:1608  %z = getelementptr inbounds i8, ptr %y, i32 -2541609  %mask = load <4 x i32>, ptr %m, align 41610  %c = icmp ne <4 x i32> %mask, zeroinitializer1611  %0 = load <4 x i16>, ptr %x, align 21612  call void @llvm.masked.store.v4i16.p0(<4 x i16> %0, ptr %z, i32 2, <4 x i1> %c)1613  ret ptr %y1614}1615 1616define ptr @strh32_m256(ptr %y, ptr %x, ptr %m) {1617; CHECK-LABEL: strh32_m256:1618; CHECK:       @ %bb.0: @ %entry1619; CHECK-NEXT:    vldrw.u32 q1, [r2]1620; CHECK-NEXT:    vldrh.u32 q0, [r1]1621; CHECK-NEXT:    sub.w r1, r0, #2561622; CHECK-NEXT:    vpt.i32 ne, q1, zr1623; CHECK-NEXT:    vstrht.32 q0, [r1]1624; CHECK-NEXT:    bx lr1625entry:1626  %z = getelementptr inbounds i8, ptr %y, i32 -2561627  %mask = load <4 x i32>, ptr %m, align 41628  %c = icmp ne <4 x i32> %mask, zeroinitializer1629  %0 = load <4 x i16>, ptr %x, align 21630  call void @llvm.masked.store.v4i16.p0(<4 x i16> %0, ptr %z, i32 2, <4 x i1> %c)1631  ret ptr %y1632}1633 1634define ptr @strh16_4(ptr %y, ptr %x, ptr %m) {1635; CHECK-LABEL: strh16_4:1636; CHECK:       @ %bb.0: @ %entry1637; CHECK-NEXT:    vldrh.u16 q1, [r2]1638; CHECK-NEXT:    vldrh.u16 q0, [r1]1639; CHECK-NEXT:    vpt.i16 ne, q1, zr1640; CHECK-NEXT:    vstrht.16 q0, [r0, #4]1641; CHECK-NEXT:    bx lr1642entry:1643  %z = getelementptr inbounds i8, ptr %y, i32 41644  %mask = load <8 x i16>, ptr %m, align 21645  %c = icmp ne <8 x i16> %mask, zeroinitializer1646  %0 = load <8 x i16>, ptr %x, align 21647  call void @llvm.masked.store.v8i16.p0(<8 x i16> %0, ptr %z, i32 2, <8 x i1> %c)1648  ret ptr %y1649}1650 1651define ptr @strh16_3(ptr %y, ptr %x, ptr %m) {1652; CHECK-LABEL: strh16_3:1653; CHECK:       @ %bb.0: @ %entry1654; CHECK-NEXT:    vldrh.u16 q1, [r2]1655; CHECK-NEXT:    vldrh.u16 q0, [r1]1656; CHECK-NEXT:    adds r1, r0, #31657; CHECK-NEXT:    vpt.i16 ne, q1, zr1658; CHECK-NEXT:    vstrht.16 q0, [r1]1659; CHECK-NEXT:    bx lr1660entry:1661  %z = getelementptr inbounds i8, ptr %y, i32 31662  %mask = load <8 x i16>, ptr %m, align 21663  %c = icmp ne <8 x i16> %mask, zeroinitializer1664  %0 = load <8 x i16>, ptr %x, align 21665  call void @llvm.masked.store.v8i16.p0(<8 x i16> %0, ptr %z, i32 2, <8 x i1> %c)1666  ret ptr %y1667}1668 1669define ptr @strh16_2(ptr %y, ptr %x, ptr %m) {1670; CHECK-LABEL: strh16_2:1671; CHECK:       @ %bb.0: @ %entry1672; CHECK-NEXT:    vldrh.u16 q1, [r2]1673; CHECK-NEXT:    vldrh.u16 q0, [r1]1674; CHECK-NEXT:    vpt.i16 ne, q1, zr1675; CHECK-NEXT:    vstrht.16 q0, [r0, #2]1676; CHECK-NEXT:    bx lr1677entry:1678  %z = getelementptr inbounds i8, ptr %y, i32 21679  %mask = load <8 x i16>, ptr %m, align 21680  %c = icmp ne <8 x i16> %mask, zeroinitializer1681  %0 = load <8 x i16>, ptr %x, align 21682  call void @llvm.masked.store.v8i16.p0(<8 x i16> %0, ptr %z, i32 2, <8 x i1> %c)1683  ret ptr %y1684}1685 1686define ptr @strh16_254(ptr %y, ptr %x, ptr %m) {1687; CHECK-LABEL: strh16_254:1688; CHECK:       @ %bb.0: @ %entry1689; CHECK-NEXT:    vldrh.u16 q1, [r2]1690; CHECK-NEXT:    vldrh.u16 q0, [r1]1691; CHECK-NEXT:    vpt.i16 ne, q1, zr1692; CHECK-NEXT:    vstrht.16 q0, [r0, #254]1693; CHECK-NEXT:    bx lr1694entry:1695  %z = getelementptr inbounds i8, ptr %y, i32 2541696  %mask = load <8 x i16>, ptr %m, align 21697  %c = icmp ne <8 x i16> %mask, zeroinitializer1698  %0 = load <8 x i16>, ptr %x, align 21699  call void @llvm.masked.store.v8i16.p0(<8 x i16> %0, ptr %z, i32 2, <8 x i1> %c)1700  ret ptr %y1701}1702 1703define ptr @strh16_256(ptr %y, ptr %x, ptr %m) {1704; CHECK-LABEL: strh16_256:1705; CHECK:       @ %bb.0: @ %entry1706; CHECK-NEXT:    vldrh.u16 q1, [r2]1707; CHECK-NEXT:    vldrh.u16 q0, [r1]1708; CHECK-NEXT:    add.w r1, r0, #2561709; CHECK-NEXT:    vpt.i16 ne, q1, zr1710; CHECK-NEXT:    vstrht.16 q0, [r1]1711; CHECK-NEXT:    bx lr1712entry:1713  %z = getelementptr inbounds i8, ptr %y, i32 2561714  %mask = load <8 x i16>, ptr %m, align 21715  %c = icmp ne <8 x i16> %mask, zeroinitializer1716  %0 = load <8 x i16>, ptr %x, align 21717  call void @llvm.masked.store.v8i16.p0(<8 x i16> %0, ptr %z, i32 2, <8 x i1> %c)1718  ret ptr %y1719}1720 1721define ptr @strh16_m254(ptr %y, ptr %x, ptr %m) {1722; CHECK-LABEL: strh16_m254:1723; CHECK:       @ %bb.0: @ %entry1724; CHECK-NEXT:    vldrh.u16 q1, [r2]1725; CHECK-NEXT:    vldrh.u16 q0, [r1]1726; CHECK-NEXT:    vpt.i16 ne, q1, zr1727; CHECK-NEXT:    vstrht.16 q0, [r0, #-254]1728; CHECK-NEXT:    bx lr1729entry:1730  %z = getelementptr inbounds i8, ptr %y, i32 -2541731  %mask = load <8 x i16>, ptr %m, align 21732  %c = icmp ne <8 x i16> %mask, zeroinitializer1733  %0 = load <8 x i16>, ptr %x, align 21734  call void @llvm.masked.store.v8i16.p0(<8 x i16> %0, ptr %z, i32 2, <8 x i1> %c)1735  ret ptr %y1736}1737 1738define ptr @strh16_m256(ptr %y, ptr %x, ptr %m) {1739; CHECK-LABEL: strh16_m256:1740; CHECK:       @ %bb.0: @ %entry1741; CHECK-NEXT:    vldrh.u16 q1, [r2]1742; CHECK-NEXT:    vldrh.u16 q0, [r1]1743; CHECK-NEXT:    sub.w r1, r0, #2561744; CHECK-NEXT:    vpt.i16 ne, q1, zr1745; CHECK-NEXT:    vstrht.16 q0, [r1]1746; CHECK-NEXT:    bx lr1747entry:1748  %z = getelementptr inbounds i8, ptr %y, i32 -2561749  %mask = load <8 x i16>, ptr %m, align 21750  %c = icmp ne <8 x i16> %mask, zeroinitializer1751  %0 = load <8 x i16>, ptr %x, align 21752  call void @llvm.masked.store.v8i16.p0(<8 x i16> %0, ptr %z, i32 2, <8 x i1> %c)1753  ret ptr %y1754}1755 1756define ptr @strb32_4(ptr %y, ptr %x, ptr %m) {1757; CHECK-LABEL: strb32_4:1758; CHECK:       @ %bb.0: @ %entry1759; CHECK-NEXT:    vldrw.u32 q1, [r2]1760; CHECK-NEXT:    vldrb.u32 q0, [r1]1761; CHECK-NEXT:    vpt.i32 ne, q1, zr1762; CHECK-NEXT:    vstrbt.32 q0, [r0, #4]1763; CHECK-NEXT:    bx lr1764entry:1765  %z = getelementptr inbounds i8, ptr %y, i32 41766  %mask = load <4 x i32>, ptr %m, align 41767  %c = icmp ne <4 x i32> %mask, zeroinitializer1768  %0 = load <4 x i8>, ptr %x, align 11769  call void @llvm.masked.store.v4i8.p0(<4 x i8> %0, ptr %z, i32 1, <4 x i1> %c)1770  ret ptr %y1771}1772 1773define ptr @strb32_3(ptr %y, ptr %x, ptr %m) {1774; CHECK-LABEL: strb32_3:1775; CHECK:       @ %bb.0: @ %entry1776; CHECK-NEXT:    vldrw.u32 q1, [r2]1777; CHECK-NEXT:    vldrb.u32 q0, [r1]1778; CHECK-NEXT:    vpt.i32 ne, q1, zr1779; CHECK-NEXT:    vstrbt.32 q0, [r0, #3]1780; CHECK-NEXT:    bx lr1781entry:1782  %z = getelementptr inbounds i8, ptr %y, i32 31783  %mask = load <4 x i32>, ptr %m, align 41784  %c = icmp ne <4 x i32> %mask, zeroinitializer1785  %0 = load <4 x i8>, ptr %x, align 11786  call void @llvm.masked.store.v4i8.p0(<4 x i8> %0, ptr %z, i32 1, <4 x i1> %c)1787  ret ptr %y1788}1789 1790define ptr @strb32_2(ptr %y, ptr %x, ptr %m) {1791; CHECK-LABEL: strb32_2:1792; CHECK:       @ %bb.0: @ %entry1793; CHECK-NEXT:    vldrw.u32 q1, [r2]1794; CHECK-NEXT:    vldrb.u32 q0, [r1]1795; CHECK-NEXT:    vpt.i32 ne, q1, zr1796; CHECK-NEXT:    vstrbt.32 q0, [r0, #2]1797; CHECK-NEXT:    bx lr1798entry:1799  %z = getelementptr inbounds i8, ptr %y, i32 21800  %mask = load <4 x i32>, ptr %m, align 41801  %c = icmp ne <4 x i32> %mask, zeroinitializer1802  %0 = load <4 x i8>, ptr %x, align 11803  call void @llvm.masked.store.v4i8.p0(<4 x i8> %0, ptr %z, i32 1, <4 x i1> %c)1804  ret ptr %y1805}1806 1807define ptr @strb32_127(ptr %y, ptr %x, ptr %m) {1808; CHECK-LABEL: strb32_127:1809; CHECK:       @ %bb.0: @ %entry1810; CHECK-NEXT:    vldrw.u32 q1, [r2]1811; CHECK-NEXT:    vldrb.u32 q0, [r1]1812; CHECK-NEXT:    vpt.i32 ne, q1, zr1813; CHECK-NEXT:    vstrbt.32 q0, [r0, #127]1814; CHECK-NEXT:    bx lr1815entry:1816  %z = getelementptr inbounds i8, ptr %y, i32 1271817  %mask = load <4 x i32>, ptr %m, align 41818  %c = icmp ne <4 x i32> %mask, zeroinitializer1819  %0 = load <4 x i8>, ptr %x, align 11820  call void @llvm.masked.store.v4i8.p0(<4 x i8> %0, ptr %z, i32 1, <4 x i1> %c)1821  ret ptr %y1822}1823 1824define ptr @strb32_128(ptr %y, ptr %x, ptr %m) {1825; CHECK-LABEL: strb32_128:1826; CHECK:       @ %bb.0: @ %entry1827; CHECK-NEXT:    vldrw.u32 q1, [r2]1828; CHECK-NEXT:    vldrb.u32 q0, [r1]1829; CHECK-NEXT:    add.w r1, r0, #1281830; CHECK-NEXT:    vpt.i32 ne, q1, zr1831; CHECK-NEXT:    vstrbt.32 q0, [r1]1832; CHECK-NEXT:    bx lr1833entry:1834  %z = getelementptr inbounds i8, ptr %y, i32 1281835  %mask = load <4 x i32>, ptr %m, align 41836  %c = icmp ne <4 x i32> %mask, zeroinitializer1837  %0 = load <4 x i8>, ptr %x, align 11838  call void @llvm.masked.store.v4i8.p0(<4 x i8> %0, ptr %z, i32 1, <4 x i1> %c)1839  ret ptr %y1840}1841 1842define ptr @strb32_m127(ptr %y, ptr %x, ptr %m) {1843; CHECK-LABEL: strb32_m127:1844; CHECK:       @ %bb.0: @ %entry1845; CHECK-NEXT:    vldrw.u32 q1, [r2]1846; CHECK-NEXT:    vldrb.u32 q0, [r1]1847; CHECK-NEXT:    vpt.i32 ne, q1, zr1848; CHECK-NEXT:    vstrbt.32 q0, [r0, #-127]1849; CHECK-NEXT:    bx lr1850entry:1851  %z = getelementptr inbounds i8, ptr %y, i32 -1271852  %mask = load <4 x i32>, ptr %m, align 41853  %c = icmp ne <4 x i32> %mask, zeroinitializer1854  %0 = load <4 x i8>, ptr %x, align 11855  call void @llvm.masked.store.v4i8.p0(<4 x i8> %0, ptr %z, i32 1, <4 x i1> %c)1856  ret ptr %y1857}1858 1859define ptr @strb32_m128(ptr %y, ptr %x, ptr %m) {1860; CHECK-LABEL: strb32_m128:1861; CHECK:       @ %bb.0: @ %entry1862; CHECK-NEXT:    vldrw.u32 q1, [r2]1863; CHECK-NEXT:    vldrb.u32 q0, [r1]1864; CHECK-NEXT:    sub.w r1, r0, #1281865; CHECK-NEXT:    vpt.i32 ne, q1, zr1866; CHECK-NEXT:    vstrbt.32 q0, [r1]1867; CHECK-NEXT:    bx lr1868entry:1869  %z = getelementptr inbounds i8, ptr %y, i32 -1281870  %mask = load <4 x i32>, ptr %m, align 41871  %c = icmp ne <4 x i32> %mask, zeroinitializer1872  %0 = load <4 x i8>, ptr %x, align 11873  call void @llvm.masked.store.v4i8.p0(<4 x i8> %0, ptr %z, i32 1, <4 x i1> %c)1874  ret ptr %y1875}1876 1877define ptr @strb16_4(ptr %y, ptr %x, ptr %m) {1878; CHECK-LABEL: strb16_4:1879; CHECK:       @ %bb.0: @ %entry1880; CHECK-NEXT:    vldrh.u16 q1, [r2]1881; CHECK-NEXT:    vldrb.u16 q0, [r1]1882; CHECK-NEXT:    vpt.i16 ne, q1, zr1883; CHECK-NEXT:    vstrbt.16 q0, [r0, #4]1884; CHECK-NEXT:    bx lr1885entry:1886  %z = getelementptr inbounds i8, ptr %y, i32 41887  %mask = load <8 x i16>, ptr %m, align 21888  %c = icmp ne <8 x i16> %mask, zeroinitializer1889  %0 = load <8 x i8>, ptr %x, align 11890  call void @llvm.masked.store.v8i8.p0(<8 x i8> %0, ptr %z, i32 1, <8 x i1> %c)1891  ret ptr %y1892}1893 1894define ptr @strb16_3(ptr %y, ptr %x, ptr %m) {1895; CHECK-LABEL: strb16_3:1896; CHECK:       @ %bb.0: @ %entry1897; CHECK-NEXT:    vldrh.u16 q1, [r2]1898; CHECK-NEXT:    vldrb.u16 q0, [r1]1899; CHECK-NEXT:    vpt.i16 ne, q1, zr1900; CHECK-NEXT:    vstrbt.16 q0, [r0, #3]1901; CHECK-NEXT:    bx lr1902entry:1903  %z = getelementptr inbounds i8, ptr %y, i32 31904  %mask = load <8 x i16>, ptr %m, align 21905  %c = icmp ne <8 x i16> %mask, zeroinitializer1906  %0 = load <8 x i8>, ptr %x, align 11907  call void @llvm.masked.store.v8i8.p0(<8 x i8> %0, ptr %z, i32 1, <8 x i1> %c)1908  ret ptr %y1909}1910 1911define ptr @strb16_2(ptr %y, ptr %x, ptr %m) {1912; CHECK-LABEL: strb16_2:1913; CHECK:       @ %bb.0: @ %entry1914; CHECK-NEXT:    vldrh.u16 q1, [r2]1915; CHECK-NEXT:    vldrb.u16 q0, [r1]1916; CHECK-NEXT:    vpt.i16 ne, q1, zr1917; CHECK-NEXT:    vstrbt.16 q0, [r0, #2]1918; CHECK-NEXT:    bx lr1919entry:1920  %z = getelementptr inbounds i8, ptr %y, i32 21921  %mask = load <8 x i16>, ptr %m, align 21922  %c = icmp ne <8 x i16> %mask, zeroinitializer1923  %0 = load <8 x i8>, ptr %x, align 11924  call void @llvm.masked.store.v8i8.p0(<8 x i8> %0, ptr %z, i32 1, <8 x i1> %c)1925  ret ptr %y1926}1927 1928define ptr @strb16_127(ptr %y, ptr %x, ptr %m) {1929; CHECK-LABEL: strb16_127:1930; CHECK:       @ %bb.0: @ %entry1931; CHECK-NEXT:    vldrh.u16 q1, [r2]1932; CHECK-NEXT:    vldrb.u16 q0, [r1]1933; CHECK-NEXT:    vpt.i16 ne, q1, zr1934; CHECK-NEXT:    vstrbt.16 q0, [r0, #127]1935; CHECK-NEXT:    bx lr1936entry:1937  %z = getelementptr inbounds i8, ptr %y, i32 1271938  %mask = load <8 x i16>, ptr %m, align 21939  %c = icmp ne <8 x i16> %mask, zeroinitializer1940  %0 = load <8 x i8>, ptr %x, align 11941  call void @llvm.masked.store.v8i8.p0(<8 x i8> %0, ptr %z, i32 1, <8 x i1> %c)1942  ret ptr %y1943}1944 1945define ptr @strb16_128(ptr %y, ptr %x, ptr %m) {1946; CHECK-LABEL: strb16_128:1947; CHECK:       @ %bb.0: @ %entry1948; CHECK-NEXT:    vldrh.u16 q1, [r2]1949; CHECK-NEXT:    vldrb.u16 q0, [r1]1950; CHECK-NEXT:    add.w r1, r0, #1281951; CHECK-NEXT:    vpt.i16 ne, q1, zr1952; CHECK-NEXT:    vstrbt.16 q0, [r1]1953; CHECK-NEXT:    bx lr1954entry:1955  %z = getelementptr inbounds i8, ptr %y, i32 1281956  %mask = load <8 x i16>, ptr %m, align 21957  %c = icmp ne <8 x i16> %mask, zeroinitializer1958  %0 = load <8 x i8>, ptr %x, align 11959  call void @llvm.masked.store.v8i8.p0(<8 x i8> %0, ptr %z, i32 1, <8 x i1> %c)1960  ret ptr %y1961}1962 1963define ptr @strb16_m127(ptr %y, ptr %x, ptr %m) {1964; CHECK-LABEL: strb16_m127:1965; CHECK:       @ %bb.0: @ %entry1966; CHECK-NEXT:    vldrh.u16 q1, [r2]1967; CHECK-NEXT:    vldrb.u16 q0, [r1]1968; CHECK-NEXT:    vpt.i16 ne, q1, zr1969; CHECK-NEXT:    vstrbt.16 q0, [r0, #-127]1970; CHECK-NEXT:    bx lr1971entry:1972  %z = getelementptr inbounds i8, ptr %y, i32 -1271973  %mask = load <8 x i16>, ptr %m, align 21974  %c = icmp ne <8 x i16> %mask, zeroinitializer1975  %0 = load <8 x i8>, ptr %x, align 11976  call void @llvm.masked.store.v8i8.p0(<8 x i8> %0, ptr %z, i32 1, <8 x i1> %c)1977  ret ptr %y1978}1979 1980define ptr @strb16_m128(ptr %y, ptr %x, ptr %m) {1981; CHECK-LABEL: strb16_m128:1982; CHECK:       @ %bb.0: @ %entry1983; CHECK-NEXT:    vldrh.u16 q1, [r2]1984; CHECK-NEXT:    vldrb.u16 q0, [r1]1985; CHECK-NEXT:    sub.w r1, r0, #1281986; CHECK-NEXT:    vpt.i16 ne, q1, zr1987; CHECK-NEXT:    vstrbt.16 q0, [r1]1988; CHECK-NEXT:    bx lr1989entry:1990  %z = getelementptr inbounds i8, ptr %y, i32 -1281991  %mask = load <8 x i16>, ptr %m, align 21992  %c = icmp ne <8 x i16> %mask, zeroinitializer1993  %0 = load <8 x i8>, ptr %x, align 11994  call void @llvm.masked.store.v8i8.p0(<8 x i8> %0, ptr %z, i32 1, <8 x i1> %c)1995  ret ptr %y1996}1997 1998define ptr @strb8_4(ptr %y, ptr %x, ptr %m) {1999; CHECK-LABEL: strb8_4:2000; CHECK:       @ %bb.0: @ %entry2001; CHECK-NEXT:    vldrb.u8 q1, [r2]2002; CHECK-NEXT:    vldrb.u8 q0, [r1]2003; CHECK-NEXT:    vpt.i8 ne, q1, zr2004; CHECK-NEXT:    vstrbt.8 q0, [r0, #4]2005; CHECK-NEXT:    bx lr2006entry:2007  %z = getelementptr inbounds i8, ptr %y, i32 42008  %mask = load <16 x i8>, ptr %m, align 12009  %c = icmp ne <16 x i8> %mask, zeroinitializer2010  %0 = load <16 x i8>, ptr %x, align 12011  call void @llvm.masked.store.v16i8.p0(<16 x i8> %0, ptr %z, i32 1, <16 x i1> %c)2012  ret ptr %y2013}2014 2015define ptr @strb8_3(ptr %y, ptr %x, ptr %m) {2016; CHECK-LABEL: strb8_3:2017; CHECK:       @ %bb.0: @ %entry2018; CHECK-NEXT:    vldrb.u8 q1, [r2]2019; CHECK-NEXT:    vldrb.u8 q0, [r1]2020; CHECK-NEXT:    vpt.i8 ne, q1, zr2021; CHECK-NEXT:    vstrbt.8 q0, [r0, #3]2022; CHECK-NEXT:    bx lr2023entry:2024  %z = getelementptr inbounds i8, ptr %y, i32 32025  %mask = load <16 x i8>, ptr %m, align 12026  %c = icmp ne <16 x i8> %mask, zeroinitializer2027  %0 = load <16 x i8>, ptr %x, align 12028  call void @llvm.masked.store.v16i8.p0(<16 x i8> %0, ptr %z, i32 1, <16 x i1> %c)2029  ret ptr %y2030}2031 2032define ptr @strb8_2(ptr %y, ptr %x, ptr %m) {2033; CHECK-LABEL: strb8_2:2034; CHECK:       @ %bb.0: @ %entry2035; CHECK-NEXT:    vldrb.u8 q1, [r2]2036; CHECK-NEXT:    vldrb.u8 q0, [r1]2037; CHECK-NEXT:    vpt.i8 ne, q1, zr2038; CHECK-NEXT:    vstrbt.8 q0, [r0, #2]2039; CHECK-NEXT:    bx lr2040entry:2041  %z = getelementptr inbounds i8, ptr %y, i32 22042  %mask = load <16 x i8>, ptr %m, align 12043  %c = icmp ne <16 x i8> %mask, zeroinitializer2044  %0 = load <16 x i8>, ptr %x, align 12045  call void @llvm.masked.store.v16i8.p0(<16 x i8> %0, ptr %z, i32 1, <16 x i1> %c)2046  ret ptr %y2047}2048 2049define ptr @strb8_127(ptr %y, ptr %x, ptr %m) {2050; CHECK-LABEL: strb8_127:2051; CHECK:       @ %bb.0: @ %entry2052; CHECK-NEXT:    vldrb.u8 q1, [r2]2053; CHECK-NEXT:    vldrb.u8 q0, [r1]2054; CHECK-NEXT:    vpt.i8 ne, q1, zr2055; CHECK-NEXT:    vstrbt.8 q0, [r0, #127]2056; CHECK-NEXT:    bx lr2057entry:2058  %z = getelementptr inbounds i8, ptr %y, i32 1272059  %mask = load <16 x i8>, ptr %m, align 12060  %c = icmp ne <16 x i8> %mask, zeroinitializer2061  %0 = load <16 x i8>, ptr %x, align 12062  call void @llvm.masked.store.v16i8.p0(<16 x i8> %0, ptr %z, i32 1, <16 x i1> %c)2063  ret ptr %y2064}2065 2066define ptr @strb8_128(ptr %y, ptr %x, ptr %m) {2067; CHECK-LABEL: strb8_128:2068; CHECK:       @ %bb.0: @ %entry2069; CHECK-NEXT:    vldrb.u8 q1, [r2]2070; CHECK-NEXT:    vldrb.u8 q0, [r1]2071; CHECK-NEXT:    add.w r1, r0, #1282072; CHECK-NEXT:    vpt.i8 ne, q1, zr2073; CHECK-NEXT:    vstrbt.8 q0, [r1]2074; CHECK-NEXT:    bx lr2075entry:2076  %z = getelementptr inbounds i8, ptr %y, i32 1282077  %mask = load <16 x i8>, ptr %m, align 12078  %c = icmp ne <16 x i8> %mask, zeroinitializer2079  %0 = load <16 x i8>, ptr %x, align 12080  call void @llvm.masked.store.v16i8.p0(<16 x i8> %0, ptr %z, i32 1, <16 x i1> %c)2081  ret ptr %y2082}2083 2084define ptr @strb8_m127(ptr %y, ptr %x, ptr %m) {2085; CHECK-LABEL: strb8_m127:2086; CHECK:       @ %bb.0: @ %entry2087; CHECK-NEXT:    vldrb.u8 q1, [r2]2088; CHECK-NEXT:    vldrb.u8 q0, [r1]2089; CHECK-NEXT:    vpt.i8 ne, q1, zr2090; CHECK-NEXT:    vstrbt.8 q0, [r0, #-127]2091; CHECK-NEXT:    bx lr2092entry:2093  %z = getelementptr inbounds i8, ptr %y, i32 -1272094  %mask = load <16 x i8>, ptr %m, align 12095  %c = icmp ne <16 x i8> %mask, zeroinitializer2096  %0 = load <16 x i8>, ptr %x, align 12097  call void @llvm.masked.store.v16i8.p0(<16 x i8> %0, ptr %z, i32 1, <16 x i1> %c)2098  ret ptr %y2099}2100 2101define ptr @strb8_m128(ptr %y, ptr %x, ptr %m) {2102; CHECK-LABEL: strb8_m128:2103; CHECK:       @ %bb.0: @ %entry2104; CHECK-NEXT:    vldrb.u8 q1, [r2]2105; CHECK-NEXT:    vldrb.u8 q0, [r1]2106; CHECK-NEXT:    sub.w r1, r0, #1282107; CHECK-NEXT:    vpt.i8 ne, q1, zr2108; CHECK-NEXT:    vstrbt.8 q0, [r1]2109; CHECK-NEXT:    bx lr2110entry:2111  %z = getelementptr inbounds i8, ptr %y, i32 -1282112  %mask = load <16 x i8>, ptr %m, align 12113  %c = icmp ne <16 x i8> %mask, zeroinitializer2114  %0 = load <16 x i8>, ptr %x, align 12115  call void @llvm.masked.store.v16i8.p0(<16 x i8> %0, ptr %z, i32 1, <16 x i1> %c)2116  ret ptr %y2117}2118 2119define ptr @strwf32_4(ptr %y, ptr %x, ptr %m) {2120; CHECK-LABEL: strwf32_4:2121; CHECK:       @ %bb.0: @ %entry2122; CHECK-NEXT:    vldrw.u32 q1, [r2]2123; CHECK-NEXT:    vldrw.u32 q0, [r1]2124; CHECK-NEXT:    vpt.i32 ne, q1, zr2125; CHECK-NEXT:    vstrwt.32 q0, [r0, #4]2126; CHECK-NEXT:    bx lr2127entry:2128  %z = getelementptr inbounds i8, ptr %y, i32 42129  %mask = load <4 x i32>, ptr %m, align 42130  %c = icmp ne <4 x i32> %mask, zeroinitializer2131  %0 = load <4 x float>, ptr %x, align 42132  call void @llvm.masked.store.v4f32.p0(<4 x float> %0, ptr %z, i32 4, <4 x i1> %c)2133  ret ptr %y2134}2135 2136define ptr @strwf32_3(ptr %y, ptr %x, ptr %m) {2137; CHECK-LABEL: strwf32_3:2138; CHECK:       @ %bb.0: @ %entry2139; CHECK-NEXT:    vldrw.u32 q1, [r2]2140; CHECK-NEXT:    vldrw.u32 q0, [r1]2141; CHECK-NEXT:    adds r1, r0, #32142; CHECK-NEXT:    vpt.i32 ne, q1, zr2143; CHECK-NEXT:    vstrwt.32 q0, [r1]2144; CHECK-NEXT:    bx lr2145entry:2146  %z = getelementptr inbounds i8, ptr %y, i32 32147  %mask = load <4 x i32>, ptr %m, align 42148  %c = icmp ne <4 x i32> %mask, zeroinitializer2149  %0 = load <4 x float>, ptr %x, align 42150  call void @llvm.masked.store.v4f32.p0(<4 x float> %0, ptr %z, i32 4, <4 x i1> %c)2151  ret ptr %y2152}2153 2154define ptr @strwf32_2(ptr %y, ptr %x, ptr %m) {2155; CHECK-LABEL: strwf32_2:2156; CHECK:       @ %bb.0: @ %entry2157; CHECK-NEXT:    vldrw.u32 q1, [r2]2158; CHECK-NEXT:    vldrw.u32 q0, [r1]2159; CHECK-NEXT:    adds r1, r0, #22160; CHECK-NEXT:    vpt.i32 ne, q1, zr2161; CHECK-NEXT:    vstrwt.32 q0, [r1]2162; CHECK-NEXT:    bx lr2163entry:2164  %z = getelementptr inbounds i8, ptr %y, i32 22165  %mask = load <4 x i32>, ptr %m, align 42166  %c = icmp ne <4 x i32> %mask, zeroinitializer2167  %0 = load <4 x float>, ptr %x, align 42168  call void @llvm.masked.store.v4f32.p0(<4 x float> %0, ptr %z, i32 4, <4 x i1> %c)2169  ret ptr %y2170}2171 2172define ptr @strwf32_508(ptr %y, ptr %x, ptr %m) {2173; CHECK-LABEL: strwf32_508:2174; CHECK:       @ %bb.0: @ %entry2175; CHECK-NEXT:    vldrw.u32 q1, [r2]2176; CHECK-NEXT:    vldrw.u32 q0, [r1]2177; CHECK-NEXT:    vpt.i32 ne, q1, zr2178; CHECK-NEXT:    vstrwt.32 q0, [r0, #508]2179; CHECK-NEXT:    bx lr2180entry:2181  %z = getelementptr inbounds i8, ptr %y, i32 5082182  %mask = load <4 x i32>, ptr %m, align 42183  %c = icmp ne <4 x i32> %mask, zeroinitializer2184  %0 = load <4 x float>, ptr %x, align 42185  call void @llvm.masked.store.v4f32.p0(<4 x float> %0, ptr %z, i32 4, <4 x i1> %c)2186  ret ptr %y2187}2188 2189define ptr @strwf32_512(ptr %y, ptr %x, ptr %m) {2190; CHECK-LABEL: strwf32_512:2191; CHECK:       @ %bb.0: @ %entry2192; CHECK-NEXT:    vldrw.u32 q1, [r2]2193; CHECK-NEXT:    vldrw.u32 q0, [r1]2194; CHECK-NEXT:    add.w r1, r0, #5122195; CHECK-NEXT:    vpt.i32 ne, q1, zr2196; CHECK-NEXT:    vstrwt.32 q0, [r1]2197; CHECK-NEXT:    bx lr2198entry:2199  %z = getelementptr inbounds i8, ptr %y, i32 5122200  %mask = load <4 x i32>, ptr %m, align 42201  %c = icmp ne <4 x i32> %mask, zeroinitializer2202  %0 = load <4 x float>, ptr %x, align 42203  call void @llvm.masked.store.v4f32.p0(<4 x float> %0, ptr %z, i32 4, <4 x i1> %c)2204  ret ptr %y2205}2206 2207define ptr @strwf32_m508(ptr %y, ptr %x, ptr %m) {2208; CHECK-LABEL: strwf32_m508:2209; CHECK:       @ %bb.0: @ %entry2210; CHECK-NEXT:    vldrw.u32 q1, [r2]2211; CHECK-NEXT:    vldrw.u32 q0, [r1]2212; CHECK-NEXT:    vpt.i32 ne, q1, zr2213; CHECK-NEXT:    vstrwt.32 q0, [r0, #-508]2214; CHECK-NEXT:    bx lr2215entry:2216  %z = getelementptr inbounds i8, ptr %y, i32 -5082217  %mask = load <4 x i32>, ptr %m, align 42218  %c = icmp ne <4 x i32> %mask, zeroinitializer2219  %0 = load <4 x float>, ptr %x, align 42220  call void @llvm.masked.store.v4f32.p0(<4 x float> %0, ptr %z, i32 4, <4 x i1> %c)2221  ret ptr %y2222}2223 2224define ptr @strwf32_m512(ptr %y, ptr %x, ptr %m) {2225; CHECK-LABEL: strwf32_m512:2226; CHECK:       @ %bb.0: @ %entry2227; CHECK-NEXT:    vldrw.u32 q1, [r2]2228; CHECK-NEXT:    vldrw.u32 q0, [r1]2229; CHECK-NEXT:    sub.w r1, r0, #5122230; CHECK-NEXT:    vpt.i32 ne, q1, zr2231; CHECK-NEXT:    vstrwt.32 q0, [r1]2232; CHECK-NEXT:    bx lr2233entry:2234  %z = getelementptr inbounds i8, ptr %y, i32 -5122235  %mask = load <4 x i32>, ptr %m, align 42236  %c = icmp ne <4 x i32> %mask, zeroinitializer2237  %0 = load <4 x float>, ptr %x, align 42238  call void @llvm.masked.store.v4f32.p0(<4 x float> %0, ptr %z, i32 4, <4 x i1> %c)2239  ret ptr %y2240}2241 2242define ptr @strhf16_4(ptr %y, ptr %x, ptr %m) {2243; CHECK-LABEL: strhf16_4:2244; CHECK:       @ %bb.0: @ %entry2245; CHECK-NEXT:    vldrh.u16 q1, [r2]2246; CHECK-NEXT:    vldrh.u16 q0, [r1]2247; CHECK-NEXT:    vpt.i16 ne, q1, zr2248; CHECK-NEXT:    vstrht.16 q0, [r0, #4]2249; CHECK-NEXT:    bx lr2250entry:2251  %z = getelementptr inbounds i8, ptr %y, i32 42252  %mask = load <8 x i16>, ptr %m, align 22253  %c = icmp ne <8 x i16> %mask, zeroinitializer2254  %0 = load <8 x half>, ptr %x, align 22255  call void @llvm.masked.store.v8f16.p0(<8 x half> %0, ptr %z, i32 2, <8 x i1> %c)2256  ret ptr %y2257}2258 2259define ptr @strhf16_3(ptr %y, ptr %x, ptr %m) {2260; CHECK-LABEL: strhf16_3:2261; CHECK:       @ %bb.0: @ %entry2262; CHECK-NEXT:    vldrh.u16 q1, [r2]2263; CHECK-NEXT:    vldrh.u16 q0, [r1]2264; CHECK-NEXT:    adds r1, r0, #32265; CHECK-NEXT:    vpt.i16 ne, q1, zr2266; CHECK-NEXT:    vstrht.16 q0, [r1]2267; CHECK-NEXT:    bx lr2268entry:2269  %z = getelementptr inbounds i8, ptr %y, i32 32270  %mask = load <8 x i16>, ptr %m, align 22271  %c = icmp ne <8 x i16> %mask, zeroinitializer2272  %0 = load <8 x half>, ptr %x, align 22273  call void @llvm.masked.store.v8f16.p0(<8 x half> %0, ptr %z, i32 2, <8 x i1> %c)2274  ret ptr %y2275}2276 2277define ptr @strhf16_2(ptr %y, ptr %x, ptr %m) {2278; CHECK-LABEL: strhf16_2:2279; CHECK:       @ %bb.0: @ %entry2280; CHECK-NEXT:    vldrh.u16 q1, [r2]2281; CHECK-NEXT:    vldrh.u16 q0, [r1]2282; CHECK-NEXT:    vpt.i16 ne, q1, zr2283; CHECK-NEXT:    vstrht.16 q0, [r0, #2]2284; CHECK-NEXT:    bx lr2285entry:2286  %z = getelementptr inbounds i8, ptr %y, i32 22287  %mask = load <8 x i16>, ptr %m, align 22288  %c = icmp ne <8 x i16> %mask, zeroinitializer2289  %0 = load <8 x half>, ptr %x, align 22290  call void @llvm.masked.store.v8f16.p0(<8 x half> %0, ptr %z, i32 2, <8 x i1> %c)2291  ret ptr %y2292}2293 2294define ptr @strhf16_254(ptr %y, ptr %x, ptr %m) {2295; CHECK-LABEL: strhf16_254:2296; CHECK:       @ %bb.0: @ %entry2297; CHECK-NEXT:    vldrh.u16 q1, [r2]2298; CHECK-NEXT:    vldrh.u16 q0, [r1]2299; CHECK-NEXT:    vpt.i16 ne, q1, zr2300; CHECK-NEXT:    vstrht.16 q0, [r0, #254]2301; CHECK-NEXT:    bx lr2302entry:2303  %z = getelementptr inbounds i8, ptr %y, i32 2542304  %mask = load <8 x i16>, ptr %m, align 22305  %c = icmp ne <8 x i16> %mask, zeroinitializer2306  %0 = load <8 x half>, ptr %x, align 22307  call void @llvm.masked.store.v8f16.p0(<8 x half> %0, ptr %z, i32 2, <8 x i1> %c)2308  ret ptr %y2309}2310 2311define ptr @strhf16_256(ptr %y, ptr %x, ptr %m) {2312; CHECK-LABEL: strhf16_256:2313; CHECK:       @ %bb.0: @ %entry2314; CHECK-NEXT:    vldrh.u16 q1, [r2]2315; CHECK-NEXT:    vldrh.u16 q0, [r1]2316; CHECK-NEXT:    add.w r1, r0, #2562317; CHECK-NEXT:    vpt.i16 ne, q1, zr2318; CHECK-NEXT:    vstrht.16 q0, [r1]2319; CHECK-NEXT:    bx lr2320entry:2321  %z = getelementptr inbounds i8, ptr %y, i32 2562322  %mask = load <8 x i16>, ptr %m, align 22323  %c = icmp ne <8 x i16> %mask, zeroinitializer2324  %0 = load <8 x half>, ptr %x, align 22325  call void @llvm.masked.store.v8f16.p0(<8 x half> %0, ptr %z, i32 2, <8 x i1> %c)2326  ret ptr %y2327}2328 2329define ptr @strhf16_m254(ptr %y, ptr %x, ptr %m) {2330; CHECK-LABEL: strhf16_m254:2331; CHECK:       @ %bb.0: @ %entry2332; CHECK-NEXT:    vldrh.u16 q1, [r2]2333; CHECK-NEXT:    vldrh.u16 q0, [r1]2334; CHECK-NEXT:    vpt.i16 ne, q1, zr2335; CHECK-NEXT:    vstrht.16 q0, [r0, #-254]2336; CHECK-NEXT:    bx lr2337entry:2338  %z = getelementptr inbounds i8, ptr %y, i32 -2542339  %mask = load <8 x i16>, ptr %m, align 22340  %c = icmp ne <8 x i16> %mask, zeroinitializer2341  %0 = load <8 x half>, ptr %x, align 22342  call void @llvm.masked.store.v8f16.p0(<8 x half> %0, ptr %z, i32 2, <8 x i1> %c)2343  ret ptr %y2344}2345 2346define ptr @strhf16_m256(ptr %y, ptr %x, ptr %m) {2347; CHECK-LABEL: strhf16_m256:2348; CHECK:       @ %bb.0: @ %entry2349; CHECK-NEXT:    vldrh.u16 q1, [r2]2350; CHECK-NEXT:    vldrh.u16 q0, [r1]2351; CHECK-NEXT:    sub.w r1, r0, #2562352; CHECK-NEXT:    vpt.i16 ne, q1, zr2353; CHECK-NEXT:    vstrht.16 q0, [r1]2354; CHECK-NEXT:    bx lr2355entry:2356  %z = getelementptr inbounds i8, ptr %y, i32 -2562357  %mask = load <8 x i16>, ptr %m, align 22358  %c = icmp ne <8 x i16> %mask, zeroinitializer2359  %0 = load <8 x half>, ptr %x, align 22360  call void @llvm.masked.store.v8f16.p0(<8 x half> %0, ptr %z, i32 2, <8 x i1> %c)2361  ret ptr %y2362}2363 2364declare <4 x i32> @llvm.masked.load.v4i32.p0(ptr, i32, <4 x i1>, <4 x i32>)2365declare <4 x i16> @llvm.masked.load.v4i16.p0(ptr, i32, <4 x i1>, <4 x i16>)2366declare <8 x i16> @llvm.masked.load.v8i16.p0(ptr, i32, <8 x i1>, <8 x i16>)2367declare <4 x i8> @llvm.masked.load.v4i8.p0(ptr, i32, <4 x i1>, <4 x i8>)2368declare <8 x i8> @llvm.masked.load.v8i8.p0(ptr, i32, <8 x i1>, <8 x i8>)2369declare <16 x i8> @llvm.masked.load.v16i8.p0(ptr, i32, <16 x i1>, <16 x i8>)2370declare <4 x float> @llvm.masked.load.v4f32.p0(ptr, i32, <4 x i1>, <4 x float>)2371declare <8 x half> @llvm.masked.load.v8f16.p0(ptr, i32, <8 x i1>, <8 x half>)2372 2373declare void @llvm.masked.store.v4i32.p0(<4 x i32>, ptr, i32, <4 x i1>)2374declare void @llvm.masked.store.v8i16.p0(<8 x i16>, ptr, i32, <8 x i1>)2375declare void @llvm.masked.store.v4i16.p0(<4 x i16>, ptr, i32, <4 x i1>)2376declare void @llvm.masked.store.v16i8.p0(<16 x i8>, ptr, i32, <16 x i1>)2377declare void @llvm.masked.store.v8i8.p0(<8 x i8>, ptr, i32, <8 x i1>)2378declare void @llvm.masked.store.v4i8.p0(<4 x i8>, ptr, i32, <4 x i1>)2379declare void @llvm.masked.store.v4f32.p0(<4 x float>, ptr, i32, <4 x i1>)2380declare void @llvm.masked.store.v8f16.p0(<8 x half>, ptr, i32, <8 x i1>)2381