public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] vect: Treat VMAT_ELEMENTWISE as scalar load in costing [PR110776]
@ 2023-07-26  2:52 Kewen.Lin
  2023-07-26 10:02 ` Richard Biener
  0 siblings, 1 reply; 3+ messages in thread
From: Kewen.Lin @ 2023-07-26  2:52 UTC (permalink / raw)
  To: GCC Patches; +Cc: Richard Biener, Richard Sandiford, Iain Sandoe, Peter Bergner

Hi,

PR110776 exposes one issue that we could query unaligned
load for vector type but actually no unaligned vector load
is supported there.  The reason is that the costed load is
with single-lane vector type and its memory access type is
VMAT_ELEMENTWISE, we actually take it as scalar load and
set its alignment_support_scheme as dr_unaligned_supported.

To avoid the ICE as exposed, following Rich's suggestion,
this patch is to make VMAT_ELEMENTWISE be costed as scalar
load.

Bootstrapped and regress-tested on x86_64-redhat-linux,
powerpc64-linux-gnu P8/P9 and powerpc64le-linux-gnu P9/P10.

Is it ok for trunk?

BR,
Kewen
-----

Co-authored-by: Richard Biener <rguenther@suse.de>

	PR tree-optimization/110776

gcc/ChangeLog:

	* tree-vect-stmts.cc (vectorizable_load): Always cost VMAT_ELEMENTWISE
	as scalar load.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/pr110776.c: New test.
---
 gcc/testsuite/gcc.target/powerpc/pr110776.c | 22 +++++++++++++++++++++
 gcc/tree-vect-stmts.cc                      |  5 ++++-
 2 files changed, 26 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.target/powerpc/pr110776.c

diff --git a/gcc/testsuite/gcc.target/powerpc/pr110776.c b/gcc/testsuite/gcc.target/powerpc/pr110776.c
new file mode 100644
index 00000000000..749159fd675
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr110776.c
@@ -0,0 +1,22 @@
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-O2 -mdejagnu-cpu=power6 -maltivec" } */
+
+/* Verify there is no ICE.  */
+
+int a;
+long *b;
+int
+c ()
+{
+  long e;
+  int d = 0;
+  for (long f; f; f++)
+    {
+      e = b[f * a];
+      if (e)
+	d = 1;
+    }
+  if (d)
+    for (;;)
+      ;
+}
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index ed28fbdced3..09705200594 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -9840,7 +9840,10 @@ vectorizable_load (vec_info *vinfo,
 	    {
 	      if (costing_p)
 		{
-		  if (VECTOR_TYPE_P (ltype))
+		  /* For VMAT_ELEMENTWISE, just cost it as scalar_load to
+		     avoid ICE, see PR110776.  */
+		  if (VECTOR_TYPE_P (ltype)
+		      && memory_access_type != VMAT_ELEMENTWISE)
 		    vect_get_load_cost (vinfo, stmt_info, 1,
 					alignment_support_scheme, misalignment,
 					false, &inside_cost, nullptr, cost_vec,
--
2.39.1

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

* Re: [PATCH] vect: Treat VMAT_ELEMENTWISE as scalar load in costing [PR110776]
  2023-07-26  2:52 [PATCH] vect: Treat VMAT_ELEMENTWISE as scalar load in costing [PR110776] Kewen.Lin
@ 2023-07-26 10:02 ` Richard Biener
  2023-07-27  2:53   ` Kewen.Lin
  0 siblings, 1 reply; 3+ messages in thread
From: Richard Biener @ 2023-07-26 10:02 UTC (permalink / raw)
  To: Kewen.Lin; +Cc: GCC Patches, Richard Sandiford, Iain Sandoe, Peter Bergner

On Wed, Jul 26, 2023 at 4:52 AM Kewen.Lin <linkw@linux.ibm.com> wrote:
>
> Hi,
>
> PR110776 exposes one issue that we could query unaligned
> load for vector type but actually no unaligned vector load
> is supported there.  The reason is that the costed load is
> with single-lane vector type and its memory access type is
> VMAT_ELEMENTWISE, we actually take it as scalar load and
> set its alignment_support_scheme as dr_unaligned_supported.
>
> To avoid the ICE as exposed, following Rich's suggestion,
> this patch is to make VMAT_ELEMENTWISE be costed as scalar
> load.
>
> Bootstrapped and regress-tested on x86_64-redhat-linux,
> powerpc64-linux-gnu P8/P9 and powerpc64le-linux-gnu P9/P10.
>
> Is it ok for trunk?

OK.

> BR,
> Kewen
> -----
>
> Co-authored-by: Richard Biener <rguenther@suse.de>
>
>         PR tree-optimization/110776
>
> gcc/ChangeLog:
>
>         * tree-vect-stmts.cc (vectorizable_load): Always cost VMAT_ELEMENTWISE
>         as scalar load.
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.target/powerpc/pr110776.c: New test.
> ---
>  gcc/testsuite/gcc.target/powerpc/pr110776.c | 22 +++++++++++++++++++++
>  gcc/tree-vect-stmts.cc                      |  5 ++++-
>  2 files changed, 26 insertions(+), 1 deletion(-)
>  create mode 100644 gcc/testsuite/gcc.target/powerpc/pr110776.c
>
> diff --git a/gcc/testsuite/gcc.target/powerpc/pr110776.c b/gcc/testsuite/gcc.target/powerpc/pr110776.c
> new file mode 100644
> index 00000000000..749159fd675
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr110776.c
> @@ -0,0 +1,22 @@
> +/* { dg-require-effective-target powerpc_altivec_ok } */
> +/* { dg-options "-O2 -mdejagnu-cpu=power6 -maltivec" } */
> +
> +/* Verify there is no ICE.  */
> +
> +int a;
> +long *b;
> +int
> +c ()
> +{
> +  long e;
> +  int d = 0;
> +  for (long f; f; f++)
> +    {
> +      e = b[f * a];
> +      if (e)
> +       d = 1;
> +    }
> +  if (d)
> +    for (;;)
> +      ;
> +}
> diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
> index ed28fbdced3..09705200594 100644
> --- a/gcc/tree-vect-stmts.cc
> +++ b/gcc/tree-vect-stmts.cc
> @@ -9840,7 +9840,10 @@ vectorizable_load (vec_info *vinfo,
>             {
>               if (costing_p)
>                 {
> -                 if (VECTOR_TYPE_P (ltype))
> +                 /* For VMAT_ELEMENTWISE, just cost it as scalar_load to
> +                    avoid ICE, see PR110776.  */
> +                 if (VECTOR_TYPE_P (ltype)
> +                     && memory_access_type != VMAT_ELEMENTWISE)
>                     vect_get_load_cost (vinfo, stmt_info, 1,
>                                         alignment_support_scheme, misalignment,
>                                         false, &inside_cost, nullptr, cost_vec,
> --
> 2.39.1

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

* Re: [PATCH] vect: Treat VMAT_ELEMENTWISE as scalar load in costing [PR110776]
  2023-07-26 10:02 ` Richard Biener
