public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/111232] New: RISC-V: Failed to combine vwmul + vadd into vwmacc
@ 2023-08-30  7:00 juzhe.zhong at rivai dot ai
  2023-09-01  3:24 ` [Bug target/111232] " lehua.ding at rivai dot ai
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: juzhe.zhong at rivai dot ai @ 2023-08-30  7:00 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111232

            Bug ID: 111232
           Summary: RISC-V: Failed to combine vwmul + vadd into vwmacc
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: juzhe.zhong at rivai dot ai
  Target Milestone: ---

#include <stdlib.h>
#define N 64

#define DOT -21856

signed char X[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) =
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
signed char Y[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) =
{64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};

/* char->short->short dot product.
   The dot-product pattern should be detected.
   Should be vectorized on vect_sdot_qi targets (targets that support 
   dot-product of signed char).  
   This test currently fails to vectorize on targets that support
   dot-product of chars into and int accumulator.
   Can also be vectorized as widening-mult + summation,
   or with type-conversion support.
 */
__attribute__ ((noinline)) short
foo(int len) {
  int i;
  short result = 0;

  for (i=0; i<len; i++) {
    result += (X[i] * Y[i]);
  }
  return result;
}

ASM:

        vsetvli a5,a0,e8,mf2,ta,ma
        vle8.v  v4,0(a4)
        vle8.v  v3,0(a3)
        sub     a0,a0,a5
        vsetvli a2,zero,e8,mf2,ta,ma
        add     a4,a4,a5
        vwmul.vv        v2,v4,v3
        add     a3,a3,a5
        vsetvli zero,a5,e16,m1,tu,ma
        vadd.vv v1,v2,v1
        bne     a0,zero,.L8
        vsetvli a2,zero,e16,m1,ta,ma
        vmv.s.x v2,zero
        vredsum.vs      v1,v1,v2
        vmv.x.s a0,v1
        ret

It should be vwmacc instead of vwmul + vadd.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug target/111232] RISC-V: Failed to combine vwmul + vadd into vwmacc
  2023-08-30  7:00 [Bug c/111232] New: RISC-V: Failed to combine vwmul + vadd into vwmacc juzhe.zhong at rivai dot ai
@ 2023-09-01  3:24 ` lehua.ding at rivai dot ai
  2023-09-06  9:56 ` cvs-commit at gcc dot gnu.org
  2023-09-06 12:49 ` juzhe.zhong at rivai dot ai
  2 siblings, 0 replies; 4+ messages in thread
From: lehua.ding at rivai dot ai @ 2023-09-01  3:24 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111232

--- Comment #1 from Lehua Ding <lehua.ding at rivai dot ai> ---
reproduce on compiler explorer: https://godbolt.org/z/Mq3bzajn6

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug target/111232] RISC-V: Failed to combine vwmul + vadd into vwmacc
  2023-08-30  7:00 [Bug c/111232] New: RISC-V: Failed to combine vwmul + vadd into vwmacc juzhe.zhong at rivai dot ai
  2023-09-01  3:24 ` [Bug target/111232] " lehua.ding at rivai dot ai
@ 2023-09-06  9:56 ` cvs-commit at gcc dot gnu.org
  2023-09-06 12:49 ` juzhe.zhong at rivai dot ai
  2 siblings, 0 replies; 4+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-09-06  9:56 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111232

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Lehua Ding <lhtin@gcc.gnu.org>:

https://gcc.gnu.org/g:9ee40b9a7bee83394fc7ba6fef71cb76d91b49c8

commit r14-3735-g9ee40b9a7bee83394fc7ba6fef71cb76d91b49c8
Author: Lehua Ding <lehua.ding@rivai.ai>
Date:   Mon Sep 4 17:15:08 2023 +0800

    RISC-V: Keep vlmax vector operators in simple form until split1 pass

    This patch keep vlmax vector pattern in simple before split1 pass which
    will allow more optimization (e.g. combine) before split1 pass.
    This patch changes the vlmax pattern in autovec.md to define_insn_and_split
    as much as possible and clean up some combine patterns that are no longer
needed.
    This patch also fixed PR111232 bug which was caused by a combined failed.

            PR target/111232

    gcc/ChangeLog:

            * config/riscv/autovec-opt.md
(@pred_single_widen_mul<any_extend:su><mode>):
            Delete.
            (*pred_widen_mulsu<mode>): Delete.
            (*pred_single_widen_mul<mode>): Delete.
            (*dual_widen_<any_widen_binop:optab><any_extend:su><mode>):
            Add new combine patterns.
            (*single_widen_sub<any_extend:su><mode>): Ditto.
            (*single_widen_add<any_extend:su><mode>): Ditto.
            (*single_widen_mult<any_extend:su><mode>): Ditto.
            (*dual_widen_mulsu<mode>): Ditto.
            (*dual_widen_mulus<mode>): Ditto.
            (*dual_widen_<optab><mode>): Ditto.
            (*single_widen_add<mode>): Ditto.
            (*single_widen_sub<mode>): Ditto.
            (*single_widen_mult<mode>): Ditto.
            * config/riscv/autovec.md (<optab><mode>3):
            Change define_expand to define_insn_and_split.
            (<optab><mode>2): Ditto.
            (abs<mode>2): Ditto.
            (smul<mode>3_highpart): Ditto.
            (umul<mode>3_highpart): Ditto.

    gcc/testsuite/ChangeLog:

            * gcc.target/riscv/rvv/autovec/widen/widen-4.c: Add more testcases.
            * gcc.target/riscv/rvv/autovec/widen/widen-complicate-4.c: Ditto.
            * gcc.target/riscv/rvv/autovec/pr111232.c: New test.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug target/111232] RISC-V: Failed to combine vwmul + vadd into vwmacc
  2023-08-30  7:00 [Bug c/111232] New: RISC-V: Failed to combine vwmul + vadd into vwmacc juzhe.zhong at rivai dot ai
  2023-09-01  3:24 ` [Bug target/111232] " lehua.ding at rivai dot ai
  2023-09-06  9:56 ` cvs-commit at gcc dot gnu.org
@ 2023-09-06 12:49 ` juzhe.zhong at rivai dot ai
  2 siblings, 0 replies; 4+ messages in thread
From: juzhe.zhong at rivai dot ai @ 2023-09-06 12:49 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111232

JuzheZhong <juzhe.zhong at rivai dot ai> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |FIXED

--- Comment #3 from JuzheZhong <juzhe.zhong at rivai dot ai> ---
Fixed.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-09-06 12:49 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-30  7:00 [Bug c/111232] New: RISC-V: Failed to combine vwmul + vadd into vwmacc juzhe.zhong at rivai dot ai
2023-09-01  3:24 ` [Bug target/111232] " lehua.ding at rivai dot ai
2023-09-06  9:56 ` cvs-commit at gcc dot gnu.org
2023-09-06 12:49 ` juzhe.zhong at rivai dot ai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).