public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
@ 2023-07-27  9:48 demin.han
  2023-07-27 10:22 ` juzhe.zhong
  0 siblings, 1 reply; 9+ messages in thread
From: demin.han @ 2023-07-27  9:48 UTC (permalink / raw)
  To: gcc-patches; +Cc: kito.cheng, juzhe.zhong

When pass split2 starts, which_alternative is random depending on
last set of certain pass.

Even initialized, the generated movement is redundant.
The movement can be generated by assembly output template.

Signed-off-by: demin.han <demin.han@starfivetech.com>

gcc/ChangeLog:

	* config/riscv/autovec.md: Delete which_alternative use in split

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/madd-split2-1.c: New test.

---
 gcc/config/riscv/autovec.md                         | 12 ------------
 .../gcc.target/riscv/rvv/autovec/madd-split2-1.c    | 13 +++++++++++++
 2 files changed, 13 insertions(+), 12 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c

diff --git a/gcc/config/riscv/autovec.md b/gcc/config/riscv/autovec.md
index d899922586a..b7ea3101f5a 100644
--- a/gcc/config/riscv/autovec.md
+++ b/gcc/config/riscv/autovec.md
@@ -1012,8 +1012,6 @@ (define_insn_and_split "*fma<VI:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_ternary_insn (code_for_pred_mul_plus (<VI:MODE>mode),
 					   riscv_vector::RVV_TERNOP, ops, operands[4]);
@@ -1058,8 +1056,6 @@ (define_insn_and_split "*fnma<VI:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_ternary_insn (code_for_pred_minus_mul (<VI:MODE>mode),
     					   riscv_vector::RVV_TERNOP, ops, operands[4]);
@@ -1102,8 +1098,6 @@ (define_insn_and_split "*fma<VF:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (PLUS, <VF:MODE>mode),
 					      riscv_vector::RVV_TERNOP, ops, operands[4]);
@@ -1148,8 +1142,6 @@ (define_insn_and_split "*fnma<VF:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (PLUS, <VF:MODE>mode),
 					      riscv_vector::RVV_TERNOP, ops, operands[4]);
@@ -1194,8 +1186,6 @@ (define_insn_and_split "*fms<VF:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (MINUS, <VF:MODE>mode),
 					      riscv_vector::RVV_TERNOP, ops, operands[4]);
@@ -1242,8 +1232,6 @@ (define_insn_and_split "*fnms<VF:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (MINUS, <VF:MODE>mode),
 					      riscv_vector::RVV_TERNOP, ops, operands[4]);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
new file mode 100644
index 00000000000..14a9802667e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
+
+long
+foo (long *__restrict a, long *__restrict b, long n)
+{
+  long i;
+  for (i = 0; i < n; ++i)
+    a[i] = b[i] + i * 8;
+  return a[1];
+}
+
+/* { dg-final { scan-assembler-times {\tvmv1r\.v} 1 } } */
-- 
2.41.0


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

* Re: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
  2023-07-27  9:48 [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative demin.han
@ 2023-07-27 10:22 ` juzhe.zhong
  2023-07-27 11:57   ` Kito Cheng
  0 siblings, 1 reply; 9+ messages in thread
From: juzhe.zhong @ 2023-07-27 10:22 UTC (permalink / raw)
  To: demin.han, gcc-patches; +Cc: kito.cheng

[-- Attachment #1: Type: text/plain, Size: 4992 bytes --]

Oh, YES.

Thanks for fixing it. It makes sense since the ternary operations in "vector.md"
generate "vmv.v.v" according to RA.

Thanks for fixing it.

@kito: Could you confirm it? If it's ok to you, commit it for Han (I am lazy to commit patches :).



juzhe.zhong@rivai.ai
 
From: demin.han
Date: 2023-07-27 17:48
To: gcc-patches@gcc.gnu.org
CC: kito.cheng@gmail.com; juzhe.zhong@rivai.ai
Subject: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
When pass split2 starts, which_alternative is random depending on
last set of certain pass.
 
Even initialized, the generated movement is redundant.
The movement can be generated by assembly output template.
 
Signed-off-by: demin.han <demin.han@starfivetech.com>
 
gcc/ChangeLog:
 
* config/riscv/autovec.md: Delete which_alternative use in split
 
gcc/testsuite/ChangeLog:
 
* gcc.target/riscv/rvv/autovec/madd-split2-1.c: New test.
 
---
gcc/config/riscv/autovec.md                         | 12 ------------
.../gcc.target/riscv/rvv/autovec/madd-split2-1.c    | 13 +++++++++++++
2 files changed, 13 insertions(+), 12 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
 
diff --git a/gcc/config/riscv/autovec.md b/gcc/config/riscv/autovec.md
index d899922586a..b7ea3101f5a 100644
--- a/gcc/config/riscv/autovec.md
+++ b/gcc/config/riscv/autovec.md
@@ -1012,8 +1012,6 @@ (define_insn_and_split "*fma<VI:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_ternary_insn (code_for_pred_mul_plus (<VI:MODE>mode),
   riscv_vector::RVV_TERNOP, ops, operands[4]);
@@ -1058,8 +1056,6 @@ (define_insn_and_split "*fnma<VI:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_ternary_insn (code_for_pred_minus_mul (<VI:MODE>mode),
        riscv_vector::RVV_TERNOP, ops, operands[4]);
@@ -1102,8 +1098,6 @@ (define_insn_and_split "*fma<VF:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (PLUS, <VF:MODE>mode),
      riscv_vector::RVV_TERNOP, ops, operands[4]);
@@ -1148,8 +1142,6 @@ (define_insn_and_split "*fnma<VF:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (PLUS, <VF:MODE>mode),
      riscv_vector::RVV_TERNOP, ops, operands[4]);
@@ -1194,8 +1186,6 @@ (define_insn_and_split "*fms<VF:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (MINUS, <VF:MODE>mode),
      riscv_vector::RVV_TERNOP, ops, operands[4]);
@@ -1242,8 +1232,6 @@ (define_insn_and_split "*fnms<VF:mode><P:mode>"
   [(const_int 0)]
   {
     riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
-    if (which_alternative == 2)
-      emit_insn (gen_rtx_SET (operands[0], operands[3]));
     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
     riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (MINUS, <VF:MODE>mode),
      riscv_vector::RVV_TERNOP, ops, operands[4]);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
new file mode 100644
index 00000000000..14a9802667e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
+
+long
+foo (long *__restrict a, long *__restrict b, long n)
+{
+  long i;
+  for (i = 0; i < n; ++i)
+    a[i] = b[i] + i * 8;
+  return a[1];
+}
+
+/* { dg-final { scan-assembler-times {\tvmv1r\.v} 1 } } */
-- 
2.41.0
 
 

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

* Re: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
  2023-07-27 10:22 ` juzhe.zhong
