1*9eb3cc10SSimon Tatham; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9eb3cc10SSimon Tatham; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -verify-machineinstrs -o - %s | FileCheck %s 3*9eb3cc10SSimon Tatham; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -verify-machineinstrs -o - %s | FileCheck %s 4*9eb3cc10SSimon Tatham 5*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vmvnq_m_s8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) { 6*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_s8: 7*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 8*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 9*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 10*9eb3cc10SSimon Tatham; CHECK-NEXT: vmvnt q0, q1 11*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 12*9eb3cc10SSimon Tathamentry: 13*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 14*9eb3cc10SSimon Tatham %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0) 15*9eb3cc10SSimon Tatham %2 = tail call <16 x i8> @llvm.arm.mve.mvn.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive) 16*9eb3cc10SSimon Tatham ret <16 x i8> %2 17*9eb3cc10SSimon Tatham} 18*9eb3cc10SSimon Tatham 19*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vmvnq_m_s16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) { 20*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_s16: 21*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 22*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 23*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 24*9eb3cc10SSimon Tatham; CHECK-NEXT: vmvnt q0, q1 25*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 26*9eb3cc10SSimon Tathamentry: 27*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 28*9eb3cc10SSimon Tatham %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 29*9eb3cc10SSimon Tatham %2 = tail call <8 x i16> @llvm.arm.mve.mvn.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive) 30*9eb3cc10SSimon Tatham ret <8 x i16> %2 31*9eb3cc10SSimon Tatham} 32*9eb3cc10SSimon Tatham 33*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vmvnq_m_s32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) { 34*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_s32: 35*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 36*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 37*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 38*9eb3cc10SSimon Tatham; CHECK-NEXT: vmvnt q0, q1 39*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 40*9eb3cc10SSimon Tathamentry: 41*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 42*9eb3cc10SSimon Tatham %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 43*9eb3cc10SSimon Tatham %2 = tail call <4 x i32> @llvm.arm.mve.mvn.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive) 44*9eb3cc10SSimon Tatham ret <4 x i32> %2 45*9eb3cc10SSimon Tatham} 46*9eb3cc10SSimon Tatham 47*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vmvnq_m_u8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) { 48*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_u8: 49*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 50*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 51*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 52*9eb3cc10SSimon Tatham; CHECK-NEXT: vmvnt q0, q1 53*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 54*9eb3cc10SSimon Tathamentry: 55*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 56*9eb3cc10SSimon Tatham %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0) 57*9eb3cc10SSimon Tatham %2 = tail call <16 x i8> @llvm.arm.mve.mvn.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive) 58*9eb3cc10SSimon Tatham ret <16 x i8> %2 59*9eb3cc10SSimon Tatham} 60*9eb3cc10SSimon Tatham 61*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vmvnq_m_u16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) { 62*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_u16: 63*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 64*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 65*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 66*9eb3cc10SSimon Tatham; CHECK-NEXT: vmvnt q0, q1 67*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 68*9eb3cc10SSimon Tathamentry: 69*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 70*9eb3cc10SSimon Tatham %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 71*9eb3cc10SSimon Tatham %2 = tail call <8 x i16> @llvm.arm.mve.mvn.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive) 72*9eb3cc10SSimon Tatham ret <8 x i16> %2 73*9eb3cc10SSimon Tatham} 74*9eb3cc10SSimon Tatham 75*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vmvnq_m_u32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) { 76*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_u32: 77*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 78*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 79*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 80*9eb3cc10SSimon Tatham; CHECK-NEXT: vmvnt q0, q1 81*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 82*9eb3cc10SSimon Tathamentry: 83*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 84*9eb3cc10SSimon Tatham %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 85*9eb3cc10SSimon Tatham %2 = tail call <4 x i32> @llvm.arm.mve.mvn.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive) 86*9eb3cc10SSimon Tatham ret <4 x i32> %2 87*9eb3cc10SSimon Tatham} 88*9eb3cc10SSimon Tatham 89*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x half> @test_vnegq_m_f16(<8 x half> %inactive, <8 x half> %a, i16 zeroext %p) { 90*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vnegq_m_f16: 91*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 92*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 93*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 94*9eb3cc10SSimon Tatham; CHECK-NEXT: vnegt.f16 q0, q1 95*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 96*9eb3cc10SSimon Tathamentry: 97*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 98*9eb3cc10SSimon Tatham %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 99*9eb3cc10SSimon Tatham %2 = tail call <8 x half> @llvm.arm.mve.neg.predicated.v8f16.v8i1(<8 x half> %a, <8 x i1> %1, <8 x half> %inactive) 100*9eb3cc10SSimon Tatham ret <8 x half> %2 101*9eb3cc10SSimon Tatham} 102*9eb3cc10SSimon Tatham 103*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x float> @test_vnegq_m_f32(<4 x float> %inactive, <4 x float> %a, i16 zeroext %p) { 104*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vnegq_m_f32: 105*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 106*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 107*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 108*9eb3cc10SSimon Tatham; CHECK-NEXT: vnegt.f32 q0, q1 109*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 110*9eb3cc10SSimon Tathamentry: 111*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 112*9eb3cc10SSimon Tatham %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 113*9eb3cc10SSimon Tatham %2 = tail call <4 x float> @llvm.arm.mve.neg.predicated.v4f32.v4i1(<4 x float> %a, <4 x i1> %1, <4 x float> %inactive) 114*9eb3cc10SSimon Tatham ret <4 x float> %2 115*9eb3cc10SSimon Tatham} 116*9eb3cc10SSimon Tatham 117*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vnegq_m_s8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) { 118*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vnegq_m_s8: 119*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 120*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 121*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 122*9eb3cc10SSimon Tatham; CHECK-NEXT: vnegt.s8 q0, q1 123*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 124*9eb3cc10SSimon Tathamentry: 125*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 126*9eb3cc10SSimon Tatham %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0) 127*9eb3cc10SSimon Tatham %2 = tail call <16 x i8> @llvm.arm.mve.neg.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive) 128*9eb3cc10SSimon Tatham ret <16 x i8> %2 129*9eb3cc10SSimon Tatham} 130*9eb3cc10SSimon Tatham 131*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vnegq_m_s16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) { 132*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vnegq_m_s16: 133*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 134*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 135*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 136*9eb3cc10SSimon Tatham; CHECK-NEXT: vnegt.s16 q0, q1 137*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 138*9eb3cc10SSimon Tathamentry: 139*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 140*9eb3cc10SSimon Tatham %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 141*9eb3cc10SSimon Tatham %2 = tail call <8 x i16> @llvm.arm.mve.neg.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive) 142*9eb3cc10SSimon Tatham ret <8 x i16> %2 143*9eb3cc10SSimon Tatham} 144*9eb3cc10SSimon Tatham 145*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vnegq_m_s32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) { 146*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vnegq_m_s32: 147*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 148*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 149*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 150*9eb3cc10SSimon Tatham; CHECK-NEXT: vnegt.s32 q0, q1 151*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 152*9eb3cc10SSimon Tathamentry: 153*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 154*9eb3cc10SSimon Tatham %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 155*9eb3cc10SSimon Tatham %2 = tail call <4 x i32> @llvm.arm.mve.neg.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive) 156*9eb3cc10SSimon Tatham ret <4 x i32> %2 157*9eb3cc10SSimon Tatham} 158*9eb3cc10SSimon Tatham 159*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x half> @test_vabsq_m_f16(<8 x half> %inactive, <8 x half> %a, i16 zeroext %p) { 160*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vabsq_m_f16: 161*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 162*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 163*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 164*9eb3cc10SSimon Tatham; CHECK-NEXT: vabst.f16 q0, q1 165*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 166*9eb3cc10SSimon Tathamentry: 167*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 168*9eb3cc10SSimon Tatham %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 169*9eb3cc10SSimon Tatham %2 = tail call <8 x half> @llvm.arm.mve.abs.predicated.v8f16.v8i1(<8 x half> %a, <8 x i1> %1, <8 x half> %inactive) 170*9eb3cc10SSimon Tatham ret <8 x half> %2 171*9eb3cc10SSimon Tatham} 172*9eb3cc10SSimon Tatham 173*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x float> @test_vabsq_m_f32(<4 x float> %inactive, <4 x float> %a, i16 zeroext %p) { 174*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vabsq_m_f32: 175*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 176*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 177*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 178*9eb3cc10SSimon Tatham; CHECK-NEXT: vabst.f32 q0, q1 179*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 180*9eb3cc10SSimon Tathamentry: 181*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 182*9eb3cc10SSimon Tatham %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 183*9eb3cc10SSimon Tatham %2 = tail call <4 x float> @llvm.arm.mve.abs.predicated.v4f32.v4i1(<4 x float> %a, <4 x i1> %1, <4 x float> %inactive) 184*9eb3cc10SSimon Tatham ret <4 x float> %2 185*9eb3cc10SSimon Tatham} 186*9eb3cc10SSimon Tatham 187*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vabsq_m_s8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) { 188*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vabsq_m_s8: 189*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 190*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 191*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 192*9eb3cc10SSimon Tatham; CHECK-NEXT: vabst.s8 q0, q1 193*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 194*9eb3cc10SSimon Tathamentry: 195*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 196*9eb3cc10SSimon Tatham %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0) 197*9eb3cc10SSimon Tatham %2 = tail call <16 x i8> @llvm.arm.mve.abs.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive) 198*9eb3cc10SSimon Tatham ret <16 x i8> %2 199*9eb3cc10SSimon Tatham} 200*9eb3cc10SSimon Tatham 201*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vabsq_m_s16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) { 202*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vabsq_m_s16: 203*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 204*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 205*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 206*9eb3cc10SSimon Tatham; CHECK-NEXT: vabst.s16 q0, q1 207*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 208*9eb3cc10SSimon Tathamentry: 209*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 210*9eb3cc10SSimon Tatham %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 211*9eb3cc10SSimon Tatham %2 = tail call <8 x i16> @llvm.arm.mve.abs.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive) 212*9eb3cc10SSimon Tatham ret <8 x i16> %2 213*9eb3cc10SSimon Tatham} 214*9eb3cc10SSimon Tatham 215*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vabsq_m_s32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) { 216*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vabsq_m_s32: 217*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 218*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 219*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 220*9eb3cc10SSimon Tatham; CHECK-NEXT: vabst.s32 q0, q1 221*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 222*9eb3cc10SSimon Tathamentry: 223*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 224*9eb3cc10SSimon Tatham %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 225*9eb3cc10SSimon Tatham %2 = tail call <4 x i32> @llvm.arm.mve.abs.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive) 226*9eb3cc10SSimon Tatham ret <4 x i32> %2 227*9eb3cc10SSimon Tatham} 228*9eb3cc10SSimon Tatham 229*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vqnegq_m_s8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) { 230*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqnegq_m_s8: 231*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 232*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 233*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 234*9eb3cc10SSimon Tatham; CHECK-NEXT: vqnegt.s8 q0, q1 235*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 236*9eb3cc10SSimon Tathamentry: 237*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 238*9eb3cc10SSimon Tatham %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0) 239*9eb3cc10SSimon Tatham %2 = tail call <16 x i8> @llvm.arm.mve.qneg.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive) 240*9eb3cc10SSimon Tatham ret <16 x i8> %2 241*9eb3cc10SSimon Tatham} 242*9eb3cc10SSimon Tatham 243*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vqnegq_m_s16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) { 244*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqnegq_m_s16: 245*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 246*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 247*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 248*9eb3cc10SSimon Tatham; CHECK-NEXT: vqnegt.s16 q0, q1 249*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 250*9eb3cc10SSimon Tathamentry: 251*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 252*9eb3cc10SSimon Tatham %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 253*9eb3cc10SSimon Tatham %2 = tail call <8 x i16> @llvm.arm.mve.qneg.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive) 254*9eb3cc10SSimon Tatham ret <8 x i16> %2 255*9eb3cc10SSimon Tatham} 256*9eb3cc10SSimon Tatham 257*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vqnegq_m_s32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) { 258*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqnegq_m_s32: 259*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 260*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 261*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 262*9eb3cc10SSimon Tatham; CHECK-NEXT: vqnegt.s32 q0, q1 263*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 264*9eb3cc10SSimon Tathamentry: 265*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 266*9eb3cc10SSimon Tatham %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 267*9eb3cc10SSimon Tatham %2 = tail call <4 x i32> @llvm.arm.mve.qneg.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive) 268*9eb3cc10SSimon Tatham ret <4 x i32> %2 269*9eb3cc10SSimon Tatham} 270*9eb3cc10SSimon Tatham 271*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vqabsq_m_s8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) { 272*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqabsq_m_s8: 273*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 274*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 275*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 276*9eb3cc10SSimon Tatham; CHECK-NEXT: vqabst.s8 q0, q1 277*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 278*9eb3cc10SSimon Tathamentry: 279*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 280*9eb3cc10SSimon Tatham %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0) 281*9eb3cc10SSimon Tatham %2 = tail call <16 x i8> @llvm.arm.mve.qabs.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive) 282*9eb3cc10SSimon Tatham ret <16 x i8> %2 283*9eb3cc10SSimon Tatham} 284*9eb3cc10SSimon Tatham 285*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vqabsq_m_s16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) { 286*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqabsq_m_s16: 287*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 288*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 289*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 290*9eb3cc10SSimon Tatham; CHECK-NEXT: vqabst.s16 q0, q1 291*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 292*9eb3cc10SSimon Tathamentry: 293*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 294*9eb3cc10SSimon Tatham %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 295*9eb3cc10SSimon Tatham %2 = tail call <8 x i16> @llvm.arm.mve.qabs.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive) 296*9eb3cc10SSimon Tatham ret <8 x i16> %2 297*9eb3cc10SSimon Tatham} 298*9eb3cc10SSimon Tatham 299*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vqabsq_m_s32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) { 300*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqabsq_m_s32: 301*9eb3cc10SSimon Tatham; CHECK: @ %bb.0: @ %entry 302*9eb3cc10SSimon Tatham; CHECK-NEXT: vmsr p0, r0 303*9eb3cc10SSimon Tatham; CHECK-NEXT: vpst 304*9eb3cc10SSimon Tatham; CHECK-NEXT: vqabst.s32 q0, q1 305*9eb3cc10SSimon Tatham; CHECK-NEXT: bx lr 306*9eb3cc10SSimon Tathamentry: 307*9eb3cc10SSimon Tatham %0 = zext i16 %p to i32 308*9eb3cc10SSimon Tatham %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 309*9eb3cc10SSimon Tatham %2 = tail call <4 x i32> @llvm.arm.mve.qabs.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive) 310*9eb3cc10SSimon Tatham ret <4 x i32> %2 311*9eb3cc10SSimon Tatham} 312*9eb3cc10SSimon Tatham 313*9eb3cc10SSimon Tathamdeclare <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32) 314*9eb3cc10SSimon Tathamdeclare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32) 315*9eb3cc10SSimon Tathamdeclare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32) 316*9eb3cc10SSimon Tatham 317*9eb3cc10SSimon Tathamdeclare <16 x i8> @llvm.arm.mve.mvn.predicated.v16i8.v16i1(<16 x i8>, <16 x i1>, <16 x i8>) 318*9eb3cc10SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.mvn.predicated.v8i16.v8i1(<8 x i16>, <8 x i1>, <8 x i16>) 319*9eb3cc10SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.mvn.predicated.v4i32.v4i1(<4 x i32>, <4 x i1>, <4 x i32>) 320*9eb3cc10SSimon Tathamdeclare <8 x half> @llvm.arm.mve.neg.predicated.v8f16.v8i1(<8 x half>, <8 x i1>, <8 x half>) 321*9eb3cc10SSimon Tathamdeclare <4 x float> @llvm.arm.mve.neg.predicated.v4f32.v4i1(<4 x float>, <4 x i1>, <4 x float>) 322*9eb3cc10SSimon Tathamdeclare <16 x i8> @llvm.arm.mve.neg.predicated.v16i8.v16i1(<16 x i8>, <16 x i1>, <16 x i8>) 323*9eb3cc10SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.neg.predicated.v8i16.v8i1(<8 x i16>, <8 x i1>, <8 x i16>) 324*9eb3cc10SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.neg.predicated.v4i32.v4i1(<4 x i32>, <4 x i1>, <4 x i32>) 325*9eb3cc10SSimon Tathamdeclare <8 x half> @llvm.arm.mve.abs.predicated.v8f16.v8i1(<8 x half>, <8 x i1>, <8 x half>) 326*9eb3cc10SSimon Tathamdeclare <4 x float> @llvm.arm.mve.abs.predicated.v4f32.v4i1(<4 x float>, <4 x i1>, <4 x float>) 327*9eb3cc10SSimon Tathamdeclare <16 x i8> @llvm.arm.mve.abs.predicated.v16i8.v16i1(<16 x i8>, <16 x i1>, <16 x i8>) 328*9eb3cc10SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.abs.predicated.v8i16.v8i1(<8 x i16>, <8 x i1>, <8 x i16>) 329*9eb3cc10SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.abs.predicated.v4i32.v4i1(<4 x i32>, <4 x i1>, <4 x i32>) 330*9eb3cc10SSimon Tathamdeclare <16 x i8> @llvm.arm.mve.qneg.predicated.v16i8.v16i1(<16 x i8>, <16 x i1>, <16 x i8>) 331*9eb3cc10SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.qneg.predicated.v8i16.v8i1(<8 x i16>, <8 x i1>, <8 x i16>) 332*9eb3cc10SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.qneg.predicated.v4i32.v4i1(<4 x i32>, <4 x i1>, <4 x i32>) 333*9eb3cc10SSimon Tathamdeclare <16 x i8> @llvm.arm.mve.qabs.predicated.v16i8.v16i1(<16 x i8>, <16 x i1>, <16 x i8>) 334*9eb3cc10SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.qabs.predicated.v8i16.v8i1(<8 x i16>, <8 x i1>, <8 x i16>) 335*9eb3cc10SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.qabs.predicated.v4i32.v4i1(<4 x i32>, <4 x i1>, <4 x i32>) 336