diff --git a/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp b/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp index 316b5bbc6f4fd..687407049d4b2 100644 --- a/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp +++ b/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp @@ -181,6 +181,20 @@ class ArchHandler_x86_64 : public ArchHandler { FindAddressForAtom addressForAtom, normalized::Relocations &relocs) override; + bool isDataInCodeTransition(Reference::KindValue refKind) override { + return refKind == modeCode || refKind == modeData; + } + + Reference::KindValue dataInCodeTransitionStart( + const MachODefinedAtom &atom) override { + return modeData; + } + + Reference::KindValue dataInCodeTransitionEnd( + const MachODefinedAtom &atom) override { + return modeCode; + } + private: static const Registry::KindStrings _sKindStrings[]; static const StubInfo _sStubInfo; @@ -188,6 +202,9 @@ class ArchHandler_x86_64 : public ArchHandler { enum X86_64Kind: Reference::KindValue { invalid, /// for error condition + modeCode, /// Content starting at this offset is code. + modeData, /// Content starting at this offset is data. + // Kinds found in mach-o .o files: branch32, /// ex: call _foo ripRel32, /// ex: movq _foo(%rip), %rax @@ -242,24 +259,34 @@ class ArchHandler_x86_64 : public ArchHandler { }; const Registry::KindStrings ArchHandler_x86_64::_sKindStrings[] = { - LLD_KIND_STRING_ENTRY(invalid), LLD_KIND_STRING_ENTRY(branch32), - LLD_KIND_STRING_ENTRY(ripRel32), LLD_KIND_STRING_ENTRY(ripRel32Minus1), - LLD_KIND_STRING_ENTRY(ripRel32Minus2), LLD_KIND_STRING_ENTRY(ripRel32Minus4), + LLD_KIND_STRING_ENTRY(invalid), + LLD_KIND_STRING_ENTRY(modeCode), + LLD_KIND_STRING_ENTRY(modeData), + LLD_KIND_STRING_ENTRY(branch32), + LLD_KIND_STRING_ENTRY(ripRel32), + LLD_KIND_STRING_ENTRY(ripRel32Minus1), + LLD_KIND_STRING_ENTRY(ripRel32Minus2), + LLD_KIND_STRING_ENTRY(ripRel32Minus4), LLD_KIND_STRING_ENTRY(ripRel32Anon), LLD_KIND_STRING_ENTRY(ripRel32Minus1Anon), LLD_KIND_STRING_ENTRY(ripRel32Minus2Anon), LLD_KIND_STRING_ENTRY(ripRel32Minus4Anon), LLD_KIND_STRING_ENTRY(ripRel32GotLoad), LLD_KIND_STRING_ENTRY(ripRel32GotLoadNowLea), - LLD_KIND_STRING_ENTRY(ripRel32Got), LLD_KIND_STRING_ENTRY(ripRel32Tlv), + LLD_KIND_STRING_ENTRY(ripRel32Got), + LLD_KIND_STRING_ENTRY(ripRel32Tlv), LLD_KIND_STRING_ENTRY(lazyPointer), LLD_KIND_STRING_ENTRY(lazyImmediateLocation), - LLD_KIND_STRING_ENTRY(pointer64), LLD_KIND_STRING_ENTRY(pointer64Anon), - LLD_KIND_STRING_ENTRY(delta32), LLD_KIND_STRING_ENTRY(delta64), - LLD_KIND_STRING_ENTRY(delta32Anon), LLD_KIND_STRING_ENTRY(delta64Anon), + LLD_KIND_STRING_ENTRY(pointer64), + LLD_KIND_STRING_ENTRY(pointer64Anon), + LLD_KIND_STRING_ENTRY(delta32), + LLD_KIND_STRING_ENTRY(delta64), + LLD_KIND_STRING_ENTRY(delta32Anon), + LLD_KIND_STRING_ENTRY(delta64Anon), LLD_KIND_STRING_ENTRY(negDelta64), LLD_KIND_STRING_ENTRY(negDelta32), - LLD_KIND_STRING_ENTRY(imageOffset), LLD_KIND_STRING_ENTRY(imageOffsetGot), + LLD_KIND_STRING_ENTRY(imageOffset), + LLD_KIND_STRING_ENTRY(imageOffsetGot), LLD_KIND_STRING_ENTRY(unwindFDEToFunction), LLD_KIND_STRING_ENTRY(unwindInfoToEhFrame), LLD_KIND_STRING_ENTRY(tlvInitSectionOffset), @@ -601,6 +628,8 @@ void ArchHandler_x86_64::applyFixupFinal( case negDelta32: *loc32 = fixupAddress - targetAddress + ref.addend(); return; + case modeCode: + case modeData: case lazyPointer: // Do nothing return; @@ -720,6 +749,8 @@ void ArchHandler_x86_64::applyFixupRelocatable(const Reference &ref, case unwindInfoToEhFrame: llvm_unreachable("fixup implies __unwind_info"); return; + case modeCode: + case modeData: case unwindFDEToFunction: // Do nothing for now return; @@ -743,6 +774,9 @@ void ArchHandler_x86_64::appendSectionRelocations( assert(ref.kindArch() == Reference::KindArch::x86_64); uint32_t sectionOffset = atomSectionOffset + ref.offsetInAtom(); switch (static_cast(ref.kindValue())) { + case modeCode: + case modeData: + return; case branch32: appendReloc(relocs, sectionOffset, symbolIndexForAtom(*ref.target()), 0, X86_64_RELOC_BRANCH | rPcRel | rExtern | rLength4); diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py b/lldb/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py index 2df341e572d04..969a7b543e09f 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py @@ -90,6 +90,13 @@ def test_process_launch_arch(self): ['mips', 'arm64']) + @skipIfFreeBSD # timing out on the FreeBSD buildbot + def test_ambiguous_long_opt(self): + self.completions_match('breakpoint modify --th', + ['--thread-id', + '--thread-index', + '--thread-name']) + @skipIfFreeBSD # timing out on the FreeBSD buildbot def test_plugin_load(self): self.complete_from_to('plugin load ', []) diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py index 9d38909d679ff..6c00350167d0e 100644 --- a/lldb/packages/Python/lldbsuite/test/lldbtest.py +++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -2194,6 +2194,16 @@ def complete_from_to(self, str_input, patterns, turn_off_re_match=False): compare_string, msg=COMPLETION_MSG( str_input, p, match_strings), exe=False, patterns=[p]) + def completions_match(self, command, completions): + """Checks that the completions for the given command are equal to the + given list of completions""" + interp = self.dbg.GetCommandInterpreter() + match_strings = lldb.SBStringList() + interp.HandleCompletion(command, len(command), 0, -1, match_strings) + # match_strings is a 1-indexed list, so we have to slice... + self.assertItemsEqual(completions, list(match_strings)[1:], + "List of returned completion is wrong") + def filecheck( self, command, diff --git a/lldb/source/Interpreter/Options.cpp b/lldb/source/Interpreter/Options.cpp index 2829a22b7e497..1a713ed7fbb54 100644 --- a/lldb/source/Interpreter/Options.cpp +++ b/lldb/source/Interpreter/Options.cpp @@ -706,17 +706,11 @@ bool Options::HandleOptionCompletion(CompletionRequest &request, // elements // that are not unique up to this point. getopt_long_only does // shortest unique match for long options already. - - if (cur_opt_str.startswith("--")) { + if (cur_opt_str.consume_front("--")) { for (auto &def : opt_defs) { - if (!def.long_option) - continue; - - if (cur_opt_str.startswith(def.long_option)) { - std::string full_name("--"); - full_name.append(def.long_option); - request.AddCompletion(full_name); - } + llvm::StringRef long_option(def.long_option); + if (long_option.startswith(cur_opt_str)) + request.AddCompletion("--" + long_option.str()); } } return true; diff --git a/llvm/lib/Target/ARM/ARMInstrMVE.td b/llvm/lib/Target/ARM/ARMInstrMVE.td index bb6b5679f5c99..340a762c43bea 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 794b340ad723a..fbadfcdfc131f 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 52df51675eaab..5b53bcf149a78 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 31956979dd99a..dc60f71d23564 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 d1fd4b2676289..9b295d3117a85 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 e1758d5ed3b27..6d936a375dd1e 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 0b6308f880085..3a79cdf40330c 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 90f09af135a29..a01b99726919d 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 ecad0c1c5dfd0..92b6ae5337f99 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 5d40ea623329f..224c6f5fe4628 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 bd280dc2b476e..8901ba493387c 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 ef4fc1b1914a2..a16492f6fda2b 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 ff2c7927b0996..a2d8b582ad474 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 7b38876373d21..8ed8b81201e78 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) {