summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Thumb2/mve-vcmpfz.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/Thumb2/mve-vcmpfz.ll')
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-vcmpfz.ll1532
1 files changed, 514 insertions, 1018 deletions
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
OpenPOWER on IntegriCloud