From: Xi Ruoyao Date: Sun, 16 Nov 2025 09:04:13 +0000 (+0800) Subject: LoongArch: NFC: Simplify vec_permv8sf logic X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57b4620e7a1ee2ab9b774e3ea3ce5461433c82d9;p=thirdparty%2Fgcc.git LoongArch: NFC: Simplify vec_permv8sf logic gcc/ * config/loongarch/lasx.md (lasx_xvperm_): 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 --git a/gcc/config/loongarch/lasx.md b/gcc/config/loongarch/lasx.md index e0af1e4c590..2b63507f22f 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" "")]) -;; xshuf.w -(define_insn "lasx_xvperm_" +;; xvperm.w +(define_insn "@lasx_xvperm_" [(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 73ff7e4274e..3a5ccda808e 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;