diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -14636,6 +14636,15 @@ if (Cmp->getOpcode() != ARMISD::CMPZ || !isNullConstant(Cmp->getOperand(1))) return SDValue(); SDValue CSInc = Cmp->getOperand(0); + + // Ignore any `And 1` nodes that may not yet have been removed. We are + // looking for a value that produces 1/0, so these have no effect on the + // code. + while (CSInc.getOpcode() == ISD::AND && + isa(CSInc.getOperand(1)) && + CSInc.getConstantOperandVal(1) == 1 && CSInc->hasOneUse()) + CSInc = CSInc.getOperand(0); + if (CSInc.getOpcode() != ARMISD::CSINC || !isNullConstant(CSInc.getOperand(0)) || !isNullConstant(CSInc.getOperand(1)) || !CSInc->hasOneUse()) diff --git a/llvm/test/CodeGen/Thumb2/active_lane_mask.ll b/llvm/test/CodeGen/Thumb2/active_lane_mask.ll --- a/llvm/test/CodeGen/Thumb2/active_lane_mask.ll +++ b/llvm/test/CodeGen/Thumb2/active_lane_mask.ll @@ -4,57 +4,53 @@ define <2 x i64> @v2i64(i32 %index, i32 %TC, <2 x i64> %V1, <2 x i64> %V2) { ; CHECK-LABEL: v2i64: ; CHECK: @ %bb.0: -; CHECK-NEXT: push {r4, r5, r6, lr} +; CHECK-NEXT: push {r4, r5, r7, lr} ; CHECK-NEXT: vmov q0[2], q0[0], r0, r0 ; CHECK-NEXT: vmov.i64 q1, #0xffffffff ; CHECK-NEXT: vand q0, q0, q1 ; CHECK-NEXT: vmov q2[2], q2[0], r1, r1 ; CHECK-NEXT: vmov r0, r12, d1 +; CHECK-NEXT: vmov lr, s0 ; CHECK-NEXT: adds r0, #1 -; CHECK-NEXT: adc lr, r12, #0 -; CHECK-NEXT: vmov r12, s0 -; CHECK-NEXT: vmov q0[2], q0[0], r12, r0 +; CHECK-NEXT: vmov q0[2], q0[0], lr, r0 +; CHECK-NEXT: adc r12, r12, #0 ; CHECK-NEXT: vand q0, q0, q1 ; CHECK-NEXT: vand q1, q2, q1 ; CHECK-NEXT: vmov r4, r5, d1 ; CHECK-NEXT: vldr d1, [sp, #16] -; CHECK-NEXT: vmov r1, r6, d3 ; CHECK-NEXT: eors r0, r4 +; CHECK-NEXT: orrs.w r0, r0, r12 +; CHECK-NEXT: vmov r1, r0, d3 +; CHECK-NEXT: cset r12, eq ; CHECK-NEXT: subs r1, r4, r1 -; CHECK-NEXT: sbcs.w r1, r5, r6 -; CHECK-NEXT: vmov r5, r4, d2 -; CHECK-NEXT: cset r1, lo -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: cset r1, ne -; CHECK-NEXT: orrs.w r0, r0, lr -; CHECK-NEXT: cset r0, eq +; CHECK-NEXT: sbcs.w r0, r5, r0 +; CHECK-NEXT: vmov r1, r5, d0 +; CHECK-NEXT: cset r0, lo +; CHECK-NEXT: vmov d0, r2, r3 +; CHECK-NEXT: cmp r0, #0 +; CHECK-NEXT: cset r0, ne +; CHECK-NEXT: and.w r0, r0, r12 +; CHECK-NEXT: rsb.w r12, r0, #0 +; CHECK-NEXT: vmov r4, r0, d2 +; CHECK-NEXT: subs r4, r1, r4 +; CHECK-NEXT: sbcs.w r0, r5, r0 +; CHECK-NEXT: cset r0, lo ; CHECK-NEXT: cmp r0, #0 ; CHECK-NEXT: cset r0, ne +; CHECK-NEXT: teq.w r1, lr +; CHECK-NEXT: cset r1, eq ; CHECK-NEXT: ands r0, r1 -; CHECK-NEXT: vmov r1, r6, d0 +; CHECK-NEXT: movs r1, #0 ; CHECK-NEXT: rsbs r0, r0, #0 -; CHECK-NEXT: vmov d0, r2, r3 -; CHECK-NEXT: subs r5, r1, r5 -; CHECK-NEXT: sbcs r6, r4 -; CHECK-NEXT: cset r6, lo -; CHECK-NEXT: cmp r6, #0 -; CHECK-NEXT: cset r6, ne -; CHECK-NEXT: teq.w r1, r12 -; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: cset r1, ne -; CHECK-NEXT: ands r1, r6 -; CHECK-NEXT: movs r6, #0 -; CHECK-NEXT: rsbs r1, r1, #0 -; CHECK-NEXT: bfi r6, r1, #0, #8 -; CHECK-NEXT: bfi r6, r0, #8, #8 +; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: add r0, sp, #24 +; CHECK-NEXT: bfi r1, r12, #8, #8 ; CHECK-NEXT: vldrw.u32 q1, [r0] -; CHECK-NEXT: vmsr p0, r6 +; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q0, q1 ; CHECK-NEXT: vmov r0, r1, d0 ; CHECK-NEXT: vmov r2, r3, d1 -; CHECK-NEXT: pop {r4, r5, r6, pc} +; CHECK-NEXT: pop {r4, r5, r7, pc} %active.lane.mask = call <2 x i1> @llvm.get.active.lane.mask.v2i1.i32(i32 %index, i32 %TC) %select = select <2 x i1> %active.lane.mask, <2 x i64> %V1, <2 x i64> %V2 ret <2 x i64> %select diff --git a/llvm/test/CodeGen/Thumb2/mve-laneinterleaving.ll b/llvm/test/CodeGen/Thumb2/mve-laneinterleaving.ll --- a/llvm/test/CodeGen/Thumb2/mve-laneinterleaving.ll +++ b/llvm/test/CodeGen/Thumb2/mve-laneinterleaving.ll @@ -330,8 +330,10 @@ define arm_aapcs_vfpcc <4 x i32> @ext_ops_trunc_i32(<4 x i32> %a, <4 x i32> %b) { ; CHECK-LABEL: ext_ops_trunc_i32: ; CHECK: @ %bb.0: @ %entry -; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, lr} -; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, lr} +; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r10, lr} +; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r10, lr} +; CHECK-NEXT: .pad #4 +; CHECK-NEXT: sub sp, #4 ; CHECK-NEXT: .vsave {d8, d9} ; CHECK-NEXT: vpush {d8, d9} ; CHECK-NEXT: vmov.f32 s8, s4 @@ -347,7 +349,6 @@ ; CHECK-NEXT: vmov.f32 s6, s7 ; CHECK-NEXT: vand q1, q1, q3 ; CHECK-NEXT: vmov.f32 s2, s3 -; CHECK-NEXT: vmov r9, s0 ; CHECK-NEXT: adds r4, r3, r1 ; CHECK-NEXT: asr.w r6, r3, #31 ; CHECK-NEXT: adc.w r5, r6, r0 @@ -373,77 +374,71 @@ ; CHECK-NEXT: orr.w r7, r7, r3, asr #31 ; CHECK-NEXT: movs r4, #0 ; CHECK-NEXT: cmp r7, #0 -; CHECK-NEXT: cset r7, eq -; CHECK-NEXT: cmp r7, #0 -; CHECK-NEXT: csetm r7, ne +; CHECK-NEXT: csetm r7, eq ; CHECK-NEXT: bfi r4, r7, #0, #8 ; CHECK-NEXT: eor.w r7, r0, r2 ; CHECK-NEXT: orr.w r7, r7, r0, asr #31 ; CHECK-NEXT: rsbs r0, r0, #0 ; CHECK-NEXT: cmp r7, #0 -; CHECK-NEXT: cset r7, eq -; CHECK-NEXT: cmp r7, #0 -; CHECK-NEXT: csetm r7, ne +; CHECK-NEXT: csetm r7, eq ; CHECK-NEXT: bfi r4, r7, #8, #8 -; CHECK-NEXT: asr.w r7, r9, #31 ; CHECK-NEXT: vmsr p0, r4 ; CHECK-NEXT: rsbs r4, r3, #0 ; CHECK-NEXT: mla r3, lr, r2, r8 ; CHECK-NEXT: lsll r10, r5, r4 ; CHECK-NEXT: lsll r10, r5, r1 ; CHECK-NEXT: lsll r6, r3, r0 +; CHECK-NEXT: vmov r0, r7, d3 ; CHECK-NEXT: lsll r6, r3, r2 +; CHECK-NEXT: vmov r2, s0 ; CHECK-NEXT: vmov q4[2], q4[0], r10, r6 ; CHECK-NEXT: vmov q4[3], q4[1], r5, r3 ; CHECK-NEXT: vmov r1, r3, d2 -; CHECK-NEXT: vmov r0, r5, d3 ; CHECK-NEXT: vpsel q2, q4, q2 ; CHECK-NEXT: vmov.f32 s9, s10 -; CHECK-NEXT: adds.w r6, r9, r1 -; CHECK-NEXT: adcs r7, r3 -; CHECK-NEXT: asrl r6, r7, r1 -; CHECK-NEXT: subs.w r8, r6, r1 -; CHECK-NEXT: vmov r6, s2 -; CHECK-NEXT: sbc.w lr, r7, r3 -; CHECK-NEXT: umull r2, r7, r8, r1 -; CHECK-NEXT: adds r4, r6, r0 -; CHECK-NEXT: asr.w r3, r6, #31 -; CHECK-NEXT: adcs r3, r5 +; CHECK-NEXT: asrs r6, r2, #31 +; CHECK-NEXT: adds r4, r2, r1 +; CHECK-NEXT: adc.w r5, r6, r3 +; CHECK-NEXT: asrl r4, r5, r1 +; CHECK-NEXT: subs r6, r4, r1 +; CHECK-NEXT: sbc.w lr, r5, r3 +; CHECK-NEXT: vmov r5, s2 +; CHECK-NEXT: adds r4, r5, r0 +; CHECK-NEXT: asr.w r3, r5, #31 +; CHECK-NEXT: adcs r3, r7 ; CHECK-NEXT: asrl r4, r3, r0 ; CHECK-NEXT: subs r4, r4, r0 -; CHECK-NEXT: sbcs r3, r5 -; CHECK-NEXT: umull r4, r5, r4, r0 -; CHECK-NEXT: mla r3, r3, r0, r5 -; CHECK-NEXT: eor.w r5, r9, r1 -; CHECK-NEXT: orr.w r5, r5, r9, asr #31 -; CHECK-NEXT: cmp r5, #0 -; CHECK-NEXT: cset r5, eq -; CHECK-NEXT: cmp r5, #0 -; CHECK-NEXT: csetm r5, ne -; CHECK-NEXT: bfi r12, r5, #0, #8 -; CHECK-NEXT: eor.w r5, r6, r0 -; CHECK-NEXT: orr.w r5, r5, r6, asr #31 -; CHECK-NEXT: rsbs r6, r6, #0 -; CHECK-NEXT: cmp r5, #0 -; CHECK-NEXT: lsll r4, r3, r6 -; CHECK-NEXT: cset r5, eq -; CHECK-NEXT: lsll r4, r3, r0 -; CHECK-NEXT: cmp r5, #0 -; CHECK-NEXT: rsb.w r0, r9, #0 -; CHECK-NEXT: csetm r5, ne -; CHECK-NEXT: bfi r12, r5, #8, #8 -; CHECK-NEXT: mla r5, lr, r1, r7 +; CHECK-NEXT: sbcs r3, r7 +; CHECK-NEXT: umull r4, r7, r4, r0 +; CHECK-NEXT: mla r3, r3, r0, r7 +; CHECK-NEXT: eor.w r7, r2, r1 +; CHECK-NEXT: orr.w r7, r7, r2, asr #31 +; CHECK-NEXT: cmp r7, #0 +; CHECK-NEXT: csetm r7, eq +; CHECK-NEXT: bfi r12, r7, #0, #8 +; CHECK-NEXT: eor.w r7, r5, r0 +; CHECK-NEXT: orr.w r7, r7, r5, asr #31 +; CHECK-NEXT: cmp r7, #0 +; CHECK-NEXT: csetm r7, eq +; CHECK-NEXT: bfi r12, r7, #8, #8 +; CHECK-NEXT: umull r6, r7, r6, r1 ; CHECK-NEXT: vmsr p0, r12 -; CHECK-NEXT: lsll r2, r5, r0 -; CHECK-NEXT: lsll r2, r5, r1 -; CHECK-NEXT: vmov q0[2], q0[0], r2, r4 +; CHECK-NEXT: rsb.w r12, r5, #0 +; CHECK-NEXT: lsll r4, r3, r12 +; CHECK-NEXT: mla r5, lr, r1, r7 +; CHECK-NEXT: lsll r4, r3, r0 +; CHECK-NEXT: rsbs r0, r2, #0 +; CHECK-NEXT: lsll r6, r5, r0 +; CHECK-NEXT: lsll r6, r5, r1 +; CHECK-NEXT: vmov q0[2], q0[0], r6, r4 ; CHECK-NEXT: vmov q0[3], q0[1], r5, r3 ; CHECK-NEXT: vpsel q0, q0, q1 ; CHECK-NEXT: vmov.f32 s10, s0 ; CHECK-NEXT: vmov.f32 s11, s2 ; CHECK-NEXT: vmov q0, q2 ; CHECK-NEXT: vpop {d8, d9} -; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, pc} +; CHECK-NEXT: add sp, #4 +; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r10, pc} entry: %sa = sext <4 x i32> %a to <4 x i64> %sb = zext <4 x i32> %b to <4 x i64> diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-and.ll b/llvm/test/CodeGen/Thumb2/mve-pred-and.ll --- a/llvm/test/CodeGen/Thumb2/mve-pred-and.ll +++ b/llvm/test/CodeGen/Thumb2/mve-pred-and.ll @@ -578,15 +578,11 @@ ; CHECK-NEXT: vmov r0, r1, d4 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, r2, d5 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -609,13 +605,9 @@ ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: vmov r1, r2, d0 ; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: orrs r1, r2 ; CHECK-NEXT: vmov r12, r2, d5 ; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: cset r1, ne ; CHECK-NEXT: ands r0, r1 ; CHECK-NEXT: movs r1, #0 ; CHECK-NEXT: rsbs r0, r0, #0 @@ -626,12 +618,8 @@ ; CHECK-NEXT: orrs r0, r2 ; CHECK-NEXT: vmov r2, r3, d1 ; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, ne ; CHECK-NEXT: ands r0, r2 ; CHECK-NEXT: rsbs r0, r0, #0 ; CHECK-NEXT: bfi r1, r0, #8, #8 @@ -653,15 +641,11 @@ ; CHECK-NEXT: eors r3, r1 ; CHECK-NEXT: eors r2, r0 ; CHECK-NEXT: orrs r2, r3 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 ; CHECK-NEXT: vmov r3, r2, d0 -; CHECK-NEXT: cset r12, ne +; CHECK-NEXT: cset r12, eq ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: mov.w r3, #0 ; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, ne ; CHECK-NEXT: and.w r2, r2, r12 ; CHECK-NEXT: rsbs r2, r2, #0 ; CHECK-NEXT: bfi r3, r2, #0, #8 @@ -671,12 +655,8 @@ ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: vmov r1, r2, d1 ; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: orrs r1, r2 ; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: cset r1, ne ; CHECK-NEXT: ands r0, r1 ; CHECK-NEXT: rsbs r0, r0, #0 ; CHECK-NEXT: bfi r3, r0, #8, #8 diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-bitcast.ll b/llvm/test/CodeGen/Thumb2/mve-pred-bitcast.ll --- a/llvm/test/CodeGen/Thumb2/mve-pred-bitcast.ll +++ b/llvm/test/CodeGen/Thumb2/mve-pred-bitcast.ll @@ -367,16 +367,12 @@ ; CHECK-LE-NEXT: sub sp, #4 ; CHECK-LE-NEXT: vmov r0, r1, d0 ; CHECK-LE-NEXT: orrs r0, r1 -; CHECK-LE-NEXT: cset r0, eq -; CHECK-LE-NEXT: cmp r0, #0 -; CHECK-LE-NEXT: mov.w r0, #0 -; CHECK-LE-NEXT: csetm r1, ne +; CHECK-LE-NEXT: csetm r1, eq +; CHECK-LE-NEXT: movs r0, #0 ; CHECK-LE-NEXT: bfi r0, r1, #0, #1 ; CHECK-LE-NEXT: vmov r1, r2, d1 ; CHECK-LE-NEXT: orrs r1, r2 -; CHECK-LE-NEXT: cset r1, eq -; CHECK-LE-NEXT: cmp r1, #0 -; CHECK-LE-NEXT: csetm r1, ne +; CHECK-LE-NEXT: csetm r1, eq ; CHECK-LE-NEXT: bfi r0, r1, #1, #1 ; CHECK-LE-NEXT: add sp, #4 ; CHECK-LE-NEXT: bx lr @@ -388,16 +384,12 @@ ; CHECK-BE-NEXT: vrev64.32 q1, q0 ; CHECK-BE-NEXT: vmov r0, r1, d3 ; CHECK-BE-NEXT: orrs r0, r1 -; CHECK-BE-NEXT: cset r0, eq -; CHECK-BE-NEXT: cmp r0, #0 -; CHECK-BE-NEXT: mov.w r0, #0 -; CHECK-BE-NEXT: csetm r1, ne +; CHECK-BE-NEXT: csetm r1, eq +; CHECK-BE-NEXT: movs r0, #0 ; CHECK-BE-NEXT: bfi r0, r1, #0, #1 ; CHECK-BE-NEXT: vmov r1, r2, d2 ; CHECK-BE-NEXT: orrs r1, r2 -; CHECK-BE-NEXT: cset r1, eq -; CHECK-BE-NEXT: cmp r1, #0 -; CHECK-BE-NEXT: csetm r1, ne +; CHECK-BE-NEXT: csetm r1, eq ; CHECK-BE-NEXT: bfi r0, r1, #1, #1 ; CHECK-BE-NEXT: add sp, #4 ; CHECK-BE-NEXT: bx lr diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-loadstore.ll b/llvm/test/CodeGen/Thumb2/mve-pred-loadstore.ll --- a/llvm/test/CodeGen/Thumb2/mve-pred-loadstore.ll +++ b/llvm/test/CodeGen/Thumb2/mve-pred-loadstore.ll @@ -330,15 +330,11 @@ ; CHECK-LE-NEXT: vmov r1, r2, d0 ; CHECK-LE-NEXT: orrs r1, r2 ; CHECK-LE-NEXT: mov.w r2, #0 -; CHECK-LE-NEXT: cset r1, eq -; CHECK-LE-NEXT: cmp r1, #0 -; CHECK-LE-NEXT: csetm r1, ne +; CHECK-LE-NEXT: csetm r1, eq ; CHECK-LE-NEXT: bfi r2, r1, #0, #1 ; CHECK-LE-NEXT: vmov r1, r3, d1 ; CHECK-LE-NEXT: orrs r1, r3 -; CHECK-LE-NEXT: cset r1, eq -; CHECK-LE-NEXT: cmp r1, #0 -; CHECK-LE-NEXT: csetm r1, ne +; CHECK-LE-NEXT: csetm r1, eq ; CHECK-LE-NEXT: bfi r2, r1, #1, #1 ; CHECK-LE-NEXT: strb r2, [r0] ; CHECK-LE-NEXT: bx lr @@ -349,15 +345,11 @@ ; CHECK-BE-NEXT: vmov r1, r2, d3 ; CHECK-BE-NEXT: orrs r1, r2 ; CHECK-BE-NEXT: mov.w r2, #0 -; CHECK-BE-NEXT: cset r1, eq -; CHECK-BE-NEXT: cmp r1, #0 -; CHECK-BE-NEXT: csetm r1, ne +; CHECK-BE-NEXT: csetm r1, eq ; CHECK-BE-NEXT: bfi r2, r1, #0, #1 ; CHECK-BE-NEXT: vmov r1, r3, d2 ; CHECK-BE-NEXT: orrs r1, r3 -; CHECK-BE-NEXT: cset r1, eq -; CHECK-BE-NEXT: cmp r1, #0 -; CHECK-BE-NEXT: csetm r1, ne +; CHECK-BE-NEXT: csetm r1, eq ; CHECK-BE-NEXT: bfi r2, r1, #1, #1 ; CHECK-BE-NEXT: strb r2, [r0] ; CHECK-BE-NEXT: bx lr diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-not.ll b/llvm/test/CodeGen/Thumb2/mve-pred-not.ll --- a/llvm/test/CodeGen/Thumb2/mve-pred-not.ll +++ b/llvm/test/CodeGen/Thumb2/mve-pred-not.ll @@ -326,15 +326,11 @@ ; CHECK-NEXT: vmov r0, r1, d0 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, r2, d1 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q1, q0 @@ -352,15 +348,11 @@ ; CHECK-NEXT: vmov r0, r1, d0 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, r2, d1 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q1, q0 diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-or.ll b/llvm/test/CodeGen/Thumb2/mve-pred-or.ll --- a/llvm/test/CodeGen/Thumb2/mve-pred-or.ll +++ b/llvm/test/CodeGen/Thumb2/mve-pred-or.ll @@ -383,8 +383,6 @@ ; CHECK-NEXT: cset r0, eq ; CHECK-NEXT: orrs r1, r2 ; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: cset r1, ne ; CHECK-NEXT: cmp r0, #0 ; CHECK-NEXT: it ne ; CHECK-NEXT: movne r1, #1 @@ -397,8 +395,6 @@ ; CHECK-NEXT: cset r0, eq ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, ne ; CHECK-NEXT: cmp r0, #0 ; CHECK-NEXT: it ne ; CHECK-NEXT: movne r2, #1 @@ -425,8 +421,6 @@ ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: vmov r1, r2, d0 ; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: orrs r1, r2 ; CHECK-NEXT: vmov r12, r2, d5 ; CHECK-NEXT: cset r1, eq @@ -442,8 +436,6 @@ ; CHECK-NEXT: orrs r0, r2 ; CHECK-NEXT: vmov r2, r3, d1 ; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: cset r2, eq ; CHECK-NEXT: cmp r2, #0 diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-shuffle.ll b/llvm/test/CodeGen/Thumb2/mve-pred-shuffle.ll --- a/llvm/test/CodeGen/Thumb2/mve-pred-shuffle.ll +++ b/llvm/test/CodeGen/Thumb2/mve-pred-shuffle.ll @@ -6,14 +6,10 @@ ; CHECK: @ %bb.0: @ %entry ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: mov.w r3, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: orrs r0, r1 -; CHECK-NEXT: cset r0, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r3, r0, #8, #8 ; CHECK-NEXT: add r0, sp, #16 ; CHECK-NEXT: vldrw.u32 q0, [r0] @@ -111,14 +107,10 @@ ; CHECK: @ %bb.0: @ %entry ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: orrs.w r0, r2, r3 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: add r0, sp, #16 ; CHECK-NEXT: vldrw.u32 q0, [r0] @@ -203,9 +195,7 @@ ; CHECK-LABEL: shuffle3_v2i64: ; CHECK: @ %bb.0: @ %entry ; CHECK-NEXT: orrs r0, r1 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: vmsr p0, r0 ; CHECK-NEXT: add r0, sp, #16 ; CHECK-NEXT: vldrw.u32 q0, [r0] @@ -307,9 +297,7 @@ ; CHECK-LABEL: shuffle4_v2i64: ; CHECK: @ %bb.0: @ %entry ; CHECK-NEXT: orrs.w r0, r2, r3 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: vmsr p0, r0 ; CHECK-NEXT: add r0, sp, #16 ; CHECK-NEXT: vldrw.u32 q0, [r0] @@ -617,28 +605,20 @@ ; CHECK: @ %bb.0: @ %entry ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #4 ; CHECK-NEXT: orrs.w r0, r2, r3 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #4, #4 ; CHECK-NEXT: mov r0, sp ; CHECK-NEXT: vldrw.u32 q0, [r0] ; CHECK-NEXT: vmov r0, r2, d0 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #4 ; CHECK-NEXT: vmov r0, r2, d1 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #12, #4 ; CHECK-NEXT: add r0, sp, #32 ; CHECK-NEXT: vldrw.u32 q0, [r0] diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-spill.ll b/llvm/test/CodeGen/Thumb2/mve-pred-spill.ll --- a/llvm/test/CodeGen/Thumb2/mve-pred-spill.ll +++ b/llvm/test/CodeGen/Thumb2/mve-pred-spill.ll @@ -20,16 +20,12 @@ ; CHECK-LE-NEXT: vmov q4, q1 ; CHECK-LE-NEXT: orrs r0, r1 ; CHECK-LE-NEXT: mov.w r1, #0 -; CHECK-LE-NEXT: cset r0, eq -; CHECK-LE-NEXT: cmp r0, #0 -; CHECK-LE-NEXT: csetm r0, ne +; CHECK-LE-NEXT: csetm r0, eq ; CHECK-LE-NEXT: bfi r1, r0, #0, #8 ; CHECK-LE-NEXT: vmov r0, r2, d1 ; CHECK-LE-NEXT: vmov.i32 q0, #0x0 ; CHECK-LE-NEXT: orrs r0, r2 -; CHECK-LE-NEXT: cset r0, eq -; CHECK-LE-NEXT: cmp r0, #0 -; CHECK-LE-NEXT: csetm r0, ne +; CHECK-LE-NEXT: csetm r0, eq ; CHECK-LE-NEXT: bfi r1, r0, #8, #8 ; CHECK-LE-NEXT: vmsr p0, r1 ; CHECK-LE-NEXT: vpsel q0, q1, q0 @@ -55,15 +51,11 @@ ; CHECK-BE-NEXT: vmov.i32 q0, #0x0 ; CHECK-BE-NEXT: orrs r0, r1 ; CHECK-BE-NEXT: mov.w r1, #0 -; CHECK-BE-NEXT: cset r0, eq -; CHECK-BE-NEXT: cmp r0, #0 -; CHECK-BE-NEXT: csetm r0, ne +; CHECK-BE-NEXT: csetm r0, eq ; CHECK-BE-NEXT: bfi r1, r0, #0, #8 ; CHECK-BE-NEXT: vmov r0, r2, d3 ; CHECK-BE-NEXT: orrs r0, r2 -; CHECK-BE-NEXT: cset r0, eq -; CHECK-BE-NEXT: cmp r0, #0 -; CHECK-BE-NEXT: csetm r0, ne +; CHECK-BE-NEXT: csetm r0, eq ; CHECK-BE-NEXT: bfi r1, r0, #8, #8 ; CHECK-BE-NEXT: vmsr p0, r1 ; CHECK-BE-NEXT: vpsel q0, q4, q0 diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-vselect.ll b/llvm/test/CodeGen/Thumb2/mve-pred-vselect.ll --- a/llvm/test/CodeGen/Thumb2/mve-pred-vselect.ll +++ b/llvm/test/CodeGen/Thumb2/mve-pred-vselect.ll @@ -77,12 +77,8 @@ ; CHECK-NEXT: orrs r1, r2 ; CHECK-NEXT: vmov r2, r3, d2 ; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: cset r1, ne ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, ne ; CHECK-NEXT: cmp r0, #0 ; CHECK-NEXT: csel r0, r1, r2, ne ; CHECK-NEXT: movs r1, #0 @@ -95,12 +91,8 @@ ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: vmov r3, r0, d3 ; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, ne ; CHECK-NEXT: orrs r0, r3 ; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: cmp.w r12, #0 ; CHECK-NEXT: csel r0, r2, r0, ne ; CHECK-NEXT: rsbs r0, r0, #0 @@ -397,24 +389,16 @@ ; CHECK-NEXT: vmov r0, r1, d2 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: vmov r1, r3, d3 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: mov.w r0, #0 -; CHECK-NEXT: csetm r12, ne +; CHECK-NEXT: csetm r12, eq +; CHECK-NEXT: movs r0, #0 ; CHECK-NEXT: orrs r1, r3 -; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 ; CHECK-NEXT: vmov r1, r3, d0 -; CHECK-NEXT: csetm lr, ne +; CHECK-NEXT: csetm lr, eq ; CHECK-NEXT: orrs r1, r3 -; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 ; CHECK-NEXT: vmov r1, r4, d1 -; CHECK-NEXT: csetm r3, ne +; CHECK-NEXT: csetm r3, eq ; CHECK-NEXT: orrs r1, r4 -; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: csetm r1, ne +; CHECK-NEXT: csetm r1, eq ; CHECK-NEXT: cbz r2, .LBB15_2 ; CHECK-NEXT: @ %bb.1: @ %select.false ; CHECK-NEXT: bfi r0, r12, #0, #8 diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-xor.ll b/llvm/test/CodeGen/Thumb2/mve-pred-xor.ll --- a/llvm/test/CodeGen/Thumb2/mve-pred-xor.ll +++ b/llvm/test/CodeGen/Thumb2/mve-pred-xor.ll @@ -463,8 +463,6 @@ ; CHECK-NEXT: cset r0, eq ; CHECK-NEXT: orrs r1, r2 ; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: cset r1, ne ; CHECK-NEXT: cmp r0, #0 ; CHECK-NEXT: it ne ; CHECK-NEXT: eorne r1, r1, #1 @@ -477,8 +475,6 @@ ; CHECK-NEXT: cset r0, eq ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, ne ; CHECK-NEXT: cmp r0, #0 ; CHECK-NEXT: it ne ; CHECK-NEXT: eorne r2, r2, #1 @@ -505,8 +501,6 @@ ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: vmov r1, r2, d0 ; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: orrs r1, r2 ; CHECK-NEXT: vmov r12, r2, d5 ; CHECK-NEXT: cset r1, eq @@ -522,8 +516,6 @@ ; CHECK-NEXT: orrs r0, r2 ; CHECK-NEXT: vmov r2, r3, d1 ; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: cset r2, eq ; CHECK-NEXT: cmp r2, #0 diff --git a/llvm/test/CodeGen/Thumb2/mve-selectcc.ll b/llvm/test/CodeGen/Thumb2/mve-selectcc.ll --- a/llvm/test/CodeGen/Thumb2/mve-selectcc.ll +++ b/llvm/test/CodeGen/Thumb2/mve-selectcc.ll @@ -217,9 +217,7 @@ ; CHECK-NEXT: adds r0, #4 ; CHECK-NEXT: vadd.i32 q2, q2, q1 ; CHECK-NEXT: cmp r0, #8 -; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: csetm r1, ne +; CHECK-NEXT: csetm r1, eq ; CHECK-NEXT: subs.w r2, r0, #8 ; CHECK-NEXT: vdup.32 q3, r1 ; CHECK-NEXT: csel r0, r0, r2, ne diff --git a/llvm/test/CodeGen/Thumb2/mve-vcmp.ll b/llvm/test/CodeGen/Thumb2/mve-vcmp.ll --- a/llvm/test/CodeGen/Thumb2/mve-vcmp.ll +++ b/llvm/test/CodeGen/Thumb2/mve-vcmp.ll @@ -373,18 +373,14 @@ ; CHECK-NEXT: eors r1, r3 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: vmov r12, r2, d3 -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r3, r0, d1 ; CHECK-NEXT: eors r0, r2 ; CHECK-NEXT: eor.w r2, r3, r12 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q2, q3 @@ -433,18 +429,14 @@ ; CHECK-NEXT: eors r1, r3 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: vmov r12, r2, d3 -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r3, r0, d1 ; CHECK-NEXT: eors r0, r2 ; CHECK-NEXT: eor.w r2, r3, r12 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q2, q3 @@ -461,18 +453,14 @@ ; CHECK-NEXT: vmov r0, r1, d0 ; CHECK-NEXT: movs r2, #0 ; CHECK-NEXT: orrs r0, r1 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: mov.w r0, #0 -; CHECK-NEXT: csetm r1, ne +; CHECK-NEXT: csetm r1, eq +; CHECK-NEXT: movs r0, #0 ; CHECK-NEXT: bfi r2, r1, #0, #8 ; CHECK-NEXT: vmov r1, r3, d1 ; CHECK-NEXT: vmov.i32 q0, #0x0 ; CHECK-NEXT: orrs r1, r3 ; CHECK-NEXT: vmov r3, s8 -; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: csetm r1, ne +; CHECK-NEXT: csetm r1, eq ; CHECK-NEXT: bfi r2, r1, #8, #8 ; CHECK-NEXT: vmsr p0, r2 ; CHECK-NEXT: vpsel q0, q0, q2 diff --git a/llvm/test/CodeGen/Thumb2/mve-vcmpr.ll b/llvm/test/CodeGen/Thumb2/mve-vcmpr.ll --- a/llvm/test/CodeGen/Thumb2/mve-vcmpr.ll +++ b/llvm/test/CodeGen/Thumb2/mve-vcmpr.ll @@ -438,17 +438,13 @@ ; CHECK-NEXT: eors r2, r0 ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: mov.w r3, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r12, r2, d1 ; CHECK-NEXT: eors r1, r2 ; CHECK-NEXT: eor.w r0, r0, r12 ; CHECK-NEXT: orrs r0, r1 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r3, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q1, q2 @@ -469,17 +465,13 @@ ; CHECK-NEXT: eors r2, r0 ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: mov.w r3, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r12, r2, d1 ; CHECK-NEXT: eors r1, r2 ; CHECK-NEXT: eor.w r0, r0, r12 ; CHECK-NEXT: orrs r0, r1 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r3, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q1, q2 @@ -498,18 +490,14 @@ ; CHECK-NEXT: vmov r0, r1, d0 ; CHECK-NEXT: movs r2, #0 ; CHECK-NEXT: orrs r0, r1 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: mov.w r0, #0 -; CHECK-NEXT: csetm r1, ne +; CHECK-NEXT: csetm r1, eq +; CHECK-NEXT: movs r0, #0 ; CHECK-NEXT: bfi r2, r1, #0, #8 ; CHECK-NEXT: vmov r1, r3, d1 ; CHECK-NEXT: vmov.i32 q0, #0x0 ; CHECK-NEXT: orrs r1, r3 ; CHECK-NEXT: vmov r3, s8 -; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: csetm r1, ne +; CHECK-NEXT: csetm r1, eq ; CHECK-NEXT: bfi r2, r1, #8, #8 ; CHECK-NEXT: vmsr p0, r2 ; CHECK-NEXT: vpsel q0, q0, q2 @@ -999,17 +987,13 @@ ; CHECK-NEXT: eors r2, r0 ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: mov.w r3, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r12, r2, d1 ; CHECK-NEXT: eors r1, r2 ; CHECK-NEXT: eor.w r0, r0, r12 ; CHECK-NEXT: orrs r0, r1 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r3, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q1, q2 @@ -1030,17 +1014,13 @@ ; CHECK-NEXT: eors r2, r0 ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: mov.w r3, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r12, r2, d1 ; CHECK-NEXT: eors r1, r2 ; CHECK-NEXT: eor.w r0, r0, r12 ; CHECK-NEXT: orrs r0, r1 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r3, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q1, q2 @@ -1059,18 +1039,14 @@ ; CHECK-NEXT: vmov r0, r1, d0 ; CHECK-NEXT: movs r2, #0 ; CHECK-NEXT: orrs r0, r1 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: mov.w r0, #0 -; CHECK-NEXT: csetm r1, ne +; CHECK-NEXT: csetm r1, eq +; CHECK-NEXT: movs r0, #0 ; CHECK-NEXT: bfi r2, r1, #0, #8 ; CHECK-NEXT: vmov r1, r3, d1 ; CHECK-NEXT: vmov.i32 q0, #0x0 ; CHECK-NEXT: orrs r1, r3 ; CHECK-NEXT: vmov r3, s8 -; CHECK-NEXT: cset r1, eq -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: csetm r1, ne +; CHECK-NEXT: csetm r1, eq ; CHECK-NEXT: bfi r2, r1, #8, #8 ; CHECK-NEXT: vmsr p0, r2 ; CHECK-NEXT: vpsel q0, q0, q2 diff --git a/llvm/test/CodeGen/Thumb2/mve-vcmpz.ll b/llvm/test/CodeGen/Thumb2/mve-vcmpz.ll --- a/llvm/test/CodeGen/Thumb2/mve-vcmpz.ll +++ b/llvm/test/CodeGen/Thumb2/mve-vcmpz.ll @@ -364,15 +364,11 @@ ; CHECK-NEXT: vmov r0, r1, d0 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, r2, d1 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q1, q2 @@ -389,15 +385,11 @@ ; CHECK-NEXT: vmov r0, r1, d0 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, r2, d1 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q1, q2 @@ -774,15 +766,11 @@ ; CHECK-NEXT: vmov r0, r1, d0 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, r2, d1 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q1, q2 @@ -799,15 +787,11 @@ ; CHECK-NEXT: vmov r0, r1, d0 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, r2, d1 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q1, q2 diff --git a/llvm/test/CodeGen/Thumb2/mve-vecreduce-addpred.ll b/llvm/test/CodeGen/Thumb2/mve-vecreduce-addpred.ll --- a/llvm/test/CodeGen/Thumb2/mve-vecreduce-addpred.ll +++ b/llvm/test/CodeGen/Thumb2/mve-vecreduce-addpred.ll @@ -50,16 +50,12 @@ ; CHECK-NEXT: vmov.i64 q2, #0xffffffff ; CHECK-NEXT: vand q0, q0, q2 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -88,16 +84,12 @@ ; CHECK-NEXT: vmov r0, s4 ; CHECK-NEXT: movs r1, #0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -426,16 +418,12 @@ ; CHECK-NEXT: vand q0, q0, q2 ; CHECK-NEXT: vmov r0, s4 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -460,16 +448,12 @@ ; CHECK-NEXT: vand q1, q1, q2 ; CHECK-NEXT: vmov r0, s4 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmov r0, s2 ; CHECK-NEXT: vmsr p0, r1 @@ -1354,16 +1338,12 @@ ; CHECK-NEXT: vand q0, q0, q2 ; CHECK-NEXT: vmov r0, s4 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -1388,16 +1368,12 @@ ; CHECK-NEXT: vand q1, q1, q2 ; CHECK-NEXT: vmov r0, s4 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmov r0, s2 ; CHECK-NEXT: vmsr p0, r1 @@ -1428,16 +1404,12 @@ ; CHECK-NEXT: vmov r0, r1, d2 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, r2, d3 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -1507,16 +1479,12 @@ ; CHECK-NEXT: vmov.i64 q2, #0xffffffff ; CHECK-NEXT: vand q0, q0, q2 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -1550,16 +1518,12 @@ ; CHECK-NEXT: vmov r2, s4 ; CHECK-NEXT: movs r3, #0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -1876,16 +1840,12 @@ ; CHECK-NEXT: vand q0, q0, q2 ; CHECK-NEXT: vmov r2, s4 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -1915,16 +1875,12 @@ ; CHECK-NEXT: vand q1, q1, q2 ; CHECK-NEXT: vmov r2, s4 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmov r2, s2 ; CHECK-NEXT: vmsr p0, r3 @@ -2558,16 +2514,12 @@ ; CHECK-NEXT: vand q0, q0, q2 ; CHECK-NEXT: vmov r2, s4 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -2597,16 +2549,12 @@ ; CHECK-NEXT: vand q1, q1, q2 ; CHECK-NEXT: vmov r2, s4 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmov r2, s2 ; CHECK-NEXT: vmsr p0, r3 @@ -2642,16 +2590,12 @@ ; CHECK-NEXT: vmov r2, r3, d2 ; CHECK-NEXT: mov.w r12, #0 ; CHECK-NEXT: orrs r2, r3 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r12, r2, #0, #8 ; CHECK-NEXT: vmov r2, r3, d3 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: orrs r2, r3 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r12, r2, #8, #8 ; CHECK-NEXT: vmsr p0, r12 ; CHECK-NEXT: vpsel q0, q0, q1 diff --git a/llvm/test/CodeGen/Thumb2/mve-vecreduce-mlapred.ll b/llvm/test/CodeGen/Thumb2/mve-vecreduce-mlapred.ll --- a/llvm/test/CodeGen/Thumb2/mve-vecreduce-mlapred.ll +++ b/llvm/test/CodeGen/Thumb2/mve-vecreduce-mlapred.ll @@ -55,15 +55,11 @@ ; CHECK-NEXT: vmullb.u32 q3, q0, q1 ; CHECK-NEXT: vmov.i32 q0, #0x0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s10 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q3, q0 @@ -90,15 +86,11 @@ ; CHECK-NEXT: vmullb.s32 q3, q0, q1 ; CHECK-NEXT: vmov.i32 q0, #0x0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s10 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q3, q0 @@ -374,16 +366,12 @@ ; CHECK-NEXT: vmov q0[3], q0[1], r3, r1 ; CHECK-NEXT: movs r1, #0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -413,17 +401,13 @@ ; CHECK-NEXT: vmov r3, s0 ; CHECK-NEXT: cmp r0, #0 ; CHECK-NEXT: sxth r2, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: sxth r3, r3 -; CHECK-NEXT: csetm r0, ne -; CHECK-NEXT: smull r2, r3, r3, r2 +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s10 +; CHECK-NEXT: sxth r3, r3 +; CHECK-NEXT: smull r2, r3, r3, r2 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmov r0, s6 ; CHECK-NEXT: vmsr p0, r1 @@ -1576,16 +1560,12 @@ ; CHECK-NEXT: vmov q0[3], q0[1], r3, r1 ; CHECK-NEXT: movs r1, #0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -1615,17 +1595,13 @@ ; CHECK-NEXT: vmov r3, s0 ; CHECK-NEXT: cmp r0, #0 ; CHECK-NEXT: sxtb r2, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: sxtb r3, r3 -; CHECK-NEXT: csetm r0, ne -; CHECK-NEXT: smull r2, r3, r3, r2 +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, s10 +; CHECK-NEXT: sxtb r3, r3 +; CHECK-NEXT: smull r2, r3, r3, r2 ; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmov r0, s6 ; CHECK-NEXT: vmsr p0, r1 @@ -1673,15 +1649,11 @@ ; CHECK-NEXT: vmov r0, r1, d4 ; CHECK-NEXT: orrs r0, r1 ; CHECK-NEXT: mov.w r1, #0 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #0, #8 ; CHECK-NEXT: vmov r0, r2, d5 ; CHECK-NEXT: orrs r0, r2 -; CHECK-NEXT: cset r0, eq -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: csetm r0, ne +; CHECK-NEXT: csetm r0, eq ; CHECK-NEXT: bfi r1, r0, #8, #8 ; CHECK-NEXT: vmsr p0, r1 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -1757,15 +1729,11 @@ ; CHECK-NEXT: vmullb.u32 q3, q0, q1 ; CHECK-NEXT: vmov.i32 q0, #0x0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s10 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q3, q0 @@ -1797,15 +1765,11 @@ ; CHECK-NEXT: vmullb.s32 q3, q0, q1 ; CHECK-NEXT: vmov.i32 q0, #0x0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s10 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q3, q0 @@ -2024,16 +1988,12 @@ ; CHECK-NEXT: vmov q0[3], q0[1], r3, r12 ; CHECK-NEXT: movs r3, #0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -2065,15 +2025,11 @@ ; CHECK-NEXT: vand q2, q2, q3 ; CHECK-NEXT: vmov r2, s8 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s10 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmov r2, s6 ; CHECK-NEXT: vmsr p0, r3 @@ -2927,16 +2883,12 @@ ; CHECK-NEXT: vmov q0[3], q0[1], r3, r12 ; CHECK-NEXT: movs r3, #0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s6 ; CHECK-NEXT: vmov.i32 q1, #0x0 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q0, q1 @@ -2968,15 +2920,11 @@ ; CHECK-NEXT: vand q2, q2, q3 ; CHECK-NEXT: vmov r2, s8 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, s10 ; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmov r2, s6 ; CHECK-NEXT: vmsr p0, r3 @@ -3032,15 +2980,11 @@ ; CHECK-NEXT: vmov r2, r3, d4 ; CHECK-NEXT: orrs r2, r3 ; CHECK-NEXT: mov.w r3, #0 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #0, #8 ; CHECK-NEXT: vmov r2, r7, d5 ; CHECK-NEXT: orrs r2, r7 -; CHECK-NEXT: cset r2, eq -; CHECK-NEXT: cmp r2, #0 -; CHECK-NEXT: csetm r2, ne +; CHECK-NEXT: csetm r2, eq ; CHECK-NEXT: bfi r3, r2, #8, #8 ; CHECK-NEXT: vmsr p0, r3 ; CHECK-NEXT: vpsel q0, q0, q1 diff --git a/llvm/test/CodeGen/Thumb2/mve-vselect-constants.ll b/llvm/test/CodeGen/Thumb2/mve-vselect-constants.ll --- a/llvm/test/CodeGen/Thumb2/mve-vselect-constants.ll +++ b/llvm/test/CodeGen/Thumb2/mve-vselect-constants.ll @@ -283,15 +283,11 @@ ; CHECK-NEXT: movs r0, #0 ; CHECK-NEXT: vmov.i32 q2, #0x0 ; CHECK-NEXT: cmp.w r1, #-1 -; CHECK-NEXT: cset r1, gt -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: csetm r1, ne +; CHECK-NEXT: csetm r1, gt ; CHECK-NEXT: bfi r0, r1, #0, #8 ; CHECK-NEXT: vmov r1, s3 ; CHECK-NEXT: cmp.w r1, #-1 -; CHECK-NEXT: cset r1, gt -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: csetm r1, ne +; CHECK-NEXT: csetm r1, gt ; CHECK-NEXT: bfi r0, r1, #8, #8 ; CHECK-NEXT: vmsr p0, r0 ; CHECK-NEXT: vpsel q0, q1, q2