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