@ 2023-07-27 11:57   ` Kito Cheng
  2023-07-27 20:46     ` Patrick O'Neill
       [not found]     ` <9819777D4BE5D5B8+4EB8A5B1-0546-4283-910B-CD4EA60B1F7A@rivai.ai>
  0 siblings, 2 replies; 9+ messages in thread
From: Kito Cheng @ 2023-07-27 11:57 UTC (permalink / raw)
  To: juzhe.zhong; +Cc: demin.han, gcc-patches

My first impression is those emit_insn (gen_rtx_SET()) seems
necessary, but I got the point after I checked vector.md :P

Committed to trunk, thanks :)


On Thu, Jul 27, 2023 at 6:23 PM juzhe.zhong@rivai.ai
<juzhe.zhong@rivai.ai> wrote:
>
> Oh, YES.
>
> Thanks for fixing it. It makes sense since the ternary operations in "vector.md"
> generate "vmv.v.v" according to RA.
>
> Thanks for fixing it.
>
> @kito: Could you confirm it? If it's ok to you, commit it for Han (I am lazy to commit patches :).
>
>
>
> juzhe.zhong@rivai.ai
>
> From: demin.han
> Date: 2023-07-27 17:48
> To: gcc-patches@gcc.gnu.org
> CC: kito.cheng@gmail.com; juzhe.zhong@rivai.ai
> Subject: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
> When pass split2 starts, which_alternative is random depending on
> last set of certain pass.
>
> Even initialized, the generated movement is redundant.
> The movement can be generated by assembly output template.
>
> Signed-off-by: demin.han <demin.han@starfivetech.com>
>
> gcc/ChangeLog:
>
> * config/riscv/autovec.md: Delete which_alternative use in split
>
> gcc/testsuite/ChangeLog:
>
> * gcc.target/riscv/rvv/autovec/madd-split2-1.c: New test.
>
> ---
> gcc/config/riscv/autovec.md                         | 12 ------------
> .../gcc.target/riscv/rvv/autovec/madd-split2-1.c    | 13 +++++++++++++
> 2 files changed, 13 insertions(+), 12 deletions(-)
> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>
> diff --git a/gcc/config/riscv/autovec.md b/gcc/config/riscv/autovec.md
> index d899922586a..b7ea3101f5a 100644
> --- a/gcc/config/riscv/autovec.md
> +++ b/gcc/config/riscv/autovec.md
> @@ -1012,8 +1012,6 @@ (define_insn_and_split "*fma<VI:mode><P:mode>"
>    [(const_int 0)]
>    {
>      riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
> -    if (which_alternative == 2)
> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>      rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>      riscv_vector::emit_vlmax_ternary_insn (code_for_pred_mul_plus (<VI:MODE>mode),
>    riscv_vector::RVV_TERNOP, ops, operands[4]);
> @@ -1058,8 +1056,6 @@ (define_insn_and_split "*fnma<VI:mode><P:mode>"
>    [(const_int 0)]
>    {
>      riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
> -    if (which_alternative == 2)
> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>      rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>      riscv_vector::emit_vlmax_ternary_insn (code_for_pred_minus_mul (<VI:MODE>mode),
>         riscv_vector::RVV_TERNOP, ops, operands[4]);
> @@ -1102,8 +1098,6 @@ (define_insn_and_split "*fma<VF:mode><P:mode>"
>    [(const_int 0)]
>    {
>      riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
> -    if (which_alternative == 2)
> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>      rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>      riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (PLUS, <VF:MODE>mode),
>       riscv_vector::RVV_TERNOP, ops, operands[4]);
> @@ -1148,8 +1142,6 @@ (define_insn_and_split "*fnma<VF:mode><P:mode>"
>    [(const_int 0)]
>    {
>      riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
> -    if (which_alternative == 2)
> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>      rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>      riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (PLUS, <VF:MODE>mode),
>       riscv_vector::RVV_TERNOP, ops, operands[4]);
> @@ -1194,8 +1186,6 @@ (define_insn_and_split "*fms<VF:mode><P:mode>"
>    [(const_int 0)]
>    {
>      riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
> -    if (which_alternative == 2)
> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>      rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>      riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (MINUS, <VF:MODE>mode),
>       riscv_vector::RVV_TERNOP, ops, operands[4]);
> @@ -1242,8 +1232,6 @@ (define_insn_and_split "*fnms<VF:mode><P:mode>"
>    [(const_int 0)]
>    {
>      riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
> -    if (which_alternative == 2)
> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>      rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>      riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (MINUS, <VF:MODE>mode),
>       riscv_vector::RVV_TERNOP, ops, operands[4]);
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
> new file mode 100644
> index 00000000000..14a9802667e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
> +
> +long
> +foo (long *__restrict a, long *__restrict b, long n)
> +{
> +  long i;
> +  for (i = 0; i < n; ++i)
> +    a[i] = b[i] + i * 8;
> +  return a[1];
> +}
> +
> +/* { dg-final { scan-assembler-times {\tvmv1r\.v} 1 } } */
> --
> 2.41.0
>
>

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

* Re: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
  2023-07-27 11:57   ` Kito Cheng
