diff --git a/lib/Target/ARM/ARMInstrMVE.td b/lib/Target/ARM/ARMInstrMVE.td index bb6b5679f5c..340a762c43b 100644 --- a/lib/Target/ARM/ARMInstrMVE.td +++ b/lib/Target/ARM/ARMInstrMVE.td @@ -1346,8 +1346,12 @@ let Predicates = [HasMVEInt] in { 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)>; diff --git a/test/CodeGen/Thumb2/mve-div-expand.ll b/test/CodeGen/Thumb2/mve-div-expand.ll index 794b340ad72..fbadfcdfc13 100644 --- a/test/CodeGen/Thumb2/mve-div-expand.ll +++ b/test/CodeGen/Thumb2/mve-div-expand.ll @@ -932,60 +932,36 @@ entry: 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: 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.u16 r0, q1[5] -; CHECK-NEXT: vmov s12, r0 -; CHECK-NEXT: vmov.u16 r0, q0[5] -; CHECK-NEXT: vmov s14, r0 -; CHECK-NEXT: vdiv.f16 s12, s14, s12 ; 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 @@ define arm_aapcs_vfpcc <8 x half> @frem_f16(<8 x half> %in1, <8 x half> %in2) { ; 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 @@ define arm_aapcs_vfpcc <8 x half> @frem_f16(<8 x half> %in1, <8 x half> %in2) { ; 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 diff --git a/test/CodeGen/Thumb2/mve-fmas.ll b/test/CodeGen/Thumb2/mve-fmas.ll index 52df51675ea..5b53bcf149a 100644 --- a/test/CodeGen/Thumb2/mve-fmas.ll +++ b/test/CodeGen/Thumb2/mve-fmas.ll @@ -19,76 +19,43 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v1(<8 x half> %src1, <8 x half> %src2, ; 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: vmla.f16 s13, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[1] -; 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[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 r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; 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.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 r0, s20 -; 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: 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 r1, s0 +; CHECK-MVE-NEXT: vmla.f16 s16, s5, s9 +; CHECK-MVE-NEXT: vmov r0, s13 +; 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: vmla.f16 s20, s18, s16 +; CHECK-MVE-NEXT: vmov.f32 s16, s2 +; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmla.f16 s16, s6, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r0 +; 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: vmla.f16 s20, s18, s16 +; 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 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 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v2(<8 x half> %src1, <8 x half> %src2, ; 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: vmla.f16 s13, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[1] -; 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[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 r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; 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.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 r0, s20 -; 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: 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 r1, s0 +; CHECK-MVE-NEXT: vmla.f16 s16, s5, s9 +; CHECK-MVE-NEXT: vmov r0, s13 +; 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: vmla.f16 s20, s18, s16 +; CHECK-MVE-NEXT: vmov.f32 s16, s2 +; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmla.f16 s16, s6, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r0 +; 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: vmla.f16 s20, s18, s16 +; 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 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 @@ define arm_aapcs_vfpcc <8 x half> @vfms16(<8 x half> %src1, <8 x half> %src2, <8 ; 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: vmls.f16 s13, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[1] -; 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[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 r0, s20 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; 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.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 r0, s20 -; 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: 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 r1, s0 +; CHECK-MVE-NEXT: vmls.f16 s16, s5, s9 +; CHECK-MVE-NEXT: vmov r0, s13 +; 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: vmls.f16 s20, s18, s16 +; CHECK-MVE-NEXT: vmov.f32 s16, s2 +; CHECK-MVE-NEXT: vmov r0, s20 +; CHECK-MVE-NEXT: vmls.f16 s16, s6, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], r0 +; 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: vmls.f16 s20, s18, s16 +; 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 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 diff --git a/test/CodeGen/Thumb2/mve-fmath.ll b/test/CodeGen/Thumb2/mve-fmath.ll index 31956979dd9..dc60f71d235 100644 --- a/test/CodeGen/Thumb2/mve-fmath.ll +++ b/test/CodeGen/Thumb2/mve-fmath.ll @@ -19,44 +19,32 @@ entry: 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 @@ define arm_aapcs_vfpcc <8 x half> @cos_float16_t(<8 x half> %src) { ; 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: 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: vcvtb.f32.f16 s0, s0 +; 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: 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: vmov r4, s0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; 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: 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 @@ define arm_aapcs_vfpcc <8 x half> @sin_float16_t(<8 x half> %src) { ; 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: 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: vcvtb.f32.f16 s0, s0 +; 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: 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: vmov r4, s0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; 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: 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 @@ define arm_aapcs_vfpcc <8 x half> @exp_float16_t(<8 x half> %src) { ; 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: 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: vcvtb.f32.f16 s0, s0 +; 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: 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: vmov r4, s0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; 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: 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 @@ define arm_aapcs_vfpcc <8 x half> @exp2_float16_t(<8 x half> %src) { ; 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: 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: vcvtb.f32.f16 s0, s0 +; 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: 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: vmov r4, s0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; 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: 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 @@ define arm_aapcs_vfpcc <8 x half> @log_float16_t(<8 x half> %src) { ; 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: 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: vcvtb.f32.f16 s0, s0 +; 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: 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: vmov r4, s0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; 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: 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 @@ define arm_aapcs_vfpcc <8 x half> @log2_float16_t(<8 x half> %src) { ; 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: 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: vcvtb.f32.f16 s0, s0 +; 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: 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: vmov r4, s0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; 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: 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 @@ define arm_aapcs_vfpcc <8 x half> @log10_float16_t(<8 x half> %src) { ; 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: 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: vcvtb.f32.f16 s0, s0 +; 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: 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: vmov r4, s0 +; CHECK-NEXT: vmovx.f16 s0, s16 ; CHECK-NEXT: vcvtb.f32.f16 s0, s0 +; 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: 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 @@ define arm_aapcs_vfpcc <8 x half> @pow_float16_t(<8 x half> %src1, <8 x half> %s ; 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 @@ define arm_aapcs_vfpcc <8 x half> @pow_float16_t(<8 x half> %src1, <8 x half> %s ; 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,68 +1311,52 @@ define arm_aapcs_vfpcc <8 x half> @copysign_float16_t(<8 x half> %src1, <8 x hal ; 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: ands r0, r0, #128 +; CHECK-NEXT: ldrb.w r0, [sp, #29] +; CHECK-NEXT: vabs.f16 s4, s0 ; CHECK-NEXT: vneg.f16 s6, s4 -; CHECK-NEXT: it ne -; CHECK-NEXT: movne r0, #1 -; CHECK-NEXT: cmp r0, #0 -; CHECK-NEXT: vseleq.f16 s4, s4, s6 -; CHECK-NEXT: vmov r0, s4 -; CHECK-NEXT: vmov s4, r1 -; CHECK-NEXT: ldrb.w r1, [sp, #29] -; CHECK-NEXT: vabs.f16 s4, s4 -; CHECK-NEXT: ands r1, r1, #128 -; CHECK-NEXT: vneg.f16 s6, s4 -; CHECK-NEXT: it ne -; CHECK-NEXT: movne r1, #1 -; CHECK-NEXT: cmp r1, #0 -; CHECK-NEXT: vseleq.f16 s4, s4, s6 -; 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: ldrb.w r0, [sp, #21] -; CHECK-NEXT: vabs.f16 s8, s8 +; CHECK-NEXT: vabs.f16 s8, s1 ; CHECK-NEXT: ands r0, r0, #128 ; CHECK-NEXT: vneg.f16 s10, s8 ; CHECK-NEXT: it ne ; CHECK-NEXT: movne r0, #1 ; CHECK-NEXT: cmp r0, #0 +; CHECK-NEXT: vseleq.f16 s4, s4, s6 +; CHECK-NEXT: ldrb.w r1, [sp, #25] +; CHECK-NEXT: vmov r0, s4 +; CHECK-NEXT: vmovx.f16 s4, s0 +; CHECK-NEXT: ands r1, r1, #128 +; CHECK-NEXT: vabs.f16 s4, s4 +; CHECK-NEXT: it ne +; CHECK-NEXT: movne r1, #1 +; CHECK-NEXT: vneg.f16 s6, s4 +; CHECK-NEXT: cmp r1, #0 +; CHECK-NEXT: vmovx.f16 s0, s3 +; CHECK-NEXT: vseleq.f16 s4, s4, s6 +; CHECK-NEXT: vabs.f16 s0, s0 +; CHECK-NEXT: vmov r1, s4 +; CHECK-NEXT: vmov.16 q1[0], r0 +; CHECK-NEXT: ldrb.w r0, [sp, #21] +; CHECK-NEXT: vmov.16 q1[1], r1 +; CHECK-NEXT: ands r0, r0, #128 +; CHECK-NEXT: it ne +; CHECK-NEXT: movne r0, #1 +; CHECK-NEXT: cmp r0, #0 ; 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: ands r0, r0, #128 @@ -1502,23 +1366,21 @@ define arm_aapcs_vfpcc <8 x half> @copysign_float16_t(<8 x half> %src1, <8 x hal ; CHECK-NEXT: cmp r0, #0 ; 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: ands r0, r0, #128 ; CHECK-NEXT: vneg.f16 s10, s8 +; CHECK-NEXT: ands r0, r0, #128 ; CHECK-NEXT: it ne ; CHECK-NEXT: movne r0, #1 ; CHECK-NEXT: cmp r0, #0 ; 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: ands r0, r0, #128 ; CHECK-NEXT: vneg.f16 s10, s8 ; CHECK-NEXT: it ne @@ -1526,25 +1388,19 @@ define arm_aapcs_vfpcc <8 x half> @copysign_float16_t(<8 x half> %src1, <8 x hal ; CHECK-NEXT: cmp r0, #0 ; 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: ands r0, r0, #128 ; CHECK-NEXT: vneg.f16 s10, s8 +; CHECK-NEXT: ands r0, r0, #128 ; CHECK-NEXT: it ne ; CHECK-NEXT: movne r0, #1 ; CHECK-NEXT: cmp r0, #0 ; 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: ands r0, r0, #128 -; CHECK-NEXT: vneg.f16 s2, s0 ; CHECK-NEXT: it ne ; CHECK-NEXT: movne r0, #1 ; CHECK-NEXT: cmp r0, #0 diff --git a/test/CodeGen/Thumb2/mve-fp-negabs.ll b/test/CodeGen/Thumb2/mve-fp-negabs.ll index d1fd4b26762..9b295d3117a 100644 --- a/test/CodeGen/Thumb2/mve-fp-negabs.ll +++ b/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 @@ entry: 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 diff --git a/test/CodeGen/Thumb2/mve-frint.ll b/test/CodeGen/Thumb2/mve-frint.ll index e1758d5ed3b..6d936a375dd 100644 --- a/test/CodeGen/Thumb2/mve-frint.ll +++ b/test/CodeGen/Thumb2/mve-frint.ll @@ -24,44 +24,32 @@ entry: 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 @@ entry: 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 @@ entry: 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 @@ entry: 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 @@ entry: 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 @@ entry: 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 diff --git a/test/CodeGen/Thumb2/mve-minmax.ll b/test/CodeGen/Thumb2/mve-minmax.ll index 0b6308f8800..3a79cdf4033 100644 --- a/test/CodeGen/Thumb2/mve-minmax.ll +++ b/test/CodeGen/Thumb2/mve-minmax.ll @@ -331,60 +331,36 @@ entry: 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: 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.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: vminnm.f16 s12, s14, s12 ; 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 diff --git a/test/CodeGen/Thumb2/mve-shuffle.ll b/test/CodeGen/Thumb2/mve-shuffle.ll index 90f09af135a..a01b9972691 100644 --- a/test/CodeGen/Thumb2/mve-shuffle.ll +++ b/test/CodeGen/Thumb2/mve-shuffle.ll @@ -348,21 +348,25 @@ entry: 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 @@ entry: 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 @@ entry: 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 @@ entry: 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: diff --git a/test/CodeGen/Thumb2/mve-simple-arith.ll b/test/CodeGen/Thumb2/mve-simple-arith.ll index ecad0c1c5df..92b6ae5337f 100644 --- a/test/CodeGen/Thumb2/mve-simple-arith.ll +++ b/test/CodeGen/Thumb2/mve-simple-arith.ll @@ -81,60 +81,36 @@ entry: 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: 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.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: vadd.f16 s12, s14, s12 ; 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 @@ entry: 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: 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.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: vsub.f16 s12, s14, s12 ; 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 @@ entry: 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: 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.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: vmul.f16 s12, s14, s12 ; 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 diff --git a/test/CodeGen/Thumb2/mve-vcmpf.ll b/test/CodeGen/Thumb2/mve-vcmpf.ll index 5d40ea62332..224c6f5fe46 100644 --- a/test/CodeGen/Thumb2/mve-vcmpf.ll +++ b/test/CodeGen/Thumb2/mve-vcmpf.ll @@ -827,164 +827,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_oeq_v8f16(<8 x half> %src, <8 x half> %s ; 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 s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmp.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmp.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmp.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmp.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmp.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmp.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -1007,180 +959,132 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_one_v8f16(<8 x half> %src, <8 x half> %s ; 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 s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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: 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 s16, r3 ; 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: movs r0, #0 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] +; 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.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; 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.u16 r2, q0[4] +; 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: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] +; 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.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; 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.u16 r2, q0[6] +; 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: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vcmp.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; 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: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -1206,164 +1110,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ogt_v8f16(<8 x half> %src, <8 x half> %s ; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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: 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -1386,164 +1242,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_oge_v8f16(<8 x half> %src, <8 x half> %s ; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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: 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -1566,164 +1374,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_olt_v8f16(<8 x half> %src, <8 x half> %s ; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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: 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -1746,164 +1506,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ole_v8f16(<8 x half> %src, <8 x half> %s ; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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: 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -1926,180 +1638,132 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ueq_v8f16(<8 x half> %src, <8 x half> %s ; 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 s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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: 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 s16, r3 ; 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: movs r0, #0 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] +; 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.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; 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.u16 r2, q0[4] +; 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: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: mov.w r0, #0 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] +; 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.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 ; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; 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.u16 r2, q0[6] +; 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: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vcmp.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; 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: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -2124,164 +1788,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_une_v8f16(<8 x half> %src, <8 x half> %s ; 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 s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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 s16, 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmp.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmp.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmp.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmp.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 +; 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: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: it ne +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: vcmp.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 ; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 +; CHECK-MVE-NEXT: cmp r0, #0 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmp.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 -; CHECK-MVE-NEXT: cmp r0, #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 @@ -2304,164 +1920,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ugt_v8f16(<8 x half> %src, <8 x half> %s ; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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: 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -2485,164 +2053,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_uge_v8f16(<8 x half> %src, <8 x half> %s ; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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: 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -2666,164 +2186,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ult_v8f16(<8 x half> %src, <8 x half> %s ; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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: 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -2847,164 +2319,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ule_v8f16(<8 x half> %src, <8 x half> %s ; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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: 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -3028,164 +2452,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ord_v8f16(<8 x half> %src, <8 x half> %s ; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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: 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 @@ -3211,164 +2587,116 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_uno_v8f16(<8 x half> %src, <8 x half> %s ; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s16, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q3[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, 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.u16 r2, q1[0] ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r3, q0[0] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: movs r0, #0 -; 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: 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.u16 r3, q3[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s18, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r2, q0[2] +; CHECK-MVE-NEXT: vmovx.f16 s22, s1 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[2] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vmov s22, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[3] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s13, s9 +; CHECK-MVE-NEXT: vmovx.f16 s4, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] +; CHECK-MVE-NEXT: vmovx.f16 s20, s5 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[3] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s9 +; CHECK-MVE-NEXT: vmovx.f16 s22, s13 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[4] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s2, s6 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[4] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[5] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vseleq.f16 s20, s14, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s2 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] +; CHECK-MVE-NEXT: vmovx.f16 s20, s6 +; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[5] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmovx.f16 s22, s14 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[6] ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s22, r2 +; CHECK-MVE-NEXT: vcmpe.f16 s3, s7 ; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov.16 q4[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[6] -; CHECK-MVE-NEXT: vmov s20, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s22, s20 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q3[6] +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s22, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[7] -; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20 -; CHECK-MVE-NEXT: vmov s2, r2 -; CHECK-MVE-NEXT: vmov r1, s20 -; CHECK-MVE-NEXT: vmov.16 q4[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q2[7] -; CHECK-MVE-NEXT: vcmpe.f16 s2, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vcmpe.f16 s0, s4 +; CHECK-MVE-NEXT: vseleq.f16 s20, s15, s11 +; CHECK-MVE-NEXT: movs r0, #0 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r1, q3[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s11 +; CHECK-MVE-NEXT: vmovx.f16 s2, s15 ; CHECK-MVE-NEXT: cmp r0, #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 diff --git a/test/CodeGen/Thumb2/mve-vcmpfr.ll b/test/CodeGen/Thumb2/mve-vcmpfr.ll index bd280dc2b47..8901ba49338 100644 --- a/test/CodeGen/Thumb2/mve-vcmpfr.ll +++ b/test/CodeGen/Thumb2/mve-vcmpfr.ll @@ -877,149 +877,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_oeq_v8f16(<8 x half> %src, half* %src2p, ; 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: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmp.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmp.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; 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, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmp.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: 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: cmp r0, #0 +; CHECK-MVE-NEXT: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -1047,165 +1011,129 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_one_v8f16(<8 x half> %src, half* %src2p, ; 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: it gt ; CHECK-MVE-NEXT: movgt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; 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 r3, q1[1] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: movs r1, #0 -; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmp.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 ; 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: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmp.f16 s2, s16 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; 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, r2 -; 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 s20, s10 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[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, r2 ; 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: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmp.f16 s3, s16 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; 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, r2 -; 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: vcmp.f16 s0, s16 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; 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 r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -1237,149 +1165,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ogt_v8f16(<8 x half> %src, half* %src2p, ; 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: vcmpe.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 gt ; CHECK-MVE-NEXT: movgt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: vmov.16 q3[5], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -1407,149 +1299,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_oge_v8f16(<8 x half> %src, half* %src2p, ; 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: vcmpe.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 ge ; CHECK-MVE-NEXT: movge r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: vmov.16 q3[5], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ge ; CHECK-MVE-NEXT: movge r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -1577,149 +1433,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_olt_v8f16(<8 x half> %src, half* %src2p, ; 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: vcmpe.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: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: 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: cmp r0, #0 +; CHECK-MVE-NEXT: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -1748,149 +1568,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ole_v8f16(<8 x half> %src, half* %src2p, ; 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: vcmpe.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 ls ; CHECK-MVE-NEXT: movls r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: vmov.16 q3[5], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ls ; CHECK-MVE-NEXT: movls r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -1919,165 +1703,129 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ueq_v8f16(<8 x half> %src, half* %src2p, ; 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: it vs ; CHECK-MVE-NEXT: movvs r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; 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 r3, q1[1] -; CHECK-MVE-NEXT: vmov r0, s12 -; CHECK-MVE-NEXT: movs r1, #0 -; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmp.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 ; 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: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmp.f16 s2, s16 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; 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, r2 -; 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 s20, s10 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[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, r2 ; 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: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmp.f16 s3, s16 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; 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, r2 -; 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: vcmp.f16 s0, s16 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; 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 r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -2108,149 +1856,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_une_v8f16(<8 x half> %src, half* %src2p, ; 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 ne ; CHECK-MVE-NEXT: movne r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[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 ne -; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmp.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] -; CHECK-MVE-NEXT: vmov r0, s18 -; 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, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov r0, s18 -; 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, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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 s12, s14, s12 +; 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: it ne +; CHECK-MVE-NEXT: movne r2, #1 +; CHECK-MVE-NEXT: cmp r2, #0 +; 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 +; CHECK-MVE-NEXT: vmov r0, s18 +; 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: 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmp.f16 s2, s16 +; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s20, s10 +; CHECK-MVE-NEXT: vmov.16 q3[3], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 +; 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: 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vcmp.f16 s3, s16 +; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vcmp.f16 s0, s16 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -2278,149 +1990,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ugt_v8f16(<8 x half> %src, half* %src2p, ; 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: vcmpe.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 hi ; CHECK-MVE-NEXT: movhi r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: vmov.16 q3[5], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it hi ; CHECK-MVE-NEXT: movhi r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -2450,149 +2126,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_uge_v8f16(<8 x half> %src, half* %src2p, ; 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: vcmpe.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 pl ; CHECK-MVE-NEXT: movpl r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: vmov.16 q3[5], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it pl ; CHECK-MVE-NEXT: movpl r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -2622,149 +2262,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ult_v8f16(<8 x half> %src, half* %src2p, ; 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: vcmpe.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 lt ; CHECK-MVE-NEXT: movlt r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: vmov.16 q3[5], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it lt ; CHECK-MVE-NEXT: movlt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -2793,149 +2397,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ule_v8f16(<8 x half> %src, half* %src2p, ; 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: vcmpe.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 le ; CHECK-MVE-NEXT: movle r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: vmov.16 q3[5], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it le ; CHECK-MVE-NEXT: movle r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -2964,149 +2532,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ord_v8f16(<8 x half> %src, half* %src2p, ; 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: vcmpe.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 vc ; CHECK-MVE-NEXT: movvc r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: vmov.16 q3[5], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vc ; CHECK-MVE-NEXT: movvc r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 @@ -3138,149 +2670,113 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_uno_v8f16(<8 x half> %src, half* %src2p, ; 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: vcmpe.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 vs ; CHECK-MVE-NEXT: movvs r0, #1 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov s12, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s14, r2 ; 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[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: vcmpe.f16 s12, s16 -; CHECK-MVE-NEXT: vmov s12, r3 ; 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: mov.w r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 +; CHECK-MVE-NEXT: vcmpe.f16 s1, s16 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r0 -; CHECK-MVE-NEXT: vmov.u16 r0, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s18, r0 -; CHECK-MVE-NEXT: movs r0, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] ; 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 s18, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; CHECK-MVE-NEXT: vseleq.f16 s18, s9, s5 +; CHECK-MVE-NEXT: vmovx.f16 s0, s3 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s1 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s5 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: vmov r0, s18 +; 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, r2 -; 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 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 +; CHECK-MVE-NEXT: vseleq.f16 s18, s10, s6 +; CHECK-MVE-NEXT: movs r1, #0 ; CHECK-MVE-NEXT: vmov r0, s18 +; CHECK-MVE-NEXT: vmovx.f16 s18, s2 +; CHECK-MVE-NEXT: vcmpe.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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; 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 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 +; CHECK-MVE-NEXT: vmovx.f16 s18, s6 ; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s16 ; CHECK-MVE-NEXT: vseleq.f16 s18, s20, s18 -; 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: vcmpe.f16 s18, s16 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r0, #1 -; CHECK-MVE-NEXT: cmp r0, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s20, r2 -; CHECK-MVE-NEXT: cmp r0, #0 -; 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: vmov.16 q3[5], 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: it ne +; CHECK-MVE-NEXT: movne r0, #1 +; CHECK-MVE-NEXT: cmp r0, #0 +; CHECK-MVE-NEXT: vseleq.f16 s18, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r0, q2[7] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s2, r0 +; 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 diff --git a/test/CodeGen/Thumb2/mve-vcmpfz.ll b/test/CodeGen/Thumb2/mve-vcmpfz.ll index ef4fc1b1914..a16492f6fda 100644 --- a/test/CodeGen/Thumb2/mve-vcmpfz.ll +++ b/test/CodeGen/Thumb2/mve-vcmpfz.ll @@ -831,148 +831,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_oeq_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmp.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmp.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it eq -; CHECK-MVE-NEXT: moveq r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmp.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -995,164 +959,128 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_one_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, r2 +; 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 r3, q1[1] -; 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 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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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 r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s9 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; 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: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r1, #1 +; CHECK-MVE-NEXT: vcmp.f16 s0, #0 ; CHECK-MVE-NEXT: it gt ; CHECK-MVE-NEXT: movgt r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vcmp.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it mi ; CHECK-MVE-NEXT: movmi r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; 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 @@ -1179,148 +1107,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ogt_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[0] -; 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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it gt -; CHECK-MVE-NEXT: movgt r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -1343,148 +1235,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_oge_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[0] -; 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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ge -; CHECK-MVE-NEXT: movge r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -1507,148 +1363,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_olt_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[0] -; 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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it mi -; CHECK-MVE-NEXT: movmi r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -1671,148 +1491,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ole_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[0] -; 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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ls -; CHECK-MVE-NEXT: movls r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -1835,164 +1619,128 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ueq_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, r2 +; 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 r3, q1[1] -; 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: it vs ; CHECK-MVE-NEXT: movvs r2, #1 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vmov.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: movs r0, #0 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmovx.f16 s18, s9 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s18, s10 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 ; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; 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: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: mov.w r1, #0 ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r1, #1 +; CHECK-MVE-NEXT: vcmp.f16 s0, #0 ; CHECK-MVE-NEXT: it vs ; CHECK-MVE-NEXT: movvs r1, #1 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] -; CHECK-MVE-NEXT: vcmp.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vseleq.f16 s16, s11, s7 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-MVE-NEXT: it eq ; CHECK-MVE-NEXT: moveq r0, #1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; 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 @@ -2018,148 +1766,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_une_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q0[1] -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 -; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[3] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[3], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[4] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[5] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmp.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmp.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; 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: vmrs APSR_nzcv, fpscr +; CHECK-MVE-NEXT: it ne +; CHECK-MVE-NEXT: movne r2, #1 +; CHECK-MVE-NEXT: cmp r2, #0 +; CHECK-MVE-NEXT: it ne +; CHECK-MVE-NEXT: movne r2, #1 +; CHECK-MVE-NEXT: cmp r2, #0 +; 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 ne +; CHECK-MVE-NEXT: movne r1, #1 +; CHECK-MVE-NEXT: cmp 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, 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.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 r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: it ne +; 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: 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 r1, #1 +; CHECK-MVE-NEXT: cmp 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, 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.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 r1, #1 +; CHECK-MVE-NEXT: cmp r1, #0 +; CHECK-MVE-NEXT: it ne +; 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: 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -2182,148 +1894,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ugt_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[0] -; 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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it hi -; CHECK-MVE-NEXT: movhi r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -2347,148 +2023,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_uge_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[0] -; 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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it pl -; CHECK-MVE-NEXT: movpl r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -2512,148 +2152,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ult_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[0] -; 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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it lt -; CHECK-MVE-NEXT: movlt r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -2677,148 +2281,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ule_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[0] -; 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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, #0 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, #0 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it le -; CHECK-MVE-NEXT: movle r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmpe.f16 s0, #0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -2842,148 +2410,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_ord_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[0] -; 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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s2 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s3 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it vc -; CHECK-MVE-NEXT: movvc r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmpe.f16 s0, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 @@ -3010,148 +2542,112 @@ define arm_aapcs_vfpcc <8 x half> @vcmp_uno_v8f16(<8 x half> %src, <8 x half> %a ; 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 r2, q1[0] -; 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 s12, r2 +; 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: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[0] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s14, 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.u16 r2, q0[1] +; CHECK-MVE-NEXT: mov.w r2, #0 ; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 -; CHECK-MVE-NEXT: vmov.u16 r3, q1[1] -; CHECK-MVE-NEXT: vmov r1, s12 -; CHECK-MVE-NEXT: movs r0, #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.u16 r3, q2[1] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r2, #1 -; CHECK-MVE-NEXT: vmov s14, r3 ; CHECK-MVE-NEXT: cmp r2, #0 -; CHECK-MVE-NEXT: vseleq.f16 s12, s14, s12 +; CHECK-MVE-NEXT: vmov r1, s12 +; CHECK-MVE-NEXT: vseleq.f16 s12, s8, s4 ; CHECK-MVE-NEXT: vmov r2, s12 -; CHECK-MVE-NEXT: vmov.16 q3[0], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[2] -; CHECK-MVE-NEXT: vmov.16 q3[1], r2 -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[2] +; 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: vmov s16, r2 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[2] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[3] +; 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.16 q3[2], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[3] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[3] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s5 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[4] +; CHECK-MVE-NEXT: vcmpe.f16 s2, s2 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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: vmov.u16 r1, q0[4] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r2 -; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[4] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[5] -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 +; 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.16 q3[4], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[5] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr +; 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: vmov.u16 r2, q2[5] ; CHECK-MVE-NEXT: it ne ; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 +; CHECK-MVE-NEXT: vmovx.f16 s16, s6 ; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q1[6] +; CHECK-MVE-NEXT: vcmpe.f16 s3, s3 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 -; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[5], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[6] -; CHECK-MVE-NEXT: vmov s16, r1 -; CHECK-MVE-NEXT: movs r1, #0 -; CHECK-MVE-NEXT: vcmpe.f16 s16, s16 -; CHECK-MVE-NEXT: vmov s16, r2 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr -; CHECK-MVE-NEXT: it vs -; CHECK-MVE-NEXT: movvs r1, #1 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vmov.u16 r2, q2[6] -; CHECK-MVE-NEXT: it ne -; CHECK-MVE-NEXT: movne r1, #1 -; CHECK-MVE-NEXT: vmov s18, r2 -; CHECK-MVE-NEXT: cmp r1, #0 -; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16 ; CHECK-MVE-NEXT: vmov r1, s16 -; CHECK-MVE-NEXT: vmov.16 q3[6], r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q0[7] -; CHECK-MVE-NEXT: vmov s0, r1 -; CHECK-MVE-NEXT: vmov.u16 r1, q1[7] ; CHECK-MVE-NEXT: vcmpe.f16 s0, s0 -; CHECK-MVE-NEXT: vmov s0, r1 +; CHECK-MVE-NEXT: vmov.16 q3[5], 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: 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: vmrs APSR_nzcv, fpscr ; 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: it ne ; CHECK-MVE-NEXT: movne r0, #1 -; CHECK-MVE-NEXT: vmov s2, r1 +; CHECK-MVE-NEXT: vmovx.f16 s0, s7 +; 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 diff --git a/test/CodeGen/Thumb2/mve-vcvt.ll b/test/CodeGen/Thumb2/mve-vcvt.ll index ff2c7927b09..a2d8b582ad4 100644 --- a/test/CodeGen/Thumb2/mve-vcvt.ll +++ b/test/CodeGen/Thumb2/mve-vcvt.ll @@ -213,29 +213,17 @@ entry: 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 @@ entry: 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 diff --git a/test/CodeGen/Thumb2/mve-vfma.ll b/test/CodeGen/Thumb2/mve-vfma.ll index 7b38876373d..8ed8b81201e 100644 --- a/test/CodeGen/Thumb2/mve-vfma.ll +++ b/test/CodeGen/Thumb2/mve-vfma.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 define arm_aapcs_vfpcc <4 x float> @fma_v4f32(<4 x float> %dst, <4 x float> %s1, <4 x float> %s2) {