https://gcc.gnu.org/g:57b4620e7a1ee2ab9b774e3ea3ce5461433c82d9
commit r16-5442-g57b4620e7a1ee2ab9b774e3ea3ce5461433c82d9 Author: Xi Ruoyao <[email protected]> Date: Sun Nov 16 17:04:13 2025 +0800 LoongArch: NFC: Simplify vec_permv8sf logic gcc/ * config/loongarch/lasx.md (lasx_xvperm_<lasxfmt_f_wd>): Add "@" for gen_lasx_xvperm helper. * config/loongarch/loongarch.cc (loongarch_expand_vec_perm_1): Call gen_lasx_xvperm to unify V8SF and V8SI handling. Diff: --- gcc/config/loongarch/lasx.md | 4 ++-- gcc/config/loongarch/loongarch.cc | 25 ++++++------------------- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/gcc/config/loongarch/lasx.md b/gcc/config/loongarch/lasx.md index e0af1e4c5909..2b63507f22fb 100644 --- a/gcc/config/loongarch/lasx.md +++ b/gcc/config/loongarch/lasx.md @@ -469,8 +469,8 @@ [(set_attr "type" "simd_splat") (set_attr "mode" "<MODE>")]) -;; xshuf.w -(define_insn "lasx_xvperm_<lasxfmt_f_wd>" +;; xvperm.w +(define_insn "@lasx_xvperm_<lasxfmt_f_wd>" [(set (match_operand:LASX_W 0 "register_operand" "=f") (unspec:LASX_W [(match_operand:LASX_W 1 "nonimmediate_operand" "f") diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 73ff7e4274ec..3a5ccda808ed 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -9133,33 +9133,20 @@ loongarch_expand_vec_perm_1 (rtx operands[]) switch (mode) { case E_V8SImode: + case E_V8SFmode: if (one_operand_shuffle) { - emit_insn (gen_lasx_xvperm_w (target, op0, mask)); + emit_insn (gen_lasx_xvperm (mode, target, op0, mask)); if (target != operands[0]) emit_move_insn (operands[0], gen_lowpart (GET_MODE (operands[0]), target)); } else { - t1 = gen_reg_rtx (V8SImode); - t2 = gen_reg_rtx (V8SImode); - emit_insn (gen_lasx_xvperm_w (t1, op0, mask)); - emit_insn (gen_lasx_xvperm_w (t2, op1, mask)); - goto merge_two; - } - return; - - case E_V8SFmode: - mask = gen_lowpart (V8SImode, mask); - if (one_operand_shuffle) - emit_insn (gen_lasx_xvperm_w_f (target, op0, mask)); - else - { - t1 = gen_reg_rtx (V8SFmode); - t2 = gen_reg_rtx (V8SFmode); - emit_insn (gen_lasx_xvperm_w_f (t1, op0, mask)); - emit_insn (gen_lasx_xvperm_w_f (t2, op1, mask)); + t1 = gen_reg_rtx (mode); + t2 = gen_reg_rtx (mode); + emit_insn (gen_lasx_xvperm (mode, t1, op0, mask)); + emit_insn (gen_lasx_xvperm (mode, t2, op1, mask)); goto merge_two; } return;
