summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Target/ARM/ARMInstrMVE.td8
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-div-expand.ll138
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-fmas.ll255
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-fmath.ll548
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-fp-negabs.ll68
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-frint.ll204
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-minmax.ll54
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-shuffle.ll53
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-simple-arith.ll162
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-vcmpf.ll1812
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-vcmpfr.ll1532
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-vcmpfz.ll1532
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-vcvt.ll52
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-vfma.ll1
14 files changed, 2121 insertions, 4298 deletions
diff --git a/llvm/lib/Target/ARM/ARMInstrMVE.td b/llvm/lib/Target/ARM/ARMInstrMVE.td
index bb6b5679f5c..340a762c43b 100644
--- a/llvm/lib/Target/ARM/ARMInstrMVE.td
+++ b/llvm/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/llvm/test/CodeGen/Thumb2/mve-div-expand.ll b/llvm/test/CodeGen/Thumb2/mve-div-expand.ll
index 794b340ad72..fbadfcdfc13 100644
--- a/llvm/test/CodeGen/Thumb2/mve-div-expand.ll
+++ b/llvm/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: vmov.16 q2[4], r0
-; CHECK-NEXT: vmov.u16 r0, q1[5]
-; CHECK-NEXT: vmov s12, r0
-; CHECK-NEXT: vmov.u16 r0, q0[5]
-; CHECK-NEXT: vmov s14, r0
+; CHECK-NEXT: vmovx.f16 s12, s6
+; CHECK-NEXT: vmovx.f16 s14, s2
; CHECK-NEXT: vdiv.f16 s12, s14, s12
+; CHECK-NEXT: vmov.16 q2[4], r0
; CHECK-NEXT: vmov r0, s12
+; CHECK-NEXT: vdiv.f16 s12, s3, s7
+; CHECK-NEXT: vmovx.f16 s4, s7
+; CHECK-NEXT: vmovx.f16 s0, s3
; CHECK-NEXT: vmov.16 q2[5], r0
-; CHECK-NEXT: vmov.u16 r0, q1[6]
-; CHECK-NEXT: vmov s12, r0
-; CHECK-NEXT: vmov.u16 r0, q0[6]
-; CHECK-NEXT: vmov s14, r0
-; CHECK-NEXT: vdiv.f16 s12, s14, s12
; CHECK-NEXT: vmov r0, s12
-; CHECK-NEXT: vmov.16 q2[6], r0
-; CHECK-NEXT: vmov.u16 r0, q1[7]
-; CHECK-NEXT: vmov s4, r0
-; CHECK-NEXT: vmov.u16 r0, q0[7]
-; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vdiv.f16 s0, s0, s4
+; CHECK-NEXT: vmov.16 q2[6], r0
; CHECK-NEXT: vmov r0, s0
; CHECK-NEXT: vmov.16 q2[7], r0
; CHECK-NEXT: vmov q0, q2
@@ -1005,25 +981,19 @@ 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/llvm/test/CodeGen/Thumb2/mve-fmas.ll b/llvm/test/CodeGen/Thumb2/mve-fmas.ll
index 52df51675ea..5b53bcf149a 100644
--- a/llvm/test/CodeGen/Thumb2/mve-fmas.ll
+++ b/llvm/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: vmovx.f16 s13, s0
+; CHECK-MVE-NEXT: vmla.f16 s0, s4, s8
+; CHECK-MVE-NEXT: vmovx.f16 s12, s8
+; CHECK-MVE-NEXT: vmovx.f16 s14, s4
+; CHECK-MVE-NEXT: vmov.f32 s16, s1
; CHECK-MVE-NEXT: vmla.f16 s13, s14, s12
-; CHECK-MVE-NEXT: vmov.u16 r3, q0[1]
+; CHECK-MVE-NEXT: vmov r1, s0
+; CHECK-MVE-NEXT: vmla.f16 s16, s5, s9
; CHECK-MVE-NEXT: vmov r0, s13
-; CHECK-MVE-NEXT: vmov s14, r2
-; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
-; CHECK-MVE-NEXT: vmov s12, r1
-; CHECK-MVE-NEXT: vmov s13, r3
-; CHECK-MVE-NEXT: vmla.f16 s13, s14, s12
-; CHECK-MVE-NEXT: vmov s20, r2
-; CHECK-MVE-NEXT: vmov r1, s13
-; CHECK-MVE-NEXT: vmov.16 q3[0], r0
-; CHECK-MVE-NEXT: vmov.16 q3[1], r1
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[2]
-; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov s18, r1
-; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
-; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
-; CHECK-MVE-NEXT: vmov r0, s20
+; CHECK-MVE-NEXT: vmov.16 q3[0], r1
+; CHECK-MVE-NEXT: vmov.16 q3[1], r0
+; CHECK-MVE-NEXT: vmov r0, s16
+; CHECK-MVE-NEXT: vmovx.f16 s16, s9
+; CHECK-MVE-NEXT: vmovx.f16 s18, s5
+; CHECK-MVE-NEXT: vmovx.f16 s20, s1
; CHECK-MVE-NEXT: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[3]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s20, r0
; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov s18, r1
+; CHECK-MVE-NEXT: vmov.f32 s16, s2
; CHECK-MVE-NEXT: vmov r0, s20
-; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
+; CHECK-MVE-NEXT: vmla.f16 s16, s6, s10
; CHECK-MVE-NEXT: vmov.16 q3[3], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[4]
-; CHECK-MVE-NEXT: vmov s20, r2
-; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov r0, s20
+; CHECK-MVE-NEXT: vmov r0, s16
+; CHECK-MVE-NEXT: vmovx.f16 s16, s10
+; CHECK-MVE-NEXT: vmovx.f16 s18, s6
+; CHECK-MVE-NEXT: vmovx.f16 s20, s2
; CHECK-MVE-NEXT: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[5]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s20, r0
; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov s18, r1
+; CHECK-MVE-NEXT: vmov.f32 s16, s3
; CHECK-MVE-NEXT: vmov r0, s20
+; CHECK-MVE-NEXT: vmla.f16 s16, s7, s11
+; CHECK-MVE-NEXT: vmovx.f16 s8, s11
+; CHECK-MVE-NEXT: vmovx.f16 s4, s7
+; CHECK-MVE-NEXT: vmovx.f16 s0, s3
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[6]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov s20, r2
-; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov r0, s20
-; CHECK-MVE-NEXT: vmov.16 q3[6], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[7]
-; CHECK-MVE-NEXT: vmov s8, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[7]
-; CHECK-MVE-NEXT: vmov s4, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[7]
-; CHECK-MVE-NEXT: vmov s0, r0
+; CHECK-MVE-NEXT: vmov r0, s16
; CHECK-MVE-NEXT: vmla.f16 s0, s4, s8
+; CHECK-MVE-NEXT: vmov.16 q3[6], r0
; CHECK-MVE-NEXT: vmov r0, s0
; CHECK-MVE-NEXT: vmov.16 q3[7], r0
; CHECK-MVE-NEXT: vmov q0, q3
@@ -116,76 +83,43 @@ 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: vmovx.f16 s13, s0
+; CHECK-MVE-NEXT: vmla.f16 s0, s4, s8
+; CHECK-MVE-NEXT: vmovx.f16 s12, s8
+; CHECK-MVE-NEXT: vmovx.f16 s14, s4
+; CHECK-MVE-NEXT: vmov.f32 s16, s1
; CHECK-MVE-NEXT: vmla.f16 s13, s14, s12
-; CHECK-MVE-NEXT: vmov.u16 r3, q0[1]
+; CHECK-MVE-NEXT: vmov r1, s0
+; CHECK-MVE-NEXT: vmla.f16 s16, s5, s9
; CHECK-MVE-NEXT: vmov r0, s13
-; CHECK-MVE-NEXT: vmov s14, r2
-; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
-; CHECK-MVE-NEXT: vmov s12, r1
-; CHECK-MVE-NEXT: vmov s13, r3
-; CHECK-MVE-NEXT: vmla.f16 s13, s14, s12
-; CHECK-MVE-NEXT: vmov s20, r2
-; CHECK-MVE-NEXT: vmov r1, s13
-; CHECK-MVE-NEXT: vmov.16 q3[0], r0
-; CHECK-MVE-NEXT: vmov.16 q3[1], r1
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[2]
-; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov s18, r1
-; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
-; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
-; CHECK-MVE-NEXT: vmov r0, s20
+; CHECK-MVE-NEXT: vmov.16 q3[0], r1
+; CHECK-MVE-NEXT: vmov.16 q3[1], r0
+; CHECK-MVE-NEXT: vmov r0, s16
+; CHECK-MVE-NEXT: vmovx.f16 s16, s9
+; CHECK-MVE-NEXT: vmovx.f16 s18, s5
+; CHECK-MVE-NEXT: vmovx.f16 s20, s1
; CHECK-MVE-NEXT: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[3]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s20, r0
; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov s18, r1
+; CHECK-MVE-NEXT: vmov.f32 s16, s2
; CHECK-MVE-NEXT: vmov r0, s20
-; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
+; CHECK-MVE-NEXT: vmla.f16 s16, s6, s10
; CHECK-MVE-NEXT: vmov.16 q3[3], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[4]
-; CHECK-MVE-NEXT: vmov s20, r2
-; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov r0, s20
+; CHECK-MVE-NEXT: vmov r0, s16
+; CHECK-MVE-NEXT: vmovx.f16 s16, s10
+; CHECK-MVE-NEXT: vmovx.f16 s18, s6
+; CHECK-MVE-NEXT: vmovx.f16 s20, s2
; CHECK-MVE-NEXT: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[5]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s20, r0
; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov s18, r1
+; CHECK-MVE-NEXT: vmov.f32 s16, s3
; CHECK-MVE-NEXT: vmov r0, s20
+; CHECK-MVE-NEXT: vmla.f16 s16, s7, s11
+; CHECK-MVE-NEXT: vmovx.f16 s8, s11
+; CHECK-MVE-NEXT: vmovx.f16 s4, s7
+; CHECK-MVE-NEXT: vmovx.f16 s0, s3
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[6]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov s20, r2
-; CHECK-MVE-NEXT: vmla.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov r0, s20
-; CHECK-MVE-NEXT: vmov.16 q3[6], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[7]
-; CHECK-MVE-NEXT: vmov s8, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[7]
-; CHECK-MVE-NEXT: vmov s4, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[7]
-; CHECK-MVE-NEXT: vmov s0, r0
+; CHECK-MVE-NEXT: vmov r0, s16
; CHECK-MVE-NEXT: vmla.f16 s0, s4, s8
+; CHECK-MVE-NEXT: vmov.16 q3[6], r0
; CHECK-MVE-NEXT: vmov r0, s0
; CHECK-MVE-NEXT: vmov.16 q3[7], r0
; CHECK-MVE-NEXT: vmov q0, q3
@@ -213,76 +147,43 @@ 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: vmovx.f16 s13, s0
+; CHECK-MVE-NEXT: vmls.f16 s0, s4, s8
+; CHECK-MVE-NEXT: vmovx.f16 s12, s8
+; CHECK-MVE-NEXT: vmovx.f16 s14, s4
+; CHECK-MVE-NEXT: vmov.f32 s16, s1
; CHECK-MVE-NEXT: vmls.f16 s13, s14, s12
-; CHECK-MVE-NEXT: vmov.u16 r3, q0[1]
+; CHECK-MVE-NEXT: vmov r1, s0
+; CHECK-MVE-NEXT: vmls.f16 s16, s5, s9
; CHECK-MVE-NEXT: vmov r0, s13
-; CHECK-MVE-NEXT: vmov s14, r2
-; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
-; CHECK-MVE-NEXT: vmov s12, r1
-; CHECK-MVE-NEXT: vmov s13, r3
-; CHECK-MVE-NEXT: vmls.f16 s13, s14, s12
-; CHECK-MVE-NEXT: vmov s20, r2
-; CHECK-MVE-NEXT: vmov r1, s13
-; CHECK-MVE-NEXT: vmov.16 q3[0], r0
-; CHECK-MVE-NEXT: vmov.16 q3[1], r1
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[2]
-; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov s18, r1
-; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
-; CHECK-MVE-NEXT: vmls.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
-; CHECK-MVE-NEXT: vmov r0, s20
+; CHECK-MVE-NEXT: vmov.16 q3[0], r1
+; CHECK-MVE-NEXT: vmov.16 q3[1], r0
+; CHECK-MVE-NEXT: vmov r0, s16
+; CHECK-MVE-NEXT: vmovx.f16 s16, s9
+; CHECK-MVE-NEXT: vmovx.f16 s18, s5
+; CHECK-MVE-NEXT: vmovx.f16 s20, s1
; CHECK-MVE-NEXT: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[3]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s20, r0
; CHECK-MVE-NEXT: vmls.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov s18, r1
+; CHECK-MVE-NEXT: vmov.f32 s16, s2
; CHECK-MVE-NEXT: vmov r0, s20
-; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
+; CHECK-MVE-NEXT: vmls.f16 s16, s6, s10
; CHECK-MVE-NEXT: vmov.16 q3[3], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[4]
-; CHECK-MVE-NEXT: vmov s20, r2
-; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmls.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov r0, s20
+; CHECK-MVE-NEXT: vmov r0, s16
+; CHECK-MVE-NEXT: vmovx.f16 s16, s10
+; CHECK-MVE-NEXT: vmovx.f16 s18, s6
+; CHECK-MVE-NEXT: vmovx.f16 s20, s2
; CHECK-MVE-NEXT: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[5]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s20, r0
; CHECK-MVE-NEXT: vmls.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov s18, r1
+; CHECK-MVE-NEXT: vmov.f32 s16, s3
; CHECK-MVE-NEXT: vmov r0, s20
+; CHECK-MVE-NEXT: vmls.f16 s16, s7, s11
+; CHECK-MVE-NEXT: vmovx.f16 s8, s11
+; CHECK-MVE-NEXT: vmovx.f16 s4, s7
+; CHECK-MVE-NEXT: vmovx.f16 s0, s3
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[6]
-; CHECK-MVE-NEXT: vmov s16, r0
-; CHECK-MVE-NEXT: vmov s20, r2
-; CHECK-MVE-NEXT: vmls.f16 s20, s18, s16
-; CHECK-MVE-NEXT: vmov r0, s20
-; CHECK-MVE-NEXT: vmov.16 q3[6], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q2[7]
-; CHECK-MVE-NEXT: vmov s8, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[7]
-; CHECK-MVE-NEXT: vmov s4, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[7]
-; CHECK-MVE-NEXT: vmov s0, r0
+; CHECK-MVE-NEXT: vmov r0, s16
; CHECK-MVE-NEXT: vmls.f16 s0, s4, s8
+; CHECK-MVE-NEXT: vmov.16 q3[6], r0
; CHECK-MVE-NEXT: vmov r0, s0
; CHECK-MVE-NEXT: vmov.16 q3[7], r0
; CHECK-MVE-NEXT: vmov q0, q3
diff --git a/llvm/test/CodeGen/Thumb2/mve-fmath.ll b/llvm/test/CodeGen/Thumb2/mve-fmath.ll
index 31956979dd9..dc60f71d235 100644
--- a/llvm/test/CodeGen/Thumb2/mve-fmath.ll
+++ b/llvm/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: vcvtb.f32.f16 s0, s16
+; CHECK-NEXT: vstr s0, [sp, #28]
+; CHECK-NEXT: ldr r0, [sp, #28]
; CHECK-NEXT: bl cosf
; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.u16 r0, q4[0]
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r4, s0
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s16
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
-; CHECK-NEXT: vstr s0, [sp, #28]
-; CHECK-NEXT: ldr r0, [sp, #28]
+; CHECK-NEXT: vstr s0, [sp, #24]
+; CHECK-NEXT: ldr r0, [sp, #24]
; CHECK-NEXT: bl cosf
; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmov.16 q5[0], r4
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[0], r0
-; CHECK-NEXT: vmov.u16 r0, q4[2]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.16 q5[1], r4
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s17
; CHECK-NEXT: vstr s0, [sp, #20]
+; CHECK-NEXT: vmov.16 q5[1], r0
; CHECK-NEXT: ldr r0, [sp, #20]
; CHECK-NEXT: bl cosf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[2], r0
-; CHECK-NEXT: vmov.u16 r0, q4[3]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s17
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[2], r0
; CHECK-NEXT: vstr s0, [sp, #16]
; CHECK-NEXT: ldr r0, [sp, #16]
; CHECK-NEXT: bl cosf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[3], r0
-; CHECK-NEXT: vmov.u16 r0, q4[4]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s18
; CHECK-NEXT: vstr s0, [sp, #12]
+; CHECK-NEXT: vmov.16 q5[3], r0
; CHECK-NEXT: ldr r0, [sp, #12]
; CHECK-NEXT: bl cosf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[4], r0
-; CHECK-NEXT: vmov.u16 r0, q4[5]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s18
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[4], r0
; CHECK-NEXT: vstr s0, [sp, #8]
; CHECK-NEXT: ldr r0, [sp, #8]
; CHECK-NEXT: bl cosf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[5], r0
-; CHECK-NEXT: vmov.u16 r0, q4[6]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s19
; CHECK-NEXT: vstr s0, [sp, #4]
+; CHECK-NEXT: vmov.16 q5[5], r0
; CHECK-NEXT: ldr r0, [sp, #4]
; CHECK-NEXT: bl cosf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[6], r0
-; CHECK-NEXT: vmov.u16 r0, q4[7]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s19
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[6], r0
; CHECK-NEXT: vstr s0, [sp]
; CHECK-NEXT: ldr r0, [sp]
; CHECK-NEXT: bl cosf
@@ -288,80 +264,68 @@ 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: vcvtb.f32.f16 s0, s16
+; CHECK-NEXT: vstr s0, [sp, #28]
+; CHECK-NEXT: ldr r0, [sp, #28]
; CHECK-NEXT: bl sinf
; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.u16 r0, q4[0]
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r4, s0
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s16
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
-; CHECK-NEXT: vstr s0, [sp, #28]
-; CHECK-NEXT: ldr r0, [sp, #28]
+; CHECK-NEXT: vstr s0, [sp, #24]
+; CHECK-NEXT: ldr r0, [sp, #24]
; CHECK-NEXT: bl sinf
; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmov.16 q5[0], r4
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[0], r0
-; CHECK-NEXT: vmov.u16 r0, q4[2]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.16 q5[1], r4
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s17
; CHECK-NEXT: vstr s0, [sp, #20]
+; CHECK-NEXT: vmov.16 q5[1], r0
; CHECK-NEXT: ldr r0, [sp, #20]
; CHECK-NEXT: bl sinf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[2], r0
-; CHECK-NEXT: vmov.u16 r0, q4[3]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s17
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[2], r0
; CHECK-NEXT: vstr s0, [sp, #16]
; CHECK-NEXT: ldr r0, [sp, #16]
; CHECK-NEXT: bl sinf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[3], r0
-; CHECK-NEXT: vmov.u16 r0, q4[4]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s18
; CHECK-NEXT: vstr s0, [sp, #12]
+; CHECK-NEXT: vmov.16 q5[3], r0
; CHECK-NEXT: ldr r0, [sp, #12]
; CHECK-NEXT: bl sinf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[4], r0
-; CHECK-NEXT: vmov.u16 r0, q4[5]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s18
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[4], r0
; CHECK-NEXT: vstr s0, [sp, #8]
; CHECK-NEXT: ldr r0, [sp, #8]
; CHECK-NEXT: bl sinf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[5], r0
-; CHECK-NEXT: vmov.u16 r0, q4[6]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s19
; CHECK-NEXT: vstr s0, [sp, #4]
+; CHECK-NEXT: vmov.16 q5[5], r0
; CHECK-NEXT: ldr r0, [sp, #4]
; CHECK-NEXT: bl sinf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[6], r0
-; CHECK-NEXT: vmov.u16 r0, q4[7]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s19
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[6], r0
; CHECK-NEXT: vstr s0, [sp]
; CHECK-NEXT: ldr r0, [sp]
; CHECK-NEXT: bl sinf
@@ -444,80 +408,68 @@ 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: vcvtb.f32.f16 s0, s16
+; CHECK-NEXT: vstr s0, [sp, #28]
+; CHECK-NEXT: ldr r0, [sp, #28]
; CHECK-NEXT: bl expf
; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.u16 r0, q4[0]
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r4, s0
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s16
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
-; CHECK-NEXT: vstr s0, [sp, #28]
-; CHECK-NEXT: ldr r0, [sp, #28]
+; CHECK-NEXT: vstr s0, [sp, #24]
+; CHECK-NEXT: ldr r0, [sp, #24]
; CHECK-NEXT: bl expf
; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmov.16 q5[0], r4
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[0], r0
-; CHECK-NEXT: vmov.u16 r0, q4[2]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.16 q5[1], r4
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s17
; CHECK-NEXT: vstr s0, [sp, #20]
+; CHECK-NEXT: vmov.16 q5[1], r0
; CHECK-NEXT: ldr r0, [sp, #20]
; CHECK-NEXT: bl expf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[2], r0
-; CHECK-NEXT: vmov.u16 r0, q4[3]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s17
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[2], r0
; CHECK-NEXT: vstr s0, [sp, #16]
; CHECK-NEXT: ldr r0, [sp, #16]
; CHECK-NEXT: bl expf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[3], r0
-; CHECK-NEXT: vmov.u16 r0, q4[4]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s18
; CHECK-NEXT: vstr s0, [sp, #12]
+; CHECK-NEXT: vmov.16 q5[3], r0
; CHECK-NEXT: ldr r0, [sp, #12]
; CHECK-NEXT: bl expf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[4], r0
-; CHECK-NEXT: vmov.u16 r0, q4[5]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s18
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[4], r0
; CHECK-NEXT: vstr s0, [sp, #8]
; CHECK-NEXT: ldr r0, [sp, #8]
; CHECK-NEXT: bl expf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[5], r0
-; CHECK-NEXT: vmov.u16 r0, q4[6]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s19
; CHECK-NEXT: vstr s0, [sp, #4]
+; CHECK-NEXT: vmov.16 q5[5], r0
; CHECK-NEXT: ldr r0, [sp, #4]
; CHECK-NEXT: bl expf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[6], r0
-; CHECK-NEXT: vmov.u16 r0, q4[7]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s19
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[6], r0
; CHECK-NEXT: vstr s0, [sp]
; CHECK-NEXT: ldr r0, [sp]
; CHECK-NEXT: bl expf
@@ -600,80 +552,68 @@ 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: vcvtb.f32.f16 s0, s16
+; CHECK-NEXT: vstr s0, [sp, #28]
+; CHECK-NEXT: ldr r0, [sp, #28]
; CHECK-NEXT: bl exp2f
; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.u16 r0, q4[0]
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r4, s0
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s16
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
-; CHECK-NEXT: vstr s0, [sp, #28]
-; CHECK-NEXT: ldr r0, [sp, #28]
+; CHECK-NEXT: vstr s0, [sp, #24]
+; CHECK-NEXT: ldr r0, [sp, #24]
; CHECK-NEXT: bl exp2f
; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmov.16 q5[0], r4
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[0], r0
-; CHECK-NEXT: vmov.u16 r0, q4[2]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.16 q5[1], r4
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s17
; CHECK-NEXT: vstr s0, [sp, #20]
+; CHECK-NEXT: vmov.16 q5[1], r0
; CHECK-NEXT: ldr r0, [sp, #20]
; CHECK-NEXT: bl exp2f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[2], r0
-; CHECK-NEXT: vmov.u16 r0, q4[3]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s17
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[2], r0
; CHECK-NEXT: vstr s0, [sp, #16]
; CHECK-NEXT: ldr r0, [sp, #16]
; CHECK-NEXT: bl exp2f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[3], r0
-; CHECK-NEXT: vmov.u16 r0, q4[4]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s18
; CHECK-NEXT: vstr s0, [sp, #12]
+; CHECK-NEXT: vmov.16 q5[3], r0
; CHECK-NEXT: ldr r0, [sp, #12]
; CHECK-NEXT: bl exp2f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[4], r0
-; CHECK-NEXT: vmov.u16 r0, q4[5]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s18
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[4], r0
; CHECK-NEXT: vstr s0, [sp, #8]
; CHECK-NEXT: ldr r0, [sp, #8]
; CHECK-NEXT: bl exp2f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[5], r0
-; CHECK-NEXT: vmov.u16 r0, q4[6]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s19
; CHECK-NEXT: vstr s0, [sp, #4]
+; CHECK-NEXT: vmov.16 q5[5], r0
; CHECK-NEXT: ldr r0, [sp, #4]
; CHECK-NEXT: bl exp2f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[6], r0
-; CHECK-NEXT: vmov.u16 r0, q4[7]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s19
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[6], r0
; CHECK-NEXT: vstr s0, [sp]
; CHECK-NEXT: ldr r0, [sp]
; CHECK-NEXT: bl exp2f
@@ -756,80 +696,68 @@ 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: vcvtb.f32.f16 s0, s16
+; CHECK-NEXT: vstr s0, [sp, #28]
+; CHECK-NEXT: ldr r0, [sp, #28]
; CHECK-NEXT: bl logf
; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.u16 r0, q4[0]
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r4, s0
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s16
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
-; CHECK-NEXT: vstr s0, [sp, #28]
-; CHECK-NEXT: ldr r0, [sp, #28]
+; CHECK-NEXT: vstr s0, [sp, #24]
+; CHECK-NEXT: ldr r0, [sp, #24]
; CHECK-NEXT: bl logf
; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmov.16 q5[0], r4
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[0], r0
-; CHECK-NEXT: vmov.u16 r0, q4[2]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.16 q5[1], r4
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s17
; CHECK-NEXT: vstr s0, [sp, #20]
+; CHECK-NEXT: vmov.16 q5[1], r0
; CHECK-NEXT: ldr r0, [sp, #20]
; CHECK-NEXT: bl logf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[2], r0
-; CHECK-NEXT: vmov.u16 r0, q4[3]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s17
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[2], r0
; CHECK-NEXT: vstr s0, [sp, #16]
; CHECK-NEXT: ldr r0, [sp, #16]
; CHECK-NEXT: bl logf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[3], r0
-; CHECK-NEXT: vmov.u16 r0, q4[4]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s18
; CHECK-NEXT: vstr s0, [sp, #12]
+; CHECK-NEXT: vmov.16 q5[3], r0
; CHECK-NEXT: ldr r0, [sp, #12]
; CHECK-NEXT: bl logf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[4], r0
-; CHECK-NEXT: vmov.u16 r0, q4[5]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s18
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[4], r0
; CHECK-NEXT: vstr s0, [sp, #8]
; CHECK-NEXT: ldr r0, [sp, #8]
; CHECK-NEXT: bl logf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[5], r0
-; CHECK-NEXT: vmov.u16 r0, q4[6]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s19
; CHECK-NEXT: vstr s0, [sp, #4]
+; CHECK-NEXT: vmov.16 q5[5], r0
; CHECK-NEXT: ldr r0, [sp, #4]
; CHECK-NEXT: bl logf
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[6], r0
-; CHECK-NEXT: vmov.u16 r0, q4[7]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s19
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[6], r0
; CHECK-NEXT: vstr s0, [sp]
; CHECK-NEXT: ldr r0, [sp]
; CHECK-NEXT: bl logf
@@ -912,80 +840,68 @@ 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: vcvtb.f32.f16 s0, s16
+; CHECK-NEXT: vstr s0, [sp, #28]
+; CHECK-NEXT: ldr r0, [sp, #28]
; CHECK-NEXT: bl log2f
; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.u16 r0, q4[0]
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r4, s0
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s16
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
-; CHECK-NEXT: vstr s0, [sp, #28]
-; CHECK-NEXT: ldr r0, [sp, #28]
+; CHECK-NEXT: vstr s0, [sp, #24]
+; CHECK-NEXT: ldr r0, [sp, #24]
; CHECK-NEXT: bl log2f
; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmov.16 q5[0], r4
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[0], r0
-; CHECK-NEXT: vmov.u16 r0, q4[2]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.16 q5[1], r4
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s17
; CHECK-NEXT: vstr s0, [sp, #20]
+; CHECK-NEXT: vmov.16 q5[1], r0
; CHECK-NEXT: ldr r0, [sp, #20]
; CHECK-NEXT: bl log2f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[2], r0
-; CHECK-NEXT: vmov.u16 r0, q4[3]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s17
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[2], r0
; CHECK-NEXT: vstr s0, [sp, #16]
; CHECK-NEXT: ldr r0, [sp, #16]
; CHECK-NEXT: bl log2f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[3], r0
-; CHECK-NEXT: vmov.u16 r0, q4[4]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s18
; CHECK-NEXT: vstr s0, [sp, #12]
+; CHECK-NEXT: vmov.16 q5[3], r0
; CHECK-NEXT: ldr r0, [sp, #12]
; CHECK-NEXT: bl log2f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[4], r0
-; CHECK-NEXT: vmov.u16 r0, q4[5]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s18
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[4], r0
; CHECK-NEXT: vstr s0, [sp, #8]
; CHECK-NEXT: ldr r0, [sp, #8]
; CHECK-NEXT: bl log2f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[5], r0
-; CHECK-NEXT: vmov.u16 r0, q4[6]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s19
; CHECK-NEXT: vstr s0, [sp, #4]
+; CHECK-NEXT: vmov.16 q5[5], r0
; CHECK-NEXT: ldr r0, [sp, #4]
; CHECK-NEXT: bl log2f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[6], r0
-; CHECK-NEXT: vmov.u16 r0, q4[7]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s19
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[6], r0
; CHECK-NEXT: vstr s0, [sp]
; CHECK-NEXT: ldr r0, [sp]
; CHECK-NEXT: bl log2f
@@ -1068,80 +984,68 @@ 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: vcvtb.f32.f16 s0, s16
+; CHECK-NEXT: vstr s0, [sp, #28]
+; CHECK-NEXT: ldr r0, [sp, #28]
; CHECK-NEXT: bl log10f
; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.u16 r0, q4[0]
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r4, s0
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s16
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
-; CHECK-NEXT: vstr s0, [sp, #28]
-; CHECK-NEXT: ldr r0, [sp, #28]
+; CHECK-NEXT: vstr s0, [sp, #24]
+; CHECK-NEXT: ldr r0, [sp, #24]
; CHECK-NEXT: bl log10f
; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmov.16 q5[0], r4
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[0], r0
-; CHECK-NEXT: vmov.u16 r0, q4[2]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vmov.16 q5[1], r4
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s17
; CHECK-NEXT: vstr s0, [sp, #20]
+; CHECK-NEXT: vmov.16 q5[1], r0
; CHECK-NEXT: ldr r0, [sp, #20]
; CHECK-NEXT: bl log10f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[2], r0
-; CHECK-NEXT: vmov.u16 r0, q4[3]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s17
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[2], r0
; CHECK-NEXT: vstr s0, [sp, #16]
; CHECK-NEXT: ldr r0, [sp, #16]
; CHECK-NEXT: bl log10f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[3], r0
-; CHECK-NEXT: vmov.u16 r0, q4[4]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s18
; CHECK-NEXT: vstr s0, [sp, #12]
+; CHECK-NEXT: vmov.16 q5[3], r0
; CHECK-NEXT: ldr r0, [sp, #12]
; CHECK-NEXT: bl log10f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[4], r0
-; CHECK-NEXT: vmov.u16 r0, q4[5]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s18
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[4], r0
; CHECK-NEXT: vstr s0, [sp, #8]
; CHECK-NEXT: ldr r0, [sp, #8]
; CHECK-NEXT: bl log10f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[5], r0
-; CHECK-NEXT: vmov.u16 r0, q4[6]
-; CHECK-NEXT: vmov s0, r0
-; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vcvtb.f32.f16 s0, s19
; CHECK-NEXT: vstr s0, [sp, #4]
+; CHECK-NEXT: vmov.16 q5[5], r0
; CHECK-NEXT: ldr r0, [sp, #4]
; CHECK-NEXT: bl log10f
; CHECK-NEXT: vmov s0, r0
; CHECK-NEXT: vcvtb.f16.f32 s0, s0
; CHECK-NEXT: vmov r0, s0
-; CHECK-NEXT: vmov.16 q5[6], r0
-; CHECK-NEXT: vmov.u16 r0, q4[7]
-; CHECK-NEXT: vmov s0, r0
+; CHECK-NEXT: vmovx.f16 s0, s19
; CHECK-NEXT: vcvtb.f32.f16 s0, s0
+; CHECK-NEXT: vmov.16 q5[6], r0
; CHECK-NEXT: vstr s0, [sp]
; CHECK-NEXT: ldr r0, [sp]
; CHECK-NEXT: bl log10f
@@ -1235,25 +1139,19 @@ 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: 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: vmov s4, r1
-; CHECK-NEXT: ldrb.w r1, [sp, #29]
-; CHECK-NEXT: vabs.f16 s4, s4
+; CHECK-NEXT: vmovx.f16 s4, s0
; CHECK-NEXT: ands r1, r1, #128
-; CHECK-NEXT: vneg.f16 s6, s4
+; 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], r1
-; CHECK-NEXT: vmov.16 q1[1], r0
-; CHECK-NEXT: vmov.u16 r0, q0[2]
-; CHECK-NEXT: vmov s8, r0
+; CHECK-NEXT: vmov.16 q1[0], r0
; CHECK-NEXT: ldrb.w r0, [sp, #21]
-; CHECK-NEXT: vabs.f16 s8, s8
+; CHECK-NEXT: vmov.16 q1[1], r1
; CHECK-NEXT: 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 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/llvm/test/CodeGen/Thumb2/mve-fp-negabs.ll b/llvm/test/CodeGen/Thumb2/mve-fp-negabs.ll
index d1fd4b26762..9b295d3117a 100644
--- a/llvm/test/CodeGen/Thumb2/mve-fp-negabs.ll
+++ b/llvm/test/CodeGen/Thumb2/mve-fp-negabs.ll
@@ -5,44 +5,32 @@
define arm_aapcs_vfpcc <8 x half> @fneg_float16_t(<8 x half> %src) {
; CHECK-MVE-LABEL: fneg_float16_t:
; CHECK-MVE: @ %bb.0: @ %entry
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[0]
-; CHECK-MVE-NEXT: vmov.u16 r1, q0[1]
-; CHECK-MVE-NEXT: vmov s4, r0
+; CHECK-MVE-NEXT: vmovx.f16 s4, s0
+; CHECK-MVE-NEXT: vneg.f16 s8, s1
; CHECK-MVE-NEXT: vneg.f16 s4, s4
; CHECK-MVE-NEXT: vmov r0, s4
-; CHECK-MVE-NEXT: vmov s4, r1
-; CHECK-MVE-NEXT: vneg.f16 s4, s4
+; CHECK-MVE-NEXT: vneg.f16 s4, s0
; CHECK-MVE-NEXT: vmov r1, s4
-; CHECK-MVE-NEXT: vmov.16 q1[0], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[2]
-; CHECK-MVE-NEXT: vmov.16 q1[1], r1
-; CHECK-MVE-NEXT: vmov s8, r0
-; CHECK-MVE-NEXT: vneg.f16 s8, s8
+; CHECK-MVE-NEXT: vmovx.f16 s0, s3
+; CHECK-MVE-NEXT: vmov.16 q1[0], r1
+; CHECK-MVE-NEXT: vneg.f16 s0, s0
+; CHECK-MVE-NEXT: vmov.16 q1[1], r0
; CHECK-MVE-NEXT: vmov r0, s8
+; CHECK-MVE-NEXT: vmovx.f16 s8, s1
; CHECK-MVE-NEXT: vmov.16 q1[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s8, r0
; CHECK-MVE-NEXT: vneg.f16 s8, s8
; CHECK-MVE-NEXT: vmov r0, s8
+; CHECK-MVE-NEXT: vneg.f16 s8, s2
; CHECK-MVE-NEXT: vmov.16 q1[3], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[4]
-; CHECK-MVE-NEXT: vmov s8, r0
-; CHECK-MVE-NEXT: vneg.f16 s8, s8
; CHECK-MVE-NEXT: vmov r0, s8
+; CHECK-MVE-NEXT: vmovx.f16 s8, s2
; CHECK-MVE-NEXT: vmov.16 q1[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s8, r0
; CHECK-MVE-NEXT: vneg.f16 s8, s8
; CHECK-MVE-NEXT: vmov r0, s8
+; CHECK-MVE-NEXT: vneg.f16 s8, s3
; CHECK-MVE-NEXT: vmov.16 q1[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s8, r0
-; CHECK-MVE-NEXT: vneg.f16 s8, s8
; CHECK-MVE-NEXT: vmov r0, s8
; CHECK-MVE-NEXT: vmov.16 q1[6], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[7]
-; CHECK-MVE-NEXT: vmov s0, r0
-; CHECK-MVE-NEXT: vneg.f16 s0, s0
; CHECK-MVE-NEXT: vmov r0, s0
; CHECK-MVE-NEXT: vmov.16 q1[7], r0
; CHECK-MVE-NEXT: vmov q0, q1
@@ -112,44 +100,32 @@ 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/llvm/test/CodeGen/Thumb2/mve-frint.ll b/llvm/test/CodeGen/Thumb2/mve-frint.ll
index e1758d5ed3b..6d936a375dd 100644
--- a/llvm/test/CodeGen/Thumb2/mve-frint.ll
+++ b/llvm/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/llvm/test/CodeGen/Thumb2/mve-minmax.ll b/llvm/test/CodeGen/Thumb2/mve-minmax.ll
index 0b6308f8800..3a79cdf4033 100644
--- a/llvm/test/CodeGen/Thumb2/mve-minmax.ll
+++ b/llvm/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: vmov.16 q2[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s12, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[5]
-; CHECK-MVE-NEXT: vmov s14, r0
+; CHECK-MVE-NEXT: vmovx.f16 s12, s2
+; CHECK-MVE-NEXT: vmovx.f16 s14, s6
; CHECK-MVE-NEXT: vminnm.f16 s12, s14, s12
+; CHECK-MVE-NEXT: vmov.16 q2[4], r0
; CHECK-MVE-NEXT: vmov r0, s12
+; CHECK-MVE-NEXT: vmovx.f16 s0, s3
+; CHECK-MVE-NEXT: vmovx.f16 s2, s7
+; CHECK-MVE-NEXT: vminnm.f16 s12, s7, s3
; CHECK-MVE-NEXT: vmov.16 q2[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s12, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[6]
-; CHECK-MVE-NEXT: vmov s14, r0
-; CHECK-MVE-NEXT: vminnm.f16 s12, s14, s12
; CHECK-MVE-NEXT: vmov r0, s12
-; CHECK-MVE-NEXT: vmov.16 q2[6], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[7]
-; CHECK-MVE-NEXT: vmov s0, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[7]
-; CHECK-MVE-NEXT: vmov s2, r0
; CHECK-MVE-NEXT: vminnm.f16 s0, s2, s0
+; CHECK-MVE-NEXT: vmov.16 q2[6], r0
; CHECK-MVE-NEXT: vmov r0, s0
; CHECK-MVE-NEXT: vmov.16 q2[7], r0
; CHECK-MVE-NEXT: vmov q0, q2
diff --git a/llvm/test/CodeGen/Thumb2/mve-shuffle.ll b/llvm/test/CodeGen/Thumb2/mve-shuffle.ll
index 90f09af135a..a01b9972691 100644
--- a/llvm/test/CodeGen/Thumb2/mve-shuffle.ll
+++ b/llvm/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/llvm/test/CodeGen/Thumb2/mve-simple-arith.ll b/llvm/test/CodeGen/Thumb2/mve-simple-arith.ll
index ecad0c1c5df..92b6ae5337f 100644
--- a/llvm/test/CodeGen/Thumb2/mve-simple-arith.ll
+++ b/llvm/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: vmov.16 q2[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s12, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[5]
-; CHECK-MVE-NEXT: vmov s14, r0
+; CHECK-MVE-NEXT: vmovx.f16 s12, s2
+; CHECK-MVE-NEXT: vmovx.f16 s14, s6
; CHECK-MVE-NEXT: vadd.f16 s12, s14, s12
+; CHECK-MVE-NEXT: vmov.16 q2[4], r0
; CHECK-MVE-NEXT: vmov r0, s12
+; CHECK-MVE-NEXT: vmovx.f16 s0, s3
+; CHECK-MVE-NEXT: vmovx.f16 s2, s7
+; CHECK-MVE-NEXT: vadd.f16 s12, s7, s3
; CHECK-MVE-NEXT: vmov.16 q2[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s12, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[6]
-; CHECK-MVE-NEXT: vmov s14, r0
-; CHECK-MVE-NEXT: vadd.f16 s12, s14, s12
; CHECK-MVE-NEXT: vmov r0, s12
-; CHECK-MVE-NEXT: vmov.16 q2[6], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[7]
-; CHECK-MVE-NEXT: vmov s0, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[7]
-; CHECK-MVE-NEXT: vmov s2, r0
; CHECK-MVE-NEXT: vadd.f16 s0, s2, s0
+; CHECK-MVE-NEXT: vmov.16 q2[6], r0
; CHECK-MVE-NEXT: vmov r0, s0
; CHECK-MVE-NEXT: vmov.16 q2[7], r0
; CHECK-MVE-NEXT: vmov q0, q2
@@ -256,60 +232,36 @@ 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: vmov.16 q2[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s12, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[5]
-; CHECK-MVE-NEXT: vmov s14, r0
+; CHECK-MVE-NEXT: vmovx.f16 s12, s2
+; CHECK-MVE-NEXT: vmovx.f16 s14, s6
; CHECK-MVE-NEXT: vsub.f16 s12, s14, s12
+; CHECK-MVE-NEXT: vmov.16 q2[4], r0
; CHECK-MVE-NEXT: vmov r0, s12
+; CHECK-MVE-NEXT: vmovx.f16 s0, s3
+; CHECK-MVE-NEXT: vmovx.f16 s2, s7
+; CHECK-MVE-NEXT: vsub.f16 s12, s7, s3
; CHECK-MVE-NEXT: vmov.16 q2[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s12, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[6]
-; CHECK-MVE-NEXT: vmov s14, r0
-; CHECK-MVE-NEXT: vsub.f16 s12, s14, s12
; CHECK-MVE-NEXT: vmov r0, s12
-; CHECK-MVE-NEXT: vmov.16 q2[6], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[7]
-; CHECK-MVE-NEXT: vmov s0, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[7]
-; CHECK-MVE-NEXT: vmov s2, r0
; CHECK-MVE-NEXT: vsub.f16 s0, s2, s0
+; CHECK-MVE-NEXT: vmov.16 q2[6], r0
; CHECK-MVE-NEXT: vmov r0, s0
; CHECK-MVE-NEXT: vmov.16 q2[7], r0
; CHECK-MVE-NEXT: vmov q0, q2
@@ -414,60 +366,36 @@ 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: vmov.16 q2[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s12, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[5]
-; CHECK-MVE-NEXT: vmov s14, r0
+; CHECK-MVE-NEXT: vmovx.f16 s12, s2
+; CHECK-MVE-NEXT: vmovx.f16 s14, s6
; CHECK-MVE-NEXT: vmul.f16 s12, s14, s12
+; CHECK-MVE-NEXT: vmov.16 q2[4], r0
; CHECK-MVE-NEXT: vmov r0, s12
+; CHECK-MVE-NEXT: vmovx.f16 s0, s3
+; CHECK-MVE-NEXT: vmovx.f16 s2, s7
+; CHECK-MVE-NEXT: vmul.f16 s12, s7, s3
; CHECK-MVE-NEXT: vmov.16 q2[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s12, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[6]
-; CHECK-MVE-NEXT: vmov s14, r0
-; CHECK-MVE-NEXT: vmul.f16 s12, s14, s12
; CHECK-MVE-NEXT: vmov r0, s12
-; CHECK-MVE-NEXT: vmov.16 q2[6], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[7]
-; CHECK-MVE-NEXT: vmov s0, r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q1[7]
-; CHECK-MVE-NEXT: vmov s2, r0
; CHECK-MVE-NEXT: vmul.f16 s0, s2, s0
+; CHECK-MVE-NEXT: vmov.16 q2[6], r0
; CHECK-MVE-NEXT: vmov r0, s0
; CHECK-MVE-NEXT: vmov.16 q2[7], r0
; CHECK-MVE-NEXT: vmov q0, q2
diff --git a/llvm/test/CodeGen/Thumb2/mve-vcmpf.ll b/llvm/test/CodeGen/Thumb2/mve-vcmpf.ll
index 5d40ea62332..224c6f5fe46 100644
--- a/llvm/test/CodeGen/Thumb2/mve-vcmpf.ll
+++ b/llvm/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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmp.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it eq
; CHECK-MVE-NEXT: moveq 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmp.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it eq
; CHECK-MVE-NEXT: moveq 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: 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: vmov.16 q4[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: 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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it gt
; CHECK-MVE-NEXT: movgt 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it gt
; CHECK-MVE-NEXT: movgt 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: 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: vmov.16 q4[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: 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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it ge
; CHECK-MVE-NEXT: movge 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it ge
; CHECK-MVE-NEXT: movge 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: 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: vmov.16 q4[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: 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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it mi
; CHECK-MVE-NEXT: movmi 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it mi
; CHECK-MVE-NEXT: movmi 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: 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: vmov.16 q4[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: 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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it ls
; CHECK-MVE-NEXT: movls 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it ls
; CHECK-MVE-NEXT: movls 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: 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: vmov.16 q4[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: 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: 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 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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmp.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it ne
; CHECK-MVE-NEXT: movne 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: 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: vmov.16 q4[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: 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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmp.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it ne
; CHECK-MVE-NEXT: movne 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: 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: vmov.16 q4[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: 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 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: 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
@@ -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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it hi
; CHECK-MVE-NEXT: movhi 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it hi
; CHECK-MVE-NEXT: movhi 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: 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: vmov.16 q4[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: 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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it pl
; CHECK-MVE-NEXT: movpl 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it pl
; CHECK-MVE-NEXT: movpl 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: 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: vmov.16 q4[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: 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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it lt
; CHECK-MVE-NEXT: movlt 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it lt
; CHECK-MVE-NEXT: movlt 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: 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: vmov.16 q4[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: 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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it le
; CHECK-MVE-NEXT: movle 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it le
; CHECK-MVE-NEXT: movle 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: 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: vmov.16 q4[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: 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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it vc
; CHECK-MVE-NEXT: movvc 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it vc
; CHECK-MVE-NEXT: movvc 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: 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: vmov.16 q4[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: 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: 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: vmovx.f16 s20, s5
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[2], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it vs
; CHECK-MVE-NEXT: movvs 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: 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: vmov.16 q4[3], 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.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: 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: vmovx.f16 s20, s6
; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
-; CHECK-MVE-NEXT: vmov s20, r2
+; CHECK-MVE-NEXT: vmov.16 q4[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it vs
; CHECK-MVE-NEXT: movvs 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: 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: vmov.16 q4[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: 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/llvm/test/CodeGen/Thumb2/mve-vcmpfr.ll b/llvm/test/CodeGen/Thumb2/mve-vcmpfr.ll
index bd280dc2b47..8901ba49338 100644
--- a/llvm/test/CodeGen/Thumb2/mve-vcmpfr.ll
+++ b/llvm/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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmp.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it eq
; CHECK-MVE-NEXT: moveq r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmp.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it eq
; CHECK-MVE-NEXT: moveq r0, #1
; CHECK-MVE-NEXT: 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: 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: 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: 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: 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: 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: vmov.16 q3[3], r0
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it mi
; CHECK-MVE-NEXT: movmi r0, #1
+; CHECK-MVE-NEXT: vmovx.f16 s20, s10
; CHECK-MVE-NEXT: it gt
; CHECK-MVE-NEXT: movgt r0, #1
; CHECK-MVE-NEXT: 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: 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: vmov.16 q3[5], r0
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it mi
; CHECK-MVE-NEXT: movmi r0, #1
+; CHECK-MVE-NEXT: vcmp.f16 s0, s16
; CHECK-MVE-NEXT: it gt
; CHECK-MVE-NEXT: movgt r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it gt
; CHECK-MVE-NEXT: movgt r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it gt
; CHECK-MVE-NEXT: movgt r0, #1
; CHECK-MVE-NEXT: 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r0, s18
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s16
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, 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[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: 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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it ge
; CHECK-MVE-NEXT: movge r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it ge
; CHECK-MVE-NEXT: movge r0, #1
; CHECK-MVE-NEXT: 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r0, s18
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s16
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, 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[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: 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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it mi
; CHECK-MVE-NEXT: movmi r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it mi
; CHECK-MVE-NEXT: movmi r0, #1
; CHECK-MVE-NEXT: 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r0, s18
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s16
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, 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[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: 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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it ls
; CHECK-MVE-NEXT: movls r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it ls
; CHECK-MVE-NEXT: movls r0, #1
; CHECK-MVE-NEXT: 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r0, s18
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s16
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, 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[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: 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: 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: vmov.16 q3[3], r0
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it eq
; CHECK-MVE-NEXT: moveq r0, #1
+; CHECK-MVE-NEXT: vmovx.f16 s20, s10
; CHECK-MVE-NEXT: it vs
; CHECK-MVE-NEXT: movvs r0, #1
; CHECK-MVE-NEXT: 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: 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: vmov.16 q3[5], r0
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it eq
; CHECK-MVE-NEXT: moveq r0, #1
+; CHECK-MVE-NEXT: vcmp.f16 s0, s16
; CHECK-MVE-NEXT: it vs
; CHECK-MVE-NEXT: movvs r0, #1
; CHECK-MVE-NEXT: 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: 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 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: 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 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: vseleq.f16 s18, s9, s5
+; CHECK-MVE-NEXT: vmovx.f16 s0, s3
; 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: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmp.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; 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: 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 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: vseleq.f16 s18, s10, s6
+; CHECK-MVE-NEXT: movs r1, #0
; 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: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmp.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; 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: 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: 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: 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 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 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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it hi
; CHECK-MVE-NEXT: movhi r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it hi
; CHECK-MVE-NEXT: movhi r0, #1
; CHECK-MVE-NEXT: 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r0, s18
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s16
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, 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[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: 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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it pl
; CHECK-MVE-NEXT: movpl r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it pl
; CHECK-MVE-NEXT: movpl r0, #1
; CHECK-MVE-NEXT: 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r0, s18
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s16
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, 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[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: 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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it lt
; CHECK-MVE-NEXT: movlt r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it lt
; CHECK-MVE-NEXT: movlt r0, #1
; CHECK-MVE-NEXT: 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r0, s18
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s16
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, 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[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: 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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it le
; CHECK-MVE-NEXT: movle r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it le
; CHECK-MVE-NEXT: movle r0, #1
; CHECK-MVE-NEXT: 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r0, s18
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s16
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, 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[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: 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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it vc
; CHECK-MVE-NEXT: movvc r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it vc
; CHECK-MVE-NEXT: movvc r0, #1
; CHECK-MVE-NEXT: 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r0, s18
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s16
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, 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[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: 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: vmov.16 q3[2], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[3]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s1
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[2], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it vs
; CHECK-MVE-NEXT: movvs r0, #1
; CHECK-MVE-NEXT: 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: vmov.16 q3[4], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[5]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
+; CHECK-MVE-NEXT: vmovx.f16 s18, s2
; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r0
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r0, #0
; CHECK-MVE-NEXT: it vs
; CHECK-MVE-NEXT: movvs r0, #1
; CHECK-MVE-NEXT: 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r0, s18
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s16
; CHECK-MVE-NEXT: vmov.16 q3[5], r0
-; CHECK-MVE-NEXT: vmov.u16 r0, q0[6]
-; CHECK-MVE-NEXT: vmov s18, r0
-; CHECK-MVE-NEXT: movs r0, #0
-; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
-; CHECK-MVE-NEXT: vmov s18, 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[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: 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/llvm/test/CodeGen/Thumb2/mve-vcmpfz.ll b/llvm/test/CodeGen/Thumb2/mve-vcmpfz.ll
index ef4fc1b1914..a16492f6fda 100644
--- a/llvm/test/CodeGen/Thumb2/mve-vcmpfz.ll
+++ b/llvm/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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmp.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmp.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it eq
; CHECK-MVE-NEXT: moveq 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: 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: 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: 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: 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: 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: vmov.16 q3[3], 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, 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: 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: 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: 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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it gt
; CHECK-MVE-NEXT: movgt 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r1, s16
+; CHECK-MVE-NEXT: vcmpe.f16 s0, #0
; CHECK-MVE-NEXT: vmov.16 q3[5], r1
-; CHECK-MVE-NEXT: 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: 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[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: 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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it ge
; CHECK-MVE-NEXT: movge 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r1, s16
+; CHECK-MVE-NEXT: vcmpe.f16 s0, #0
; CHECK-MVE-NEXT: vmov.16 q3[5], r1
-; CHECK-MVE-NEXT: 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: 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[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: 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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it mi
; CHECK-MVE-NEXT: movmi 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r1, s16
+; CHECK-MVE-NEXT: vcmpe.f16 s0, #0
; CHECK-MVE-NEXT: vmov.16 q3[5], r1
-; CHECK-MVE-NEXT: 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: 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[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: 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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it ls
; CHECK-MVE-NEXT: movls 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r1, s16
+; CHECK-MVE-NEXT: vcmpe.f16 s0, #0
; CHECK-MVE-NEXT: vmov.16 q3[5], r1
-; CHECK-MVE-NEXT: 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: 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[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: 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: 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: vmov.16 q3[3], 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, 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: 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: 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: 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: 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 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 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 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: vseleq.f16 s16, s9, s5
+; CHECK-MVE-NEXT: vmovx.f16 s18, s9
; 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmp.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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: 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 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: vseleq.f16 s16, s10, s6
+; CHECK-MVE-NEXT: vmovx.f16 s0, s3
; 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmp.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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: 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: 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: 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 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: 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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it hi
; CHECK-MVE-NEXT: movhi 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r1, s16
+; CHECK-MVE-NEXT: vcmpe.f16 s0, #0
; CHECK-MVE-NEXT: vmov.16 q3[5], r1
-; CHECK-MVE-NEXT: 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: 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[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: 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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it pl
; CHECK-MVE-NEXT: movpl 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r1, s16
+; CHECK-MVE-NEXT: vcmpe.f16 s0, #0
; CHECK-MVE-NEXT: vmov.16 q3[5], r1
-; CHECK-MVE-NEXT: 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: 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[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: 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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it lt
; CHECK-MVE-NEXT: movlt 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r1, s16
+; CHECK-MVE-NEXT: vcmpe.f16 s0, #0
; CHECK-MVE-NEXT: vmov.16 q3[5], r1
-; CHECK-MVE-NEXT: 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: 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[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: 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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmpe.f16 s16, #0
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it le
; CHECK-MVE-NEXT: movle 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r1, s16
+; CHECK-MVE-NEXT: vcmpe.f16 s0, #0
; CHECK-MVE-NEXT: vmov.16 q3[5], r1
-; CHECK-MVE-NEXT: 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: 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[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: 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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmpe.f16 s16, s16
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmpe.f16 s16, s16
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it vc
; CHECK-MVE-NEXT: movvc 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r1, s16
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s0
; CHECK-MVE-NEXT: vmov.16 q3[5], r1
-; CHECK-MVE-NEXT: 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: 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[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: 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: 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: vmovx.f16 s16, s1
; CHECK-MVE-NEXT: vcmpe.f16 s16, s16
-; CHECK-MVE-NEXT: vmov s16, r2
+; 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 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: 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: vmovx.f16 s16, s2
; CHECK-MVE-NEXT: vcmpe.f16 s16, s16
-; CHECK-MVE-NEXT: vmov s16, r2
+; CHECK-MVE-NEXT: vmov.16 q3[4], r1
; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-MVE-NEXT: mov.w r1, #0
; CHECK-MVE-NEXT: it vs
; CHECK-MVE-NEXT: movvs 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: vmrs APSR_nzcv, fpscr
; CHECK-MVE-NEXT: vmov r1, s16
+; CHECK-MVE-NEXT: vcmpe.f16 s0, s0
; CHECK-MVE-NEXT: vmov.16 q3[5], r1
-; CHECK-MVE-NEXT: 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: 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[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: 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/llvm/test/CodeGen/Thumb2/mve-vcvt.ll b/llvm/test/CodeGen/Thumb2/mve-vcvt.ll
index ff2c7927b09..a2d8b582ad4 100644
--- a/llvm/test/CodeGen/Thumb2/mve-vcvt.ll
+++ b/llvm/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/llvm/test/CodeGen/Thumb2/mve-vfma.ll b/llvm/test/CodeGen/Thumb2/mve-vfma.ll
index 7b38876373d..8ed8b81201e 100644
--- a/llvm/test/CodeGen/Thumb2/mve-vfma.ll
+++ b/llvm/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) {
OpenPOWER on IntegriCloud