@ 2023-07-27 20:46     ` Patrick O'Neill
  2023-07-28  2:55       ` Demin Han
       [not found]     ` <9819777D4BE5D5B8+4EB8A5B1-0546-4283-910B-CD4EA60B1F7A@rivai.ai>
  1 sibling, 1 reply; 9+ messages in thread
From: Patrick O'Neill @ 2023-07-27 20:46 UTC (permalink / raw)
  To: Kito Cheng, juzhe.zhong; +Cc: demin.han, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 6518 bytes --]

The newly added testcase fails on rv32 targets with this message:
FAIL: gcc.target/riscv/rvv/autovec/madd-split2-1.c -O3 -ftree-vectorize (test for excess errors)

verbose log:
compiler exited with status 1
output is:
cc1: error: ABI requires '-march=rv32'

Something like this appears to fix the issue:

diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
index 14a9802667e..e10a9e9d0f5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
@@ -1,5 +1,5 @@
  /* { dg-do compile } */
-/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
+/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -O3
-fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable"
  } */
  
  long
  foo (long *__restrict a, long *__restrict b, long n)

On 7/27/23 04:57, Kito Cheng via Gcc-patches wrote:

> My first impression is those emit_insn (gen_rtx_SET()) seems
> necessary, but I got the point after I checked vector.md :P
>
> Committed to trunk, thanks :)
>
>
> On Thu, Jul 27, 2023 at 6:23 PMjuzhe.zhong@rivai.ai
> <juzhe.zhong@rivai.ai>  wrote:
>> Oh, YES.
>>
>> Thanks for fixing it. It makes sense since the ternary operations in "vector.md"
>> generate "vmv.v.v" according to RA.
>>
>> Thanks for fixing it.
>>
>> @kito: Could you confirm it? If it's ok to you, commit it for Han (I am lazy to commit patches :).
>>
>>
>>
>> juzhe.zhong@rivai.ai
>>
>> From: demin.han
>> Date: 2023-07-27 17:48
>> To:gcc-patches@gcc.gnu.org
>> CC:kito.cheng@gmail.com;juzhe.zhong@rivai.ai
>> Subject: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
>> When pass split2 starts, which_alternative is random depending on
>> last set of certain pass.
>>
>> Even initialized, the generated movement is redundant.
>> The movement can be generated by assembly output template.
>>
>> Signed-off-by: demin.han<demin.han@starfivetech.com>
>>
>> gcc/ChangeLog:
>>
>> * config/riscv/autovec.md: Delete which_alternative use in split
>>
>> gcc/testsuite/ChangeLog:
>>
>> * gcc.target/riscv/rvv/autovec/madd-split2-1.c: New test.
>>
>> ---
>> gcc/config/riscv/autovec.md                         | 12 ------------
>> .../gcc.target/riscv/rvv/autovec/madd-split2-1.c    | 13 +++++++++++++
>> 2 files changed, 13 insertions(+), 12 deletions(-)
>> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>>
>> diff --git a/gcc/config/riscv/autovec.md b/gcc/config/riscv/autovec.md
>> index d899922586a..b7ea3101f5a 100644
>> --- a/gcc/config/riscv/autovec.md
>> +++ b/gcc/config/riscv/autovec.md
>> @@ -1012,8 +1012,6 @@ (define_insn_and_split "*fma<VI:mode><P:mode>"
>>     [(const_int 0)]
>>     {
>>       riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
>> -    if (which_alternative == 2)
>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>       riscv_vector::emit_vlmax_ternary_insn (code_for_pred_mul_plus (<VI:MODE>mode),
>>     riscv_vector::RVV_TERNOP, ops, operands[4]);
>> @@ -1058,8 +1056,6 @@ (define_insn_and_split "*fnma<VI:mode><P:mode>"
>>     [(const_int 0)]
>>     {
>>       riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
>> -    if (which_alternative == 2)
>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>       riscv_vector::emit_vlmax_ternary_insn (code_for_pred_minus_mul (<VI:MODE>mode),
>>          riscv_vector::RVV_TERNOP, ops, operands[4]);
>> @@ -1102,8 +1098,6 @@ (define_insn_and_split "*fma<VF:mode><P:mode>"
>>     [(const_int 0)]
>>     {
>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>> -    if (which_alternative == 2)
>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (PLUS, <VF:MODE>mode),
>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>> @@ -1148,8 +1142,6 @@ (define_insn_and_split "*fnma<VF:mode><P:mode>"
>>     [(const_int 0)]
>>     {
>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>> -    if (which_alternative == 2)
>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (PLUS, <VF:MODE>mode),
>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>> @@ -1194,8 +1186,6 @@ (define_insn_and_split "*fms<VF:mode><P:mode>"
>>     [(const_int 0)]
>>     {
>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>> -    if (which_alternative == 2)
>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (MINUS, <VF:MODE>mode),
>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>> @@ -1242,8 +1232,6 @@ (define_insn_and_split "*fnms<VF:mode><P:mode>"
>>     [(const_int 0)]
>>     {
>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>> -    if (which_alternative == 2)
>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (MINUS, <VF:MODE>mode),
>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>> new file mode 100644
>> index 00000000000..14a9802667e
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>> @@ -0,0 +1,13 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
>> +
>> +long
>> +foo (long *__restrict a, long *__restrict b, long n)
>> +{
>> +  long i;
>> +  for (i = 0; i < n; ++i)
>> +    a[i] = b[i] + i * 8;
>> +  return a[1];
>> +}
>> +
>> +/* { dg-final { scan-assembler-times {\tvmv1r\.v} 1 } } */
>> --
>> 2.41.0
>>
>>

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

* Re: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
  2023-07-27 20:46     ` Patrick O'Neill
