brintos

brintos / llvm-project-archived public Read only

0
0
Text · 102.8 KiB · de7af89 Raw
3182 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.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK3 4define arm_aapcs_vfpcc <4 x i32> @add_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {5; CHECK-LABEL: add_v4i32_x:6; CHECK:       @ %bb.0: @ %entry7; CHECK-NEXT:    vctp.32 r08; CHECK-NEXT:    vpst9; CHECK-NEXT:    vaddt.i32 q0, q0, q110; CHECK-NEXT:    bx lr11entry:12  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)13  %a = add <4 x i32> %x, %y14  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x15  ret <4 x i32> %b16}17 18define arm_aapcs_vfpcc <8 x i16> @add_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {19; CHECK-LABEL: add_v8i16_x:20; CHECK:       @ %bb.0: @ %entry21; CHECK-NEXT:    vctp.16 r022; CHECK-NEXT:    vpst23; CHECK-NEXT:    vaddt.i16 q0, q0, q124; CHECK-NEXT:    bx lr25entry:26  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)27  %a = add <8 x i16> %x, %y28  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x29  ret <8 x i16> %b30}31 32define arm_aapcs_vfpcc <16 x i8> @add_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {33; CHECK-LABEL: add_v16i8_x:34; CHECK:       @ %bb.0: @ %entry35; CHECK-NEXT:    vctp.8 r036; CHECK-NEXT:    vpst37; CHECK-NEXT:    vaddt.i8 q0, q0, q138; CHECK-NEXT:    bx lr39entry:40  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)41  %a = add <16 x i8> %x, %y42  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x43  ret <16 x i8> %b44}45 46define arm_aapcs_vfpcc <4 x i32> @sub_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {47; CHECK-LABEL: sub_v4i32_x:48; CHECK:       @ %bb.0: @ %entry49; CHECK-NEXT:    vctp.32 r050; CHECK-NEXT:    vpst51; CHECK-NEXT:    vsubt.i32 q0, q0, q152; CHECK-NEXT:    bx lr53entry:54  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)55  %a = sub <4 x i32> %x, %y56  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x57  ret <4 x i32> %b58}59 60define arm_aapcs_vfpcc <8 x i16> @sub_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {61; CHECK-LABEL: sub_v8i16_x:62; CHECK:       @ %bb.0: @ %entry63; CHECK-NEXT:    vctp.16 r064; CHECK-NEXT:    vpst65; CHECK-NEXT:    vsubt.i16 q0, q0, q166; CHECK-NEXT:    bx lr67entry:68  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)69  %a = sub <8 x i16> %x, %y70  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x71  ret <8 x i16> %b72}73 74define arm_aapcs_vfpcc <16 x i8> @sub_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {75; CHECK-LABEL: sub_v16i8_x:76; CHECK:       @ %bb.0: @ %entry77; CHECK-NEXT:    vctp.8 r078; CHECK-NEXT:    vpst79; CHECK-NEXT:    vsubt.i8 q0, q0, q180; CHECK-NEXT:    bx lr81entry:82  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)83  %a = sub <16 x i8> %x, %y84  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x85  ret <16 x i8> %b86}87 88define arm_aapcs_vfpcc <4 x i32> @mul_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {89; CHECK-LABEL: mul_v4i32_x:90; CHECK:       @ %bb.0: @ %entry91; CHECK-NEXT:    vctp.32 r092; CHECK-NEXT:    vpst93; CHECK-NEXT:    vmult.i32 q0, q0, q194; CHECK-NEXT:    bx lr95entry:96  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)97  %a = mul <4 x i32> %x, %y98  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x99  ret <4 x i32> %b100}101 102define arm_aapcs_vfpcc <8 x i16> @mul_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {103; CHECK-LABEL: mul_v8i16_x:104; CHECK:       @ %bb.0: @ %entry105; CHECK-NEXT:    vctp.16 r0106; CHECK-NEXT:    vpst107; CHECK-NEXT:    vmult.i16 q0, q0, q1108; CHECK-NEXT:    bx lr109entry:110  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)111  %a = mul <8 x i16> %x, %y112  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x113  ret <8 x i16> %b114}115 116define arm_aapcs_vfpcc <16 x i8> @mul_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {117; CHECK-LABEL: mul_v16i8_x:118; CHECK:       @ %bb.0: @ %entry119; CHECK-NEXT:    vctp.8 r0120; CHECK-NEXT:    vpst121; CHECK-NEXT:    vmult.i8 q0, q0, q1122; CHECK-NEXT:    bx lr123entry:124  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)125  %a = mul <16 x i8> %x, %y126  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x127  ret <16 x i8> %b128}129 130define arm_aapcs_vfpcc <4 x i32> @and_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {131; CHECK-LABEL: and_v4i32_x:132; CHECK:       @ %bb.0: @ %entry133; CHECK-NEXT:    vctp.32 r0134; CHECK-NEXT:    vpst135; CHECK-NEXT:    vandt q0, q0, q1136; CHECK-NEXT:    bx lr137entry:138  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)139  %a = and <4 x i32> %x, %y140  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x141  ret <4 x i32> %b142}143 144define arm_aapcs_vfpcc <8 x i16> @and_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {145; CHECK-LABEL: and_v8i16_x:146; CHECK:       @ %bb.0: @ %entry147; CHECK-NEXT:    vctp.16 r0148; CHECK-NEXT:    vpst149; CHECK-NEXT:    vandt q0, q0, q1150; CHECK-NEXT:    bx lr151entry:152  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)153  %a = and <8 x i16> %x, %y154  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x155  ret <8 x i16> %b156}157 158define arm_aapcs_vfpcc <16 x i8> @and_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {159; CHECK-LABEL: and_v16i8_x:160; CHECK:       @ %bb.0: @ %entry161; CHECK-NEXT:    vctp.8 r0162; CHECK-NEXT:    vpst163; CHECK-NEXT:    vandt q0, q0, q1164; CHECK-NEXT:    bx lr165entry:166  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)167  %a = and <16 x i8> %x, %y168  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x169  ret <16 x i8> %b170}171 172define arm_aapcs_vfpcc <4 x i32> @or_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {173; CHECK-LABEL: or_v4i32_x:174; CHECK:       @ %bb.0: @ %entry175; CHECK-NEXT:    vctp.32 r0176; CHECK-NEXT:    vpst177; CHECK-NEXT:    vorrt q0, q0, q1178; CHECK-NEXT:    bx lr179entry:180  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)181  %a = or <4 x i32> %x, %y182  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x183  ret <4 x i32> %b184}185 186define arm_aapcs_vfpcc <8 x i16> @or_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {187; CHECK-LABEL: or_v8i16_x:188; CHECK:       @ %bb.0: @ %entry189; CHECK-NEXT:    vctp.16 r0190; CHECK-NEXT:    vpst191; CHECK-NEXT:    vorrt q0, q0, q1192; CHECK-NEXT:    bx lr193entry:194  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)195  %a = or <8 x i16> %x, %y196  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x197  ret <8 x i16> %b198}199 200define arm_aapcs_vfpcc <16 x i8> @or_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {201; CHECK-LABEL: or_v16i8_x:202; CHECK:       @ %bb.0: @ %entry203; CHECK-NEXT:    vctp.8 r0204; CHECK-NEXT:    vpst205; CHECK-NEXT:    vorrt q0, q0, q1206; CHECK-NEXT:    bx lr207entry:208  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)209  %a = or <16 x i8> %x, %y210  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x211  ret <16 x i8> %b212}213 214define arm_aapcs_vfpcc <4 x i32> @xor_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {215; CHECK-LABEL: xor_v4i32_x:216; CHECK:       @ %bb.0: @ %entry217; CHECK-NEXT:    vctp.32 r0218; CHECK-NEXT:    vpst219; CHECK-NEXT:    veort q0, q0, q1220; CHECK-NEXT:    bx lr221entry:222  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)223  %a = xor <4 x i32> %x, %y224  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x225  ret <4 x i32> %b226}227 228define arm_aapcs_vfpcc <8 x i16> @xor_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {229; CHECK-LABEL: xor_v8i16_x:230; CHECK:       @ %bb.0: @ %entry231; CHECK-NEXT:    vctp.16 r0232; CHECK-NEXT:    vpst233; CHECK-NEXT:    veort q0, q0, q1234; CHECK-NEXT:    bx lr235entry:236  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)237  %a = xor <8 x i16> %x, %y238  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x239  ret <8 x i16> %b240}241 242define arm_aapcs_vfpcc <16 x i8> @xor_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {243; CHECK-LABEL: xor_v16i8_x:244; CHECK:       @ %bb.0: @ %entry245; CHECK-NEXT:    vctp.8 r0246; CHECK-NEXT:    vpst247; CHECK-NEXT:    veort q0, q0, q1248; CHECK-NEXT:    bx lr249entry:250  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)251  %a = xor <16 x i8> %x, %y252  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x253  ret <16 x i8> %b254}255 256define arm_aapcs_vfpcc <4 x i32> @shl_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {257; CHECK-LABEL: shl_v4i32_x:258; CHECK:       @ %bb.0: @ %entry259; CHECK-NEXT:    vctp.32 r0260; CHECK-NEXT:    vpst261; CHECK-NEXT:    vshlt.u32 q0, q0, q1262; CHECK-NEXT:    bx lr263entry:264  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)265  %a = shl <4 x i32> %x, %y266  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x267  ret <4 x i32> %b268}269 270define arm_aapcs_vfpcc <8 x i16> @shl_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {271; CHECK-LABEL: shl_v8i16_x:272; CHECK:       @ %bb.0: @ %entry273; CHECK-NEXT:    vctp.16 r0274; CHECK-NEXT:    vpst275; CHECK-NEXT:    vshlt.u16 q0, q0, q1276; CHECK-NEXT:    bx lr277entry:278  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)279  %a = shl <8 x i16> %x, %y280  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x281  ret <8 x i16> %b282}283 284define arm_aapcs_vfpcc <16 x i8> @shl_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {285; CHECK-LABEL: shl_v16i8_x:286; CHECK:       @ %bb.0: @ %entry287; CHECK-NEXT:    vctp.8 r0288; CHECK-NEXT:    vpst289; CHECK-NEXT:    vshlt.u8 q0, q0, q1290; CHECK-NEXT:    bx lr291entry:292  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)293  %a = shl <16 x i8> %x, %y294  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x295  ret <16 x i8> %b296}297 298define arm_aapcs_vfpcc <4 x i32> @ashr_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {299; CHECK-LABEL: ashr_v4i32_x:300; CHECK:       @ %bb.0: @ %entry301; CHECK-NEXT:    vneg.s32 q1, q1302; CHECK-NEXT:    vctp.32 r0303; CHECK-NEXT:    vpst304; CHECK-NEXT:    vshlt.s32 q0, q0, q1305; CHECK-NEXT:    bx lr306entry:307  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)308  %a = ashr <4 x i32> %x, %y309  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x310  ret <4 x i32> %b311}312 313define arm_aapcs_vfpcc <8 x i16> @ashr_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {314; CHECK-LABEL: ashr_v8i16_x:315; CHECK:       @ %bb.0: @ %entry316; CHECK-NEXT:    vneg.s16 q1, q1317; CHECK-NEXT:    vctp.16 r0318; CHECK-NEXT:    vpst319; CHECK-NEXT:    vshlt.s16 q0, q0, q1320; CHECK-NEXT:    bx lr321entry:322  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)323  %a = ashr <8 x i16> %x, %y324  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x325  ret <8 x i16> %b326}327 328define arm_aapcs_vfpcc <16 x i8> @ashr_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {329; CHECK-LABEL: ashr_v16i8_x:330; CHECK:       @ %bb.0: @ %entry331; CHECK-NEXT:    vneg.s8 q1, q1332; CHECK-NEXT:    vctp.8 r0333; CHECK-NEXT:    vpst334; CHECK-NEXT:    vshlt.s8 q0, q0, q1335; CHECK-NEXT:    bx lr336entry:337  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)338  %a = ashr <16 x i8> %x, %y339  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x340  ret <16 x i8> %b341}342 343define arm_aapcs_vfpcc <4 x i32> @lshr_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {344; CHECK-LABEL: lshr_v4i32_x:345; CHECK:       @ %bb.0: @ %entry346; CHECK-NEXT:    vneg.s32 q1, q1347; CHECK-NEXT:    vctp.32 r0348; CHECK-NEXT:    vpst349; CHECK-NEXT:    vshlt.u32 q0, q0, q1350; CHECK-NEXT:    bx lr351entry:352  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)353  %a = lshr <4 x i32> %x, %y354  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x355  ret <4 x i32> %b356}357 358define arm_aapcs_vfpcc <8 x i16> @lshr_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {359; CHECK-LABEL: lshr_v8i16_x:360; CHECK:       @ %bb.0: @ %entry361; CHECK-NEXT:    vneg.s16 q1, q1362; CHECK-NEXT:    vctp.16 r0363; CHECK-NEXT:    vpst364; CHECK-NEXT:    vshlt.u16 q0, q0, q1365; CHECK-NEXT:    bx lr366entry:367  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)368  %a = lshr <8 x i16> %x, %y369  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x370  ret <8 x i16> %b371}372 373define arm_aapcs_vfpcc <16 x i8> @lshr_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {374; CHECK-LABEL: lshr_v16i8_x:375; CHECK:       @ %bb.0: @ %entry376; CHECK-NEXT:    vneg.s8 q1, q1377; CHECK-NEXT:    vctp.8 r0378; CHECK-NEXT:    vpst379; CHECK-NEXT:    vshlt.u8 q0, q0, q1380; CHECK-NEXT:    bx lr381entry:382  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)383  %a = lshr <16 x i8> %x, %y384  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x385  ret <16 x i8> %b386}387 388define arm_aapcs_vfpcc <4 x i32> @andnot_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {389; CHECK-LABEL: andnot_v4i32_x:390; CHECK:       @ %bb.0: @ %entry391; CHECK-NEXT:    vctp.32 r0392; CHECK-NEXT:    vpst393; CHECK-NEXT:    vbict q0, q0, q1394; CHECK-NEXT:    bx lr395entry:396  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)397  %y1 = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>398  %a = and <4 x i32> %x, %y1399  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x400  ret <4 x i32> %b401}402 403define arm_aapcs_vfpcc <8 x i16> @andnot_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {404; CHECK-LABEL: andnot_v8i16_x:405; CHECK:       @ %bb.0: @ %entry406; CHECK-NEXT:    vctp.16 r0407; CHECK-NEXT:    vpst408; CHECK-NEXT:    vbict q0, q0, q1409; CHECK-NEXT:    bx lr410entry:411  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)412  %y1 = xor <8 x i16> %y, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>413  %a = and <8 x i16> %x, %y1414  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x415  ret <8 x i16> %b416}417 418define arm_aapcs_vfpcc <16 x i8> @andnot_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {419; CHECK-LABEL: andnot_v16i8_x:420; CHECK:       @ %bb.0: @ %entry421; CHECK-NEXT:    vctp.8 r0422; CHECK-NEXT:    vpst423; CHECK-NEXT:    vbict q0, q0, q1424; CHECK-NEXT:    bx lr425entry:426  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)427  %y1 = xor <16 x i8> %y, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>428  %a = and <16 x i8> %x, %y1429  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x430  ret <16 x i8> %b431}432 433define arm_aapcs_vfpcc <4 x i32> @ornot_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {434; CHECK-LABEL: ornot_v4i32_x:435; CHECK:       @ %bb.0: @ %entry436; CHECK-NEXT:    vctp.32 r0437; CHECK-NEXT:    vpst438; CHECK-NEXT:    vornt q0, q0, q1439; CHECK-NEXT:    bx lr440entry:441  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)442  %y1 = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>443  %a = or <4 x i32> %x, %y1444  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x445  ret <4 x i32> %b446}447 448define arm_aapcs_vfpcc <8 x i16> @ornot_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {449; CHECK-LABEL: ornot_v8i16_x:450; CHECK:       @ %bb.0: @ %entry451; CHECK-NEXT:    vctp.16 r0452; CHECK-NEXT:    vpst453; CHECK-NEXT:    vornt q0, q0, q1454; CHECK-NEXT:    bx lr455entry:456  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)457  %y1 = xor <8 x i16> %y, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>458  %a = or <8 x i16> %x, %y1459  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x460  ret <8 x i16> %b461}462 463define arm_aapcs_vfpcc <16 x i8> @ornot_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {464; CHECK-LABEL: ornot_v16i8_x:465; CHECK:       @ %bb.0: @ %entry466; CHECK-NEXT:    vctp.8 r0467; CHECK-NEXT:    vpst468; CHECK-NEXT:    vornt q0, q0, q1469; CHECK-NEXT:    bx lr470entry:471  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)472  %y1 = xor <16 x i8> %y, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>473  %a = or <16 x i8> %x, %y1474  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x475  ret <16 x i8> %b476}477 478define arm_aapcs_vfpcc <4 x float> @fadd_v4f32_x(<4 x float> %x, <4 x float> %y, i32 %n) {479; CHECK-LABEL: fadd_v4f32_x:480; CHECK:       @ %bb.0: @ %entry481; CHECK-NEXT:    vctp.32 r0482; CHECK-NEXT:    vpst483; CHECK-NEXT:    vaddt.f32 q0, q0, q1484; CHECK-NEXT:    bx lr485entry:486  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)487  %a = fadd <4 x float> %x, %y488  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x489  ret <4 x float> %b490}491 492define arm_aapcs_vfpcc <8 x half> @fadd_v8f16_x(<8 x half> %x, <8 x half> %y, i32 %n) {493; CHECK-LABEL: fadd_v8f16_x:494; CHECK:       @ %bb.0: @ %entry495; CHECK-NEXT:    vctp.16 r0496; CHECK-NEXT:    vpst497; CHECK-NEXT:    vaddt.f16 q0, q0, q1498; CHECK-NEXT:    bx lr499entry:500  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)501  %a = fadd <8 x half> %x, %y502  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x503  ret <8 x half> %b504}505 506define arm_aapcs_vfpcc <4 x float> @fsub_v4f32_x(<4 x float> %x, <4 x float> %y, i32 %n) {507; CHECK-LABEL: fsub_v4f32_x:508; CHECK:       @ %bb.0: @ %entry509; CHECK-NEXT:    vctp.32 r0510; CHECK-NEXT:    vpst511; CHECK-NEXT:    vsubt.f32 q0, q0, q1512; CHECK-NEXT:    bx lr513entry:514  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)515  %a = fsub <4 x float> %x, %y516  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x517  ret <4 x float> %b518}519 520define arm_aapcs_vfpcc <8 x half> @fsub_v8f16_x(<8 x half> %x, <8 x half> %y, i32 %n) {521; CHECK-LABEL: fsub_v8f16_x:522; CHECK:       @ %bb.0: @ %entry523; CHECK-NEXT:    vctp.16 r0524; CHECK-NEXT:    vpst525; CHECK-NEXT:    vsubt.f16 q0, q0, q1526; CHECK-NEXT:    bx lr527entry:528  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)529  %a = fsub <8 x half> %x, %y530  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x531  ret <8 x half> %b532}533 534define arm_aapcs_vfpcc <4 x float> @fmul_v4f32_x(<4 x float> %x, <4 x float> %y, i32 %n) {535; CHECK-LABEL: fmul_v4f32_x:536; CHECK:       @ %bb.0: @ %entry537; CHECK-NEXT:    vctp.32 r0538; CHECK-NEXT:    vpst539; CHECK-NEXT:    vmult.f32 q0, q0, q1540; CHECK-NEXT:    bx lr541entry:542  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)543  %a = fmul <4 x float> %x, %y544  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x545  ret <4 x float> %b546}547 548define arm_aapcs_vfpcc <8 x half> @fmul_v8f16_x(<8 x half> %x, <8 x half> %y, i32 %n) {549; CHECK-LABEL: fmul_v8f16_x:550; CHECK:       @ %bb.0: @ %entry551; CHECK-NEXT:    vctp.16 r0552; CHECK-NEXT:    vpst553; CHECK-NEXT:    vmult.f16 q0, q0, q1554; CHECK-NEXT:    bx lr555entry:556  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)557  %a = fmul <8 x half> %x, %y558  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x559  ret <8 x half> %b560}561 562define arm_aapcs_vfpcc <4 x float> @fdiv_v4f32_x(<4 x float> %x, <4 x float> %y, i32 %n) {563; CHECK-LABEL: fdiv_v4f32_x:564; CHECK:       @ %bb.0: @ %entry565; CHECK-NEXT:    vdiv.f32 s7, s3, s7566; CHECK-NEXT:    vctp.32 r0567; CHECK-NEXT:    vdiv.f32 s6, s2, s6568; CHECK-NEXT:    vdiv.f32 s5, s1, s5569; CHECK-NEXT:    vdiv.f32 s4, s0, s4570; CHECK-NEXT:    vpst571; CHECK-NEXT:    vmovt q0, q1572; CHECK-NEXT:    bx lr573entry:574  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)575  %a = fdiv <4 x float> %x, %y576  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x577  ret <4 x float> %b578}579 580define arm_aapcs_vfpcc <8 x half> @fdiv_v8f16_x(<8 x half> %x, <8 x half> %y, i32 %n) {581; CHECK-LABEL: fdiv_v8f16_x:582; CHECK:       @ %bb.0: @ %entry583; CHECK-NEXT:    vmovx.f16 s8, s4584; CHECK-NEXT:    vmovx.f16 s10, s0585; CHECK-NEXT:    vdiv.f16 s8, s10, s8586; CHECK-NEXT:    vdiv.f16 s4, s0, s4587; CHECK-NEXT:    vins.f16 s4, s8588; CHECK-NEXT:    vmovx.f16 s8, s5589; CHECK-NEXT:    vmovx.f16 s10, s1590; CHECK-NEXT:    vdiv.f16 s5, s1, s5591; CHECK-NEXT:    vdiv.f16 s8, s10, s8592; CHECK-NEXT:    vmovx.f16 s10, s2593; CHECK-NEXT:    vins.f16 s5, s8594; CHECK-NEXT:    vmovx.f16 s8, s6595; CHECK-NEXT:    vdiv.f16 s8, s10, s8596; CHECK-NEXT:    vdiv.f16 s6, s2, s6597; CHECK-NEXT:    vins.f16 s6, s8598; CHECK-NEXT:    vmovx.f16 s8, s7599; CHECK-NEXT:    vmovx.f16 s10, s3600; CHECK-NEXT:    vdiv.f16 s7, s3, s7601; CHECK-NEXT:    vdiv.f16 s8, s10, s8602; CHECK-NEXT:    vctp.16 r0603; CHECK-NEXT:    vins.f16 s7, s8604; CHECK-NEXT:    vpst605; CHECK-NEXT:    vmovt q0, q1606; CHECK-NEXT:    bx lr607entry:608  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)609  %a = fdiv <8 x half> %x, %y610  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x611  ret <8 x half> %b612}613 614define arm_aapcs_vfpcc <4 x float> @fmai_v4f32_x(<4 x float> %x, <4 x float> %y, <4 x float> %z, i32 %n) {615; CHECK-LABEL: fmai_v4f32_x:616; CHECK:       @ %bb.0: @ %entry617; CHECK-NEXT:    vctp.32 r0618; CHECK-NEXT:    vpst619; CHECK-NEXT:    vfmat.f32 q0, q1, q2620; CHECK-NEXT:    bx lr621entry:622  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)623  %a = call <4 x float> @llvm.fma.v4f32(<4 x float> %y, <4 x float> %z, <4 x float> %x)624  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x625  ret <4 x float> %b626}627 628define arm_aapcs_vfpcc <8 x half> @fmai_v8f16_x(<8 x half> %x, <8 x half> %y, <8 x half> %z, i32 %n) {629; CHECK-LABEL: fmai_v8f16_x:630; CHECK:       @ %bb.0: @ %entry631; CHECK-NEXT:    vctp.16 r0632; CHECK-NEXT:    vpst633; CHECK-NEXT:    vfmat.f16 q0, q1, q2634; CHECK-NEXT:    bx lr635entry:636  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)637  %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %z, <8 x half> %x)638  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x639  ret <8 x half> %b640}641 642define arm_aapcs_vfpcc <4 x float> @fma_v4f32_x(<4 x float> %x, <4 x float> %y, <4 x float> %z, i32 %n) {643; CHECK-LABEL: fma_v4f32_x:644; CHECK:       @ %bb.0: @ %entry645; CHECK-NEXT:    vctp.32 r0646; CHECK-NEXT:    vpst647; CHECK-NEXT:    vfmat.f32 q0, q1, q2648; CHECK-NEXT:    bx lr649entry:650  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)651  %m = fmul fast <4 x float> %y, %z652  %a = fadd fast <4 x float> %m, %x653  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x654  ret <4 x float> %b655}656 657define arm_aapcs_vfpcc <8 x half> @fma_v8f16_x(<8 x half> %x, <8 x half> %y, <8 x half> %z, i32 %n) {658; CHECK-LABEL: fma_v8f16_x:659; CHECK:       @ %bb.0: @ %entry660; CHECK-NEXT:    vctp.16 r0661; CHECK-NEXT:    vpst662; CHECK-NEXT:    vfmat.f16 q0, q1, q2663; CHECK-NEXT:    bx lr664entry:665  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)666  %m = fmul fast <8 x half> %y, %z667  %a = fadd fast <8 x half> %m, %x668  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x669  ret <8 x half> %b670}671 672define arm_aapcs_vfpcc <4 x i32> @icmp_slt_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {673; CHECK-LABEL: icmp_slt_v4i32_x:674; CHECK:       @ %bb.0: @ %entry675; CHECK-NEXT:    vctp.32 r0676; CHECK-NEXT:    vpst677; CHECK-NEXT:    vmint.s32 q0, q0, q1678; CHECK-NEXT:    bx lr679entry:680  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)681  %a1 = icmp slt <4 x i32> %x, %y682  %a = select <4 x i1> %a1, <4 x i32> %x, <4 x i32> %y683  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x684  ret <4 x i32> %b685}686 687define arm_aapcs_vfpcc <8 x i16> @icmp_slt_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {688; CHECK-LABEL: icmp_slt_v8i16_x:689; CHECK:       @ %bb.0: @ %entry690; CHECK-NEXT:    vctp.16 r0691; CHECK-NEXT:    vpst692; CHECK-NEXT:    vmint.s16 q0, q0, q1693; CHECK-NEXT:    bx lr694entry:695  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)696  %a1 = icmp slt <8 x i16> %x, %y697  %a = select <8 x i1> %a1, <8 x i16> %x, <8 x i16> %y698  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x699  ret <8 x i16> %b700}701 702define arm_aapcs_vfpcc <16 x i8> @icmp_slt_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {703; CHECK-LABEL: icmp_slt_v16i8_x:704; CHECK:       @ %bb.0: @ %entry705; CHECK-NEXT:    vctp.8 r0706; CHECK-NEXT:    vpst707; CHECK-NEXT:    vmint.s8 q0, q0, q1708; CHECK-NEXT:    bx lr709entry:710  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)711  %a1 = icmp slt <16 x i8> %x, %y712  %a = select <16 x i1> %a1, <16 x i8> %x, <16 x i8> %y713  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x714  ret <16 x i8> %b715}716 717define arm_aapcs_vfpcc <4 x i32> @icmp_sgt_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {718; CHECK-LABEL: icmp_sgt_v4i32_x:719; CHECK:       @ %bb.0: @ %entry720; CHECK-NEXT:    vctp.32 r0721; CHECK-NEXT:    vpst722; CHECK-NEXT:    vmaxt.s32 q0, q0, q1723; CHECK-NEXT:    bx lr724entry:725  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)726  %a1 = icmp sgt <4 x i32> %x, %y727  %a = select <4 x i1> %a1, <4 x i32> %x, <4 x i32> %y728  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x729  ret <4 x i32> %b730}731 732define arm_aapcs_vfpcc <8 x i16> @icmp_sgt_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {733; CHECK-LABEL: icmp_sgt_v8i16_x:734; CHECK:       @ %bb.0: @ %entry735; CHECK-NEXT:    vctp.16 r0736; CHECK-NEXT:    vpst737; CHECK-NEXT:    vmaxt.s16 q0, q0, q1738; CHECK-NEXT:    bx lr739entry:740  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)741  %a1 = icmp sgt <8 x i16> %x, %y742  %a = select <8 x i1> %a1, <8 x i16> %x, <8 x i16> %y743  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x744  ret <8 x i16> %b745}746 747define arm_aapcs_vfpcc <16 x i8> @icmp_sgt_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {748; CHECK-LABEL: icmp_sgt_v16i8_x:749; CHECK:       @ %bb.0: @ %entry750; CHECK-NEXT:    vctp.8 r0751; CHECK-NEXT:    vpst752; CHECK-NEXT:    vmaxt.s8 q0, q0, q1753; CHECK-NEXT:    bx lr754entry:755  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)756  %a1 = icmp sgt <16 x i8> %x, %y757  %a = select <16 x i1> %a1, <16 x i8> %x, <16 x i8> %y758  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x759  ret <16 x i8> %b760}761 762define arm_aapcs_vfpcc <4 x i32> @icmp_ult_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {763; CHECK-LABEL: icmp_ult_v4i32_x:764; CHECK:       @ %bb.0: @ %entry765; CHECK-NEXT:    vctp.32 r0766; CHECK-NEXT:    vpst767; CHECK-NEXT:    vmint.u32 q0, q0, q1768; CHECK-NEXT:    bx lr769entry:770  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)771  %a1 = icmp ult <4 x i32> %x, %y772  %a = select <4 x i1> %a1, <4 x i32> %x, <4 x i32> %y773  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x774  ret <4 x i32> %b775}776 777define arm_aapcs_vfpcc <8 x i16> @icmp_ult_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {778; CHECK-LABEL: icmp_ult_v8i16_x:779; CHECK:       @ %bb.0: @ %entry780; CHECK-NEXT:    vctp.16 r0781; CHECK-NEXT:    vpst782; CHECK-NEXT:    vmint.u16 q0, q0, q1783; CHECK-NEXT:    bx lr784entry:785  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)786  %a1 = icmp ult <8 x i16> %x, %y787  %a = select <8 x i1> %a1, <8 x i16> %x, <8 x i16> %y788  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x789  ret <8 x i16> %b790}791 792define arm_aapcs_vfpcc <16 x i8> @icmp_ult_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {793; CHECK-LABEL: icmp_ult_v16i8_x:794; CHECK:       @ %bb.0: @ %entry795; CHECK-NEXT:    vctp.8 r0796; CHECK-NEXT:    vpst797; CHECK-NEXT:    vmint.u8 q0, q0, q1798; CHECK-NEXT:    bx lr799entry:800  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)801  %a1 = icmp ult <16 x i8> %x, %y802  %a = select <16 x i1> %a1, <16 x i8> %x, <16 x i8> %y803  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x804  ret <16 x i8> %b805}806 807define arm_aapcs_vfpcc <4 x i32> @icmp_ugt_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {808; CHECK-LABEL: icmp_ugt_v4i32_x:809; CHECK:       @ %bb.0: @ %entry810; CHECK-NEXT:    vctp.32 r0811; CHECK-NEXT:    vpst812; CHECK-NEXT:    vmaxt.u32 q0, q0, q1813; CHECK-NEXT:    bx lr814entry:815  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)816  %a1 = icmp ugt <4 x i32> %x, %y817  %a = select <4 x i1> %a1, <4 x i32> %x, <4 x i32> %y818  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x819  ret <4 x i32> %b820}821 822define arm_aapcs_vfpcc <8 x i16> @icmp_ugt_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {823; CHECK-LABEL: icmp_ugt_v8i16_x:824; CHECK:       @ %bb.0: @ %entry825; CHECK-NEXT:    vctp.16 r0826; CHECK-NEXT:    vpst827; CHECK-NEXT:    vmaxt.u16 q0, q0, q1828; CHECK-NEXT:    bx lr829entry:830  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)831  %a1 = icmp ugt <8 x i16> %x, %y832  %a = select <8 x i1> %a1, <8 x i16> %x, <8 x i16> %y833  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x834  ret <8 x i16> %b835}836 837define arm_aapcs_vfpcc <16 x i8> @icmp_ugt_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {838; CHECK-LABEL: icmp_ugt_v16i8_x:839; CHECK:       @ %bb.0: @ %entry840; CHECK-NEXT:    vctp.8 r0841; CHECK-NEXT:    vpst842; CHECK-NEXT:    vmaxt.u8 q0, q0, q1843; CHECK-NEXT:    bx lr844entry:845  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)846  %a1 = icmp ugt <16 x i8> %x, %y847  %a = select <16 x i1> %a1, <16 x i8> %x, <16 x i8> %y848  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x849  ret <16 x i8> %b850}851 852define arm_aapcs_vfpcc <4 x float> @fcmp_fast_olt_v4f32_x(<4 x float> %x, <4 x float> %y, i32 %n) {853; CHECK-LABEL: fcmp_fast_olt_v4f32_x:854; CHECK:       @ %bb.0: @ %entry855; CHECK-NEXT:    vctp.32 r0856; CHECK-NEXT:    vpst857; CHECK-NEXT:    vminnmt.f32 q0, q0, q1858; CHECK-NEXT:    bx lr859entry:860  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)861  %a1 = fcmp fast olt <4 x float> %x, %y862  %a = select <4 x i1> %a1, <4 x float> %x, <4 x float> %y863  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x864  ret <4 x float> %b865}866 867define arm_aapcs_vfpcc <8 x half> @fcmp_fast_olt_v8f16_x(<8 x half> %x, <8 x half> %y, i32 %n) {868; CHECK-LABEL: fcmp_fast_olt_v8f16_x:869; CHECK:       @ %bb.0: @ %entry870; CHECK-NEXT:    vctp.16 r0871; CHECK-NEXT:    vpst872; CHECK-NEXT:    vminnmt.f16 q0, q0, q1873; CHECK-NEXT:    bx lr874entry:875  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)876  %a1 = fcmp fast olt <8 x half> %x, %y877  %a = select <8 x i1> %a1, <8 x half> %x, <8 x half> %y878  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x879  ret <8 x half> %b880}881 882define arm_aapcs_vfpcc <4 x float> @fcmp_fast_ogt_v4f32_x(<4 x float> %x, <4 x float> %y, i32 %n) {883; CHECK-LABEL: fcmp_fast_ogt_v4f32_x:884; CHECK:       @ %bb.0: @ %entry885; CHECK-NEXT:    vctp.32 r0886; CHECK-NEXT:    vpst887; CHECK-NEXT:    vmaxnmt.f32 q0, q0, q1888; CHECK-NEXT:    bx lr889entry:890  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)891  %a1 = fcmp fast ogt <4 x float> %x, %y892  %a = select <4 x i1> %a1, <4 x float> %x, <4 x float> %y893  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x894  ret <4 x float> %b895}896 897define arm_aapcs_vfpcc <8 x half> @fcmp_fast_ogt_v8f16_x(<8 x half> %x, <8 x half> %y, i32 %n) {898; CHECK-LABEL: fcmp_fast_ogt_v8f16_x:899; CHECK:       @ %bb.0: @ %entry900; CHECK-NEXT:    vctp.16 r0901; CHECK-NEXT:    vpst902; CHECK-NEXT:    vmaxnmt.f16 q0, q0, q1903; CHECK-NEXT:    bx lr904entry:905  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)906  %a1 = fcmp fast ogt <8 x half> %x, %y907  %a = select <8 x i1> %a1, <8 x half> %x, <8 x half> %y908  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x909  ret <8 x half> %b910}911 912define arm_aapcs_vfpcc <4 x i32> @sadd_sat_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {913; CHECK-LABEL: sadd_sat_v4i32_x:914; CHECK:       @ %bb.0: @ %entry915; CHECK-NEXT:    vctp.32 r0916; CHECK-NEXT:    vpst917; CHECK-NEXT:    vqaddt.s32 q0, q0, q1918; CHECK-NEXT:    bx lr919entry:920  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)921  %a = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %x, <4 x i32> %y)922  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x923  ret <4 x i32> %b924}925 926define arm_aapcs_vfpcc <8 x i16> @sadd_sat_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {927; CHECK-LABEL: sadd_sat_v8i16_x:928; CHECK:       @ %bb.0: @ %entry929; CHECK-NEXT:    vctp.16 r0930; CHECK-NEXT:    vpst931; CHECK-NEXT:    vqaddt.s16 q0, q0, q1932; CHECK-NEXT:    bx lr933entry:934  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)935  %a = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %x, <8 x i16> %y)936  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x937  ret <8 x i16> %b938}939 940define arm_aapcs_vfpcc <16 x i8> @sadd_sat_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {941; CHECK-LABEL: sadd_sat_v16i8_x:942; CHECK:       @ %bb.0: @ %entry943; CHECK-NEXT:    vctp.8 r0944; CHECK-NEXT:    vpst945; CHECK-NEXT:    vqaddt.s8 q0, q0, q1946; CHECK-NEXT:    bx lr947entry:948  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)949  %a = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %x, <16 x i8> %y)950  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x951  ret <16 x i8> %b952}953 954define arm_aapcs_vfpcc <4 x i32> @uadd_sat_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {955; CHECK-LABEL: uadd_sat_v4i32_x:956; CHECK:       @ %bb.0: @ %entry957; CHECK-NEXT:    vctp.32 r0958; CHECK-NEXT:    vpst959; CHECK-NEXT:    vqaddt.u32 q0, q0, q1960; CHECK-NEXT:    bx lr961entry:962  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)963  %a = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %x, <4 x i32> %y)964  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x965  ret <4 x i32> %b966}967 968define arm_aapcs_vfpcc <8 x i16> @uadd_sat_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {969; CHECK-LABEL: uadd_sat_v8i16_x:970; CHECK:       @ %bb.0: @ %entry971; CHECK-NEXT:    vctp.16 r0972; CHECK-NEXT:    vpst973; CHECK-NEXT:    vqaddt.u16 q0, q0, q1974; CHECK-NEXT:    bx lr975entry:976  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)977  %a = call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %x, <8 x i16> %y)978  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x979  ret <8 x i16> %b980}981 982define arm_aapcs_vfpcc <16 x i8> @uadd_sat_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {983; CHECK-LABEL: uadd_sat_v16i8_x:984; CHECK:       @ %bb.0: @ %entry985; CHECK-NEXT:    vctp.8 r0986; CHECK-NEXT:    vpst987; CHECK-NEXT:    vqaddt.u8 q0, q0, q1988; CHECK-NEXT:    bx lr989entry:990  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)991  %a = call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %x, <16 x i8> %y)992  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x993  ret <16 x i8> %b994}995 996define arm_aapcs_vfpcc <4 x i32> @ssub_sat_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {997; CHECK-LABEL: ssub_sat_v4i32_x:998; CHECK:       @ %bb.0: @ %entry999; CHECK-NEXT:    vctp.32 r01000; CHECK-NEXT:    vpst1001; CHECK-NEXT:    vqsubt.s32 q0, q0, q11002; CHECK-NEXT:    bx lr1003entry:1004  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1005  %a = call <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32> %x, <4 x i32> %y)1006  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x1007  ret <4 x i32> %b1008}1009 1010define arm_aapcs_vfpcc <8 x i16> @ssub_sat_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {1011; CHECK-LABEL: ssub_sat_v8i16_x:1012; CHECK:       @ %bb.0: @ %entry1013; CHECK-NEXT:    vctp.16 r01014; CHECK-NEXT:    vpst1015; CHECK-NEXT:    vqsubt.s16 q0, q0, q11016; CHECK-NEXT:    bx lr1017entry:1018  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1019  %a = call <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16> %x, <8 x i16> %y)1020  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x1021  ret <8 x i16> %b1022}1023 1024define arm_aapcs_vfpcc <16 x i8> @ssub_sat_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {1025; CHECK-LABEL: ssub_sat_v16i8_x:1026; CHECK:       @ %bb.0: @ %entry1027; CHECK-NEXT:    vctp.8 r01028; CHECK-NEXT:    vpst1029; CHECK-NEXT:    vqsubt.s8 q0, q0, q11030; CHECK-NEXT:    bx lr1031entry:1032  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1033  %a = call <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8> %x, <16 x i8> %y)1034  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x1035  ret <16 x i8> %b1036}1037 1038define arm_aapcs_vfpcc <4 x i32> @usub_sat_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {1039; CHECK-LABEL: usub_sat_v4i32_x:1040; CHECK:       @ %bb.0: @ %entry1041; CHECK-NEXT:    vctp.32 r01042; CHECK-NEXT:    vpst1043; CHECK-NEXT:    vqsubt.u32 q0, q0, q11044; CHECK-NEXT:    bx lr1045entry:1046  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1047  %a = call <4 x i32> @llvm.usub.sat.v4i32(<4 x i32> %x, <4 x i32> %y)1048  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x1049  ret <4 x i32> %b1050}1051 1052define arm_aapcs_vfpcc <8 x i16> @usub_sat_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {1053; CHECK-LABEL: usub_sat_v8i16_x:1054; CHECK:       @ %bb.0: @ %entry1055; CHECK-NEXT:    vctp.16 r01056; CHECK-NEXT:    vpst1057; CHECK-NEXT:    vqsubt.u16 q0, q0, q11058; CHECK-NEXT:    bx lr1059entry:1060  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1061  %a = call <8 x i16> @llvm.usub.sat.v8i16(<8 x i16> %x, <8 x i16> %y)1062  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x1063  ret <8 x i16> %b1064}1065 1066define arm_aapcs_vfpcc <16 x i8> @usub_sat_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {1067; CHECK-LABEL: usub_sat_v16i8_x:1068; CHECK:       @ %bb.0: @ %entry1069; CHECK-NEXT:    vctp.8 r01070; CHECK-NEXT:    vpst1071; CHECK-NEXT:    vqsubt.u8 q0, q0, q11072; CHECK-NEXT:    bx lr1073entry:1074  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1075  %a = call <16 x i8> @llvm.usub.sat.v16i8(<16 x i8> %x, <16 x i8> %y)1076  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x1077  ret <16 x i8> %b1078}1079 1080define arm_aapcs_vfpcc <4 x i32> @addqr_v4i32_x(<4 x i32> %x, i32 %y, i32 %n) {1081; CHECK-LABEL: addqr_v4i32_x:1082; CHECK:       @ %bb.0: @ %entry1083; CHECK-NEXT:    vctp.32 r11084; CHECK-NEXT:    vpst1085; CHECK-NEXT:    vaddt.i32 q0, q0, r01086; CHECK-NEXT:    bx lr1087entry:1088  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1089  %i = insertelement <4 x i32> undef, i32 %y, i32 01090  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer1091  %a = add <4 x i32> %x, %ys1092  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x1093  ret <4 x i32> %b1094}1095 1096define arm_aapcs_vfpcc <8 x i16> @addqr_v8i16_x(<8 x i16> %x, i16 %y, i32 %n) {1097; CHECK-LABEL: addqr_v8i16_x:1098; CHECK:       @ %bb.0: @ %entry1099; CHECK-NEXT:    vctp.16 r11100; CHECK-NEXT:    vpst1101; CHECK-NEXT:    vaddt.i16 q0, q0, r01102; CHECK-NEXT:    bx lr1103entry:1104  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1105  %i = insertelement <8 x i16> undef, i16 %y, i32 01106  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer1107  %a = add <8 x i16> %x, %ys1108  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x1109  ret <8 x i16> %b1110}1111 1112define arm_aapcs_vfpcc <16 x i8> @addqr_v16i8_x(<16 x i8> %x, i8 %y, i32 %n) {1113; CHECK-LABEL: addqr_v16i8_x:1114; CHECK:       @ %bb.0: @ %entry1115; CHECK-NEXT:    vctp.8 r11116; CHECK-NEXT:    vpst1117; CHECK-NEXT:    vaddt.i8 q0, q0, r01118; CHECK-NEXT:    bx lr1119entry:1120  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1121  %i = insertelement <16 x i8> undef, i8 %y, i32 01122  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer1123  %a = add <16 x i8> %x, %ys1124  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x1125  ret <16 x i8> %b1126}1127 1128define arm_aapcs_vfpcc <4 x i32> @subqr_v4i32_x(<4 x i32> %x, i32 %y, i32 %n) {1129; CHECK-LABEL: subqr_v4i32_x:1130; CHECK:       @ %bb.0: @ %entry1131; CHECK-NEXT:    vctp.32 r11132; CHECK-NEXT:    vpst1133; CHECK-NEXT:    vsubt.i32 q0, q0, r01134; CHECK-NEXT:    bx lr1135entry:1136  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1137  %i = insertelement <4 x i32> undef, i32 %y, i32 01138  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer1139  %a = sub <4 x i32> %x, %ys1140  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x1141  ret <4 x i32> %b1142}1143 1144define arm_aapcs_vfpcc <8 x i16> @subqr_v8i16_x(<8 x i16> %x, i16 %y, i32 %n) {1145; CHECK-LABEL: subqr_v8i16_x:1146; CHECK:       @ %bb.0: @ %entry1147; CHECK-NEXT:    vctp.16 r11148; CHECK-NEXT:    vpst1149; CHECK-NEXT:    vsubt.i16 q0, q0, r01150; CHECK-NEXT:    bx lr1151entry:1152  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1153  %i = insertelement <8 x i16> undef, i16 %y, i32 01154  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer1155  %a = sub <8 x i16> %x, %ys1156  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x1157  ret <8 x i16> %b1158}1159 1160define arm_aapcs_vfpcc <16 x i8> @subqr_v16i8_x(<16 x i8> %x, i8 %y, i32 %n) {1161; CHECK-LABEL: subqr_v16i8_x:1162; CHECK:       @ %bb.0: @ %entry1163; CHECK-NEXT:    vctp.8 r11164; CHECK-NEXT:    vpst1165; CHECK-NEXT:    vsubt.i8 q0, q0, r01166; CHECK-NEXT:    bx lr1167entry:1168  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1169  %i = insertelement <16 x i8> undef, i8 %y, i32 01170  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer1171  %a = sub <16 x i8> %x, %ys1172  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x1173  ret <16 x i8> %b1174}1175 1176define arm_aapcs_vfpcc <4 x i32> @mulqr_v4i32_x(<4 x i32> %x, i32 %y, i32 %n) {1177; CHECK-LABEL: mulqr_v4i32_x:1178; CHECK:       @ %bb.0: @ %entry1179; CHECK-NEXT:    vctp.32 r11180; CHECK-NEXT:    vpst1181; CHECK-NEXT:    vmult.i32 q0, q0, r01182; CHECK-NEXT:    bx lr1183entry:1184  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1185  %i = insertelement <4 x i32> undef, i32 %y, i32 01186  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer1187  %a = mul <4 x i32> %x, %ys1188  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x1189  ret <4 x i32> %b1190}1191 1192define arm_aapcs_vfpcc <8 x i16> @mulqr_v8i16_x(<8 x i16> %x, i16 %y, i32 %n) {1193; CHECK-LABEL: mulqr_v8i16_x:1194; CHECK:       @ %bb.0: @ %entry1195; CHECK-NEXT:    vctp.16 r11196; CHECK-NEXT:    vpst1197; CHECK-NEXT:    vmult.i16 q0, q0, r01198; CHECK-NEXT:    bx lr1199entry:1200  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1201  %i = insertelement <8 x i16> undef, i16 %y, i32 01202  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer1203  %a = mul <8 x i16> %x, %ys1204  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x1205  ret <8 x i16> %b1206}1207 1208define arm_aapcs_vfpcc <16 x i8> @mulqr_v16i8_x(<16 x i8> %x, i8 %y, i32 %n) {1209; CHECK-LABEL: mulqr_v16i8_x:1210; CHECK:       @ %bb.0: @ %entry1211; CHECK-NEXT:    vctp.8 r11212; CHECK-NEXT:    vpst1213; CHECK-NEXT:    vmult.i8 q0, q0, r01214; CHECK-NEXT:    bx lr1215entry:1216  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1217  %i = insertelement <16 x i8> undef, i8 %y, i32 01218  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer1219  %a = mul <16 x i8> %x, %ys1220  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x1221  ret <16 x i8> %b1222}1223 1224define arm_aapcs_vfpcc <4 x float> @faddqr_v4f32_x(<4 x float> %x, float %y, i32 %n) {1225; CHECK-LABEL: faddqr_v4f32_x:1226; CHECK:       @ %bb.0: @ %entry1227; CHECK-NEXT:    vmov r1, s41228; CHECK-NEXT:    vctp.32 r01229; CHECK-NEXT:    vpst1230; CHECK-NEXT:    vaddt.f32 q0, q0, r11231; CHECK-NEXT:    bx lr1232entry:1233  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1234  %i = insertelement <4 x float> undef, float %y, i32 01235  %ys = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer1236  %a = fadd <4 x float> %x, %ys1237  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x1238  ret <4 x float> %b1239}1240 1241define arm_aapcs_vfpcc <8 x half> @faddqr_v8f16_x(<8 x half> %x, half %y, i32 %n) {1242; CHECK-LABEL: faddqr_v8f16_x:1243; CHECK:       @ %bb.0: @ %entry1244; CHECK-NEXT:    vmov.f16 r1, s41245; CHECK-NEXT:    vctp.16 r01246; CHECK-NEXT:    vpst1247; CHECK-NEXT:    vaddt.f16 q0, q0, r11248; CHECK-NEXT:    bx lr1249entry:1250  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1251  %i = insertelement <8 x half> undef, half %y, i32 01252  %ys = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer1253  %a = fadd <8 x half> %x, %ys1254  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x1255  ret <8 x half> %b1256}1257 1258define arm_aapcs_vfpcc <4 x float> @fsubqr_v4f32_x(<4 x float> %x, float %y, i32 %n) {1259; CHECK-LABEL: fsubqr_v4f32_x:1260; CHECK:       @ %bb.0: @ %entry1261; CHECK-NEXT:    vmov r1, s41262; CHECK-NEXT:    vctp.32 r01263; CHECK-NEXT:    vpst1264; CHECK-NEXT:    vsubt.f32 q0, q0, r11265; CHECK-NEXT:    bx lr1266entry:1267  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1268  %i = insertelement <4 x float> undef, float %y, i32 01269  %ys = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer1270  %a = fsub <4 x float> %x, %ys1271  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x1272  ret <4 x float> %b1273}1274 1275define arm_aapcs_vfpcc <8 x half> @fsubqr_v8f16_x(<8 x half> %x, half %y, i32 %n) {1276; CHECK-LABEL: fsubqr_v8f16_x:1277; CHECK:       @ %bb.0: @ %entry1278; CHECK-NEXT:    vmov.f16 r1, s41279; CHECK-NEXT:    vctp.16 r01280; CHECK-NEXT:    vpst1281; CHECK-NEXT:    vsubt.f16 q0, q0, r11282; CHECK-NEXT:    bx lr1283entry:1284  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1285  %i = insertelement <8 x half> undef, half %y, i32 01286  %ys = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer1287  %a = fsub <8 x half> %x, %ys1288  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x1289  ret <8 x half> %b1290}1291 1292define arm_aapcs_vfpcc <4 x float> @fmulqr_v4f32_x(<4 x float> %x, float %y, i32 %n) {1293; CHECK-LABEL: fmulqr_v4f32_x:1294; CHECK:       @ %bb.0: @ %entry1295; CHECK-NEXT:    vmov r1, s41296; CHECK-NEXT:    vctp.32 r01297; CHECK-NEXT:    vpst1298; CHECK-NEXT:    vmult.f32 q0, q0, r11299; CHECK-NEXT:    bx lr1300entry:1301  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1302  %i = insertelement <4 x float> undef, float %y, i32 01303  %ys = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer1304  %a = fmul <4 x float> %x, %ys1305  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %x1306  ret <4 x float> %b1307}1308 1309define arm_aapcs_vfpcc <8 x half> @fmulqr_v8f16_x(<8 x half> %x, half %y, i32 %n) {1310; CHECK-LABEL: fmulqr_v8f16_x:1311; CHECK:       @ %bb.0: @ %entry1312; CHECK-NEXT:    vmov.f16 r1, s41313; CHECK-NEXT:    vctp.16 r01314; CHECK-NEXT:    vpst1315; CHECK-NEXT:    vmult.f16 q0, q0, r11316; CHECK-NEXT:    bx lr1317entry:1318  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1319  %i = insertelement <8 x half> undef, half %y, i32 01320  %ys = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer1321  %a = fmul <8 x half> %x, %ys1322  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %x1323  ret <8 x half> %b1324}1325 1326define arm_aapcs_vfpcc <4 x i32> @sadd_satqr_v4i32_x(<4 x i32> %x, i32 %y, i32 %n) {1327; CHECK-LABEL: sadd_satqr_v4i32_x:1328; CHECK:       @ %bb.0: @ %entry1329; CHECK-NEXT:    vctp.32 r11330; CHECK-NEXT:    vpst1331; CHECK-NEXT:    vqaddt.s32 q0, q0, r01332; CHECK-NEXT:    bx lr1333entry:1334  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1335  %i = insertelement <4 x i32> undef, i32 %y, i32 01336  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer1337  %a = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %x, <4 x i32> %ys)1338  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x1339  ret <4 x i32> %b1340}1341 1342define arm_aapcs_vfpcc <8 x i16> @sadd_satqr_v8i16_x(<8 x i16> %x, i16 %y, i32 %n) {1343; CHECK-LABEL: sadd_satqr_v8i16_x:1344; CHECK:       @ %bb.0: @ %entry1345; CHECK-NEXT:    vctp.16 r11346; CHECK-NEXT:    vpst1347; CHECK-NEXT:    vqaddt.s16 q0, q0, r01348; CHECK-NEXT:    bx lr1349entry:1350  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1351  %i = insertelement <8 x i16> undef, i16 %y, i32 01352  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer1353  %a = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %x, <8 x i16> %ys)1354  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x1355  ret <8 x i16> %b1356}1357 1358define arm_aapcs_vfpcc <16 x i8> @sadd_satqr_v16i8_x(<16 x i8> %x, i8 %y, i32 %n) {1359; CHECK-LABEL: sadd_satqr_v16i8_x:1360; CHECK:       @ %bb.0: @ %entry1361; CHECK-NEXT:    vctp.8 r11362; CHECK-NEXT:    vpst1363; CHECK-NEXT:    vqaddt.s8 q0, q0, r01364; CHECK-NEXT:    bx lr1365entry:1366  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1367  %i = insertelement <16 x i8> undef, i8 %y, i32 01368  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer1369  %a = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %x, <16 x i8> %ys)1370  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x1371  ret <16 x i8> %b1372}1373 1374define arm_aapcs_vfpcc <4 x i32> @uadd_satqr_v4i32_x(<4 x i32> %x, i32 %y, i32 %n) {1375; CHECK-LABEL: uadd_satqr_v4i32_x:1376; CHECK:       @ %bb.0: @ %entry1377; CHECK-NEXT:    vctp.32 r11378; CHECK-NEXT:    vpst1379; CHECK-NEXT:    vqaddt.u32 q0, q0, r01380; CHECK-NEXT:    bx lr1381entry:1382  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1383  %i = insertelement <4 x i32> undef, i32 %y, i32 01384  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer1385  %a = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %x, <4 x i32> %ys)1386  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x1387  ret <4 x i32> %b1388}1389 1390define arm_aapcs_vfpcc <8 x i16> @uadd_satqr_v8i16_x(<8 x i16> %x, i16 %y, i32 %n) {1391; CHECK-LABEL: uadd_satqr_v8i16_x:1392; CHECK:       @ %bb.0: @ %entry1393; CHECK-NEXT:    vctp.16 r11394; CHECK-NEXT:    vpst1395; CHECK-NEXT:    vqaddt.u16 q0, q0, r01396; CHECK-NEXT:    bx lr1397entry:1398  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1399  %i = insertelement <8 x i16> undef, i16 %y, i32 01400  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer1401  %a = call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %x, <8 x i16> %ys)1402  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x1403  ret <8 x i16> %b1404}1405 1406define arm_aapcs_vfpcc <16 x i8> @uadd_satqr_v16i8_x(<16 x i8> %x, i8 %y, i32 %n) {1407; CHECK-LABEL: uadd_satqr_v16i8_x:1408; CHECK:       @ %bb.0: @ %entry1409; CHECK-NEXT:    vctp.8 r11410; CHECK-NEXT:    vpst1411; CHECK-NEXT:    vqaddt.u8 q0, q0, r01412; CHECK-NEXT:    bx lr1413entry:1414  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1415  %i = insertelement <16 x i8> undef, i8 %y, i32 01416  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer1417  %a = call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %x, <16 x i8> %ys)1418  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x1419  ret <16 x i8> %b1420}1421 1422define arm_aapcs_vfpcc <4 x i32> @ssub_satqr_v4i32_x(<4 x i32> %x, i32 %y, i32 %n) {1423; CHECK-LABEL: ssub_satqr_v4i32_x:1424; CHECK:       @ %bb.0: @ %entry1425; CHECK-NEXT:    vctp.32 r11426; CHECK-NEXT:    vpst1427; CHECK-NEXT:    vqsubt.s32 q0, q0, r01428; CHECK-NEXT:    bx lr1429entry:1430  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1431  %i = insertelement <4 x i32> undef, i32 %y, i32 01432  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer1433  %a = call <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32> %x, <4 x i32> %ys)1434  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x1435  ret <4 x i32> %b1436}1437 1438define arm_aapcs_vfpcc <8 x i16> @ssub_satqr_v8i16_x(<8 x i16> %x, i16 %y, i32 %n) {1439; CHECK-LABEL: ssub_satqr_v8i16_x:1440; CHECK:       @ %bb.0: @ %entry1441; CHECK-NEXT:    vctp.16 r11442; CHECK-NEXT:    vpst1443; CHECK-NEXT:    vqsubt.s16 q0, q0, r01444; CHECK-NEXT:    bx lr1445entry:1446  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1447  %i = insertelement <8 x i16> undef, i16 %y, i32 01448  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer1449  %a = call <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16> %x, <8 x i16> %ys)1450  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x1451  ret <8 x i16> %b1452}1453 1454define arm_aapcs_vfpcc <16 x i8> @ssub_satqr_v16i8_x(<16 x i8> %x, i8 %y, i32 %n) {1455; CHECK-LABEL: ssub_satqr_v16i8_x:1456; CHECK:       @ %bb.0: @ %entry1457; CHECK-NEXT:    vctp.8 r11458; CHECK-NEXT:    vpst1459; CHECK-NEXT:    vqsubt.s8 q0, q0, r01460; CHECK-NEXT:    bx lr1461entry:1462  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1463  %i = insertelement <16 x i8> undef, i8 %y, i32 01464  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer1465  %a = call <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8> %x, <16 x i8> %ys)1466  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x1467  ret <16 x i8> %b1468}1469 1470define arm_aapcs_vfpcc <4 x i32> @usub_satqr_v4i32_x(<4 x i32> %x, i32 %y, i32 %n) {1471; CHECK-LABEL: usub_satqr_v4i32_x:1472; CHECK:       @ %bb.0: @ %entry1473; CHECK-NEXT:    vctp.32 r11474; CHECK-NEXT:    vpst1475; CHECK-NEXT:    vqsubt.u32 q0, q0, r01476; CHECK-NEXT:    bx lr1477entry:1478  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1479  %i = insertelement <4 x i32> undef, i32 %y, i32 01480  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer1481  %a = call <4 x i32> @llvm.usub.sat.v4i32(<4 x i32> %x, <4 x i32> %ys)1482  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %x1483  ret <4 x i32> %b1484}1485 1486define arm_aapcs_vfpcc <8 x i16> @usub_satqr_v8i16_x(<8 x i16> %x, i16 %y, i32 %n) {1487; CHECK-LABEL: usub_satqr_v8i16_x:1488; CHECK:       @ %bb.0: @ %entry1489; CHECK-NEXT:    vctp.16 r11490; CHECK-NEXT:    vpst1491; CHECK-NEXT:    vqsubt.u16 q0, q0, r01492; CHECK-NEXT:    bx lr1493entry:1494  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1495  %i = insertelement <8 x i16> undef, i16 %y, i32 01496  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer1497  %a = call <8 x i16> @llvm.usub.sat.v8i16(<8 x i16> %x, <8 x i16> %ys)1498  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %x1499  ret <8 x i16> %b1500}1501 1502define arm_aapcs_vfpcc <16 x i8> @usub_satqr_v16i8_x(<16 x i8> %x, i8 %y, i32 %n) {1503; CHECK-LABEL: usub_satqr_v16i8_x:1504; CHECK:       @ %bb.0: @ %entry1505; CHECK-NEXT:    vctp.8 r11506; CHECK-NEXT:    vpst1507; CHECK-NEXT:    vqsubt.u8 q0, q0, r01508; CHECK-NEXT:    bx lr1509entry:1510  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1511  %i = insertelement <16 x i8> undef, i8 %y, i32 01512  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer1513  %a = call <16 x i8> @llvm.usub.sat.v16i8(<16 x i8> %x, <16 x i8> %ys)1514  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %x1515  ret <16 x i8> %b1516}1517 1518define arm_aapcs_vfpcc <4 x i32> @add_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1519; CHECK-LABEL: add_v4i32_y:1520; CHECK:       @ %bb.0: @ %entry1521; CHECK-NEXT:    vctp.32 r01522; CHECK-NEXT:    vpst1523; CHECK-NEXT:    vaddt.i32 q1, q0, q11524; CHECK-NEXT:    vmov q0, q11525; CHECK-NEXT:    bx lr1526entry:1527  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1528  %a = add <4 x i32> %x, %y1529  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1530  ret <4 x i32> %b1531}1532 1533define arm_aapcs_vfpcc <8 x i16> @add_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1534; CHECK-LABEL: add_v8i16_y:1535; CHECK:       @ %bb.0: @ %entry1536; CHECK-NEXT:    vctp.16 r01537; CHECK-NEXT:    vpst1538; CHECK-NEXT:    vaddt.i16 q1, q0, q11539; CHECK-NEXT:    vmov q0, q11540; CHECK-NEXT:    bx lr1541entry:1542  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1543  %a = add <8 x i16> %x, %y1544  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y1545  ret <8 x i16> %b1546}1547 1548define arm_aapcs_vfpcc <16 x i8> @add_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {1549; CHECK-LABEL: add_v16i8_y:1550; CHECK:       @ %bb.0: @ %entry1551; CHECK-NEXT:    vctp.8 r01552; CHECK-NEXT:    vpst1553; CHECK-NEXT:    vaddt.i8 q1, q0, q11554; CHECK-NEXT:    vmov q0, q11555; CHECK-NEXT:    bx lr1556entry:1557  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1558  %a = add <16 x i8> %x, %y1559  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y1560  ret <16 x i8> %b1561}1562 1563define arm_aapcs_vfpcc <4 x i32> @sub_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1564; CHECK-LABEL: sub_v4i32_y:1565; CHECK:       @ %bb.0: @ %entry1566; CHECK-NEXT:    vctp.32 r01567; CHECK-NEXT:    vpst1568; CHECK-NEXT:    vsubt.i32 q1, q0, q11569; CHECK-NEXT:    vmov q0, q11570; CHECK-NEXT:    bx lr1571entry:1572  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1573  %a = sub <4 x i32> %x, %y1574  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1575  ret <4 x i32> %b1576}1577 1578define arm_aapcs_vfpcc <8 x i16> @sub_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1579; CHECK-LABEL: sub_v8i16_y:1580; CHECK:       @ %bb.0: @ %entry1581; CHECK-NEXT:    vctp.16 r01582; CHECK-NEXT:    vpst1583; CHECK-NEXT:    vsubt.i16 q1, q0, q11584; CHECK-NEXT:    vmov q0, q11585; CHECK-NEXT:    bx lr1586entry:1587  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1588  %a = sub <8 x i16> %x, %y1589  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y1590  ret <8 x i16> %b1591}1592 1593define arm_aapcs_vfpcc <16 x i8> @sub_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {1594; CHECK-LABEL: sub_v16i8_y:1595; CHECK:       @ %bb.0: @ %entry1596; CHECK-NEXT:    vctp.8 r01597; CHECK-NEXT:    vpst1598; CHECK-NEXT:    vsubt.i8 q1, q0, q11599; CHECK-NEXT:    vmov q0, q11600; CHECK-NEXT:    bx lr1601entry:1602  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1603  %a = sub <16 x i8> %x, %y1604  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y1605  ret <16 x i8> %b1606}1607 1608define arm_aapcs_vfpcc <4 x i32> @mul_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1609; CHECK-LABEL: mul_v4i32_y:1610; CHECK:       @ %bb.0: @ %entry1611; CHECK-NEXT:    vctp.32 r01612; CHECK-NEXT:    vpst1613; CHECK-NEXT:    vmult.i32 q1, q0, q11614; CHECK-NEXT:    vmov q0, q11615; CHECK-NEXT:    bx lr1616entry:1617  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1618  %a = mul <4 x i32> %x, %y1619  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1620  ret <4 x i32> %b1621}1622 1623define arm_aapcs_vfpcc <8 x i16> @mul_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1624; CHECK-LABEL: mul_v8i16_y:1625; CHECK:       @ %bb.0: @ %entry1626; CHECK-NEXT:    vctp.16 r01627; CHECK-NEXT:    vpst1628; CHECK-NEXT:    vmult.i16 q1, q0, q11629; CHECK-NEXT:    vmov q0, q11630; CHECK-NEXT:    bx lr1631entry:1632  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1633  %a = mul <8 x i16> %x, %y1634  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y1635  ret <8 x i16> %b1636}1637 1638define arm_aapcs_vfpcc <16 x i8> @mul_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {1639; CHECK-LABEL: mul_v16i8_y:1640; CHECK:       @ %bb.0: @ %entry1641; CHECK-NEXT:    vctp.8 r01642; CHECK-NEXT:    vpst1643; CHECK-NEXT:    vmult.i8 q1, q0, q11644; CHECK-NEXT:    vmov q0, q11645; CHECK-NEXT:    bx lr1646entry:1647  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1648  %a = mul <16 x i8> %x, %y1649  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y1650  ret <16 x i8> %b1651}1652 1653define arm_aapcs_vfpcc <4 x i32> @and_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1654; CHECK-LABEL: and_v4i32_y:1655; CHECK:       @ %bb.0: @ %entry1656; CHECK-NEXT:    vctp.32 r01657; CHECK-NEXT:    vpst1658; CHECK-NEXT:    vandt q1, q0, q11659; CHECK-NEXT:    vmov q0, q11660; CHECK-NEXT:    bx lr1661entry:1662  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1663  %a = and <4 x i32> %x, %y1664  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1665  ret <4 x i32> %b1666}1667 1668define arm_aapcs_vfpcc <8 x i16> @and_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1669; CHECK-LABEL: and_v8i16_y:1670; CHECK:       @ %bb.0: @ %entry1671; CHECK-NEXT:    vctp.16 r01672; CHECK-NEXT:    vpst1673; CHECK-NEXT:    vandt q1, q0, q11674; CHECK-NEXT:    vmov q0, q11675; CHECK-NEXT:    bx lr1676entry:1677  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1678  %a = and <8 x i16> %x, %y1679  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y1680  ret <8 x i16> %b1681}1682 1683define arm_aapcs_vfpcc <16 x i8> @and_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {1684; CHECK-LABEL: and_v16i8_y:1685; CHECK:       @ %bb.0: @ %entry1686; CHECK-NEXT:    vctp.8 r01687; CHECK-NEXT:    vpst1688; CHECK-NEXT:    vandt q1, q0, q11689; CHECK-NEXT:    vmov q0, q11690; CHECK-NEXT:    bx lr1691entry:1692  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1693  %a = and <16 x i8> %x, %y1694  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y1695  ret <16 x i8> %b1696}1697 1698define arm_aapcs_vfpcc <4 x i32> @or_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1699; CHECK-LABEL: or_v4i32_y:1700; CHECK:       @ %bb.0: @ %entry1701; CHECK-NEXT:    vctp.32 r01702; CHECK-NEXT:    vpst1703; CHECK-NEXT:    vorrt q1, q0, q11704; CHECK-NEXT:    vmov q0, q11705; CHECK-NEXT:    bx lr1706entry:1707  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1708  %a = or <4 x i32> %x, %y1709  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1710  ret <4 x i32> %b1711}1712 1713define arm_aapcs_vfpcc <8 x i16> @or_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1714; CHECK-LABEL: or_v8i16_y:1715; CHECK:       @ %bb.0: @ %entry1716; CHECK-NEXT:    vctp.16 r01717; CHECK-NEXT:    vpst1718; CHECK-NEXT:    vorrt q1, q0, q11719; CHECK-NEXT:    vmov q0, q11720; CHECK-NEXT:    bx lr1721entry:1722  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1723  %a = or <8 x i16> %x, %y1724  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y1725  ret <8 x i16> %b1726}1727 1728define arm_aapcs_vfpcc <16 x i8> @or_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {1729; CHECK-LABEL: or_v16i8_y:1730; CHECK:       @ %bb.0: @ %entry1731; CHECK-NEXT:    vctp.8 r01732; CHECK-NEXT:    vpst1733; CHECK-NEXT:    vorrt q1, q0, q11734; CHECK-NEXT:    vmov q0, q11735; CHECK-NEXT:    bx lr1736entry:1737  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1738  %a = or <16 x i8> %x, %y1739  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y1740  ret <16 x i8> %b1741}1742 1743define arm_aapcs_vfpcc <4 x i32> @xor_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1744; CHECK-LABEL: xor_v4i32_y:1745; CHECK:       @ %bb.0: @ %entry1746; CHECK-NEXT:    vctp.32 r01747; CHECK-NEXT:    vpst1748; CHECK-NEXT:    veort q1, q0, q11749; CHECK-NEXT:    vmov q0, q11750; CHECK-NEXT:    bx lr1751entry:1752  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1753  %a = xor <4 x i32> %x, %y1754  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1755  ret <4 x i32> %b1756}1757 1758define arm_aapcs_vfpcc <8 x i16> @xor_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1759; CHECK-LABEL: xor_v8i16_y:1760; CHECK:       @ %bb.0: @ %entry1761; CHECK-NEXT:    vctp.16 r01762; CHECK-NEXT:    vpst1763; CHECK-NEXT:    veort q1, q0, q11764; CHECK-NEXT:    vmov q0, q11765; CHECK-NEXT:    bx lr1766entry:1767  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1768  %a = xor <8 x i16> %x, %y1769  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y1770  ret <8 x i16> %b1771}1772 1773define arm_aapcs_vfpcc <16 x i8> @xor_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {1774; CHECK-LABEL: xor_v16i8_y:1775; CHECK:       @ %bb.0: @ %entry1776; CHECK-NEXT:    vctp.8 r01777; CHECK-NEXT:    vpst1778; CHECK-NEXT:    veort q1, q0, q11779; CHECK-NEXT:    vmov q0, q11780; CHECK-NEXT:    bx lr1781entry:1782  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1783  %a = xor <16 x i8> %x, %y1784  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y1785  ret <16 x i8> %b1786}1787 1788define arm_aapcs_vfpcc <4 x i32> @shl_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1789; CHECK-LABEL: shl_v4i32_y:1790; CHECK:       @ %bb.0: @ %entry1791; CHECK-NEXT:    vctp.32 r01792; CHECK-NEXT:    vpst1793; CHECK-NEXT:    vshlt.u32 q1, q0, q11794; CHECK-NEXT:    vmov q0, q11795; CHECK-NEXT:    bx lr1796entry:1797  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1798  %a = shl <4 x i32> %x, %y1799  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1800  ret <4 x i32> %b1801}1802 1803define arm_aapcs_vfpcc <8 x i16> @shl_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1804; CHECK-LABEL: shl_v8i16_y:1805; CHECK:       @ %bb.0: @ %entry1806; CHECK-NEXT:    vctp.16 r01807; CHECK-NEXT:    vpst1808; CHECK-NEXT:    vshlt.u16 q1, q0, q11809; CHECK-NEXT:    vmov q0, q11810; CHECK-NEXT:    bx lr1811entry:1812  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1813  %a = shl <8 x i16> %x, %y1814  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y1815  ret <8 x i16> %b1816}1817 1818define arm_aapcs_vfpcc <16 x i8> @shl_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {1819; CHECK-LABEL: shl_v16i8_y:1820; CHECK:       @ %bb.0: @ %entry1821; CHECK-NEXT:    vctp.8 r01822; CHECK-NEXT:    vpst1823; CHECK-NEXT:    vshlt.u8 q1, q0, q11824; CHECK-NEXT:    vmov q0, q11825; CHECK-NEXT:    bx lr1826entry:1827  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1828  %a = shl <16 x i8> %x, %y1829  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y1830  ret <16 x i8> %b1831}1832 1833define arm_aapcs_vfpcc <4 x i32> @ashr_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1834; CHECK-LABEL: ashr_v4i32_y:1835; CHECK:       @ %bb.0: @ %entry1836; CHECK-NEXT:    vneg.s32 q2, q11837; CHECK-NEXT:    vctp.32 r01838; CHECK-NEXT:    vpst1839; CHECK-NEXT:    vshlt.s32 q1, q0, q21840; CHECK-NEXT:    vmov q0, q11841; CHECK-NEXT:    bx lr1842entry:1843  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1844  %a = ashr <4 x i32> %x, %y1845  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1846  ret <4 x i32> %b1847}1848 1849define arm_aapcs_vfpcc <8 x i16> @ashr_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1850; CHECK-LABEL: ashr_v8i16_y:1851; CHECK:       @ %bb.0: @ %entry1852; CHECK-NEXT:    vneg.s16 q2, q11853; CHECK-NEXT:    vctp.16 r01854; CHECK-NEXT:    vpst1855; CHECK-NEXT:    vshlt.s16 q1, q0, q21856; CHECK-NEXT:    vmov q0, q11857; CHECK-NEXT:    bx lr1858entry:1859  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1860  %a = ashr <8 x i16> %x, %y1861  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y1862  ret <8 x i16> %b1863}1864 1865define arm_aapcs_vfpcc <16 x i8> @ashr_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {1866; CHECK-LABEL: ashr_v16i8_y:1867; CHECK:       @ %bb.0: @ %entry1868; CHECK-NEXT:    vneg.s8 q2, q11869; CHECK-NEXT:    vctp.8 r01870; CHECK-NEXT:    vpst1871; CHECK-NEXT:    vshlt.s8 q1, q0, q21872; CHECK-NEXT:    vmov q0, q11873; CHECK-NEXT:    bx lr1874entry:1875  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1876  %a = ashr <16 x i8> %x, %y1877  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y1878  ret <16 x i8> %b1879}1880 1881define arm_aapcs_vfpcc <4 x i32> @lshr_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1882; CHECK-LABEL: lshr_v4i32_y:1883; CHECK:       @ %bb.0: @ %entry1884; CHECK-NEXT:    vneg.s32 q2, q11885; CHECK-NEXT:    vctp.32 r01886; CHECK-NEXT:    vpst1887; CHECK-NEXT:    vshlt.u32 q1, q0, q21888; CHECK-NEXT:    vmov q0, q11889; CHECK-NEXT:    bx lr1890entry:1891  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1892  %a = lshr <4 x i32> %x, %y1893  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1894  ret <4 x i32> %b1895}1896 1897define arm_aapcs_vfpcc <8 x i16> @lshr_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1898; CHECK-LABEL: lshr_v8i16_y:1899; CHECK:       @ %bb.0: @ %entry1900; CHECK-NEXT:    vneg.s16 q2, q11901; CHECK-NEXT:    vctp.16 r01902; CHECK-NEXT:    vpst1903; CHECK-NEXT:    vshlt.u16 q1, q0, q21904; CHECK-NEXT:    vmov q0, q11905; CHECK-NEXT:    bx lr1906entry:1907  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1908  %a = lshr <8 x i16> %x, %y1909  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y1910  ret <8 x i16> %b1911}1912 1913define arm_aapcs_vfpcc <16 x i8> @lshr_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {1914; CHECK-LABEL: lshr_v16i8_y:1915; CHECK:       @ %bb.0: @ %entry1916; CHECK-NEXT:    vneg.s8 q2, q11917; CHECK-NEXT:    vctp.8 r01918; CHECK-NEXT:    vpst1919; CHECK-NEXT:    vshlt.u8 q1, q0, q21920; CHECK-NEXT:    vmov q0, q11921; CHECK-NEXT:    bx lr1922entry:1923  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1924  %a = lshr <16 x i8> %x, %y1925  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y1926  ret <16 x i8> %b1927}1928 1929define arm_aapcs_vfpcc <4 x i32> @andnot_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1930; CHECK-LABEL: andnot_v4i32_y:1931; CHECK:       @ %bb.0: @ %entry1932; CHECK-NEXT:    vctp.32 r01933; CHECK-NEXT:    vpst1934; CHECK-NEXT:    vbict q1, q0, q11935; CHECK-NEXT:    vmov q0, q11936; CHECK-NEXT:    bx lr1937entry:1938  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1939  %y1 = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1940  %a = and <4 x i32> %x, %y11941  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1942  ret <4 x i32> %b1943}1944 1945define arm_aapcs_vfpcc <8 x i16> @andnot_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1946; CHECK-LABEL: andnot_v8i16_y:1947; CHECK:       @ %bb.0: @ %entry1948; CHECK-NEXT:    vctp.16 r01949; CHECK-NEXT:    vpst1950; CHECK-NEXT:    vbict q1, q0, q11951; CHECK-NEXT:    vmov q0, q11952; CHECK-NEXT:    bx lr1953entry:1954  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)1955  %y1 = xor <8 x i16> %y, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>1956  %a = and <8 x i16> %x, %y11957  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y1958  ret <8 x i16> %b1959}1960 1961define arm_aapcs_vfpcc <16 x i8> @andnot_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {1962; CHECK-LABEL: andnot_v16i8_y:1963; CHECK:       @ %bb.0: @ %entry1964; CHECK-NEXT:    vctp.8 r01965; CHECK-NEXT:    vpst1966; CHECK-NEXT:    vbict q1, q0, q11967; CHECK-NEXT:    vmov q0, q11968; CHECK-NEXT:    bx lr1969entry:1970  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)1971  %y1 = xor <16 x i8> %y, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>1972  %a = and <16 x i8> %x, %y11973  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y1974  ret <16 x i8> %b1975}1976 1977define arm_aapcs_vfpcc <4 x i32> @ornot_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {1978; CHECK-LABEL: ornot_v4i32_y:1979; CHECK:       @ %bb.0: @ %entry1980; CHECK-NEXT:    vctp.32 r01981; CHECK-NEXT:    vpst1982; CHECK-NEXT:    vornt q1, q0, q11983; CHECK-NEXT:    vmov q0, q11984; CHECK-NEXT:    bx lr1985entry:1986  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)1987  %y1 = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1988  %a = or <4 x i32> %x, %y11989  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y1990  ret <4 x i32> %b1991}1992 1993define arm_aapcs_vfpcc <8 x i16> @ornot_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {1994; CHECK-LABEL: ornot_v8i16_y:1995; CHECK:       @ %bb.0: @ %entry1996; CHECK-NEXT:    vctp.16 r01997; CHECK-NEXT:    vpst1998; CHECK-NEXT:    vornt q1, q0, q11999; CHECK-NEXT:    vmov q0, q12000; CHECK-NEXT:    bx lr2001entry:2002  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2003  %y1 = xor <8 x i16> %y, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>2004  %a = or <8 x i16> %x, %y12005  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y2006  ret <8 x i16> %b2007}2008 2009define arm_aapcs_vfpcc <16 x i8> @ornot_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {2010; CHECK-LABEL: ornot_v16i8_y:2011; CHECK:       @ %bb.0: @ %entry2012; CHECK-NEXT:    vctp.8 r02013; CHECK-NEXT:    vpst2014; CHECK-NEXT:    vornt q1, q0, q12015; CHECK-NEXT:    vmov q0, q12016; CHECK-NEXT:    bx lr2017entry:2018  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2019  %y1 = xor <16 x i8> %y, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>2020  %a = or <16 x i8> %x, %y12021  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y2022  ret <16 x i8> %b2023}2024 2025define arm_aapcs_vfpcc <4 x float> @fadd_v4f32_y(<4 x float> %x, <4 x float> %y, i32 %n) {2026; CHECK-LABEL: fadd_v4f32_y:2027; CHECK:       @ %bb.0: @ %entry2028; CHECK-NEXT:    vctp.32 r02029; CHECK-NEXT:    vpst2030; CHECK-NEXT:    vaddt.f32 q1, q0, q12031; CHECK-NEXT:    vmov q0, q12032; CHECK-NEXT:    bx lr2033entry:2034  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2035  %a = fadd <4 x float> %x, %y2036  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %y2037  ret <4 x float> %b2038}2039 2040define arm_aapcs_vfpcc <8 x half> @fadd_v8f16_y(<8 x half> %x, <8 x half> %y, i32 %n) {2041; CHECK-LABEL: fadd_v8f16_y:2042; CHECK:       @ %bb.0: @ %entry2043; CHECK-NEXT:    vctp.16 r02044; CHECK-NEXT:    vpst2045; CHECK-NEXT:    vaddt.f16 q1, q0, q12046; CHECK-NEXT:    vmov q0, q12047; CHECK-NEXT:    bx lr2048entry:2049  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2050  %a = fadd <8 x half> %x, %y2051  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %y2052  ret <8 x half> %b2053}2054 2055define arm_aapcs_vfpcc <4 x float> @fsub_v4f32_y(<4 x float> %x, <4 x float> %y, i32 %n) {2056; CHECK-LABEL: fsub_v4f32_y:2057; CHECK:       @ %bb.0: @ %entry2058; CHECK-NEXT:    vctp.32 r02059; CHECK-NEXT:    vpst2060; CHECK-NEXT:    vsubt.f32 q1, q0, q12061; CHECK-NEXT:    vmov q0, q12062; CHECK-NEXT:    bx lr2063entry:2064  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2065  %a = fsub <4 x float> %x, %y2066  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %y2067  ret <4 x float> %b2068}2069 2070define arm_aapcs_vfpcc <8 x half> @fsub_v8f16_y(<8 x half> %x, <8 x half> %y, i32 %n) {2071; CHECK-LABEL: fsub_v8f16_y:2072; CHECK:       @ %bb.0: @ %entry2073; CHECK-NEXT:    vctp.16 r02074; CHECK-NEXT:    vpst2075; CHECK-NEXT:    vsubt.f16 q1, q0, q12076; CHECK-NEXT:    vmov q0, q12077; CHECK-NEXT:    bx lr2078entry:2079  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2080  %a = fsub <8 x half> %x, %y2081  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %y2082  ret <8 x half> %b2083}2084 2085define arm_aapcs_vfpcc <4 x float> @fmul_v4f32_y(<4 x float> %x, <4 x float> %y, i32 %n) {2086; CHECK-LABEL: fmul_v4f32_y:2087; CHECK:       @ %bb.0: @ %entry2088; CHECK-NEXT:    vctp.32 r02089; CHECK-NEXT:    vpst2090; CHECK-NEXT:    vmult.f32 q1, q0, q12091; CHECK-NEXT:    vmov q0, q12092; CHECK-NEXT:    bx lr2093entry:2094  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2095  %a = fmul <4 x float> %x, %y2096  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %y2097  ret <4 x float> %b2098}2099 2100define arm_aapcs_vfpcc <8 x half> @fmul_v8f16_y(<8 x half> %x, <8 x half> %y, i32 %n) {2101; CHECK-LABEL: fmul_v8f16_y:2102; CHECK:       @ %bb.0: @ %entry2103; CHECK-NEXT:    vctp.16 r02104; CHECK-NEXT:    vpst2105; CHECK-NEXT:    vmult.f16 q1, q0, q12106; CHECK-NEXT:    vmov q0, q12107; CHECK-NEXT:    bx lr2108entry:2109  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2110  %a = fmul <8 x half> %x, %y2111  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %y2112  ret <8 x half> %b2113}2114 2115define arm_aapcs_vfpcc <4 x float> @fdiv_v4f32_y(<4 x float> %x, <4 x float> %y, i32 %n) {2116; CHECK-LABEL: fdiv_v4f32_y:2117; CHECK:       @ %bb.0: @ %entry2118; CHECK-NEXT:    vdiv.f32 s3, s3, s72119; CHECK-NEXT:    vctp.32 r02120; CHECK-NEXT:    vdiv.f32 s2, s2, s62121; CHECK-NEXT:    vdiv.f32 s1, s1, s52122; CHECK-NEXT:    vdiv.f32 s0, s0, s42123; CHECK-NEXT:    vpst2124; CHECK-NEXT:    vmovt q1, q02125; CHECK-NEXT:    vmov q0, q12126; CHECK-NEXT:    bx lr2127entry:2128  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2129  %a = fdiv <4 x float> %x, %y2130  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %y2131  ret <4 x float> %b2132}2133 2134define arm_aapcs_vfpcc <8 x half> @fdiv_v8f16_y(<8 x half> %x, <8 x half> %y, i32 %n) {2135; CHECK-LABEL: fdiv_v8f16_y:2136; CHECK:       @ %bb.0: @ %entry2137; CHECK-NEXT:    vmovx.f16 s10, s02138; CHECK-NEXT:    vmovx.f16 s8, s42139; CHECK-NEXT:    vdiv.f16 s8, s10, s82140; CHECK-NEXT:    vdiv.f16 s0, s0, s42141; CHECK-NEXT:    vins.f16 s0, s82142; CHECK-NEXT:    vmovx.f16 s10, s12143; CHECK-NEXT:    vmovx.f16 s8, s52144; CHECK-NEXT:    vdiv.f16 s1, s1, s52145; CHECK-NEXT:    vdiv.f16 s8, s10, s82146; CHECK-NEXT:    vmovx.f16 s10, s22147; CHECK-NEXT:    vins.f16 s1, s82148; CHECK-NEXT:    vmovx.f16 s8, s62149; CHECK-NEXT:    vdiv.f16 s8, s10, s82150; CHECK-NEXT:    vdiv.f16 s2, s2, s62151; CHECK-NEXT:    vins.f16 s2, s82152; CHECK-NEXT:    vmovx.f16 s10, s32153; CHECK-NEXT:    vmovx.f16 s8, s72154; CHECK-NEXT:    vdiv.f16 s3, s3, s72155; CHECK-NEXT:    vdiv.f16 s8, s10, s82156; CHECK-NEXT:    vctp.16 r02157; CHECK-NEXT:    vins.f16 s3, s82158; CHECK-NEXT:    vpst2159; CHECK-NEXT:    vmovt q1, q02160; CHECK-NEXT:    vmov q0, q12161; CHECK-NEXT:    bx lr2162entry:2163  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2164  %a = fdiv <8 x half> %x, %y2165  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %y2166  ret <8 x half> %b2167}2168 2169define arm_aapcs_vfpcc <4 x float> @fmai_v4f32_y(<4 x float> %x, <4 x float> %y, <4 x float> %z, i32 %n) {2170; CHECK-LABEL: fmai_v4f32_y:2171; CHECK:       @ %bb.0: @ %entry2172; CHECK-NEXT:    vfma.f32 q0, q1, q22173; CHECK-NEXT:    vctp.32 r02174; CHECK-NEXT:    vpst2175; CHECK-NEXT:    vmovt q1, q02176; CHECK-NEXT:    vmov q0, q12177; CHECK-NEXT:    bx lr2178entry:2179  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2180  %a = call <4 x float> @llvm.fma.v4f32(<4 x float> %y, <4 x float> %z, <4 x float> %x)2181  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %y2182  ret <4 x float> %b2183}2184 2185define arm_aapcs_vfpcc <8 x half> @fmai_v8f16_y(<8 x half> %x, <8 x half> %y, <8 x half> %z, i32 %n) {2186; CHECK-LABEL: fmai_v8f16_y:2187; CHECK:       @ %bb.0: @ %entry2188; CHECK-NEXT:    vfma.f16 q0, q1, q22189; CHECK-NEXT:    vctp.16 r02190; CHECK-NEXT:    vpst2191; CHECK-NEXT:    vmovt q1, q02192; CHECK-NEXT:    vmov q0, q12193; CHECK-NEXT:    bx lr2194entry:2195  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2196  %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %z, <8 x half> %x)2197  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %y2198  ret <8 x half> %b2199}2200 2201define arm_aapcs_vfpcc <4 x float> @fma_v4f32_y(<4 x float> %x, <4 x float> %y, <4 x float> %z, i32 %n) {2202; CHECK-LABEL: fma_v4f32_y:2203; CHECK:       @ %bb.0: @ %entry2204; CHECK-NEXT:    vfma.f32 q0, q1, q22205; CHECK-NEXT:    vctp.32 r02206; CHECK-NEXT:    vpst2207; CHECK-NEXT:    vmovt q1, q02208; CHECK-NEXT:    vmov q0, q12209; CHECK-NEXT:    bx lr2210entry:2211  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2212  %m = fmul fast <4 x float> %y, %z2213  %a = fadd fast <4 x float> %m, %x2214  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %y2215  ret <4 x float> %b2216}2217 2218define arm_aapcs_vfpcc <8 x half> @fma_v8f16_y(<8 x half> %x, <8 x half> %y, <8 x half> %z, i32 %n) {2219; CHECK-LABEL: fma_v8f16_y:2220; CHECK:       @ %bb.0: @ %entry2221; CHECK-NEXT:    vfma.f16 q0, q1, q22222; CHECK-NEXT:    vctp.16 r02223; CHECK-NEXT:    vpst2224; CHECK-NEXT:    vmovt q1, q02225; CHECK-NEXT:    vmov q0, q12226; CHECK-NEXT:    bx lr2227entry:2228  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2229  %m = fmul fast <8 x half> %y, %z2230  %a = fadd fast <8 x half> %m, %x2231  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %y2232  ret <8 x half> %b2233}2234 2235define arm_aapcs_vfpcc <4 x i32> @icmp_slt_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {2236; CHECK-LABEL: icmp_slt_v4i32_y:2237; CHECK:       @ %bb.0: @ %entry2238; CHECK-NEXT:    vctp.32 r02239; CHECK-NEXT:    vpst2240; CHECK-NEXT:    vmint.s32 q1, q0, q12241; CHECK-NEXT:    vmov q0, q12242; CHECK-NEXT:    bx lr2243entry:2244  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2245  %a1 = icmp slt <4 x i32> %x, %y2246  %a = select <4 x i1> %a1, <4 x i32> %x, <4 x i32> %y2247  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y2248  ret <4 x i32> %b2249}2250 2251define arm_aapcs_vfpcc <8 x i16> @icmp_slt_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {2252; CHECK-LABEL: icmp_slt_v8i16_y:2253; CHECK:       @ %bb.0: @ %entry2254; CHECK-NEXT:    vctp.16 r02255; CHECK-NEXT:    vpst2256; CHECK-NEXT:    vmint.s16 q1, q0, q12257; CHECK-NEXT:    vmov q0, q12258; CHECK-NEXT:    bx lr2259entry:2260  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2261  %a1 = icmp slt <8 x i16> %x, %y2262  %a = select <8 x i1> %a1, <8 x i16> %x, <8 x i16> %y2263  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y2264  ret <8 x i16> %b2265}2266 2267define arm_aapcs_vfpcc <16 x i8> @icmp_slt_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {2268; CHECK-LABEL: icmp_slt_v16i8_y:2269; CHECK:       @ %bb.0: @ %entry2270; CHECK-NEXT:    vctp.8 r02271; CHECK-NEXT:    vpst2272; CHECK-NEXT:    vmint.s8 q1, q0, q12273; CHECK-NEXT:    vmov q0, q12274; CHECK-NEXT:    bx lr2275entry:2276  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2277  %a1 = icmp slt <16 x i8> %x, %y2278  %a = select <16 x i1> %a1, <16 x i8> %x, <16 x i8> %y2279  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y2280  ret <16 x i8> %b2281}2282 2283define arm_aapcs_vfpcc <4 x i32> @icmp_sgt_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {2284; CHECK-LABEL: icmp_sgt_v4i32_y:2285; CHECK:       @ %bb.0: @ %entry2286; CHECK-NEXT:    vctp.32 r02287; CHECK-NEXT:    vpst2288; CHECK-NEXT:    vmaxt.s32 q1, q0, q12289; CHECK-NEXT:    vmov q0, q12290; CHECK-NEXT:    bx lr2291entry:2292  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2293  %a1 = icmp sgt <4 x i32> %x, %y2294  %a = select <4 x i1> %a1, <4 x i32> %x, <4 x i32> %y2295  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y2296  ret <4 x i32> %b2297}2298 2299define arm_aapcs_vfpcc <8 x i16> @icmp_sgt_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {2300; CHECK-LABEL: icmp_sgt_v8i16_y:2301; CHECK:       @ %bb.0: @ %entry2302; CHECK-NEXT:    vctp.16 r02303; CHECK-NEXT:    vpst2304; CHECK-NEXT:    vmaxt.s16 q1, q0, q12305; CHECK-NEXT:    vmov q0, q12306; CHECK-NEXT:    bx lr2307entry:2308  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2309  %a1 = icmp sgt <8 x i16> %x, %y2310  %a = select <8 x i1> %a1, <8 x i16> %x, <8 x i16> %y2311  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y2312  ret <8 x i16> %b2313}2314 2315define arm_aapcs_vfpcc <16 x i8> @icmp_sgt_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {2316; CHECK-LABEL: icmp_sgt_v16i8_y:2317; CHECK:       @ %bb.0: @ %entry2318; CHECK-NEXT:    vctp.8 r02319; CHECK-NEXT:    vpst2320; CHECK-NEXT:    vmaxt.s8 q1, q0, q12321; CHECK-NEXT:    vmov q0, q12322; CHECK-NEXT:    bx lr2323entry:2324  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2325  %a1 = icmp sgt <16 x i8> %x, %y2326  %a = select <16 x i1> %a1, <16 x i8> %x, <16 x i8> %y2327  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y2328  ret <16 x i8> %b2329}2330 2331define arm_aapcs_vfpcc <4 x i32> @icmp_ult_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {2332; CHECK-LABEL: icmp_ult_v4i32_y:2333; CHECK:       @ %bb.0: @ %entry2334; CHECK-NEXT:    vctp.32 r02335; CHECK-NEXT:    vpst2336; CHECK-NEXT:    vmint.u32 q1, q0, q12337; CHECK-NEXT:    vmov q0, q12338; CHECK-NEXT:    bx lr2339entry:2340  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2341  %a1 = icmp ult <4 x i32> %x, %y2342  %a = select <4 x i1> %a1, <4 x i32> %x, <4 x i32> %y2343  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y2344  ret <4 x i32> %b2345}2346 2347define arm_aapcs_vfpcc <8 x i16> @icmp_ult_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {2348; CHECK-LABEL: icmp_ult_v8i16_y:2349; CHECK:       @ %bb.0: @ %entry2350; CHECK-NEXT:    vctp.16 r02351; CHECK-NEXT:    vpst2352; CHECK-NEXT:    vmint.u16 q1, q0, q12353; CHECK-NEXT:    vmov q0, q12354; CHECK-NEXT:    bx lr2355entry:2356  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2357  %a1 = icmp ult <8 x i16> %x, %y2358  %a = select <8 x i1> %a1, <8 x i16> %x, <8 x i16> %y2359  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y2360  ret <8 x i16> %b2361}2362 2363define arm_aapcs_vfpcc <16 x i8> @icmp_ult_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {2364; CHECK-LABEL: icmp_ult_v16i8_y:2365; CHECK:       @ %bb.0: @ %entry2366; CHECK-NEXT:    vctp.8 r02367; CHECK-NEXT:    vpst2368; CHECK-NEXT:    vmint.u8 q1, q0, q12369; CHECK-NEXT:    vmov q0, q12370; CHECK-NEXT:    bx lr2371entry:2372  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2373  %a1 = icmp ult <16 x i8> %x, %y2374  %a = select <16 x i1> %a1, <16 x i8> %x, <16 x i8> %y2375  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y2376  ret <16 x i8> %b2377}2378 2379define arm_aapcs_vfpcc <4 x i32> @icmp_ugt_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {2380; CHECK-LABEL: icmp_ugt_v4i32_y:2381; CHECK:       @ %bb.0: @ %entry2382; CHECK-NEXT:    vctp.32 r02383; CHECK-NEXT:    vpst2384; CHECK-NEXT:    vmaxt.u32 q1, q0, q12385; CHECK-NEXT:    vmov q0, q12386; CHECK-NEXT:    bx lr2387entry:2388  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2389  %a1 = icmp ugt <4 x i32> %x, %y2390  %a = select <4 x i1> %a1, <4 x i32> %x, <4 x i32> %y2391  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y2392  ret <4 x i32> %b2393}2394 2395define arm_aapcs_vfpcc <8 x i16> @icmp_ugt_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {2396; CHECK-LABEL: icmp_ugt_v8i16_y:2397; CHECK:       @ %bb.0: @ %entry2398; CHECK-NEXT:    vctp.16 r02399; CHECK-NEXT:    vpst2400; CHECK-NEXT:    vmaxt.u16 q1, q0, q12401; CHECK-NEXT:    vmov q0, q12402; CHECK-NEXT:    bx lr2403entry:2404  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2405  %a1 = icmp ugt <8 x i16> %x, %y2406  %a = select <8 x i1> %a1, <8 x i16> %x, <8 x i16> %y2407  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y2408  ret <8 x i16> %b2409}2410 2411define arm_aapcs_vfpcc <16 x i8> @icmp_ugt_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {2412; CHECK-LABEL: icmp_ugt_v16i8_y:2413; CHECK:       @ %bb.0: @ %entry2414; CHECK-NEXT:    vctp.8 r02415; CHECK-NEXT:    vpst2416; CHECK-NEXT:    vmaxt.u8 q1, q0, q12417; CHECK-NEXT:    vmov q0, q12418; CHECK-NEXT:    bx lr2419entry:2420  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2421  %a1 = icmp ugt <16 x i8> %x, %y2422  %a = select <16 x i1> %a1, <16 x i8> %x, <16 x i8> %y2423  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y2424  ret <16 x i8> %b2425}2426 2427define arm_aapcs_vfpcc <4 x float> @fcmp_fast_olt_v4f32_y(<4 x float> %x, <4 x float> %y, i32 %n) {2428; CHECK-LABEL: fcmp_fast_olt_v4f32_y:2429; CHECK:       @ %bb.0: @ %entry2430; CHECK-NEXT:    vctp.32 r02431; CHECK-NEXT:    vpst2432; CHECK-NEXT:    vminnmt.f32 q1, q0, q12433; CHECK-NEXT:    vmov q0, q12434; CHECK-NEXT:    bx lr2435entry:2436  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2437  %a1 = fcmp fast olt <4 x float> %x, %y2438  %a = select <4 x i1> %a1, <4 x float> %x, <4 x float> %y2439  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %y2440  ret <4 x float> %b2441}2442 2443define arm_aapcs_vfpcc <8 x half> @fcmp_fast_olt_v8f16_y(<8 x half> %x, <8 x half> %y, i32 %n) {2444; CHECK-LABEL: fcmp_fast_olt_v8f16_y:2445; CHECK:       @ %bb.0: @ %entry2446; CHECK-NEXT:    vctp.16 r02447; CHECK-NEXT:    vpst2448; CHECK-NEXT:    vminnmt.f16 q1, q0, q12449; CHECK-NEXT:    vmov q0, q12450; CHECK-NEXT:    bx lr2451entry:2452  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2453  %a1 = fcmp fast olt <8 x half> %x, %y2454  %a = select <8 x i1> %a1, <8 x half> %x, <8 x half> %y2455  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %y2456  ret <8 x half> %b2457}2458 2459define arm_aapcs_vfpcc <4 x float> @fcmp_fast_ogt_v4f32_y(<4 x float> %x, <4 x float> %y, i32 %n) {2460; CHECK-LABEL: fcmp_fast_ogt_v4f32_y:2461; CHECK:       @ %bb.0: @ %entry2462; CHECK-NEXT:    vctp.32 r02463; CHECK-NEXT:    vpst2464; CHECK-NEXT:    vmaxnmt.f32 q1, q0, q12465; CHECK-NEXT:    vmov q0, q12466; CHECK-NEXT:    bx lr2467entry:2468  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2469  %a1 = fcmp fast ogt <4 x float> %x, %y2470  %a = select <4 x i1> %a1, <4 x float> %x, <4 x float> %y2471  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %y2472  ret <4 x float> %b2473}2474 2475define arm_aapcs_vfpcc <8 x half> @fcmp_fast_ogt_v8f16_y(<8 x half> %x, <8 x half> %y, i32 %n) {2476; CHECK-LABEL: fcmp_fast_ogt_v8f16_y:2477; CHECK:       @ %bb.0: @ %entry2478; CHECK-NEXT:    vctp.16 r02479; CHECK-NEXT:    vpst2480; CHECK-NEXT:    vmaxnmt.f16 q1, q0, q12481; CHECK-NEXT:    vmov q0, q12482; CHECK-NEXT:    bx lr2483entry:2484  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2485  %a1 = fcmp fast ogt <8 x half> %x, %y2486  %a = select <8 x i1> %a1, <8 x half> %x, <8 x half> %y2487  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %y2488  ret <8 x half> %b2489}2490 2491define arm_aapcs_vfpcc <4 x i32> @sadd_sat_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {2492; CHECK-LABEL: sadd_sat_v4i32_y:2493; CHECK:       @ %bb.0: @ %entry2494; CHECK-NEXT:    vctp.32 r02495; CHECK-NEXT:    vpst2496; CHECK-NEXT:    vqaddt.s32 q1, q0, q12497; CHECK-NEXT:    vmov q0, q12498; CHECK-NEXT:    bx lr2499entry:2500  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2501  %a = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %x, <4 x i32> %y)2502  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y2503  ret <4 x i32> %b2504}2505 2506define arm_aapcs_vfpcc <8 x i16> @sadd_sat_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {2507; CHECK-LABEL: sadd_sat_v8i16_y:2508; CHECK:       @ %bb.0: @ %entry2509; CHECK-NEXT:    vctp.16 r02510; CHECK-NEXT:    vpst2511; CHECK-NEXT:    vqaddt.s16 q1, q0, q12512; CHECK-NEXT:    vmov q0, q12513; CHECK-NEXT:    bx lr2514entry:2515  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2516  %a = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %x, <8 x i16> %y)2517  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y2518  ret <8 x i16> %b2519}2520 2521define arm_aapcs_vfpcc <16 x i8> @sadd_sat_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {2522; CHECK-LABEL: sadd_sat_v16i8_y:2523; CHECK:       @ %bb.0: @ %entry2524; CHECK-NEXT:    vctp.8 r02525; CHECK-NEXT:    vpst2526; CHECK-NEXT:    vqaddt.s8 q1, q0, q12527; CHECK-NEXT:    vmov q0, q12528; CHECK-NEXT:    bx lr2529entry:2530  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2531  %a = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %x, <16 x i8> %y)2532  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y2533  ret <16 x i8> %b2534}2535 2536define arm_aapcs_vfpcc <4 x i32> @uadd_sat_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {2537; CHECK-LABEL: uadd_sat_v4i32_y:2538; CHECK:       @ %bb.0: @ %entry2539; CHECK-NEXT:    vctp.32 r02540; CHECK-NEXT:    vpst2541; CHECK-NEXT:    vqaddt.u32 q1, q0, q12542; CHECK-NEXT:    vmov q0, q12543; CHECK-NEXT:    bx lr2544entry:2545  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2546  %a = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %x, <4 x i32> %y)2547  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y2548  ret <4 x i32> %b2549}2550 2551define arm_aapcs_vfpcc <8 x i16> @uadd_sat_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {2552; CHECK-LABEL: uadd_sat_v8i16_y:2553; CHECK:       @ %bb.0: @ %entry2554; CHECK-NEXT:    vctp.16 r02555; CHECK-NEXT:    vpst2556; CHECK-NEXT:    vqaddt.u16 q1, q0, q12557; CHECK-NEXT:    vmov q0, q12558; CHECK-NEXT:    bx lr2559entry:2560  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2561  %a = call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %x, <8 x i16> %y)2562  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y2563  ret <8 x i16> %b2564}2565 2566define arm_aapcs_vfpcc <16 x i8> @uadd_sat_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {2567; CHECK-LABEL: uadd_sat_v16i8_y:2568; CHECK:       @ %bb.0: @ %entry2569; CHECK-NEXT:    vctp.8 r02570; CHECK-NEXT:    vpst2571; CHECK-NEXT:    vqaddt.u8 q1, q0, q12572; CHECK-NEXT:    vmov q0, q12573; CHECK-NEXT:    bx lr2574entry:2575  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2576  %a = call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %x, <16 x i8> %y)2577  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y2578  ret <16 x i8> %b2579}2580 2581define arm_aapcs_vfpcc <4 x i32> @ssub_sat_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {2582; CHECK-LABEL: ssub_sat_v4i32_y:2583; CHECK:       @ %bb.0: @ %entry2584; CHECK-NEXT:    vctp.32 r02585; CHECK-NEXT:    vpst2586; CHECK-NEXT:    vqsubt.s32 q1, q0, q12587; CHECK-NEXT:    vmov q0, q12588; CHECK-NEXT:    bx lr2589entry:2590  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2591  %a = call <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32> %x, <4 x i32> %y)2592  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y2593  ret <4 x i32> %b2594}2595 2596define arm_aapcs_vfpcc <8 x i16> @ssub_sat_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {2597; CHECK-LABEL: ssub_sat_v8i16_y:2598; CHECK:       @ %bb.0: @ %entry2599; CHECK-NEXT:    vctp.16 r02600; CHECK-NEXT:    vpst2601; CHECK-NEXT:    vqsubt.s16 q1, q0, q12602; CHECK-NEXT:    vmov q0, q12603; CHECK-NEXT:    bx lr2604entry:2605  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2606  %a = call <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16> %x, <8 x i16> %y)2607  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y2608  ret <8 x i16> %b2609}2610 2611define arm_aapcs_vfpcc <16 x i8> @ssub_sat_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {2612; CHECK-LABEL: ssub_sat_v16i8_y:2613; CHECK:       @ %bb.0: @ %entry2614; CHECK-NEXT:    vctp.8 r02615; CHECK-NEXT:    vpst2616; CHECK-NEXT:    vqsubt.s8 q1, q0, q12617; CHECK-NEXT:    vmov q0, q12618; CHECK-NEXT:    bx lr2619entry:2620  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2621  %a = call <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8> %x, <16 x i8> %y)2622  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y2623  ret <16 x i8> %b2624}2625 2626define arm_aapcs_vfpcc <4 x i32> @usub_sat_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {2627; CHECK-LABEL: usub_sat_v4i32_y:2628; CHECK:       @ %bb.0: @ %entry2629; CHECK-NEXT:    vctp.32 r02630; CHECK-NEXT:    vpst2631; CHECK-NEXT:    vqsubt.u32 q1, q0, q12632; CHECK-NEXT:    vmov q0, q12633; CHECK-NEXT:    bx lr2634entry:2635  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2636  %a = call <4 x i32> @llvm.usub.sat.v4i32(<4 x i32> %x, <4 x i32> %y)2637  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %y2638  ret <4 x i32> %b2639}2640 2641define arm_aapcs_vfpcc <8 x i16> @usub_sat_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {2642; CHECK-LABEL: usub_sat_v8i16_y:2643; CHECK:       @ %bb.0: @ %entry2644; CHECK-NEXT:    vctp.16 r02645; CHECK-NEXT:    vpst2646; CHECK-NEXT:    vqsubt.u16 q1, q0, q12647; CHECK-NEXT:    vmov q0, q12648; CHECK-NEXT:    bx lr2649entry:2650  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2651  %a = call <8 x i16> @llvm.usub.sat.v8i16(<8 x i16> %x, <8 x i16> %y)2652  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %y2653  ret <8 x i16> %b2654}2655 2656define arm_aapcs_vfpcc <16 x i8> @usub_sat_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {2657; CHECK-LABEL: usub_sat_v16i8_y:2658; CHECK:       @ %bb.0: @ %entry2659; CHECK-NEXT:    vctp.8 r02660; CHECK-NEXT:    vpst2661; CHECK-NEXT:    vqsubt.u8 q1, q0, q12662; CHECK-NEXT:    vmov q0, q12663; CHECK-NEXT:    bx lr2664entry:2665  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2666  %a = call <16 x i8> @llvm.usub.sat.v16i8(<16 x i8> %x, <16 x i8> %y)2667  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %y2668  ret <16 x i8> %b2669}2670 2671define arm_aapcs_vfpcc <4 x i32> @addqr_v4i32_y(<4 x i32> %x, i32 %y, i32 %n) {2672; CHECK-LABEL: addqr_v4i32_y:2673; CHECK:       @ %bb.0: @ %entry2674; CHECK-NEXT:    vdup.32 q1, r02675; CHECK-NEXT:    vctp.32 r12676; CHECK-NEXT:    vpst2677; CHECK-NEXT:    vaddt.i32 q1, q0, r02678; CHECK-NEXT:    vmov q0, q12679; CHECK-NEXT:    bx lr2680entry:2681  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2682  %i = insertelement <4 x i32> undef, i32 %y, i32 02683  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer2684  %a = add <4 x i32> %x, %ys2685  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %ys2686  ret <4 x i32> %b2687}2688 2689define arm_aapcs_vfpcc <8 x i16> @addqr_v8i16_y(<8 x i16> %x, i16 %y, i32 %n) {2690; CHECK-LABEL: addqr_v8i16_y:2691; CHECK:       @ %bb.0: @ %entry2692; CHECK-NEXT:    vdup.16 q1, r02693; CHECK-NEXT:    vctp.16 r12694; CHECK-NEXT:    vpst2695; CHECK-NEXT:    vaddt.i16 q1, q0, r02696; CHECK-NEXT:    vmov q0, q12697; CHECK-NEXT:    bx lr2698entry:2699  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2700  %i = insertelement <8 x i16> undef, i16 %y, i32 02701  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer2702  %a = add <8 x i16> %x, %ys2703  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %ys2704  ret <8 x i16> %b2705}2706 2707define arm_aapcs_vfpcc <16 x i8> @addqr_v16i8_y(<16 x i8> %x, i8 %y, i32 %n) {2708; CHECK-LABEL: addqr_v16i8_y:2709; CHECK:       @ %bb.0: @ %entry2710; CHECK-NEXT:    vdup.8 q1, r02711; CHECK-NEXT:    vctp.8 r12712; CHECK-NEXT:    vpst2713; CHECK-NEXT:    vaddt.i8 q1, q0, r02714; CHECK-NEXT:    vmov q0, q12715; CHECK-NEXT:    bx lr2716entry:2717  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2718  %i = insertelement <16 x i8> undef, i8 %y, i32 02719  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer2720  %a = add <16 x i8> %x, %ys2721  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %ys2722  ret <16 x i8> %b2723}2724 2725define arm_aapcs_vfpcc <4 x i32> @subqr_v4i32_y(<4 x i32> %x, i32 %y, i32 %n) {2726; CHECK-LABEL: subqr_v4i32_y:2727; CHECK:       @ %bb.0: @ %entry2728; CHECK-NEXT:    vdup.32 q1, r02729; CHECK-NEXT:    vctp.32 r12730; CHECK-NEXT:    vpst2731; CHECK-NEXT:    vsubt.i32 q1, q0, r02732; CHECK-NEXT:    vmov q0, q12733; CHECK-NEXT:    bx lr2734entry:2735  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2736  %i = insertelement <4 x i32> undef, i32 %y, i32 02737  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer2738  %a = sub <4 x i32> %x, %ys2739  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %ys2740  ret <4 x i32> %b2741}2742 2743define arm_aapcs_vfpcc <8 x i16> @subqr_v8i16_y(<8 x i16> %x, i16 %y, i32 %n) {2744; CHECK-LABEL: subqr_v8i16_y:2745; CHECK:       @ %bb.0: @ %entry2746; CHECK-NEXT:    vdup.16 q1, r02747; CHECK-NEXT:    vctp.16 r12748; CHECK-NEXT:    vpst2749; CHECK-NEXT:    vsubt.i16 q1, q0, r02750; CHECK-NEXT:    vmov q0, q12751; CHECK-NEXT:    bx lr2752entry:2753  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2754  %i = insertelement <8 x i16> undef, i16 %y, i32 02755  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer2756  %a = sub <8 x i16> %x, %ys2757  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %ys2758  ret <8 x i16> %b2759}2760 2761define arm_aapcs_vfpcc <16 x i8> @subqr_v16i8_y(<16 x i8> %x, i8 %y, i32 %n) {2762; CHECK-LABEL: subqr_v16i8_y:2763; CHECK:       @ %bb.0: @ %entry2764; CHECK-NEXT:    vdup.8 q1, r02765; CHECK-NEXT:    vctp.8 r12766; CHECK-NEXT:    vpst2767; CHECK-NEXT:    vsubt.i8 q1, q0, r02768; CHECK-NEXT:    vmov q0, q12769; CHECK-NEXT:    bx lr2770entry:2771  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2772  %i = insertelement <16 x i8> undef, i8 %y, i32 02773  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer2774  %a = sub <16 x i8> %x, %ys2775  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %ys2776  ret <16 x i8> %b2777}2778 2779define arm_aapcs_vfpcc <4 x i32> @mulqr_v4i32_y(<4 x i32> %x, i32 %y, i32 %n) {2780; CHECK-LABEL: mulqr_v4i32_y:2781; CHECK:       @ %bb.0: @ %entry2782; CHECK-NEXT:    vdup.32 q1, r02783; CHECK-NEXT:    vctp.32 r12784; CHECK-NEXT:    vpst2785; CHECK-NEXT:    vmult.i32 q1, q0, r02786; CHECK-NEXT:    vmov q0, q12787; CHECK-NEXT:    bx lr2788entry:2789  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2790  %i = insertelement <4 x i32> undef, i32 %y, i32 02791  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer2792  %a = mul <4 x i32> %x, %ys2793  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %ys2794  ret <4 x i32> %b2795}2796 2797define arm_aapcs_vfpcc <8 x i16> @mulqr_v8i16_y(<8 x i16> %x, i16 %y, i32 %n) {2798; CHECK-LABEL: mulqr_v8i16_y:2799; CHECK:       @ %bb.0: @ %entry2800; CHECK-NEXT:    vdup.16 q1, r02801; CHECK-NEXT:    vctp.16 r12802; CHECK-NEXT:    vpst2803; CHECK-NEXT:    vmult.i16 q1, q0, r02804; CHECK-NEXT:    vmov q0, q12805; CHECK-NEXT:    bx lr2806entry:2807  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2808  %i = insertelement <8 x i16> undef, i16 %y, i32 02809  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer2810  %a = mul <8 x i16> %x, %ys2811  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %ys2812  ret <8 x i16> %b2813}2814 2815define arm_aapcs_vfpcc <16 x i8> @mulqr_v16i8_y(<16 x i8> %x, i8 %y, i32 %n) {2816; CHECK-LABEL: mulqr_v16i8_y:2817; CHECK:       @ %bb.0: @ %entry2818; CHECK-NEXT:    vdup.8 q1, r02819; CHECK-NEXT:    vctp.8 r12820; CHECK-NEXT:    vpst2821; CHECK-NEXT:    vmult.i8 q1, q0, r02822; CHECK-NEXT:    vmov q0, q12823; CHECK-NEXT:    bx lr2824entry:2825  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2826  %i = insertelement <16 x i8> undef, i8 %y, i32 02827  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer2828  %a = mul <16 x i8> %x, %ys2829  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %ys2830  ret <16 x i8> %b2831}2832 2833define arm_aapcs_vfpcc <4 x float> @faddqr_v4f32_y(<4 x float> %x, float %y, i32 %n) {2834; CHECK-LABEL: faddqr_v4f32_y:2835; CHECK:       @ %bb.0: @ %entry2836; CHECK-NEXT:    vmov r1, s42837; CHECK-NEXT:    vctp.32 r02838; CHECK-NEXT:    vdup.32 q1, r12839; CHECK-NEXT:    vpst2840; CHECK-NEXT:    vaddt.f32 q1, q0, r12841; CHECK-NEXT:    vmov q0, q12842; CHECK-NEXT:    bx lr2843entry:2844  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2845  %i = insertelement <4 x float> undef, float %y, i32 02846  %ys = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer2847  %a = fadd <4 x float> %x, %ys2848  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %ys2849  ret <4 x float> %b2850}2851 2852define arm_aapcs_vfpcc <8 x half> @faddqr_v8f16_y(<8 x half> %x, half %y, i32 %n) {2853; CHECK-LABEL: faddqr_v8f16_y:2854; CHECK:       @ %bb.0: @ %entry2855; CHECK-NEXT:    vmov.f16 r1, s42856; CHECK-NEXT:    vctp.16 r02857; CHECK-NEXT:    vdup.16 q1, r12858; CHECK-NEXT:    vpst2859; CHECK-NEXT:    vaddt.f16 q1, q0, r12860; CHECK-NEXT:    vmov q0, q12861; CHECK-NEXT:    bx lr2862entry:2863  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2864  %i = insertelement <8 x half> undef, half %y, i32 02865  %ys = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer2866  %a = fadd <8 x half> %x, %ys2867  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %ys2868  ret <8 x half> %b2869}2870 2871define arm_aapcs_vfpcc <4 x float> @fsubqr_v4f32_y(<4 x float> %x, float %y, i32 %n) {2872; CHECK-LABEL: fsubqr_v4f32_y:2873; CHECK:       @ %bb.0: @ %entry2874; CHECK-NEXT:    vmov r1, s42875; CHECK-NEXT:    vctp.32 r02876; CHECK-NEXT:    vdup.32 q1, r12877; CHECK-NEXT:    vpst2878; CHECK-NEXT:    vsubt.f32 q1, q0, r12879; CHECK-NEXT:    vmov q0, q12880; CHECK-NEXT:    bx lr2881entry:2882  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2883  %i = insertelement <4 x float> undef, float %y, i32 02884  %ys = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer2885  %a = fsub <4 x float> %x, %ys2886  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %ys2887  ret <4 x float> %b2888}2889 2890define arm_aapcs_vfpcc <8 x half> @fsubqr_v8f16_y(<8 x half> %x, half %y, i32 %n) {2891; CHECK-LABEL: fsubqr_v8f16_y:2892; CHECK:       @ %bb.0: @ %entry2893; CHECK-NEXT:    vmov.f16 r1, s42894; CHECK-NEXT:    vctp.16 r02895; CHECK-NEXT:    vdup.16 q1, r12896; CHECK-NEXT:    vpst2897; CHECK-NEXT:    vsubt.f16 q1, q0, r12898; CHECK-NEXT:    vmov q0, q12899; CHECK-NEXT:    bx lr2900entry:2901  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2902  %i = insertelement <8 x half> undef, half %y, i32 02903  %ys = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer2904  %a = fsub <8 x half> %x, %ys2905  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %ys2906  ret <8 x half> %b2907}2908 2909define arm_aapcs_vfpcc <4 x float> @fmulqr_v4f32_y(<4 x float> %x, float %y, i32 %n) {2910; CHECK-LABEL: fmulqr_v4f32_y:2911; CHECK:       @ %bb.0: @ %entry2912; CHECK-NEXT:    vmov r1, s42913; CHECK-NEXT:    vctp.32 r02914; CHECK-NEXT:    vdup.32 q1, r12915; CHECK-NEXT:    vpst2916; CHECK-NEXT:    vmult.f32 q1, q0, r12917; CHECK-NEXT:    vmov q0, q12918; CHECK-NEXT:    bx lr2919entry:2920  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2921  %i = insertelement <4 x float> undef, float %y, i32 02922  %ys = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer2923  %a = fmul <4 x float> %x, %ys2924  %b = select <4 x i1> %c, <4 x float> %a, <4 x float> %ys2925  ret <4 x float> %b2926}2927 2928define arm_aapcs_vfpcc <8 x half> @fmulqr_v8f16_y(<8 x half> %x, half %y, i32 %n) {2929; CHECK-LABEL: fmulqr_v8f16_y:2930; CHECK:       @ %bb.0: @ %entry2931; CHECK-NEXT:    vmov.f16 r1, s42932; CHECK-NEXT:    vctp.16 r02933; CHECK-NEXT:    vdup.16 q1, r12934; CHECK-NEXT:    vpst2935; CHECK-NEXT:    vmult.f16 q1, q0, r12936; CHECK-NEXT:    vmov q0, q12937; CHECK-NEXT:    bx lr2938entry:2939  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2940  %i = insertelement <8 x half> undef, half %y, i32 02941  %ys = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer2942  %a = fmul <8 x half> %x, %ys2943  %b = select <8 x i1> %c, <8 x half> %a, <8 x half> %ys2944  ret <8 x half> %b2945}2946 2947define arm_aapcs_vfpcc <4 x i32> @sadd_satqr_v4i32_y(<4 x i32> %x, i32 %y, i32 %n) {2948; CHECK-LABEL: sadd_satqr_v4i32_y:2949; CHECK:       @ %bb.0: @ %entry2950; CHECK-NEXT:    vdup.32 q1, r02951; CHECK-NEXT:    vctp.32 r12952; CHECK-NEXT:    vpst2953; CHECK-NEXT:    vqaddt.s32 q1, q0, r02954; CHECK-NEXT:    vmov q0, q12955; CHECK-NEXT:    bx lr2956entry:2957  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)2958  %i = insertelement <4 x i32> undef, i32 %y, i32 02959  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer2960  %a = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %x, <4 x i32> %ys)2961  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %ys2962  ret <4 x i32> %b2963}2964 2965define arm_aapcs_vfpcc <8 x i16> @sadd_satqr_v8i16_y(<8 x i16> %x, i16 %y, i32 %n) {2966; CHECK-LABEL: sadd_satqr_v8i16_y:2967; CHECK:       @ %bb.0: @ %entry2968; CHECK-NEXT:    vdup.16 q1, r02969; CHECK-NEXT:    vctp.16 r12970; CHECK-NEXT:    vpst2971; CHECK-NEXT:    vqaddt.s16 q1, q0, r02972; CHECK-NEXT:    vmov q0, q12973; CHECK-NEXT:    bx lr2974entry:2975  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)2976  %i = insertelement <8 x i16> undef, i16 %y, i32 02977  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer2978  %a = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %x, <8 x i16> %ys)2979  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %ys2980  ret <8 x i16> %b2981}2982 2983define arm_aapcs_vfpcc <16 x i8> @sadd_satqr_v16i8_y(<16 x i8> %x, i8 %y, i32 %n) {2984; CHECK-LABEL: sadd_satqr_v16i8_y:2985; CHECK:       @ %bb.0: @ %entry2986; CHECK-NEXT:    vdup.8 q1, r02987; CHECK-NEXT:    vctp.8 r12988; CHECK-NEXT:    vpst2989; CHECK-NEXT:    vqaddt.s8 q1, q0, r02990; CHECK-NEXT:    vmov q0, q12991; CHECK-NEXT:    bx lr2992entry:2993  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)2994  %i = insertelement <16 x i8> undef, i8 %y, i32 02995  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer2996  %a = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %x, <16 x i8> %ys)2997  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %ys2998  ret <16 x i8> %b2999}3000 3001define arm_aapcs_vfpcc <4 x i32> @uadd_satqr_v4i32_y(<4 x i32> %x, i32 %y, i32 %n) {3002; CHECK-LABEL: uadd_satqr_v4i32_y:3003; CHECK:       @ %bb.0: @ %entry3004; CHECK-NEXT:    vdup.32 q1, r03005; CHECK-NEXT:    vctp.32 r13006; CHECK-NEXT:    vpst3007; CHECK-NEXT:    vqaddt.u32 q1, q0, r03008; CHECK-NEXT:    vmov q0, q13009; CHECK-NEXT:    bx lr3010entry:3011  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)3012  %i = insertelement <4 x i32> undef, i32 %y, i32 03013  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer3014  %a = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %x, <4 x i32> %ys)3015  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %ys3016  ret <4 x i32> %b3017}3018 3019define arm_aapcs_vfpcc <8 x i16> @uadd_satqr_v8i16_y(<8 x i16> %x, i16 %y, i32 %n) {3020; CHECK-LABEL: uadd_satqr_v8i16_y:3021; CHECK:       @ %bb.0: @ %entry3022; CHECK-NEXT:    vdup.16 q1, r03023; CHECK-NEXT:    vctp.16 r13024; CHECK-NEXT:    vpst3025; CHECK-NEXT:    vqaddt.u16 q1, q0, r03026; CHECK-NEXT:    vmov q0, q13027; CHECK-NEXT:    bx lr3028entry:3029  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)3030  %i = insertelement <8 x i16> undef, i16 %y, i32 03031  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer3032  %a = call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %x, <8 x i16> %ys)3033  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %ys3034  ret <8 x i16> %b3035}3036 3037define arm_aapcs_vfpcc <16 x i8> @uadd_satqr_v16i8_y(<16 x i8> %x, i8 %y, i32 %n) {3038; CHECK-LABEL: uadd_satqr_v16i8_y:3039; CHECK:       @ %bb.0: @ %entry3040; CHECK-NEXT:    vdup.8 q1, r03041; CHECK-NEXT:    vctp.8 r13042; CHECK-NEXT:    vpst3043; CHECK-NEXT:    vqaddt.u8 q1, q0, r03044; CHECK-NEXT:    vmov q0, q13045; CHECK-NEXT:    bx lr3046entry:3047  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)3048  %i = insertelement <16 x i8> undef, i8 %y, i32 03049  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer3050  %a = call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %x, <16 x i8> %ys)3051  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %ys3052  ret <16 x i8> %b3053}3054 3055define arm_aapcs_vfpcc <4 x i32> @ssub_satqr_v4i32_y(<4 x i32> %x, i32 %y, i32 %n) {3056; CHECK-LABEL: ssub_satqr_v4i32_y:3057; CHECK:       @ %bb.0: @ %entry3058; CHECK-NEXT:    vdup.32 q1, r03059; CHECK-NEXT:    vctp.32 r13060; CHECK-NEXT:    vpst3061; CHECK-NEXT:    vqsubt.s32 q1, q0, r03062; CHECK-NEXT:    vmov q0, q13063; CHECK-NEXT:    bx lr3064entry:3065  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)3066  %i = insertelement <4 x i32> undef, i32 %y, i32 03067  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer3068  %a = call <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32> %x, <4 x i32> %ys)3069  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %ys3070  ret <4 x i32> %b3071}3072 3073define arm_aapcs_vfpcc <8 x i16> @ssub_satqr_v8i16_y(<8 x i16> %x, i16 %y, i32 %n) {3074; CHECK-LABEL: ssub_satqr_v8i16_y:3075; CHECK:       @ %bb.0: @ %entry3076; CHECK-NEXT:    vdup.16 q1, r03077; CHECK-NEXT:    vctp.16 r13078; CHECK-NEXT:    vpst3079; CHECK-NEXT:    vqsubt.s16 q1, q0, r03080; CHECK-NEXT:    vmov q0, q13081; CHECK-NEXT:    bx lr3082entry:3083  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)3084  %i = insertelement <8 x i16> undef, i16 %y, i32 03085  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer3086  %a = call <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16> %x, <8 x i16> %ys)3087  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %ys3088  ret <8 x i16> %b3089}3090 3091define arm_aapcs_vfpcc <16 x i8> @ssub_satqr_v16i8_y(<16 x i8> %x, i8 %y, i32 %n) {3092; CHECK-LABEL: ssub_satqr_v16i8_y:3093; CHECK:       @ %bb.0: @ %entry3094; CHECK-NEXT:    vdup.8 q1, r03095; CHECK-NEXT:    vctp.8 r13096; CHECK-NEXT:    vpst3097; CHECK-NEXT:    vqsubt.s8 q1, q0, r03098; CHECK-NEXT:    vmov q0, q13099; CHECK-NEXT:    bx lr3100entry:3101  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)3102  %i = insertelement <16 x i8> undef, i8 %y, i32 03103  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer3104  %a = call <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8> %x, <16 x i8> %ys)3105  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %ys3106  ret <16 x i8> %b3107}3108 3109define arm_aapcs_vfpcc <4 x i32> @usub_satqr_v4i32_y(<4 x i32> %x, i32 %y, i32 %n) {3110; CHECK-LABEL: usub_satqr_v4i32_y:3111; CHECK:       @ %bb.0: @ %entry3112; CHECK-NEXT:    vdup.32 q1, r03113; CHECK-NEXT:    vctp.32 r13114; CHECK-NEXT:    vpst3115; CHECK-NEXT:    vqsubt.u32 q1, q0, r03116; CHECK-NEXT:    vmov q0, q13117; CHECK-NEXT:    bx lr3118entry:3119  %c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)3120  %i = insertelement <4 x i32> undef, i32 %y, i32 03121  %ys = shufflevector <4 x i32> %i, <4 x i32> undef, <4 x i32> zeroinitializer3122  %a = call <4 x i32> @llvm.usub.sat.v4i32(<4 x i32> %x, <4 x i32> %ys)3123  %b = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %ys3124  ret <4 x i32> %b3125}3126 3127define arm_aapcs_vfpcc <8 x i16> @usub_satqr_v8i16_y(<8 x i16> %x, i16 %y, i32 %n) {3128; CHECK-LABEL: usub_satqr_v8i16_y:3129; CHECK:       @ %bb.0: @ %entry3130; CHECK-NEXT:    vdup.16 q1, r03131; CHECK-NEXT:    vctp.16 r13132; CHECK-NEXT:    vpst3133; CHECK-NEXT:    vqsubt.u16 q1, q0, r03134; CHECK-NEXT:    vmov q0, q13135; CHECK-NEXT:    bx lr3136entry:3137  %c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)3138  %i = insertelement <8 x i16> undef, i16 %y, i32 03139  %ys = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer3140  %a = call <8 x i16> @llvm.usub.sat.v8i16(<8 x i16> %x, <8 x i16> %ys)3141  %b = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %ys3142  ret <8 x i16> %b3143}3144 3145define arm_aapcs_vfpcc <16 x i8> @usub_satqr_v16i8_y(<16 x i8> %x, i8 %y, i32 %n) {3146; CHECK-LABEL: usub_satqr_v16i8_y:3147; CHECK:       @ %bb.0: @ %entry3148; CHECK-NEXT:    vdup.8 q1, r03149; CHECK-NEXT:    vctp.8 r13150; CHECK-NEXT:    vpst3151; CHECK-NEXT:    vqsubt.u8 q1, q0, r03152; CHECK-NEXT:    vmov q0, q13153; CHECK-NEXT:    bx lr3154entry:3155  %c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)3156  %i = insertelement <16 x i8> undef, i8 %y, i32 03157  %ys = shufflevector <16 x i8> %i, <16 x i8> undef, <16 x i32> zeroinitializer3158  %a = call <16 x i8> @llvm.usub.sat.v16i8(<16 x i8> %x, <16 x i8> %ys)3159  %b = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %ys3160  ret <16 x i8> %b3161}3162 3163declare <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8>, <16 x i8>)3164declare <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16>, <8 x i16>)3165declare <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32>, <4 x i32>)3166declare <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8>, <16 x i8>)3167declare <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16>, <8 x i16>)3168declare <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32>, <4 x i32>)3169declare <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8>, <16 x i8>)3170declare <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16>, <8 x i16>)3171declare <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32>, <4 x i32>)3172declare <16 x i8> @llvm.usub.sat.v16i8(<16 x i8>, <16 x i8>)3173declare <8 x i16> @llvm.usub.sat.v8i16(<8 x i16>, <8 x i16>)3174declare <4 x i32> @llvm.usub.sat.v4i32(<4 x i32>, <4 x i32>)3175 3176declare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>)3177declare <8 x half> @llvm.fma.v8f16(<8 x half>, <8 x half>, <8 x half>)3178 3179declare <16 x i1> @llvm.arm.mve.vctp8(i32)3180declare <8 x i1> @llvm.arm.mve.vctp16(i32)3181declare <4 x i1> @llvm.arm.mve.vctp32(i32)3182