From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7877) id 897573858C2C; Fri, 26 Jan 2024 08:22:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 897573858C2C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1706257362; bh=aQ43nnNxGAtURGNvfWXO6OqI6pGo9JZkr3XlzuzAGyg=; h=From:To:Subject:Date:From; b=DZE2xLGpespEGs8MPP28EUbE4wClWsi1Sv18jaKXtv0lLKIe395OgoRFxzIKKSHqu vdrlfxpbdjANhfQn/QTSLk4mkwGXgD50ZTyyZfCB9K3WHt31aeJ4XUmhnApnYQQbM4 FrCSUjR2LnSZs0mf0FoGxM86jBK5AAAgmfIiU6MA= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: LuluCheng To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-8447] LoongArch: Split vec_selects of bottom elements into simple move X-Act-Checkin: gcc X-Git-Author: Jiahao Xu X-Git-Refname: refs/heads/master X-Git-Oldrev: dddafe948230b4895f8d4371eee7996fb2dba44a X-Git-Newrev: e3a9b77d732de83877a9ed5914e6d429a65e0bf7 Message-Id: <20240126082242.897573858C2C@sourceware.org> Date: Fri, 26 Jan 2024 08:22:42 +0000 (GMT) List-Id: https://gcc.gnu.org/g:e3a9b77d732de83877a9ed5914e6d429a65e0bf7 commit r14-8447-ge3a9b77d732de83877a9ed5914e6d429a65e0bf7 Author: Jiahao Xu Date: Tue Jan 16 10:23:20 2024 +0800 LoongArch: Split vec_selects of bottom elements into simple move For below pattern, can be treated as a simple move because floating point and vector share a common register on loongarch64. (set (reg/v:SF 32 $f0 [orig:93 res ] [93]) (vec_select:SF (reg:V8SF 32 $f0 [115]) (parallel [ (const_int 0 [0]) ]))) gcc/ChangeLog: * config/loongarch/lasx.md (vec_extract_0): New define_insn_and_split patten. gcc/testsuite/ChangeLog: * gcc.target/loongarch/vect-extract.c: New test. Diff: --- gcc/config/loongarch/lasx.md | 15 +++++++++++++++ gcc/testsuite/gcc.target/loongarch/vect-extract.c | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/gcc/config/loongarch/lasx.md b/gcc/config/loongarch/lasx.md index 5d478b92a2f8..e2115ffb884a 100644 --- a/gcc/config/loongarch/lasx.md +++ b/gcc/config/loongarch/lasx.md @@ -746,6 +746,21 @@ DONE; }) +(define_insn_and_split "vec_extract_0" + [(set (match_operand: 0 "register_operand" "=f") + (vec_select: + (match_operand:FLASX 1 "register_operand" "f") + (parallel [(const_int 0)])))] + "ISA_HAS_LSX" + "#" + "&& reload_completed" + [(set (match_dup 0) (match_dup 1))] +{ + operands[1] = gen_rtx_REG (mode, REGNO (operands[1])); +} + [(set_attr "move_type" "fmove") + (set_attr "mode" "")]) + (define_expand "vec_perm" [(match_operand:LASX 0 "register_operand") (match_operand:LASX 1 "register_operand") diff --git a/gcc/testsuite/gcc.target/loongarch/vect-extract.c b/gcc/testsuite/gcc.target/loongarch/vect-extract.c new file mode 100644 index 000000000000..ce126e3a4f19 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vect-extract.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ffast-math -mlasx -fno-vect-cost-model -fno-unroll-loops" } */ +/* { dg-final { scan-assembler-not "xvpickve.w" } } */ +/* { dg-final { scan-assembler-not "xvpickve.d" } } */ + +float +sum_float (float *a, int n) { + float res = 0.0; + for (int i = 0; i < n; i++) + res += a[i]; + return res; +} + +double +sum_double (double *a, int n) { + double res = 0.0; + for (int i = 0; i < n; i++) + res += a[i]; + return res; +}