@ 2023-07-28  2:55       ` Demin Han
  2023-07-28 16:42         ` Patrick O'Neill
  0 siblings, 1 reply; 9+ messages in thread
From: Demin Han @ 2023-07-28  2:55 UTC (permalink / raw)
  To: Patrick O'Neill, Kito Cheng, juzhe.zhong; +Cc: gcc-patches

Sorry for not consider rv32 config.
The fix is OK. If convenient, please commit it.

On 2023/7/28 4:46, Patrick O'Neill wrote:
> The newly added testcase fails on rv32 targets with this message:
> FAIL: gcc.target/riscv/rvv/autovec/madd-split2-1.c -O3 -ftree-vectorize (test for excess errors)
> 
> verbose log:
> compiler exited with status 1
> output is:
> cc1: error: ABI requires '-march=rv32'
> 
> Something like this appears to fix the issue:
> 
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
> index 14a9802667e..e10a9e9d0f5 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
> +/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -O3
> -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable"
>  } */
>  
>  long
>  foo (long *__restrict a, long *__restrict b, long n)
> 
> On 7/27/23 04:57, Kito Cheng via Gcc-patches wrote:
> 
>> My first impression is those emit_insn (gen_rtx_SET()) seems
>> necessary, but I got the point after I checked vector.md :P
>>
>> Committed to trunk, thanks :)
>>
>>
>> On Thu, Jul 27, 2023 at 6:23 PMjuzhe.zhong@rivai.ai
>> <juzhe.zhong@rivai.ai>  wrote:
>>> Oh, YES.
>>>
>>> Thanks for fixing it. It makes sense since the ternary operations in "vector.md"
>>> generate "vmv.v.v" according to RA.
>>>
>>> Thanks for fixing it.
>>>
>>> @kito: Could you confirm it? If it's ok to you, commit it for Han (I am lazy to commit patches :).
>>>
>>>
>>>
>>> juzhe.zhong@rivai.ai
>>>
>>> From: demin.han
>>> Date: 2023-07-27 17:48
>>> To:gcc-patches@gcc.gnu.org
>>> CC:kito.cheng@gmail.com;juzhe.zhong@rivai.ai
>>> Subject: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
>>> When pass split2 starts, which_alternative is random depending on
>>> last set of certain pass.
>>>
>>> Even initialized, the generated movement is redundant.
>>> The movement can be generated by assembly output template.
>>>
>>> Signed-off-by: demin.han<demin.han@starfivetech.com>
>>>
>>> gcc/ChangeLog:
>>>
>>> * config/riscv/autovec.md: Delete which_alternative use in split
>>>
>>> gcc/testsuite/ChangeLog:
>>>
>>> * gcc.target/riscv/rvv/autovec/madd-split2-1.c: New test.
>>>
>>> ---
>>> gcc/config/riscv/autovec.md                         | 12 ------------
>>> .../gcc.target/riscv/rvv/autovec/madd-split2-1.c    | 13 +++++++++++++
>>> 2 files changed, 13 insertions(+), 12 deletions(-)
>>> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>>>
>>> diff --git a/gcc/config/riscv/autovec.md b/gcc/config/riscv/autovec.md
>>> index d899922586a..b7ea3101f5a 100644
>>> --- a/gcc/config/riscv/autovec.md
>>> +++ b/gcc/config/riscv/autovec.md
>>> @@ -1012,8 +1012,6 @@ (define_insn_and_split "*fma<VI:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_ternary_insn (code_for_pred_mul_plus (<VI:MODE>mode),
>>>     riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> @@ -1058,8 +1056,6 @@ (define_insn_and_split "*fnma<VI:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_ternary_insn (code_for_pred_minus_mul (<VI:MODE>mode),
>>>          riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> @@ -1102,8 +1098,6 @@ (define_insn_and_split "*fma<VF:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (PLUS, <VF:MODE>mode),
>>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> @@ -1148,8 +1142,6 @@ (define_insn_and_split "*fnma<VF:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (PLUS, <VF:MODE>mode),
>>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> @@ -1194,8 +1186,6 @@ (define_insn_and_split "*fms<VF:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (MINUS, <VF:MODE>mode),
>>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> @@ -1242,8 +1232,6 @@ (define_insn_and_split "*fnms<VF:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (MINUS, <VF:MODE>mode),
>>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>>> new file mode 100644
>>> index 00000000000..14a9802667e
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>>> @@ -0,0 +1,13 @@
>>> +/* { dg-do compile } */
>>> +/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
>>> +
>>> +long
>>> +foo (long *__restrict a, long *__restrict b, long n)
>>> +{
>>> +  long i;
>>> +  for (i = 0; i < n; ++i)
>>> +    a[i] = b[i] + i * 8;
>>> +  return a[1];
>>> +}
>>> +
>>> +/* { dg-final { scan-assembler-times {\tvmv1r\.v} 1 } } */
>>> -- 
>>> 2.41.0
>>>
>>>

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

* [Committed] RISC-V: Specify -mabi in rv64 autovec testcase
       [not found]     ` <9819777D4BE5D5B8+4EB8A5B1-0546-4283-910B-CD4EA60B1F7A@rivai.ai>
@ 2023-07-28 16:37       ` Patrick O'Neill
  2023-07-28 16:40       ` [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative Patrick O'Neill
  1 sibling, 0 replies; 9+ messages in thread
From: Patrick O'Neill @ 2023-07-28 16:37 UTC (permalink / raw)
  To: gcc-patches; +Cc: demin.han, kito.cheng, juzhe.zhong, Patrick O'Neill

On rv32 targets, this patch fixes:
FAIL: gcc.target/riscv/rvv/autovec/madd-split2-1.c -O3 -ftree-vectorize (test for excess errors)

cc1: error: ABI requires '-march=rv32'

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/madd-split2-1.c: Add -mabi=lp64d
	to dg-options.

Signed-off-by: Patrick O'Neill <patrick@rivosinc.com>
---
 gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
index 14a9802667e..e10a9e9d0f5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
+/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */

 long
 foo (long *__restrict a, long *__restrict b, long n)
--
2.34.1


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

* Re: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
       [not found]     ` <9819777D4BE5D5B8+4EB8A5B1-0546-4283-910B-CD4EA60B1F7A@rivai.ai>
  2023-07-28 16:37       ` [Committed] RISC-V: Specify -mabi in rv64 autovec testcase Patrick O'Neill
@ 2023-07-28 16:40       ` Patrick O'Neill
  1 sibling, 0 replies; 9+ messages in thread
From: Patrick O'Neill @ 2023-07-28 16:40 UTC (permalink / raw)
  To: juzhe.zhong; +Cc: Kito Cheng, demin.han, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 7424 bytes --]

Thanks!
Here's the comitted patch:
https://inbox.sourceware.org/gcc-patches/20230728163758.377962-1-patrick@rivosinc.com/T/#u

On 7/27/23 15:11, juzhe.zhong wrote:
> LGTM.Thanks. You can go ahead commit it.
> ---- Replied Message ----
> From 	Patrick O'Neill<patrick@rivosinc.com> <mailto:patrick@rivosinc.com>
> Date 	07/28/2023 04:46
> To 	Kito Cheng<kito.cheng@gmail.com> <mailto:kito.cheng@gmail.com>,
> juzhe.zhong@rivai.ai<juzhe.zhong@rivai.ai> <mailto:juzhe.zhong@rivai.ai>
> Cc 	demin.han<demin.han@starfivetech.com> 
> <mailto:demin.han@starfivetech.com>,
> gcc-patches<gcc-patches@gcc.gnu.org> <mailto:gcc-patches@gcc.gnu.org>
> Subject 	Re: [PATCH] RISC-V: Fix uninitialized and redundant use of 
> which_alternative
>
> The newly added testcase fails on rv32 targets with this message:
> FAIL: gcc.target/riscv/rvv/autovec/madd-split2-1.c -O3 -ftree-vectorize (test for excess errors)
>
> verbose log:
> compiler exited with status 1
> output is:
> cc1: error: ABI requires '-march=rv32'
>
> Something like this appears to fix the issue:
>
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
> index 14a9802667e..e10a9e9d0f5 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
> @@ -1,5 +1,5 @@
>   /* { dg-do compile } */
> -/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
> +/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -O3
> -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable"
>   } */
>   
>   long
>   foo (long *__restrict a, long *__restrict b, long n)
>
> On 7/27/23 04:57, Kito Cheng via Gcc-patches wrote:
>> My first impression is those emit_insn (gen_rtx_SET()) seems
>> necessary, but I got the point after I checked vector.md :P
>>
>> Committed to trunk, thanks :)
>>
>>
>> On Thu, Jul 27, 2023 at 6:23 PMjuzhe.zhong@rivai.ai
>> <juzhe.zhong@rivai.ai>  wrote:
>>> Oh, YES.
>>>
>>> Thanks for fixing it. It makes sense since the ternary operations in "vector.md"
>>> generate "vmv.v.v" according to RA.
>>>
>>> Thanks for fixing it.
>>>
>>> @kito: Could you confirm it? If it's ok to you, commit it for Han (I am lazy to commit patches :).
>>>
>>>
>>>
>>> juzhe.zhong@rivai.ai
>>>
>>> From: demin.han
>>> Date: 2023-07-27 17:48
>>> To:gcc-patches@gcc.gnu.org
>>> CC:kito.cheng@gmail.com;juzhe.zhong@rivai.ai
>>> Subject: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
>>> When pass split2 starts, which_alternative is random depending on
>>> last set of certain pass.
>>>
>>> Even initialized, the generated movement is redundant.
>>> The movement can be generated by assembly output template.
>>>
>>> Signed-off-by: demin.han<demin.han@starfivetech.com>
>>>
>>> gcc/ChangeLog:
>>>
>>> * config/riscv/autovec.md: Delete which_alternative use in split
>>>
>>> gcc/testsuite/ChangeLog:
>>>
>>> * gcc.target/riscv/rvv/autovec/madd-split2-1.c: New test.
>>>
>>> ---
>>> gcc/config/riscv/autovec.md                         | 12 ------------
>>> .../gcc.target/riscv/rvv/autovec/madd-split2-1.c    | 13 +++++++++++++
>>> 2 files changed, 13 insertions(+), 12 deletions(-)
>>> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>>>
>>> diff --git a/gcc/config/riscv/autovec.md b/gcc/config/riscv/autovec.md
>>> index d899922586a..b7ea3101f5a 100644
>>> --- a/gcc/config/riscv/autovec.md
>>> +++ b/gcc/config/riscv/autovec.md
>>> @@ -1012,8 +1012,6 @@ (define_insn_and_split "*fma<VI:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_ternary_insn (code_for_pred_mul_plus (<VI:MODE>mode),
>>>     riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> @@ -1058,8 +1056,6 @@ (define_insn_and_split "*fnma<VI:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_ternary_insn (code_for_pred_minus_mul (<VI:MODE>mode),
>>>          riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> @@ -1102,8 +1098,6 @@ (define_insn_and_split "*fma<VF:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (PLUS, <VF:MODE>mode),
>>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> @@ -1148,8 +1142,6 @@ (define_insn_and_split "*fnma<VF:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (PLUS, <VF:MODE>mode),
>>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> @@ -1194,8 +1186,6 @@ (define_insn_and_split "*fms<VF:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (MINUS, <VF:MODE>mode),
>>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> @@ -1242,8 +1232,6 @@ (define_insn_and_split "*fnms<VF:mode><P:mode>"
>>>     [(const_int 0)]
>>>     {
>>>       riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>> -    if (which_alternative == 2)
>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>       rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>       riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (MINUS, <VF:MODE>mode),
>>>        riscv_vector::RVV_TERNOP, ops, operands[4]);
>>> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>>> new file mode 100644
>>> index 00000000000..14a9802667e
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>>> @@ -0,0 +1,13 @@
>>> +/* { dg-do compile } */
>>> +/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
>>> +
>>> +long
>>> +foo (long *__restrict a, long *__restrict b, long n)
>>> +{
>>> +  long i;
>>> +  for (i = 0; i < n; ++i)
>>> +    a[i] = b[i] + i * 8;
>>> +  return a[1];
>>> +}
>>> +
>>> +/* { dg-final { scan-assembler-times {\tvmv1r\.v} 1 } } */
>>> --
>>> 2.41.0
>>>
>>>

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

* Re: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
  2023-07-28  2:55       ` Demin Han
@ 2023-07-28 16:42         ` Patrick O'Neill
  2023-07-28 21:55           ` Jeff Law
  0 siblings, 1 reply; 9+ messages in thread
From: Patrick O'Neill @ 2023-07-28 16:42 UTC (permalink / raw)
  To: Demin Han, Kito Cheng, juzhe.zhong; +Cc: gcc-patches

No worries! I'm glad it was an easy fix ;)

On 7/27/23 19:55, Demin Han wrote:
> Sorry for not consider rv32 config.
> The fix is OK. If convenient, please commit it.
>
> On 2023/7/28 4:46, Patrick O'Neill wrote:
>> The newly added testcase fails on rv32 targets with this message:
>> FAIL: gcc.target/riscv/rvv/autovec/madd-split2-1.c -O3 -ftree-vectorize (test for excess errors)
>>
>> verbose log:
>> compiler exited with status 1
>> output is:
>> cc1: error: ABI requires '-march=rv32'
>>
>> Something like this appears to fix the issue:
>>
>> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>> index 14a9802667e..e10a9e9d0f5 100644
>> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>> @@ -1,5 +1,5 @@
>>   /* { dg-do compile } */
>> -/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
>> +/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -O3
>> -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable"
>>   } */
>>   
>>   long
>>   foo (long *__restrict a, long *__restrict b, long n)
>>
>> On 7/27/23 04:57, Kito Cheng via Gcc-patches wrote:
>>
>>> My first impression is those emit_insn (gen_rtx_SET()) seems
>>> necessary, but I got the point after I checked vector.md :P
>>>
>>> Committed to trunk, thanks :)
>>>
>>>
>>> On Thu, Jul 27, 2023 at 6:23 PMjuzhe.zhong@rivai.ai
>>> <juzhe.zhong@rivai.ai>  wrote:
>>>> Oh, YES.
>>>>
>>>> Thanks for fixing it. It makes sense since the ternary operations in "vector.md"
>>>> generate "vmv.v.v" according to RA.
>>>>
>>>> Thanks for fixing it.
>>>>
>>>> @kito: Could you confirm it? If it's ok to you, commit it for Han (I am lazy to commit patches :).
>>>>
>>>>
>>>>
>>>> juzhe.zhong@rivai.ai
>>>>
>>>> From: demin.han
>>>> Date: 2023-07-27 17:48
>>>> To:gcc-patches@gcc.gnu.org
>>>> CC:kito.cheng@gmail.com;juzhe.zhong@rivai.ai
>>>> Subject: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
>>>> When pass split2 starts, which_alternative is random depending on
>>>> last set of certain pass.
>>>>
>>>> Even initialized, the generated movement is redundant.
>>>> The movement can be generated by assembly output template.
>>>>
>>>> Signed-off-by: demin.han<demin.han@starfivetech.com>
>>>>
>>>> gcc/ChangeLog:
>>>>
>>>> * config/riscv/autovec.md: Delete which_alternative use in split
>>>>
>>>> gcc/testsuite/ChangeLog:
>>>>
>>>> * gcc.target/riscv/rvv/autovec/madd-split2-1.c: New test.
>>>>
>>>> ---
>>>> gcc/config/riscv/autovec.md                         | 12 ------------
>>>> .../gcc.target/riscv/rvv/autovec/madd-split2-1.c    | 13 +++++++++++++
>>>> 2 files changed, 13 insertions(+), 12 deletions(-)
>>>> create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>>>>
>>>> diff --git a/gcc/config/riscv/autovec.md b/gcc/config/riscv/autovec.md
>>>> index d899922586a..b7ea3101f5a 100644
>>>> --- a/gcc/config/riscv/autovec.md
>>>> +++ b/gcc/config/riscv/autovec.md
>>>> @@ -1012,8 +1012,6 @@ (define_insn_and_split "*fma<VI:mode><P:mode>"
>>>>      [(const_int 0)]
>>>>      {
>>>>        riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
>>>> -    if (which_alternative == 2)
>>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>>        rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>>        riscv_vector::emit_vlmax_ternary_insn (code_for_pred_mul_plus (<VI:MODE>mode),
>>>>      riscv_vector::RVV_TERNOP, ops, operands[4]);
>>>> @@ -1058,8 +1056,6 @@ (define_insn_and_split "*fnma<VI:mode><P:mode>"
>>>>      [(const_int 0)]
>>>>      {
>>>>        riscv_vector::emit_vlmax_vsetvl (<VI:MODE>mode, operands[4]);
>>>> -    if (which_alternative == 2)
>>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>>        rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>>        riscv_vector::emit_vlmax_ternary_insn (code_for_pred_minus_mul (<VI:MODE>mode),
>>>>           riscv_vector::RVV_TERNOP, ops, operands[4]);
>>>> @@ -1102,8 +1098,6 @@ (define_insn_and_split "*fma<VF:mode><P:mode>"
>>>>      [(const_int 0)]
>>>>      {
>>>>        riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>>> -    if (which_alternative == 2)
>>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>>        rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>>        riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (PLUS, <VF:MODE>mode),
>>>>         riscv_vector::RVV_TERNOP, ops, operands[4]);
>>>> @@ -1148,8 +1142,6 @@ (define_insn_and_split "*fnma<VF:mode><P:mode>"
>>>>      [(const_int 0)]
>>>>      {
>>>>        riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>>> -    if (which_alternative == 2)
>>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>>        rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>>        riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (PLUS, <VF:MODE>mode),
>>>>         riscv_vector::RVV_TERNOP, ops, operands[4]);
>>>> @@ -1194,8 +1186,6 @@ (define_insn_and_split "*fms<VF:mode><P:mode>"
>>>>      [(const_int 0)]
>>>>      {
>>>>        riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>>> -    if (which_alternative == 2)
>>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>>        rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>>        riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul (MINUS, <VF:MODE>mode),
>>>>         riscv_vector::RVV_TERNOP, ops, operands[4]);
>>>> @@ -1242,8 +1232,6 @@ (define_insn_and_split "*fnms<VF:mode><P:mode>"
>>>>      [(const_int 0)]
>>>>      {
>>>>        riscv_vector::emit_vlmax_vsetvl (<VF:MODE>mode, operands[4]);
>>>> -    if (which_alternative == 2)
>>>> -      emit_insn (gen_rtx_SET (operands[0], operands[3]));
>>>>        rtx ops[] = {operands[0], operands[1], operands[2], operands[3], operands[0]};
>>>>        riscv_vector::emit_vlmax_fp_ternary_insn (code_for_pred_mul_neg (MINUS, <VF:MODE>mode),
>>>>         riscv_vector::RVV_TERNOP, ops, operands[4]);
>>>> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>>>> new file mode 100644
>>>> index 00000000000..14a9802667e
>>>> --- /dev/null
>>>> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
>>>> @@ -0,0 +1,13 @@
>>>> +/* { dg-do compile } */
>>>> +/* { dg-options "-march=rv64gcv_zvl256b -O3 -fno-cprop-registers -fno-dce --param riscv-autovec-preference=scalable" } */
>>>> +
>>>> +long
>>>> +foo (long *__restrict a, long *__restrict b, long n)
>>>> +{
>>>> +  long i;
>>>> +  for (i = 0; i < n; ++i)
>>>> +    a[i] = b[i] + i * 8;
>>>> +  return a[1];
>>>> +}
>>>> +
>>>> +/* { dg-final { scan-assembler-times {\tvmv1r\.v} 1 } } */
>>>> -- 
>>>> 2.41.0
>>>>
>>>>

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

* Re: [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative
  2023-07-28 16:42         ` Patrick O'Neill
@ 2023-07-28 21:55           ` Jeff Law
  0 siblings, 0 replies; 9+ messages in thread
From: Jeff Law @ 2023-07-28 21:55 UTC (permalink / raw)
  To: Patrick O'Neill, Demin Han, Kito Cheng, juzhe.zhong; +Cc: gcc-patches



On 7/28/23 10:42, Patrick O'Neill wrote:
> No worries! I'm glad it was an easy fix ;)
Note there's an effort underway via RISE to have some official RISC-V 
continuous testing for the compiler tools in place in the very near 
future (before Sept 1).

We're starting with a limited POC, so my thinking is to use it to 
augment what's already running in my tester.

Specifically I'm looking to add rv64gc and rv32gc cross testing for both 
the coordination branch and the trunk.  No multilibs in the immediate 
future, but once it's up and running and we have a good sense of the 
monthly cost we can look to add key multilibs such as vector or Zb*.

The hope is we can catch and resolve these minor problems quickly.

Jeff


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

end of thread, other threads:[~2023-07-28 21:55 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-27  9:48 [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative demin.han
2023-07-27 10:22 ` juzhe.zhong
2023-07-27 11:57   ` Kito Cheng
2023-07-27 20:46     ` Patrick O'Neill
2023-07-28  2:55       ` Demin Han
2023-07-28 16:42         ` Patrick O'Neill
2023-07-28 21:55           ` Jeff Law
     [not found]     ` <9819777D4BE5D5B8+4EB8A5B1-0546-4283-910B-CD4EA60B1F7A@rivai.ai>
2023-07-28 16:37       ` [Committed] RISC-V: Specify -mabi in rv64 autovec testcase Patrick O'Neill
2023-07-28 16:40       ` [PATCH] RISC-V: Fix uninitialized and redundant use of which_alternative Patrick O'Neill

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).