@ 2023-07-27  2:53   ` Kewen.Lin
  0 siblings, 0 replies; 3+ messages in thread
From: Kewen.Lin @ 2023-07-27  2:53 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Patches, Richard Sandiford, Iain Sandoe, Peter Bergner

on 2023/7/26 18:02, Richard Biener wrote:
> On Wed, Jul 26, 2023 at 4:52 AM Kewen.Lin <linkw@linux.ibm.com> wrote:
>>
>> Hi,
>>
>> PR110776 exposes one issue that we could query unaligned
>> load for vector type but actually no unaligned vector load
>> is supported there.  The reason is that the costed load is
>> with single-lane vector type and its memory access type is
>> VMAT_ELEMENTWISE, we actually take it as scalar load and
>> set its alignment_support_scheme as dr_unaligned_supported.
>>
>> To avoid the ICE as exposed, following Rich's suggestion,
>> this patch is to make VMAT_ELEMENTWISE be costed as scalar
>> load.
>>
>> Bootstrapped and regress-tested on x86_64-redhat-linux,
>> powerpc64-linux-gnu P8/P9 and powerpc64le-linux-gnu P9/P10.
>>
>> Is it ok for trunk?
> 
> OK.

Thanks Richi, pushed as r14-2813.

BR,
Kewen

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

end of thread, other threads:[~2023-07-27  2:53 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-26  2:52 [PATCH] vect: Treat VMAT_ELEMENTWISE as scalar load in costing [PR110776] Kewen.Lin
2023-07-26 10:02 ` Richard Biener
2023-07-27  2:53   ` Kewen.Lin

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