Index: llvm/lib/Target/ARM/ARMInstrMVE.td =================================================================== --- llvm/lib/Target/ARM/ARMInstrMVE.td +++ llvm/lib/Target/ARM/ARMInstrMVE.td @@ -1362,8 +1362,12 @@ def : Pat<(insertelt (v8f16 MQPR:$src1), HPR:$src2, imm:$lane), (MVE_VMOV_to_lane_16 MQPR:$src1, (COPY_TO_REGCLASS HPR:$src2, rGPR), imm:$lane)>; - def : Pat<(extractelt (v8f16 MQPR:$src), imm:$lane), - (COPY_TO_REGCLASS (MVE_VMOV_from_lane_u16 MQPR:$src, imm:$lane), HPR)>; + def : Pat<(extractelt (v8f16 MQPR:$src), imm_even:$lane), + (EXTRACT_SUBREG MQPR:$src, (SSubReg_f16_reg imm_even:$lane))>; + def : Pat<(extractelt (v8f16 MQPR:$src), imm_odd:$lane), + (COPY_TO_REGCLASS + (VMOVH (EXTRACT_SUBREG MQPR:$src, (SSubReg_f16_reg imm_odd:$lane))), + HPR)>; def : Pat<(v4f32 (scalar_to_vector SPR:$src)), (INSERT_SUBREG (v4f32 (IMPLICIT_DEF)), SPR:$src, ssub_0)>; Index: llvm/test/CodeGen/Thumb2/mve-div-expand.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-div-expand.ll +++ llvm/test/CodeGen/Thumb2/mve-div-expand.ll @@ -932,60 +932,36 @@ define arm_aapcs_vfpcc <8 x half> @fdiv_f16(<8 x half> %in1, <8 x half> %in2) { ; CHECK-LABEL: fdiv_f16: ; CHECK: @ %bb.0: @ %entry -; CHECK-NEXT: vmov.u16 r0, q1[0] -; CHECK-NEXT: vmov.u16 r1, q1[1] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vmov.u16 r0, q0[0] -; CHECK-NEXT: vmov s10, r0 -; CHECK-NEXT: vmov.u16 r2, q0[1] -; CHECK-NEXT: vdiv.f16 s8, s10, s8 -; CHECK-NEXT: vmov s10, r2 +; CHECK-NEXT: vdiv.f16 s8, s0, s4 +; CHECK-NEXT: vmovx.f16 s10, s0 ; CHECK-NEXT: vmov r0, s8 -; CHECK-NEXT: vmov s8, r1 +; CHECK-NEXT: vmovx.f16 s8, s4 ; CHECK-NEXT: vdiv.f16 s8, s10, s8 +; CHECK-NEXT: vdiv.f16 s12, s1, s5 ; CHECK-NEXT: vmov r1, s8 ; CHECK-NEXT: vmov.16 q2[0], r0 -; CHECK-NEXT: vmov.u16 r0, q1[2] +; CHECK-NEXT: vmov r0, s12 +; CHECK-NEXT: vmovx.f16 s12, s5 +; CHECK-NEXT: vmovx.f16 s14, s1 ; CHECK-NEXT: vmov.16 q2[1], r1 -; CHECK-NEXT: vmov s12, r0 -; CHECK-NEXT: vmov.u16 r0, q0[2] -; CHECK-NEXT: vmov s14, r0 ; CHECK-NEXT: vdiv.f16 s12, s14, s12 -; CHECK-NEXT: vmov r0, s12 ; CHECK-NEXT: vmov.16 q2[2], r0 -; CHECK-NEXT: vmov.u16 r0, q1[3] -; CHECK-NEXT: vmov s12, r0 -; CHECK-NEXT: vmov.u16 r0, q0[3] -; CHECK-NEXT: vmov s14, r0 -; CHECK-NEXT: vdiv.f16 s12, s14, s12 ; CHECK-NEXT: vmov r0, s12 +; CHECK-NEXT: vdiv.f16 s12, s2, s6 ; CHECK-NEXT: vmov.16 q2[3], r0 -; CHECK-NEXT: vmov.u16 r0, q1[4] -; CHECK-NEXT: vmov s12, r0 -; CHECK-NEXT: vmov.u16 r0, q0[4] -; CHECK-NEXT: vmov s14, r0 -; CHECK-NEXT: vdiv.f16 s12, s14, s12 ; CHECK-NEXT: vmov r0, s12 -; CHECK-NEXT: vmov.16 q2[4], r0 -; CHECK-NEXT: vmov.u16 r0, q1[5] -; CHECK-NEXT: vmov s12, r0 -; CHECK-NEXT: vmov.u16 r0, q0[5] -; CHECK-NEXT: vmov s14, r0 +; CHECK-NEXT: vmovx.f16 s12, s6 +; CHECK-NEXT: vmovx.f16 s14, s2 ; CHECK-NEXT: vdiv.f16 s12, s14, s12 +; CHECK-NEXT: vmov.16 q2[4], r0 ; CHECK-NEXT: vmov r0, s12 +; CHECK-NEXT: vdiv.f16 s12, s3, s7 +; CHECK-NEXT: vmovx.f16 s4, s7 +; CHECK-NEXT: vmovx.f16 s0, s3 ; CHECK-NEXT: vmov.16 q2[5], r0 -; CHECK-NEXT: vmov.u16 r0, q1[6] -; CHECK-NEXT: vmov s12, r0 -; CHECK-NEXT: vmov.u16 r0, q0[6] -; CHECK-NEXT: vmov s14, r0 -; CHECK-NEXT: vdiv.f16 s12, s14, s12 ; CHECK-NEXT: vmov r0, s12 -; CHECK-NEXT: vmov.16 q2[6], r0 -; CHECK-NEXT: vmov.u16 r0, q1[7] -; CHECK-NEXT: vmov s4, r0 -; CHECK-NEXT: vmov.u16 r0, q0[7] -; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vdiv.f16 s0, s0, s4 +; CHECK-NEXT: vmov.16 q2[6], r0 ; CHECK-NEXT: vmov r0, s0 ; CHECK-NEXT: vmov.16 q2[7], r0 ; CHECK-NEXT: vmov q0, q2 @@ -1005,25 +981,19 @@ ; CHECK-NEXT: .pad #64 ; CHECK-NEXT: sub sp, #64 ; CHECK-NEXT: vmov q4, q0 -; CHECK-NEXT: vmov.u16 r0, q1[0] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[0] -; CHECK-NEXT: vmov s2, r0 ; CHECK-NEXT: vmov q5, q1 -; CHECK-NEXT: vcvtb.f32.f16 s2, s2 -; CHECK-NEXT: vstr s2, [sp, #56] -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s16 +; CHECK-NEXT: vstr s0, [sp, #56] +; CHECK-NEXT: vcvtb.f32.f16 s0, s20 ; CHECK-NEXT: vstr s0, [sp, #60] ; CHECK-NEXT: ldrd r0, r1, [sp, #56] ; CHECK-NEXT: bl fmodf ; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q5[1] +; CHECK-NEXT: vmovx.f16 s2, s16 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 -; CHECK-NEXT: vmov r4, s0 -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[1] -; CHECK-NEXT: vmov s2, r0 ; CHECK-NEXT: vcvtb.f32.f16 s2, s2 +; CHECK-NEXT: vmov r4, s0 +; CHECK-NEXT: vmovx.f16 s0, s20 ; CHECK-NEXT: vstr s2, [sp, #48] ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 ; CHECK-NEXT: vstr s0, [sp, #52] @@ -1033,85 +1003,67 @@ ; CHECK-NEXT: vmov.16 q6[0], r4 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[1], r0 -; CHECK-NEXT: vmov.u16 r0, q5[2] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[2] -; CHECK-NEXT: vmov s2, r0 -; CHECK-NEXT: vcvtb.f32.f16 s2, s2 -; CHECK-NEXT: vstr s2, [sp, #40] -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s17 +; CHECK-NEXT: vstr s0, [sp, #40] +; CHECK-NEXT: vcvtb.f32.f16 s0, s21 ; CHECK-NEXT: vstr s0, [sp, #44] +; CHECK-NEXT: vmov.16 q6[1], r0 ; CHECK-NEXT: ldrd r0, r1, [sp, #40] ; CHECK-NEXT: bl fmodf ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s2, s17 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 -; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[2], r0 -; CHECK-NEXT: vmov.u16 r0, q5[3] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[3] -; CHECK-NEXT: vmov s2, r0 ; CHECK-NEXT: vcvtb.f32.f16 s2, s2 +; CHECK-NEXT: vmov r0, s0 +; CHECK-NEXT: vmovx.f16 s0, s21 ; CHECK-NEXT: vstr s2, [sp, #32] ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 ; CHECK-NEXT: vstr s0, [sp, #36] +; CHECK-NEXT: vmov.16 q6[2], r0 ; CHECK-NEXT: ldrd r0, r1, [sp, #32] ; CHECK-NEXT: bl fmodf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[3], r0 -; CHECK-NEXT: vmov.u16 r0, q5[4] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[4] -; CHECK-NEXT: vmov s2, r0 -; CHECK-NEXT: vcvtb.f32.f16 s2, s2 -; CHECK-NEXT: vstr s2, [sp, #24] -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s18 +; CHECK-NEXT: vstr s0, [sp, #24] +; CHECK-NEXT: vcvtb.f32.f16 s0, s22 ; CHECK-NEXT: vstr s0, [sp, #28] +; CHECK-NEXT: vmov.16 q6[3], r0 ; CHECK-NEXT: ldrd r0, r1, [sp, #24] ; CHECK-NEXT: bl fmodf ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s2, s18 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 -; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[4], r0 -; CHECK-NEXT: vmov.u16 r0, q5[5] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[5] -; CHECK-NEXT: vmov s2, r0 ; CHECK-NEXT: vcvtb.f32.f16 s2, s2 +; CHECK-NEXT: vmov r0, s0 +; CHECK-NEXT: vmovx.f16 s0, s22 ; CHECK-NEXT: vstr s2, [sp, #16] ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 ; CHECK-NEXT: vstr s0, [sp, #20] +; CHECK-NEXT: vmov.16 q6[4], r0 ; CHECK-NEXT: ldrd r0, r1, [sp, #16] ; CHECK-NEXT: bl fmodf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[5], r0 -; CHECK-NEXT: vmov.u16 r0, q5[6] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[6] -; CHECK-NEXT: vmov s2, r0 -; CHECK-NEXT: vcvtb.f32.f16 s2, s2 -; CHECK-NEXT: vstr s2, [sp, #8] -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s19 +; CHECK-NEXT: vstr s0, [sp, #8] +; CHECK-NEXT: vcvtb.f32.f16 s0, s23 ; CHECK-NEXT: vstr s0, [sp, #12] +; CHECK-NEXT: vmov.16 q6[5], r0 ; CHECK-NEXT: ldrd r0, r1, [sp, #8] ; CHECK-NEXT: bl fmodf ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s2, s19 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 -; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[6], r0 -; CHECK-NEXT: vmov.u16 r0, q5[7] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[7] -; CHECK-NEXT: vmov s2, r0 ; CHECK-NEXT: vcvtb.f32.f16 s2, s2 +; CHECK-NEXT: vmov r0, s0 +; CHECK-NEXT: vmovx.f16 s0, s23 ; CHECK-NEXT: vstr s2, [sp] ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 ; CHECK-NEXT: vstr s0, [sp, #4] +; CHECK-NEXT: vmov.16 q6[6], r0 ; CHECK-NEXT: ldrd r0, r1, [sp] ; CHECK-NEXT: bl fmodf ; CHECK-NEXT: vmov s0, r0 Index: llvm/test/CodeGen/Thumb2/mve-fmas.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-fmas.ll +++ llvm/test/CodeGen/Thumb2/mve-fmas.ll @@ -19,76 +19,43 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov s13, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[1] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s13, s0 +; CHECK-MVE-NEXT: vmla.f16 s0, s4, s8 +; CHECK-MVE-NEXT: vmovx.f16 s12, s8 +; CHECK-MVE-NEXT: vmovx.f16 s14, s4 +; CHECK-MVE-NEXT: vmov.f32 s16, s1 ; CHECK-MVE-NEXT: vmla.f16 s13, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[1] +; CHECK-MVE-NEXT: vmov r1, s0 +; CHECK-MVE-NEXT: vmla.f16 s16, s5, s9 ; CHECK-MVE-NEXT: vmov r0, s13 -; CHECK-MVE-NEXT: vmov s14, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[2] -; CHECK-MVE-NEXT: vmov s12, r1 -; CHECK-MVE-NEXT: vmov s13, r3 -; CHECK-MVE-NEXT: vmla.f16 s13, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s13 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.16 q3[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[2] -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] -; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmov.16 q3[0], r1 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: vmov r0, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s9 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 +; CHECK-MVE-NEXT: vmovx.f16 s20, s1 ; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s20, r0 ; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.f32 s16, s2 ; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vmla.f16 s16, s6, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[4] -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmov r0, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s10 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 +; CHECK-MVE-NEXT: vmovx.f16 s20, s2 ; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s20, r0 ; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.f32 s16, s3 ; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmla.f16 s16, s7, s11 +; CHECK-MVE-NEXT: vmovx.f16 s8, s11 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[6] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vmov r0, s16 ; CHECK-MVE-NEXT: vmla.f16 s0, s4, s8 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -116,76 +83,43 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov s13, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[1] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s13, s0 +; CHECK-MVE-NEXT: vmla.f16 s0, s4, s8 +; CHECK-MVE-NEXT: vmovx.f16 s12, s8 +; CHECK-MVE-NEXT: vmovx.f16 s14, s4 +; CHECK-MVE-NEXT: vmov.f32 s16, s1 ; CHECK-MVE-NEXT: vmla.f16 s13, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[1] +; CHECK-MVE-NEXT: vmov r1, s0 +; CHECK-MVE-NEXT: vmla.f16 s16, s5, s9 ; CHECK-MVE-NEXT: vmov r0, s13 -; CHECK-MVE-NEXT: vmov s14, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[2] -; CHECK-MVE-NEXT: vmov s12, r1 -; CHECK-MVE-NEXT: vmov s13, r3 -; CHECK-MVE-NEXT: vmla.f16 s13, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s13 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.16 q3[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[2] -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] -; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmov.16 q3[0], r1 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: vmov r0, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s9 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 +; CHECK-MVE-NEXT: vmovx.f16 s20, s1 ; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s20, r0 ; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.f32 s16, s2 ; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vmla.f16 s16, s6, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[4] -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmov r0, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s10 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 +; CHECK-MVE-NEXT: vmovx.f16 s20, s2 ; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s20, r0 ; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.f32 s16, s3 ; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmla.f16 s16, s7, s11 +; CHECK-MVE-NEXT: vmovx.f16 s8, s11 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[6] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vmov r0, s16 ; CHECK-MVE-NEXT: vmla.f16 s0, s4, s8 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -213,76 +147,43 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov s13, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[1] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s13, s0 +; CHECK-MVE-NEXT: vmls.f16 s0, s4, s8 +; CHECK-MVE-NEXT: vmovx.f16 s12, s8 +; CHECK-MVE-NEXT: vmovx.f16 s14, s4 +; CHECK-MVE-NEXT: vmov.f32 s16, s1 ; CHECK-MVE-NEXT: vmls.f16 s13, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[1] +; CHECK-MVE-NEXT: vmov r1, s0 +; CHECK-MVE-NEXT: vmls.f16 s16, s5, s9 ; CHECK-MVE-NEXT: vmov r0, s13 -; CHECK-MVE-NEXT: vmov s14, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[2] -; CHECK-MVE-NEXT: vmov s12, r1 -; CHECK-MVE-NEXT: vmov s13, r3 -; CHECK-MVE-NEXT: vmls.f16 s13, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s13 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.16 q3[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[2] -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmls.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] -; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmov.16 q3[0], r1 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: vmov r0, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s9 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 +; CHECK-MVE-NEXT: vmovx.f16 s20, s1 ; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s20, r0 ; CHECK-MVE-NEXT: vmls.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.f32 s16, s2 ; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vmls.f16 s16, s6, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[4] -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmls.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmov r0, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s10 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 +; CHECK-MVE-NEXT: vmovx.f16 s20, s2 ; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s20, r0 ; CHECK-MVE-NEXT: vmls.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.f32 s16, s3 ; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmls.f16 s16, s7, s11 +; CHECK-MVE-NEXT: vmovx.f16 s8, s11 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[6] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmls.f16 s20, s18, s16 -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vmov r0, s16 ; CHECK-MVE-NEXT: vmls.f16 s0, s4, s8 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 Index: llvm/test/CodeGen/Thumb2/mve-fmath.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-fmath.ll +++ llvm/test/CodeGen/Thumb2/mve-fmath.ll @@ -19,44 +19,32 @@ define arm_aapcs_vfpcc <8 x half> @sqrt_float16_t(<8 x half> %src) { ; CHECK-LABEL: sqrt_float16_t: ; CHECK: @ %bb.0: @ %entry -; CHECK-NEXT: vmov.u16 r0, q0[0] -; CHECK-NEXT: vmov.u16 r1, q0[1] -; CHECK-NEXT: vmov s4, r0 +; CHECK-NEXT: vmovx.f16 s4, s0 +; CHECK-NEXT: vsqrt.f16 s8, s1 ; CHECK-NEXT: vsqrt.f16 s4, s4 ; CHECK-NEXT: vmov r0, s4 -; CHECK-NEXT: vmov s4, r1 -; CHECK-NEXT: vsqrt.f16 s4, s4 +; CHECK-NEXT: vsqrt.f16 s4, s0 ; CHECK-NEXT: vmov r1, s4 -; CHECK-NEXT: vmov.16 q1[0], r0 -; CHECK-NEXT: vmov.u16 r0, q0[2] -; CHECK-NEXT: vmov.16 q1[1], r1 -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vsqrt.f16 s8, s8 +; CHECK-NEXT: vmovx.f16 s0, s3 +; CHECK-NEXT: vmov.16 q1[0], r1 +; CHECK-NEXT: vsqrt.f16 s0, s0 +; CHECK-NEXT: vmov.16 q1[1], r0 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vmovx.f16 s8, s1 ; CHECK-NEXT: vmov.16 q1[2], r0 -; CHECK-NEXT: vmov.u16 r0, q0[3] -; CHECK-NEXT: vmov s8, r0 ; CHECK-NEXT: vsqrt.f16 s8, s8 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vsqrt.f16 s8, s2 ; CHECK-NEXT: vmov.16 q1[3], r0 -; CHECK-NEXT: vmov.u16 r0, q0[4] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vsqrt.f16 s8, s8 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vmovx.f16 s8, s2 ; CHECK-NEXT: vmov.16 q1[4], r0 -; CHECK-NEXT: vmov.u16 r0, q0[5] -; CHECK-NEXT: vmov s8, r0 ; CHECK-NEXT: vsqrt.f16 s8, s8 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vsqrt.f16 s8, s3 ; CHECK-NEXT: vmov.16 q1[5], r0 -; CHECK-NEXT: vmov.u16 r0, q0[6] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vsqrt.f16 s8, s8 ; CHECK-NEXT: vmov r0, s8 ; CHECK-NEXT: vmov.16 q1[6], r0 -; CHECK-NEXT: vmov.u16 r0, q0[7] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vsqrt.f16 s0, s0 ; CHECK-NEXT: vmov r0, s0 ; CHECK-NEXT: vmov.16 q1[7], r0 ; CHECK-NEXT: vmov q0, q1 @@ -132,80 +120,68 @@ ; CHECK-NEXT: vpush {d8, d9, d10, d11} ; CHECK-NEXT: .pad #32 ; CHECK-NEXT: sub sp, #32 -; CHECK-NEXT: vmov.u16 r0, q0[1] ; CHECK-NEXT: vmov q4, q0 -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #24] -; CHECK-NEXT: ldr r0, [sp, #24] +; CHECK-NEXT: vcvtb.f32.f16 s0, s16 +; CHECK-NEXT: vstr s0, [sp, #28] +; CHECK-NEXT: ldr r0, [sp, #28] ; CHECK-NEXT: bl cosf ; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[0] ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r4, s0 -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #28] -; CHECK-NEXT: ldr r0, [sp, #28] +; CHECK-NEXT: vstr s0, [sp, #24] +; CHECK-NEXT: ldr r0, [sp, #24] ; CHECK-NEXT: bl cosf ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmov.16 q5[0], r4 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[0], r0 -; CHECK-NEXT: vmov.u16 r0, q4[2] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.16 q5[1], r4 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s17 ; CHECK-NEXT: vstr s0, [sp, #20] +; CHECK-NEXT: vmov.16 q5[1], r0 ; CHECK-NEXT: ldr r0, [sp, #20] ; CHECK-NEXT: bl cosf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[2], r0 -; CHECK-NEXT: vmov.u16 r0, q4[3] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s17 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[2], r0 ; CHECK-NEXT: vstr s0, [sp, #16] ; CHECK-NEXT: ldr r0, [sp, #16] ; CHECK-NEXT: bl cosf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[3], r0 -; CHECK-NEXT: vmov.u16 r0, q4[4] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s18 ; CHECK-NEXT: vstr s0, [sp, #12] +; CHECK-NEXT: vmov.16 q5[3], r0 ; CHECK-NEXT: ldr r0, [sp, #12] ; CHECK-NEXT: bl cosf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[4], r0 -; CHECK-NEXT: vmov.u16 r0, q4[5] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s18 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[4], r0 ; CHECK-NEXT: vstr s0, [sp, #8] ; CHECK-NEXT: ldr r0, [sp, #8] ; CHECK-NEXT: bl cosf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[5], r0 -; CHECK-NEXT: vmov.u16 r0, q4[6] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s19 ; CHECK-NEXT: vstr s0, [sp, #4] +; CHECK-NEXT: vmov.16 q5[5], r0 ; CHECK-NEXT: ldr r0, [sp, #4] ; CHECK-NEXT: bl cosf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[6], r0 -; CHECK-NEXT: vmov.u16 r0, q4[7] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s19 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[6], r0 ; CHECK-NEXT: vstr s0, [sp] ; CHECK-NEXT: ldr r0, [sp] ; CHECK-NEXT: bl cosf @@ -288,80 +264,68 @@ ; CHECK-NEXT: vpush {d8, d9, d10, d11} ; CHECK-NEXT: .pad #32 ; CHECK-NEXT: sub sp, #32 -; CHECK-NEXT: vmov.u16 r0, q0[1] ; CHECK-NEXT: vmov q4, q0 -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #24] -; CHECK-NEXT: ldr r0, [sp, #24] +; CHECK-NEXT: vcvtb.f32.f16 s0, s16 +; CHECK-NEXT: vstr s0, [sp, #28] +; CHECK-NEXT: ldr r0, [sp, #28] ; CHECK-NEXT: bl sinf ; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[0] ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r4, s0 -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #28] -; CHECK-NEXT: ldr r0, [sp, #28] +; CHECK-NEXT: vstr s0, [sp, #24] +; CHECK-NEXT: ldr r0, [sp, #24] ; CHECK-NEXT: bl sinf ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmov.16 q5[0], r4 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[0], r0 -; CHECK-NEXT: vmov.u16 r0, q4[2] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.16 q5[1], r4 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s17 ; CHECK-NEXT: vstr s0, [sp, #20] +; CHECK-NEXT: vmov.16 q5[1], r0 ; CHECK-NEXT: ldr r0, [sp, #20] ; CHECK-NEXT: bl sinf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[2], r0 -; CHECK-NEXT: vmov.u16 r0, q4[3] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s17 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[2], r0 ; CHECK-NEXT: vstr s0, [sp, #16] ; CHECK-NEXT: ldr r0, [sp, #16] ; CHECK-NEXT: bl sinf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[3], r0 -; CHECK-NEXT: vmov.u16 r0, q4[4] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s18 ; CHECK-NEXT: vstr s0, [sp, #12] +; CHECK-NEXT: vmov.16 q5[3], r0 ; CHECK-NEXT: ldr r0, [sp, #12] ; CHECK-NEXT: bl sinf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[4], r0 -; CHECK-NEXT: vmov.u16 r0, q4[5] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s18 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[4], r0 ; CHECK-NEXT: vstr s0, [sp, #8] ; CHECK-NEXT: ldr r0, [sp, #8] ; CHECK-NEXT: bl sinf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[5], r0 -; CHECK-NEXT: vmov.u16 r0, q4[6] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s19 ; CHECK-NEXT: vstr s0, [sp, #4] +; CHECK-NEXT: vmov.16 q5[5], r0 ; CHECK-NEXT: ldr r0, [sp, #4] ; CHECK-NEXT: bl sinf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[6], r0 -; CHECK-NEXT: vmov.u16 r0, q4[7] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s19 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[6], r0 ; CHECK-NEXT: vstr s0, [sp] ; CHECK-NEXT: ldr r0, [sp] ; CHECK-NEXT: bl sinf @@ -444,80 +408,68 @@ ; CHECK-NEXT: vpush {d8, d9, d10, d11} ; CHECK-NEXT: .pad #32 ; CHECK-NEXT: sub sp, #32 -; CHECK-NEXT: vmov.u16 r0, q0[1] ; CHECK-NEXT: vmov q4, q0 -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #24] -; CHECK-NEXT: ldr r0, [sp, #24] +; CHECK-NEXT: vcvtb.f32.f16 s0, s16 +; CHECK-NEXT: vstr s0, [sp, #28] +; CHECK-NEXT: ldr r0, [sp, #28] ; CHECK-NEXT: bl expf ; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[0] ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r4, s0 -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #28] -; CHECK-NEXT: ldr r0, [sp, #28] +; CHECK-NEXT: vstr s0, [sp, #24] +; CHECK-NEXT: ldr r0, [sp, #24] ; CHECK-NEXT: bl expf ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmov.16 q5[0], r4 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[0], r0 -; CHECK-NEXT: vmov.u16 r0, q4[2] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.16 q5[1], r4 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s17 ; CHECK-NEXT: vstr s0, [sp, #20] +; CHECK-NEXT: vmov.16 q5[1], r0 ; CHECK-NEXT: ldr r0, [sp, #20] ; CHECK-NEXT: bl expf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[2], r0 -; CHECK-NEXT: vmov.u16 r0, q4[3] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s17 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[2], r0 ; CHECK-NEXT: vstr s0, [sp, #16] ; CHECK-NEXT: ldr r0, [sp, #16] ; CHECK-NEXT: bl expf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[3], r0 -; CHECK-NEXT: vmov.u16 r0, q4[4] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s18 ; CHECK-NEXT: vstr s0, [sp, #12] +; CHECK-NEXT: vmov.16 q5[3], r0 ; CHECK-NEXT: ldr r0, [sp, #12] ; CHECK-NEXT: bl expf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[4], r0 -; CHECK-NEXT: vmov.u16 r0, q4[5] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s18 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[4], r0 ; CHECK-NEXT: vstr s0, [sp, #8] ; CHECK-NEXT: ldr r0, [sp, #8] ; CHECK-NEXT: bl expf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[5], r0 -; CHECK-NEXT: vmov.u16 r0, q4[6] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s19 ; CHECK-NEXT: vstr s0, [sp, #4] +; CHECK-NEXT: vmov.16 q5[5], r0 ; CHECK-NEXT: ldr r0, [sp, #4] ; CHECK-NEXT: bl expf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[6], r0 -; CHECK-NEXT: vmov.u16 r0, q4[7] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s19 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[6], r0 ; CHECK-NEXT: vstr s0, [sp] ; CHECK-NEXT: ldr r0, [sp] ; CHECK-NEXT: bl expf @@ -600,80 +552,68 @@ ; CHECK-NEXT: vpush {d8, d9, d10, d11} ; CHECK-NEXT: .pad #32 ; CHECK-NEXT: sub sp, #32 -; CHECK-NEXT: vmov.u16 r0, q0[1] ; CHECK-NEXT: vmov q4, q0 -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #24] -; CHECK-NEXT: ldr r0, [sp, #24] +; CHECK-NEXT: vcvtb.f32.f16 s0, s16 +; CHECK-NEXT: vstr s0, [sp, #28] +; CHECK-NEXT: ldr r0, [sp, #28] ; CHECK-NEXT: bl exp2f ; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[0] ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r4, s0 -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #28] -; CHECK-NEXT: ldr r0, [sp, #28] +; CHECK-NEXT: vstr s0, [sp, #24] +; CHECK-NEXT: ldr r0, [sp, #24] ; CHECK-NEXT: bl exp2f ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmov.16 q5[0], r4 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[0], r0 -; CHECK-NEXT: vmov.u16 r0, q4[2] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.16 q5[1], r4 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s17 ; CHECK-NEXT: vstr s0, [sp, #20] +; CHECK-NEXT: vmov.16 q5[1], r0 ; CHECK-NEXT: ldr r0, [sp, #20] ; CHECK-NEXT: bl exp2f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[2], r0 -; CHECK-NEXT: vmov.u16 r0, q4[3] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s17 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[2], r0 ; CHECK-NEXT: vstr s0, [sp, #16] ; CHECK-NEXT: ldr r0, [sp, #16] ; CHECK-NEXT: bl exp2f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[3], r0 -; CHECK-NEXT: vmov.u16 r0, q4[4] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s18 ; CHECK-NEXT: vstr s0, [sp, #12] +; CHECK-NEXT: vmov.16 q5[3], r0 ; CHECK-NEXT: ldr r0, [sp, #12] ; CHECK-NEXT: bl exp2f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[4], r0 -; CHECK-NEXT: vmov.u16 r0, q4[5] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s18 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[4], r0 ; CHECK-NEXT: vstr s0, [sp, #8] ; CHECK-NEXT: ldr r0, [sp, #8] ; CHECK-NEXT: bl exp2f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[5], r0 -; CHECK-NEXT: vmov.u16 r0, q4[6] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s19 ; CHECK-NEXT: vstr s0, [sp, #4] +; CHECK-NEXT: vmov.16 q5[5], r0 ; CHECK-NEXT: ldr r0, [sp, #4] ; CHECK-NEXT: bl exp2f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[6], r0 -; CHECK-NEXT: vmov.u16 r0, q4[7] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s19 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[6], r0 ; CHECK-NEXT: vstr s0, [sp] ; CHECK-NEXT: ldr r0, [sp] ; CHECK-NEXT: bl exp2f @@ -756,80 +696,68 @@ ; CHECK-NEXT: vpush {d8, d9, d10, d11} ; CHECK-NEXT: .pad #32 ; CHECK-NEXT: sub sp, #32 -; CHECK-NEXT: vmov.u16 r0, q0[1] ; CHECK-NEXT: vmov q4, q0 -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #24] -; CHECK-NEXT: ldr r0, [sp, #24] +; CHECK-NEXT: vcvtb.f32.f16 s0, s16 +; CHECK-NEXT: vstr s0, [sp, #28] +; CHECK-NEXT: ldr r0, [sp, #28] ; CHECK-NEXT: bl logf ; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[0] ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r4, s0 -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #28] -; CHECK-NEXT: ldr r0, [sp, #28] +; CHECK-NEXT: vstr s0, [sp, #24] +; CHECK-NEXT: ldr r0, [sp, #24] ; CHECK-NEXT: bl logf ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmov.16 q5[0], r4 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[0], r0 -; CHECK-NEXT: vmov.u16 r0, q4[2] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.16 q5[1], r4 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s17 ; CHECK-NEXT: vstr s0, [sp, #20] +; CHECK-NEXT: vmov.16 q5[1], r0 ; CHECK-NEXT: ldr r0, [sp, #20] ; CHECK-NEXT: bl logf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[2], r0 -; CHECK-NEXT: vmov.u16 r0, q4[3] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s17 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[2], r0 ; CHECK-NEXT: vstr s0, [sp, #16] ; CHECK-NEXT: ldr r0, [sp, #16] ; CHECK-NEXT: bl logf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[3], r0 -; CHECK-NEXT: vmov.u16 r0, q4[4] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s18 ; CHECK-NEXT: vstr s0, [sp, #12] +; CHECK-NEXT: vmov.16 q5[3], r0 ; CHECK-NEXT: ldr r0, [sp, #12] ; CHECK-NEXT: bl logf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[4], r0 -; CHECK-NEXT: vmov.u16 r0, q4[5] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s18 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[4], r0 ; CHECK-NEXT: vstr s0, [sp, #8] ; CHECK-NEXT: ldr r0, [sp, #8] ; CHECK-NEXT: bl logf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[5], r0 -; CHECK-NEXT: vmov.u16 r0, q4[6] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s19 ; CHECK-NEXT: vstr s0, [sp, #4] +; CHECK-NEXT: vmov.16 q5[5], r0 ; CHECK-NEXT: ldr r0, [sp, #4] ; CHECK-NEXT: bl logf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[6], r0 -; CHECK-NEXT: vmov.u16 r0, q4[7] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s19 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[6], r0 ; CHECK-NEXT: vstr s0, [sp] ; CHECK-NEXT: ldr r0, [sp] ; CHECK-NEXT: bl logf @@ -912,80 +840,68 @@ ; CHECK-NEXT: vpush {d8, d9, d10, d11} ; CHECK-NEXT: .pad #32 ; CHECK-NEXT: sub sp, #32 -; CHECK-NEXT: vmov.u16 r0, q0[1] ; CHECK-NEXT: vmov q4, q0 -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #24] -; CHECK-NEXT: ldr r0, [sp, #24] +; CHECK-NEXT: vcvtb.f32.f16 s0, s16 +; CHECK-NEXT: vstr s0, [sp, #28] +; CHECK-NEXT: ldr r0, [sp, #28] ; CHECK-NEXT: bl log2f ; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[0] ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r4, s0 -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #28] -; CHECK-NEXT: ldr r0, [sp, #28] +; CHECK-NEXT: vstr s0, [sp, #24] +; CHECK-NEXT: ldr r0, [sp, #24] ; CHECK-NEXT: bl log2f ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmov.16 q5[0], r4 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[0], r0 -; CHECK-NEXT: vmov.u16 r0, q4[2] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.16 q5[1], r4 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s17 ; CHECK-NEXT: vstr s0, [sp, #20] +; CHECK-NEXT: vmov.16 q5[1], r0 ; CHECK-NEXT: ldr r0, [sp, #20] ; CHECK-NEXT: bl log2f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[2], r0 -; CHECK-NEXT: vmov.u16 r0, q4[3] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s17 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[2], r0 ; CHECK-NEXT: vstr s0, [sp, #16] ; CHECK-NEXT: ldr r0, [sp, #16] ; CHECK-NEXT: bl log2f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[3], r0 -; CHECK-NEXT: vmov.u16 r0, q4[4] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s18 ; CHECK-NEXT: vstr s0, [sp, #12] +; CHECK-NEXT: vmov.16 q5[3], r0 ; CHECK-NEXT: ldr r0, [sp, #12] ; CHECK-NEXT: bl log2f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[4], r0 -; CHECK-NEXT: vmov.u16 r0, q4[5] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s18 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[4], r0 ; CHECK-NEXT: vstr s0, [sp, #8] ; CHECK-NEXT: ldr r0, [sp, #8] ; CHECK-NEXT: bl log2f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[5], r0 -; CHECK-NEXT: vmov.u16 r0, q4[6] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s19 ; CHECK-NEXT: vstr s0, [sp, #4] +; CHECK-NEXT: vmov.16 q5[5], r0 ; CHECK-NEXT: ldr r0, [sp, #4] ; CHECK-NEXT: bl log2f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[6], r0 -; CHECK-NEXT: vmov.u16 r0, q4[7] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s19 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[6], r0 ; CHECK-NEXT: vstr s0, [sp] ; CHECK-NEXT: ldr r0, [sp] ; CHECK-NEXT: bl log2f @@ -1068,80 +984,68 @@ ; CHECK-NEXT: vpush {d8, d9, d10, d11} ; CHECK-NEXT: .pad #32 ; CHECK-NEXT: sub sp, #32 -; CHECK-NEXT: vmov.u16 r0, q0[1] ; CHECK-NEXT: vmov q4, q0 -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #24] -; CHECK-NEXT: ldr r0, [sp, #24] +; CHECK-NEXT: vcvtb.f32.f16 s0, s16 +; CHECK-NEXT: vstr s0, [sp, #28] +; CHECK-NEXT: ldr r0, [sp, #28] ; CHECK-NEXT: bl log10f ; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[0] ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r4, s0 -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 -; CHECK-NEXT: vstr s0, [sp, #28] -; CHECK-NEXT: ldr r0, [sp, #28] +; CHECK-NEXT: vstr s0, [sp, #24] +; CHECK-NEXT: ldr r0, [sp, #24] ; CHECK-NEXT: bl log10f ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmov.16 q5[0], r4 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[0], r0 -; CHECK-NEXT: vmov.u16 r0, q4[2] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.16 q5[1], r4 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s17 ; CHECK-NEXT: vstr s0, [sp, #20] +; CHECK-NEXT: vmov.16 q5[1], r0 ; CHECK-NEXT: ldr r0, [sp, #20] ; CHECK-NEXT: bl log10f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[2], r0 -; CHECK-NEXT: vmov.u16 r0, q4[3] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s17 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[2], r0 ; CHECK-NEXT: vstr s0, [sp, #16] ; CHECK-NEXT: ldr r0, [sp, #16] ; CHECK-NEXT: bl log10f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[3], r0 -; CHECK-NEXT: vmov.u16 r0, q4[4] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s18 ; CHECK-NEXT: vstr s0, [sp, #12] +; CHECK-NEXT: vmov.16 q5[3], r0 ; CHECK-NEXT: ldr r0, [sp, #12] ; CHECK-NEXT: bl log10f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[4], r0 -; CHECK-NEXT: vmov.u16 r0, q4[5] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s18 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[4], r0 ; CHECK-NEXT: vstr s0, [sp, #8] ; CHECK-NEXT: ldr r0, [sp, #8] ; CHECK-NEXT: bl log10f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[5], r0 -; CHECK-NEXT: vmov.u16 r0, q4[6] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s19 ; CHECK-NEXT: vstr s0, [sp, #4] +; CHECK-NEXT: vmov.16 q5[5], r0 ; CHECK-NEXT: ldr r0, [sp, #4] ; CHECK-NEXT: bl log10f ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q5[6], r0 -; CHECK-NEXT: vmov.u16 r0, q4[7] -; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s0, s19 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vmov.16 q5[6], r0 ; CHECK-NEXT: vstr s0, [sp] ; CHECK-NEXT: ldr r0, [sp] ; CHECK-NEXT: bl log10f @@ -1235,25 +1139,19 @@ ; CHECK-NEXT: .pad #64 ; CHECK-NEXT: sub sp, #64 ; CHECK-NEXT: vmov q4, q0 -; CHECK-NEXT: vmov.u16 r0, q1[0] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[0] -; CHECK-NEXT: vmov s2, r0 ; CHECK-NEXT: vmov q5, q1 -; CHECK-NEXT: vcvtb.f32.f16 s2, s2 -; CHECK-NEXT: vstr s2, [sp, #56] -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s16 +; CHECK-NEXT: vstr s0, [sp, #56] +; CHECK-NEXT: vcvtb.f32.f16 s0, s20 ; CHECK-NEXT: vstr s0, [sp, #60] ; CHECK-NEXT: ldrd r0, r1, [sp, #56] ; CHECK-NEXT: bl powf ; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q5[1] +; CHECK-NEXT: vmovx.f16 s2, s16 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 -; CHECK-NEXT: vmov r4, s0 -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[1] -; CHECK-NEXT: vmov s2, r0 ; CHECK-NEXT: vcvtb.f32.f16 s2, s2 +; CHECK-NEXT: vmov r4, s0 +; CHECK-NEXT: vmovx.f16 s0, s20 ; CHECK-NEXT: vstr s2, [sp, #48] ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 ; CHECK-NEXT: vstr s0, [sp, #52] @@ -1263,85 +1161,67 @@ ; CHECK-NEXT: vmov.16 q6[0], r4 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[1], r0 -; CHECK-NEXT: vmov.u16 r0, q5[2] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[2] -; CHECK-NEXT: vmov s2, r0 -; CHECK-NEXT: vcvtb.f32.f16 s2, s2 -; CHECK-NEXT: vstr s2, [sp, #40] -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s17 +; CHECK-NEXT: vstr s0, [sp, #40] +; CHECK-NEXT: vcvtb.f32.f16 s0, s21 ; CHECK-NEXT: vstr s0, [sp, #44] +; CHECK-NEXT: vmov.16 q6[1], r0 ; CHECK-NEXT: ldrd r0, r1, [sp, #40] ; CHECK-NEXT: bl powf ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s2, s17 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 -; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[2], r0 -; CHECK-NEXT: vmov.u16 r0, q5[3] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[3] -; CHECK-NEXT: vmov s2, r0 ; CHECK-NEXT: vcvtb.f32.f16 s2, s2 +; CHECK-NEXT: vmov r0, s0 +; CHECK-NEXT: vmovx.f16 s0, s21 ; CHECK-NEXT: vstr s2, [sp, #32] ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 ; CHECK-NEXT: vstr s0, [sp, #36] +; CHECK-NEXT: vmov.16 q6[2], r0 ; CHECK-NEXT: ldrd r0, r1, [sp, #32] ; CHECK-NEXT: bl powf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[3], r0 -; CHECK-NEXT: vmov.u16 r0, q5[4] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[4] -; CHECK-NEXT: vmov s2, r0 -; CHECK-NEXT: vcvtb.f32.f16 s2, s2 -; CHECK-NEXT: vstr s2, [sp, #24] -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s18 +; CHECK-NEXT: vstr s0, [sp, #24] +; CHECK-NEXT: vcvtb.f32.f16 s0, s22 ; CHECK-NEXT: vstr s0, [sp, #28] +; CHECK-NEXT: vmov.16 q6[3], r0 ; CHECK-NEXT: ldrd r0, r1, [sp, #24] ; CHECK-NEXT: bl powf ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s2, s18 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 -; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[4], r0 -; CHECK-NEXT: vmov.u16 r0, q5[5] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[5] -; CHECK-NEXT: vmov s2, r0 ; CHECK-NEXT: vcvtb.f32.f16 s2, s2 +; CHECK-NEXT: vmov r0, s0 +; CHECK-NEXT: vmovx.f16 s0, s22 ; CHECK-NEXT: vstr s2, [sp, #16] ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 ; CHECK-NEXT: vstr s0, [sp, #20] +; CHECK-NEXT: vmov.16 q6[4], r0 ; CHECK-NEXT: ldrd r0, r1, [sp, #16] ; CHECK-NEXT: bl powf ; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 ; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[5], r0 -; CHECK-NEXT: vmov.u16 r0, q5[6] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[6] -; CHECK-NEXT: vmov s2, r0 -; CHECK-NEXT: vcvtb.f32.f16 s2, s2 -; CHECK-NEXT: vstr s2, [sp, #8] -; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; CHECK-NEXT: vcvtb.f32.f16 s0, s19 +; CHECK-NEXT: vstr s0, [sp, #8] +; CHECK-NEXT: vcvtb.f32.f16 s0, s23 ; CHECK-NEXT: vstr s0, [sp, #12] +; CHECK-NEXT: vmov.16 q6[5], r0 ; CHECK-NEXT: ldrd r0, r1, [sp, #8] ; CHECK-NEXT: bl powf ; CHECK-NEXT: vmov s0, r0 +; CHECK-NEXT: vmovx.f16 s2, s19 ; CHECK-NEXT: vcvtb.f16.f32 s0, s0 -; CHECK-NEXT: vmov r0, s0 -; CHECK-NEXT: vmov.16 q6[6], r0 -; CHECK-NEXT: vmov.u16 r0, q5[7] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vmov.u16 r0, q4[7] -; CHECK-NEXT: vmov s2, r0 ; CHECK-NEXT: vcvtb.f32.f16 s2, s2 +; CHECK-NEXT: vmov r0, s0 +; CHECK-NEXT: vmovx.f16 s0, s23 ; CHECK-NEXT: vstr s2, [sp] ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 ; CHECK-NEXT: vstr s0, [sp, #4] +; CHECK-NEXT: vmov.16 q6[6], r0 ; CHECK-NEXT: ldrd r0, r1, [sp] ; CHECK-NEXT: bl powf ; CHECK-NEXT: vmov s0, r0 @@ -1431,65 +1311,49 @@ ; CHECK: @ %bb.0: @ %entry ; CHECK-NEXT: .pad #32 ; CHECK-NEXT: sub sp, #32 -; CHECK-NEXT: vmov.u16 r0, q1[1] -; CHECK-NEXT: vmov.u16 r1, q0[0] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vmov.u16 r0, q1[0] +; CHECK-NEXT: vmovx.f16 s8, s4 +; CHECK-NEXT: vstr.16 s4, [sp, #28] ; CHECK-NEXT: vstr.16 s8, [sp, #24] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vmov.u16 r0, q1[2] -; CHECK-NEXT: vstr.16 s8, [sp, #28] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vmov.u16 r0, q1[3] -; CHECK-NEXT: vstr.16 s8, [sp, #20] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vmov.u16 r0, q1[4] +; CHECK-NEXT: vmovx.f16 s8, s5 +; CHECK-NEXT: vstr.16 s5, [sp, #20] ; CHECK-NEXT: vstr.16 s8, [sp, #16] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vmov.u16 r0, q1[5] -; CHECK-NEXT: vstr.16 s8, [sp, #12] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vmov.u16 r0, q1[6] +; CHECK-NEXT: vmovx.f16 s8, s6 +; CHECK-NEXT: vmovx.f16 s4, s7 +; CHECK-NEXT: vstr.16 s6, [sp, #12] ; CHECK-NEXT: vstr.16 s8, [sp, #8] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vmov.u16 r0, q1[7] -; CHECK-NEXT: vmov s4, r0 -; CHECK-NEXT: vstr.16 s8, [sp, #4] +; CHECK-NEXT: vstr.16 s7, [sp, #4] ; CHECK-NEXT: vstr.16 s4, [sp] -; CHECK-NEXT: vmov.u16 r0, q0[1] -; CHECK-NEXT: vmov s4, r0 -; CHECK-NEXT: ldrb.w r0, [sp, #25] -; CHECK-NEXT: vabs.f16 s4, s4 -; CHECK-NEXT: tst.w r0, #128 +; CHECK-NEXT: ldrb.w r0, [sp, #29] +; CHECK-NEXT: vabs.f16 s4, s0 ; CHECK-NEXT: vneg.f16 s6, s4 +; CHECK-NEXT: ldrb.w r1, [sp, #25] +; CHECK-NEXT: tst.w r0, #128 +; CHECK-NEXT: vabs.f16 s8, s1 ; CHECK-NEXT: cset r0, ne +; CHECK-NEXT: vneg.f16 s10, s8 ; CHECK-NEXT: lsls r0, r0, #31 ; CHECK-NEXT: vseleq.f16 s4, s4, s6 +; CHECK-NEXT: tst.w r1, #128 ; CHECK-NEXT: vmov r0, s4 -; CHECK-NEXT: vmov s4, r1 -; CHECK-NEXT: ldrb.w r1, [sp, #29] +; CHECK-NEXT: vmovx.f16 s4, s0 +; CHECK-NEXT: cset r1, ne ; CHECK-NEXT: vabs.f16 s4, s4 -; CHECK-NEXT: tst.w r1, #128 ; CHECK-NEXT: vneg.f16 s6, s4 -; CHECK-NEXT: cset r1, ne ; CHECK-NEXT: lsls r1, r1, #31 ; CHECK-NEXT: vseleq.f16 s4, s4, s6 +; CHECK-NEXT: vmovx.f16 s0, s3 ; CHECK-NEXT: vmov r1, s4 -; CHECK-NEXT: vmov.16 q1[0], r1 -; CHECK-NEXT: vmov.16 q1[1], r0 -; CHECK-NEXT: vmov.u16 r0, q0[2] -; CHECK-NEXT: vmov s8, r0 +; CHECK-NEXT: vmov.16 q1[0], r0 ; CHECK-NEXT: ldrb.w r0, [sp, #21] -; CHECK-NEXT: vabs.f16 s8, s8 +; CHECK-NEXT: vmov.16 q1[1], r1 +; CHECK-NEXT: vabs.f16 s0, s0 ; CHECK-NEXT: tst.w r0, #128 -; CHECK-NEXT: vneg.f16 s10, s8 ; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: lsls r0, r0, #31 ; CHECK-NEXT: vseleq.f16 s8, s8, s10 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vmovx.f16 s8, s1 ; CHECK-NEXT: vmov.16 q1[2], r0 -; CHECK-NEXT: vmov.u16 r0, q0[3] -; CHECK-NEXT: vmov s8, r0 ; CHECK-NEXT: ldrb.w r0, [sp, #17] ; CHECK-NEXT: vabs.f16 s8, s8 ; CHECK-NEXT: tst.w r0, #128 @@ -1498,46 +1362,38 @@ ; CHECK-NEXT: lsls r0, r0, #31 ; CHECK-NEXT: vseleq.f16 s8, s8, s10 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vabs.f16 s8, s2 ; CHECK-NEXT: vmov.16 q1[3], r0 -; CHECK-NEXT: vmov.u16 r0, q0[4] -; CHECK-NEXT: vmov s8, r0 ; CHECK-NEXT: ldrb.w r0, [sp, #13] -; CHECK-NEXT: vabs.f16 s8, s8 -; CHECK-NEXT: tst.w r0, #128 ; CHECK-NEXT: vneg.f16 s10, s8 +; CHECK-NEXT: tst.w r0, #128 ; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: lsls r0, r0, #31 ; CHECK-NEXT: vseleq.f16 s8, s8, s10 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vmovx.f16 s8, s2 ; CHECK-NEXT: vmov.16 q1[4], r0 -; CHECK-NEXT: vmov.u16 r0, q0[5] -; CHECK-NEXT: vmov s8, r0 ; CHECK-NEXT: ldrb.w r0, [sp, #9] ; CHECK-NEXT: vabs.f16 s8, s8 +; CHECK-NEXT: vneg.f16 s2, s0 ; CHECK-NEXT: tst.w r0, #128 ; CHECK-NEXT: vneg.f16 s10, s8 ; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: lsls r0, r0, #31 ; CHECK-NEXT: vseleq.f16 s8, s8, s10 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vabs.f16 s8, s3 ; CHECK-NEXT: vmov.16 q1[5], r0 -; CHECK-NEXT: vmov.u16 r0, q0[6] -; CHECK-NEXT: vmov s8, r0 ; CHECK-NEXT: ldrb.w r0, [sp, #5] -; CHECK-NEXT: vabs.f16 s8, s8 -; CHECK-NEXT: tst.w r0, #128 ; CHECK-NEXT: vneg.f16 s10, s8 +; CHECK-NEXT: tst.w r0, #128 ; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: lsls r0, r0, #31 ; CHECK-NEXT: vseleq.f16 s8, s8, s10 ; CHECK-NEXT: vmov r0, s8 ; CHECK-NEXT: vmov.16 q1[6], r0 -; CHECK-NEXT: vmov.u16 r0, q0[7] -; CHECK-NEXT: vmov s0, r0 ; CHECK-NEXT: ldrb.w r0, [sp, #1] -; CHECK-NEXT: vabs.f16 s0, s0 ; CHECK-NEXT: tst.w r0, #128 -; CHECK-NEXT: vneg.f16 s2, s0 ; CHECK-NEXT: cset r0, ne ; CHECK-NEXT: lsls r0, r0, #31 ; CHECK-NEXT: vseleq.f16 s0, s0, s2 Index: llvm/test/CodeGen/Thumb2/mve-fp-negabs.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-fp-negabs.ll +++ llvm/test/CodeGen/Thumb2/mve-fp-negabs.ll @@ -5,44 +5,32 @@ define arm_aapcs_vfpcc <8 x half> @fneg_float16_t(<8 x half> %src) { ; CHECK-MVE-LABEL: fneg_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s4, r0 +; CHECK-MVE-NEXT: vmovx.f16 s4, s0 +; CHECK-MVE-NEXT: vneg.f16 s8, s1 ; CHECK-MVE-NEXT: vneg.f16 s4, s4 ; CHECK-MVE-NEXT: vmov r0, s4 -; CHECK-MVE-NEXT: vmov s4, r1 -; CHECK-MVE-NEXT: vneg.f16 s4, s4 +; CHECK-MVE-NEXT: vneg.f16 s4, s0 ; CHECK-MVE-NEXT: vmov r1, s4 -; CHECK-MVE-NEXT: vmov.16 q1[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q1[1], r1 -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vneg.f16 s8, s8 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q1[0], r1 +; CHECK-MVE-NEXT: vneg.f16 s0, s0 +; CHECK-MVE-NEXT: vmov.16 q1[1], r0 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s1 ; CHECK-MVE-NEXT: vmov.16 q1[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vneg.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vneg.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vneg.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vneg.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vneg.f16 s8, s3 ; CHECK-MVE-NEXT: vmov.16 q1[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vneg.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 ; CHECK-MVE-NEXT: vmov.16 q1[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vneg.f16 s0, s0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q1[7], r0 ; CHECK-MVE-NEXT: vmov q0, q1 @@ -112,44 +100,32 @@ define arm_aapcs_vfpcc <8 x half> @fabs_float16_t(<8 x half> %src) { ; CHECK-MVE-LABEL: fabs_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s4, r0 +; CHECK-MVE-NEXT: vmovx.f16 s4, s0 +; CHECK-MVE-NEXT: vabs.f16 s8, s1 ; CHECK-MVE-NEXT: vabs.f16 s4, s4 ; CHECK-MVE-NEXT: vmov r0, s4 -; CHECK-MVE-NEXT: vmov s4, r1 -; CHECK-MVE-NEXT: vabs.f16 s4, s4 +; CHECK-MVE-NEXT: vabs.f16 s4, s0 ; CHECK-MVE-NEXT: vmov r1, s4 -; CHECK-MVE-NEXT: vmov.16 q1[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q1[1], r1 -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vabs.f16 s8, s8 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q1[0], r1 +; CHECK-MVE-NEXT: vabs.f16 s0, s0 +; CHECK-MVE-NEXT: vmov.16 q1[1], r0 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s1 ; CHECK-MVE-NEXT: vmov.16 q1[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vabs.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vabs.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vabs.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vabs.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vabs.f16 s8, s3 ; CHECK-MVE-NEXT: vmov.16 q1[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vabs.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 ; CHECK-MVE-NEXT: vmov.16 q1[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vabs.f16 s0, s0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q1[7], r0 ; CHECK-MVE-NEXT: vmov q0, q1 Index: llvm/test/CodeGen/Thumb2/mve-frint.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-frint.ll +++ llvm/test/CodeGen/Thumb2/mve-frint.ll @@ -24,44 +24,32 @@ define arm_aapcs_vfpcc <8 x half> @fceil_float16_t(<8 x half> %src) { ; CHECK-MVE-LABEL: fceil_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s4, r0 +; CHECK-MVE-NEXT: vmovx.f16 s4, s0 +; CHECK-MVE-NEXT: vrintp.f16 s8, s1 ; CHECK-MVE-NEXT: vrintp.f16 s4, s4 ; CHECK-MVE-NEXT: vmov r0, s4 -; CHECK-MVE-NEXT: vmov s4, r1 -; CHECK-MVE-NEXT: vrintp.f16 s4, s4 +; CHECK-MVE-NEXT: vrintp.f16 s4, s0 ; CHECK-MVE-NEXT: vmov r1, s4 -; CHECK-MVE-NEXT: vmov.16 q1[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q1[1], r1 -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintp.f16 s8, s8 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q1[0], r1 +; CHECK-MVE-NEXT: vrintp.f16 s0, s0 +; CHECK-MVE-NEXT: vmov.16 q1[1], r0 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s1 ; CHECK-MVE-NEXT: vmov.16 q1[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vrintp.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vrintp.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintp.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vrintp.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vrintp.f16 s8, s3 ; CHECK-MVE-NEXT: vmov.16 q1[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintp.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 ; CHECK-MVE-NEXT: vmov.16 q1[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vrintp.f16 s0, s0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q1[7], r0 ; CHECK-MVE-NEXT: vmov q0, q1 @@ -122,44 +110,32 @@ define arm_aapcs_vfpcc <8 x half> @ftrunc_float16_t(<8 x half> %src) { ; CHECK-MVE-LABEL: ftrunc_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s4, r0 +; CHECK-MVE-NEXT: vmovx.f16 s4, s0 +; CHECK-MVE-NEXT: vrintz.f16 s8, s1 ; CHECK-MVE-NEXT: vrintz.f16 s4, s4 ; CHECK-MVE-NEXT: vmov r0, s4 -; CHECK-MVE-NEXT: vmov s4, r1 -; CHECK-MVE-NEXT: vrintz.f16 s4, s4 +; CHECK-MVE-NEXT: vrintz.f16 s4, s0 ; CHECK-MVE-NEXT: vmov r1, s4 -; CHECK-MVE-NEXT: vmov.16 q1[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q1[1], r1 -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintz.f16 s8, s8 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q1[0], r1 +; CHECK-MVE-NEXT: vrintz.f16 s0, s0 +; CHECK-MVE-NEXT: vmov.16 q1[1], r0 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s1 ; CHECK-MVE-NEXT: vmov.16 q1[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vrintz.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vrintz.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintz.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vrintz.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vrintz.f16 s8, s3 ; CHECK-MVE-NEXT: vmov.16 q1[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintz.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 ; CHECK-MVE-NEXT: vmov.16 q1[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vrintz.f16 s0, s0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q1[7], r0 ; CHECK-MVE-NEXT: vmov q0, q1 @@ -220,44 +196,32 @@ define arm_aapcs_vfpcc <8 x half> @frint_float16_t(<8 x half> %src) { ; CHECK-MVE-LABEL: frint_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s4, r0 +; CHECK-MVE-NEXT: vmovx.f16 s4, s0 +; CHECK-MVE-NEXT: vrintx.f16 s8, s1 ; CHECK-MVE-NEXT: vrintx.f16 s4, s4 ; CHECK-MVE-NEXT: vmov r0, s4 -; CHECK-MVE-NEXT: vmov s4, r1 -; CHECK-MVE-NEXT: vrintx.f16 s4, s4 +; CHECK-MVE-NEXT: vrintx.f16 s4, s0 ; CHECK-MVE-NEXT: vmov r1, s4 -; CHECK-MVE-NEXT: vmov.16 q1[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q1[1], r1 -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintx.f16 s8, s8 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q1[0], r1 +; CHECK-MVE-NEXT: vrintx.f16 s0, s0 +; CHECK-MVE-NEXT: vmov.16 q1[1], r0 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s1 ; CHECK-MVE-NEXT: vmov.16 q1[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vrintx.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vrintx.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintx.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vrintx.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vrintx.f16 s8, s3 ; CHECK-MVE-NEXT: vmov.16 q1[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintx.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 ; CHECK-MVE-NEXT: vmov.16 q1[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vrintx.f16 s0, s0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q1[7], r0 ; CHECK-MVE-NEXT: vmov q0, q1 @@ -313,44 +277,32 @@ define arm_aapcs_vfpcc <8 x half> @fnearbyint_float16_t(<8 x half> %src) { ; CHECK-LABEL: fnearbyint_float16_t: ; CHECK: @ %bb.0: @ %entry -; CHECK-NEXT: vmov.u16 r0, q0[0] -; CHECK-NEXT: vmov.u16 r1, q0[1] -; CHECK-NEXT: vmov s4, r0 +; CHECK-NEXT: vmovx.f16 s4, s0 +; CHECK-NEXT: vrintr.f16 s8, s1 ; CHECK-NEXT: vrintr.f16 s4, s4 ; CHECK-NEXT: vmov r0, s4 -; CHECK-NEXT: vmov s4, r1 -; CHECK-NEXT: vrintr.f16 s4, s4 +; CHECK-NEXT: vrintr.f16 s4, s0 ; CHECK-NEXT: vmov r1, s4 -; CHECK-NEXT: vmov.16 q1[0], r0 -; CHECK-NEXT: vmov.u16 r0, q0[2] -; CHECK-NEXT: vmov.16 q1[1], r1 -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vrintr.f16 s8, s8 +; CHECK-NEXT: vmovx.f16 s0, s3 +; CHECK-NEXT: vmov.16 q1[0], r1 +; CHECK-NEXT: vrintr.f16 s0, s0 +; CHECK-NEXT: vmov.16 q1[1], r0 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vmovx.f16 s8, s1 ; CHECK-NEXT: vmov.16 q1[2], r0 -; CHECK-NEXT: vmov.u16 r0, q0[3] -; CHECK-NEXT: vmov s8, r0 ; CHECK-NEXT: vrintr.f16 s8, s8 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vrintr.f16 s8, s2 ; CHECK-NEXT: vmov.16 q1[3], r0 -; CHECK-NEXT: vmov.u16 r0, q0[4] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vrintr.f16 s8, s8 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vmovx.f16 s8, s2 ; CHECK-NEXT: vmov.16 q1[4], r0 -; CHECK-NEXT: vmov.u16 r0, q0[5] -; CHECK-NEXT: vmov s8, r0 ; CHECK-NEXT: vrintr.f16 s8, s8 ; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vrintr.f16 s8, s3 ; CHECK-NEXT: vmov.16 q1[5], r0 -; CHECK-NEXT: vmov.u16 r0, q0[6] -; CHECK-NEXT: vmov s8, r0 -; CHECK-NEXT: vrintr.f16 s8, s8 ; CHECK-NEXT: vmov r0, s8 ; CHECK-NEXT: vmov.16 q1[6], r0 -; CHECK-NEXT: vmov.u16 r0, q0[7] -; CHECK-NEXT: vmov s0, r0 -; CHECK-NEXT: vrintr.f16 s0, s0 ; CHECK-NEXT: vmov r0, s0 ; CHECK-NEXT: vmov.16 q1[7], r0 ; CHECK-NEXT: vmov q0, q1 @@ -406,44 +358,32 @@ define arm_aapcs_vfpcc <8 x half> @ffloor_float16_t(<8 x half> %src) { ; CHECK-MVE-LABEL: ffloor_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s4, r0 +; CHECK-MVE-NEXT: vmovx.f16 s4, s0 +; CHECK-MVE-NEXT: vrintm.f16 s8, s1 ; CHECK-MVE-NEXT: vrintm.f16 s4, s4 ; CHECK-MVE-NEXT: vmov r0, s4 -; CHECK-MVE-NEXT: vmov s4, r1 -; CHECK-MVE-NEXT: vrintm.f16 s4, s4 +; CHECK-MVE-NEXT: vrintm.f16 s4, s0 ; CHECK-MVE-NEXT: vmov r1, s4 -; CHECK-MVE-NEXT: vmov.16 q1[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q1[1], r1 -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintm.f16 s8, s8 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q1[0], r1 +; CHECK-MVE-NEXT: vrintm.f16 s0, s0 +; CHECK-MVE-NEXT: vmov.16 q1[1], r0 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s1 ; CHECK-MVE-NEXT: vmov.16 q1[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vrintm.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vrintm.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintm.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vrintm.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vrintm.f16 s8, s3 ; CHECK-MVE-NEXT: vmov.16 q1[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrintm.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 ; CHECK-MVE-NEXT: vmov.16 q1[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vrintm.f16 s0, s0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q1[7], r0 ; CHECK-MVE-NEXT: vmov q0, q1 @@ -504,44 +444,32 @@ define arm_aapcs_vfpcc <8 x half> @fround_float16_t(<8 x half> %src) { ; CHECK-MVE-LABEL: fround_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s4, r0 +; CHECK-MVE-NEXT: vmovx.f16 s4, s0 +; CHECK-MVE-NEXT: vrinta.f16 s8, s1 ; CHECK-MVE-NEXT: vrinta.f16 s4, s4 ; CHECK-MVE-NEXT: vmov r0, s4 -; CHECK-MVE-NEXT: vmov s4, r1 -; CHECK-MVE-NEXT: vrinta.f16 s4, s4 +; CHECK-MVE-NEXT: vrinta.f16 s4, s0 ; CHECK-MVE-NEXT: vmov r1, s4 -; CHECK-MVE-NEXT: vmov.16 q1[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q1[1], r1 -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrinta.f16 s8, s8 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q1[0], r1 +; CHECK-MVE-NEXT: vrinta.f16 s0, s0 +; CHECK-MVE-NEXT: vmov.16 q1[1], r0 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s1 ; CHECK-MVE-NEXT: vmov.16 q1[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vrinta.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vrinta.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrinta.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vmovx.f16 s8, s2 ; CHECK-MVE-NEXT: vmov.16 q1[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s8, r0 ; CHECK-MVE-NEXT: vrinta.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 +; CHECK-MVE-NEXT: vrinta.f16 s8, s3 ; CHECK-MVE-NEXT: vmov.16 q1[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vrinta.f16 s8, s8 ; CHECK-MVE-NEXT: vmov r0, s8 ; CHECK-MVE-NEXT: vmov.16 q1[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vrinta.f16 s0, s0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q1[7], r0 ; CHECK-MVE-NEXT: vmov q0, q1 Index: llvm/test/CodeGen/Thumb2/mve-minmax.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-minmax.ll +++ llvm/test/CodeGen/Thumb2/mve-minmax.ll @@ -323,60 +323,36 @@ define arm_aapcs_vfpcc <8 x half> @minnm_float16_t(<8 x half> %src1, <8 x half> %src2) { ; CHECK-MVE-LABEL: minnm_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[0] -; CHECK-MVE-NEXT: vmov s10, r0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] -; CHECK-MVE-NEXT: vminnm.f16 s8, s10, s8 -; CHECK-MVE-NEXT: vmov s10, r2 +; CHECK-MVE-NEXT: vminnm.f16 s8, s4, s0 +; CHECK-MVE-NEXT: vmovx.f16 s10, s4 ; CHECK-MVE-NEXT: vmov r0, s8 -; CHECK-MVE-NEXT: vmov s8, r1 +; CHECK-MVE-NEXT: vmovx.f16 s8, s0 ; CHECK-MVE-NEXT: vminnm.f16 s8, s10, s8 +; CHECK-MVE-NEXT: vminnm.f16 s12, s5, s1 ; CHECK-MVE-NEXT: vmov r1, s8 ; CHECK-MVE-NEXT: vmov.16 q2[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] +; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vmovx.f16 s12, s1 +; CHECK-MVE-NEXT: vmovx.f16 s14, s5 ; CHECK-MVE-NEXT: vmov.16 q2[1], r1 -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s14, r0 ; CHECK-MVE-NEXT: vminnm.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: vmov.16 q2[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vminnm.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vminnm.f16 s12, s6, s2 ; CHECK-MVE-NEXT: vmov.16 q2[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vminnm.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.16 q2[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s14, r0 +; CHECK-MVE-NEXT: vmovx.f16 s12, s2 +; CHECK-MVE-NEXT: vmovx.f16 s14, s6 ; CHECK-MVE-NEXT: vminnm.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov.16 q2[4], r0 ; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmovx.f16 s2, s7 +; CHECK-MVE-NEXT: vminnm.f16 s12, s7, s3 ; CHECK-MVE-NEXT: vmov.16 q2[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vminnm.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.16 q2[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s2, r0 ; CHECK-MVE-NEXT: vminnm.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q2[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q2[7], r0 ; CHECK-MVE-NEXT: vmov q0, q2 Index: llvm/test/CodeGen/Thumb2/mve-shuffle.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-shuffle.ll +++ llvm/test/CodeGen/Thumb2/mve-shuffle.ll @@ -348,21 +348,25 @@ define arm_aapcs_vfpcc <8 x half> @shuffle1_f16(<8 x half> %src) { ; CHECK-LABEL: shuffle1_f16: ; CHECK: @ %bb.0: @ %entry -; CHECK-NEXT: vmov.u16 r0, q0[7] -; CHECK-NEXT: vmov.u16 r1, q0[6] -; CHECK-NEXT: vmov.16 q1[0], r0 -; CHECK-NEXT: vmov.u16 r0, q0[5] -; CHECK-NEXT: vmov.16 q1[1], r1 +; CHECK-NEXT: vmovx.f16 s4, s3 +; CHECK-NEXT: vmov r0, s3 +; CHECK-NEXT: vmov r1, s4 +; CHECK-NEXT: vmovx.f16 s8, s2 +; CHECK-NEXT: vmov.16 q1[0], r1 +; CHECK-NEXT: vmov.16 q1[1], r0 +; CHECK-NEXT: vmov r0, s8 ; CHECK-NEXT: vmov.16 q1[2], r0 -; CHECK-NEXT: vmov.u16 r0, q0[4] +; CHECK-NEXT: vmov r0, s2 +; CHECK-NEXT: vmovx.f16 s8, s1 ; CHECK-NEXT: vmov.16 q1[3], r0 -; CHECK-NEXT: vmov.u16 r0, q0[3] +; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vmovx.f16 s8, s0 ; CHECK-NEXT: vmov.16 q1[4], r0 -; CHECK-NEXT: vmov.u16 r0, q0[2] +; CHECK-NEXT: vmov r0, s1 ; CHECK-NEXT: vmov.16 q1[5], r0 -; CHECK-NEXT: vmov.u16 r0, q0[1] +; CHECK-NEXT: vmov r0, s8 ; CHECK-NEXT: vmov.16 q1[6], r0 -; CHECK-NEXT: vmov.u16 r0, q0[0] +; CHECK-NEXT: vmov r0, s0 ; CHECK-NEXT: vmov.16 q1[7], r0 ; CHECK-NEXT: vmov q0, q1 ; CHECK-NEXT: bx lr @@ -383,21 +387,25 @@ define arm_aapcs_vfpcc <8 x half> @shuffle3_f16(<8 x half> %src) { ; CHECK-LABEL: shuffle3_f16: ; CHECK: @ %bb.0: @ %entry -; CHECK-NEXT: vmov.u16 r0, q0[4] -; CHECK-NEXT: vmov.u16 r1, q0[5] -; CHECK-NEXT: vmov.16 q1[0], r0 -; CHECK-NEXT: vmov.u16 r0, q0[7] -; CHECK-NEXT: vmov.16 q1[1], r1 +; CHECK-NEXT: vmovx.f16 s4, s2 +; CHECK-NEXT: vmov r1, s2 +; CHECK-NEXT: vmov r0, s4 +; CHECK-NEXT: vmov.16 q1[0], r1 +; CHECK-NEXT: vmovx.f16 s8, s3 +; CHECK-NEXT: vmov.16 q1[1], r0 +; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vmovx.f16 s8, s1 ; CHECK-NEXT: vmov.16 q1[2], r0 -; CHECK-NEXT: vmov.u16 r0, q0[6] +; CHECK-NEXT: vmov r0, s3 ; CHECK-NEXT: vmov.16 q1[3], r0 -; CHECK-NEXT: vmov.u16 r0, q0[3] +; CHECK-NEXT: vmov r0, s8 +; CHECK-NEXT: vmovx.f16 s8, s0 ; CHECK-NEXT: vmov.16 q1[4], r0 -; CHECK-NEXT: vmov.u16 r0, q0[1] +; CHECK-NEXT: vmov r0, s8 ; CHECK-NEXT: vmov.16 q1[5], r0 -; CHECK-NEXT: vmov.u16 r0, q0[2] +; CHECK-NEXT: vmov r0, s1 ; CHECK-NEXT: vmov.16 q1[6], r0 -; CHECK-NEXT: vmov.u16 r0, q0[0] +; CHECK-NEXT: vmov r0, s0 ; CHECK-NEXT: vmov.16 q1[7], r0 ; CHECK-NEXT: vmov q0, q1 ; CHECK-NEXT: bx lr @@ -681,8 +689,6 @@ define arm_aapcs_vfpcc half @extract_f16_0(<8 x half> %a) { ; CHECK-LABEL: extract_f16_0: ; CHECK: @ %bb.0: @ %entry -; CHECK-NEXT: vmov.u16 r1, q0[0] -; CHECK-NEXT: vmov s0, r1 ; CHECK-NEXT: vstr.16 s0, [r0] ; CHECK-NEXT: bx lr entry: @@ -693,8 +699,7 @@ define arm_aapcs_vfpcc half @extract_f16_3(<8 x half> %a) { ; CHECK-LABEL: extract_f16_3: ; CHECK: @ %bb.0: @ %entry -; CHECK-NEXT: vmov.u16 r1, q0[3] -; CHECK-NEXT: vmov s0, r1 +; CHECK-NEXT: vmovx.f16 s0, s1 ; CHECK-NEXT: vstr.16 s0, [r0] ; CHECK-NEXT: bx lr entry: Index: llvm/test/CodeGen/Thumb2/mve-simple-arith.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-simple-arith.ll +++ llvm/test/CodeGen/Thumb2/mve-simple-arith.ll @@ -81,60 +81,36 @@ define arm_aapcs_vfpcc <8 x half> @add_float16_t(<8 x half> %src1, <8 x half> %src2) { ; CHECK-MVE-LABEL: add_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[0] -; CHECK-MVE-NEXT: vmov s10, r0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] -; CHECK-MVE-NEXT: vadd.f16 s8, s10, s8 -; CHECK-MVE-NEXT: vmov s10, r2 +; CHECK-MVE-NEXT: vadd.f16 s8, s4, s0 +; CHECK-MVE-NEXT: vmovx.f16 s10, s4 ; CHECK-MVE-NEXT: vmov r0, s8 -; CHECK-MVE-NEXT: vmov s8, r1 +; CHECK-MVE-NEXT: vmovx.f16 s8, s0 ; CHECK-MVE-NEXT: vadd.f16 s8, s10, s8 +; CHECK-MVE-NEXT: vadd.f16 s12, s5, s1 ; CHECK-MVE-NEXT: vmov r1, s8 ; CHECK-MVE-NEXT: vmov.16 q2[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] +; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vmovx.f16 s12, s1 +; CHECK-MVE-NEXT: vmovx.f16 s14, s5 ; CHECK-MVE-NEXT: vmov.16 q2[1], r1 -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s14, r0 ; CHECK-MVE-NEXT: vadd.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: vmov.16 q2[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vadd.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vadd.f16 s12, s6, s2 ; CHECK-MVE-NEXT: vmov.16 q2[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vadd.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.16 q2[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s14, r0 +; CHECK-MVE-NEXT: vmovx.f16 s12, s2 +; CHECK-MVE-NEXT: vmovx.f16 s14, s6 ; CHECK-MVE-NEXT: vadd.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov.16 q2[4], r0 ; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmovx.f16 s2, s7 +; CHECK-MVE-NEXT: vadd.f16 s12, s7, s3 ; CHECK-MVE-NEXT: vmov.16 q2[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vadd.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.16 q2[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s2, r0 ; CHECK-MVE-NEXT: vadd.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q2[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q2[7], r0 ; CHECK-MVE-NEXT: vmov q0, q2 @@ -256,60 +232,36 @@ define arm_aapcs_vfpcc <8 x half> @sub_float16_t(<8 x half> %src1, <8 x half> %src2) { ; CHECK-MVE-LABEL: sub_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[0] -; CHECK-MVE-NEXT: vmov s10, r0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] -; CHECK-MVE-NEXT: vsub.f16 s8, s10, s8 -; CHECK-MVE-NEXT: vmov s10, r2 +; CHECK-MVE-NEXT: vsub.f16 s8, s4, s0 +; CHECK-MVE-NEXT: vmovx.f16 s10, s4 ; CHECK-MVE-NEXT: vmov r0, s8 -; CHECK-MVE-NEXT: vmov s8, r1 +; CHECK-MVE-NEXT: vmovx.f16 s8, s0 ; CHECK-MVE-NEXT: vsub.f16 s8, s10, s8 +; CHECK-MVE-NEXT: vsub.f16 s12, s5, s1 ; CHECK-MVE-NEXT: vmov r1, s8 ; CHECK-MVE-NEXT: vmov.16 q2[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] +; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vmovx.f16 s12, s1 +; CHECK-MVE-NEXT: vmovx.f16 s14, s5 ; CHECK-MVE-NEXT: vmov.16 q2[1], r1 -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s14, r0 ; CHECK-MVE-NEXT: vsub.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: vmov.16 q2[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vsub.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vsub.f16 s12, s6, s2 ; CHECK-MVE-NEXT: vmov.16 q2[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vsub.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.16 q2[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s14, r0 +; CHECK-MVE-NEXT: vmovx.f16 s12, s2 +; CHECK-MVE-NEXT: vmovx.f16 s14, s6 ; CHECK-MVE-NEXT: vsub.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov.16 q2[4], r0 ; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmovx.f16 s2, s7 +; CHECK-MVE-NEXT: vsub.f16 s12, s7, s3 ; CHECK-MVE-NEXT: vmov.16 q2[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vsub.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.16 q2[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s2, r0 ; CHECK-MVE-NEXT: vsub.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q2[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q2[7], r0 ; CHECK-MVE-NEXT: vmov q0, q2 @@ -414,60 +366,36 @@ define arm_aapcs_vfpcc <8 x half> @mul_float16_t(<8 x half> %src1, <8 x half> %src2) { ; CHECK-MVE-LABEL: mul_float16_t: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[0] -; CHECK-MVE-NEXT: vmov s10, r0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] -; CHECK-MVE-NEXT: vmul.f16 s8, s10, s8 -; CHECK-MVE-NEXT: vmov s10, r2 +; CHECK-MVE-NEXT: vmul.f16 s8, s4, s0 +; CHECK-MVE-NEXT: vmovx.f16 s10, s4 ; CHECK-MVE-NEXT: vmov r0, s8 -; CHECK-MVE-NEXT: vmov s8, r1 +; CHECK-MVE-NEXT: vmovx.f16 s8, s0 ; CHECK-MVE-NEXT: vmul.f16 s8, s10, s8 +; CHECK-MVE-NEXT: vmul.f16 s12, s5, s1 ; CHECK-MVE-NEXT: vmov r1, s8 ; CHECK-MVE-NEXT: vmov.16 q2[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] +; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vmovx.f16 s12, s1 +; CHECK-MVE-NEXT: vmovx.f16 s14, s5 ; CHECK-MVE-NEXT: vmov.16 q2[1], r1 -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s14, r0 ; CHECK-MVE-NEXT: vmul.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: vmov.16 q2[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vmul.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vmul.f16 s12, s6, s2 ; CHECK-MVE-NEXT: vmov.16 q2[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vmul.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.16 q2[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s14, r0 +; CHECK-MVE-NEXT: vmovx.f16 s12, s2 +; CHECK-MVE-NEXT: vmovx.f16 s14, s6 ; CHECK-MVE-NEXT: vmul.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov.16 q2[4], r0 ; CHECK-MVE-NEXT: vmov r0, s12 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmovx.f16 s2, s7 +; CHECK-MVE-NEXT: vmul.f16 s12, s7, s3 ; CHECK-MVE-NEXT: vmov.16 q2[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vmul.f16 s12, s14, s12 ; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.16 q2[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s2, r0 ; CHECK-MVE-NEXT: vmul.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q2[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q2[7], r0 ; CHECK-MVE-NEXT: vmov q0, q2 Index: llvm/test/CodeGen/Thumb2/mve-vcmpf.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-vcmpf.ll +++ llvm/test/CodeGen/Thumb2/mve-vcmpf.ll @@ -655,140 +655,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmp.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmp.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmp.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmp.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s0, s4 +; CHECK-MVE-NEXT: it eq +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmp.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -811,156 +763,108 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[1] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[1] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov s18, r3 +; CHECK-MVE-NEXT: vcmp.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q1[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[0] -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r2, #1 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s16, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmp.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vmov s22, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it mi +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: it gt +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s2, s6 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r1 -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vmov s22, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s3, s7 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r1 -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vcmp.f16 s0, s4 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vmov s22, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmp.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi.w r12, #1 -; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -985,140 +889,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: it gt +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -1141,140 +997,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: it ge +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -1297,140 +1105,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: it mi +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -1453,140 +1213,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: it ls +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -1609,156 +1321,108 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[1] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[1] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov s18, r3 +; CHECK-MVE-NEXT: vcmp.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q1[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[0] -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r2, #1 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s16, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmp.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vmov s22, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it eq +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: it vs +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s2, s6 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r1 -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vmov s22, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s3, s7 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r1 -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vcmp.f16 s0, s4 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vmov s22, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmp.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq.w r12, #1 -; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -1782,140 +1446,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmp.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmp.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmp.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmp.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s0, s4 +; CHECK-MVE-NEXT: it ne +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmp.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -1938,140 +1554,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: it hi +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -2095,140 +1663,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: it pl +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -2252,140 +1772,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: it lt +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -2409,140 +1881,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: it le +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -2566,140 +1990,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: it vc +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 @@ -2724,140 +2100,92 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11} ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11} -; CHECK-MVE-NEXT: vmov.u16 r1, q1[0] -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] +; CHECK-MVE-NEXT: vmovx.f16 s16, s4 +; CHECK-MVE-NEXT: vmovx.f16 s18, s0 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q3[0] +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 -; CHECK-MVE-NEXT: vmov s16, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vmovx.f16 s16, s8 +; CHECK-MVE-NEXT: vmovx.f16 s18, s12 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s18, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.u16 r0, q3[1] -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[2] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q4[0], r1 -; CHECK-MVE-NEXT: vmov.16 q4[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[2] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[2] +; CHECK-MVE-NEXT: vseleq.f16 s16, s12, s8 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s5 +; CHECK-MVE-NEXT: vmov r2, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 +; CHECK-MVE-NEXT: vmov.16 q4[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q4[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[3] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[4] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] -; CHECK-MVE-NEXT: vmov.16 q4[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[4] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q4[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[5] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] -; CHECK-MVE-NEXT: vmov.16 q4[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[5] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s22, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 +; CHECK-MVE-NEXT: vmov.16 q4[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[6] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] -; CHECK-MVE-NEXT: vmov.16 q4[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[6] -; CHECK-MVE-NEXT: vmov s20, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s22, r0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 +; CHECK-MVE-NEXT: vmov r1, s20 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov.16 q4[5], r1 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: it vs +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: vmov r0, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s20 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q4[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0 ; CHECK-MVE-NEXT: vmov q0, q4 Index: llvm/test/CodeGen/Thumb2/mve-vcmpfr.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-vcmpfr.ll +++ llvm/test/CodeGen/Thumb2/mve-vcmpfr.ll @@ -705,125 +705,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmp.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmp.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmp.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmp.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmp.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmp.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmp.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmp.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -851,141 +815,105 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmp.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[0] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[0] ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] +; CHECK-MVE-NEXT: vcmp.f16 s0, s16 +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[1] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmp.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r2, #1 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r1 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmp.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmp.f16 s18, s16 ; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vcmp.f16 s2, s16 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[3], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmp.f16 s18, s16 ; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vcmp.f16 s3, s16 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[5], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: vcmp.f16 s0, s16 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmp.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi.w r12, #1 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1016,125 +944,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1162,125 +1054,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1308,125 +1164,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1455,125 +1275,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1602,141 +1386,105 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmp.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[0] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[0] ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] +; CHECK-MVE-NEXT: vcmp.f16 s0, s16 +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[1] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmp.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r2, #1 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r1 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmp.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s18, r1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmp.f16 s18, s16 ; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vcmp.f16 s2, s16 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[3], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmp.f16 s18, s16 ; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vcmp.f16 s3, s16 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[5], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: vcmp.f16 s0, s16 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmp.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq.w r12, #1 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1766,125 +1514,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmp.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmp.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmp.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmp.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmp.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmp.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmp.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmp.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1912,125 +1624,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -2060,125 +1736,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -2208,125 +1848,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -2355,125 +1959,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -2502,125 +2070,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -2651,125 +2183,89 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9, d10} ; CHECK-MVE-NEXT: vpush {d8, d9, d10} -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] ; CHECK-MVE-NEXT: vldr.16 s16, [r0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 +; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 +; CHECK-MVE-NEXT: vmov r0, s12 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov s14, r1 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 +; CHECK-MVE-NEXT: vmov r2, s12 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmov.16 q3[1], r0 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: mov.w r12, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 ; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s16 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vmov r0, s18 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 Index: llvm/test/CodeGen/Thumb2/mve-vcmpfz.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-vcmpfz.ll +++ llvm/test/CodeGen/Thumb2/mve-vcmpfz.ll @@ -659,124 +659,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmp.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmp.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmp.f16 s12, #0 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmp.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it eq +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmp.f16 s0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmp.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -799,140 +763,104 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[0] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmp.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[0] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 +; CHECK-MVE-NEXT: vcmp.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[1] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmp.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r2, #1 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmp.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vcmp.f16 s2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 ; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vcmp.f16 s3, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] +; CHECK-MVE-NEXT: movmi r1, #1 ; CHECK-MVE-NEXT: vcmp.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: it gt +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi.w r12, #1 +; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movgt r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -958,124 +886,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmpe.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it gt +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movgt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1098,124 +990,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmpe.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it ge +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movge r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1238,124 +1094,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmpe.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it mi +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1378,124 +1198,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmpe.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it ls +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movls r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1518,140 +1302,104 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[0] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[0] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmp.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[0] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov s14, r3 +; CHECK-MVE-NEXT: vcmp.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[1] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmp.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r2, #1 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s12, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.16 q3[1], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmp.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vcmp.f16 s2, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 ; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vcmp.f16 s3, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] +; CHECK-MVE-NEXT: moveq r1, #1 ; CHECK-MVE-NEXT: vcmp.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: it vs +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq.w r12, #1 +; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: movvs r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1676,124 +1424,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmp.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmp.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmp.f16 s12, #0 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: vmov.16 q3[1], r1 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmp.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmp.f16 s0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it ne +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmp.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1816,124 +1528,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmpe.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it hi +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movhi r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -1957,124 +1633,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmpe.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it pl +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movpl r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -2098,124 +1738,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmpe.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it lt +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movlt r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -2239,124 +1843,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, #0 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmpe.f16 s1, #0 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it le +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movle r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -2380,124 +1948,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s12 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s1 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it vc +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s2 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s3 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movvc r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 @@ -2523,124 +2055,88 @@ ; CHECK-MVE: @ %bb.0: @ %entry ; CHECK-MVE-NEXT: .vsave {d8, d9} ; CHECK-MVE-NEXT: vpush {d8, d9} -; CHECK-MVE-NEXT: vmov.u16 r1, q0[1] -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: vmov s12, r1 +; CHECK-MVE-NEXT: vmovx.f16 s12, s0 ; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vcmpe.f16 s12, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[1] +; CHECK-MVE-NEXT: vmovx.f16 s12, s4 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 -; CHECK-MVE-NEXT: vmov s12, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s0 +; CHECK-MVE-NEXT: vmovx.f16 s14, s8 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[0] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[0] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[0] -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: movs r2, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s12, s12 -; CHECK-MVE-NEXT: vmov s12, r3 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: mov.w r12, #0 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vmov r2, s12 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s1 +; CHECK-MVE-NEXT: vmov.16 q3[0], r2 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q3[1], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 +; CHECK-MVE-NEXT: it vs +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s1 ; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] +; CHECK-MVE-NEXT: vmov.16 q3[2], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: mov.w r0, #0 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s2 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov.16 q3[2], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov.16 q3[3], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s10, s6 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vmovx.f16 s16, s2 ; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r1 +; CHECK-MVE-NEXT: vmov.16 q3[4], r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s3 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov.16 q3[4], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s16, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r1, s16 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s0 +; CHECK-MVE-NEXT: vmov.16 q3[5], r1 +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov.16 q3[5], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s16, r0 +; CHECK-MVE-NEXT: movvs r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; CHECK-MVE-NEXT: vmovx.f16 s2, s11 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov r0, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q1[7] -; CHECK-MVE-NEXT: vcmpe.f16 s0, s0 -; CHECK-MVE-NEXT: vmov s0, r0 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs.w r12, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp.w r12, #0 +; CHECK-MVE-NEXT: vmov r1, s16 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0 +; CHECK-MVE-NEXT: vmov.16 q3[6], r1 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q3[7], r0 ; CHECK-MVE-NEXT: vmov q0, q3 Index: llvm/test/CodeGen/Thumb2/mve-vcvt.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-vcvt.ll +++ llvm/test/CodeGen/Thumb2/mve-vcvt.ll @@ -213,29 +213,17 @@ define arm_aapcs_vfpcc <8 x i16> @foo_int16_half(<8 x half> %src) { ; CHECK-MVE-LABEL: foo_int16_half: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s6, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s10, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[1] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s5, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vmovx.f16 s4, s3 +; CHECK-MVE-NEXT: vmovx.f16 s6, s2 +; CHECK-MVE-NEXT: vmovx.f16 s10, s1 +; CHECK-MVE-NEXT: vmovx.f16 s14, s0 ; CHECK-MVE-NEXT: vcvt.s32.f16 s4, s4 ; CHECK-MVE-NEXT: vcvt.s32.f16 s6, s6 -; CHECK-MVE-NEXT: vcvt.s32.f16 s8, s8 +; CHECK-MVE-NEXT: vcvt.s32.f16 s8, s3 ; CHECK-MVE-NEXT: vcvt.s32.f16 s10, s10 -; CHECK-MVE-NEXT: vcvt.s32.f16 s12, s12 +; CHECK-MVE-NEXT: vcvt.s32.f16 s12, s2 ; CHECK-MVE-NEXT: vcvt.s32.f16 s14, s14 -; CHECK-MVE-NEXT: vcvt.s32.f16 s5, s5 +; CHECK-MVE-NEXT: vcvt.s32.f16 s5, s1 ; CHECK-MVE-NEXT: vcvt.s32.f16 s0, s0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q0[0], r0 @@ -267,29 +255,17 @@ define arm_aapcs_vfpcc <8 x i16> @foo_uint16_half(<8 x half> %src) { ; CHECK-MVE-LABEL: foo_uint16_half: ; CHECK-MVE: @ %bb.0: @ %entry -; CHECK-MVE-NEXT: vmov.u16 r0, q0[7] -; CHECK-MVE-NEXT: vmov s4, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[5] -; CHECK-MVE-NEXT: vmov s6, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[6] -; CHECK-MVE-NEXT: vmov s8, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[3] -; CHECK-MVE-NEXT: vmov s10, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[4] -; CHECK-MVE-NEXT: vmov s12, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[1] -; CHECK-MVE-NEXT: vmov s14, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov s5, r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[0] -; CHECK-MVE-NEXT: vmov s0, r0 +; CHECK-MVE-NEXT: vmovx.f16 s4, s3 +; CHECK-MVE-NEXT: vmovx.f16 s6, s2 +; CHECK-MVE-NEXT: vmovx.f16 s10, s1 +; CHECK-MVE-NEXT: vmovx.f16 s14, s0 ; CHECK-MVE-NEXT: vcvt.s32.f16 s4, s4 ; CHECK-MVE-NEXT: vcvt.s32.f16 s6, s6 -; CHECK-MVE-NEXT: vcvt.s32.f16 s8, s8 +; CHECK-MVE-NEXT: vcvt.s32.f16 s8, s3 ; CHECK-MVE-NEXT: vcvt.s32.f16 s10, s10 -; CHECK-MVE-NEXT: vcvt.s32.f16 s12, s12 +; CHECK-MVE-NEXT: vcvt.s32.f16 s12, s2 ; CHECK-MVE-NEXT: vcvt.s32.f16 s14, s14 -; CHECK-MVE-NEXT: vcvt.s32.f16 s5, s5 +; CHECK-MVE-NEXT: vcvt.s32.f16 s5, s1 ; CHECK-MVE-NEXT: vcvt.s32.f16 s0, s0 ; CHECK-MVE-NEXT: vmov r0, s0 ; CHECK-MVE-NEXT: vmov.16 q0[0], r0 Index: llvm/test/CodeGen/Thumb2/mve-vmaxv.ll =================================================================== --- llvm/test/CodeGen/Thumb2/mve-vmaxv.ll +++ llvm/test/CodeGen/Thumb2/mve-vmaxv.ll @@ -1,3 +1,4 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+mve.fp %s -o - | FileCheck %s declare i8 @llvm.experimental.vector.reduce.smax.v16i8(<16 x i8>)