public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-2813] vect: Treat VMAT_ELEMENTWISE as scalar load in costing [PR110776]
@ 2023-07-27  2:43 Kewen Lin
  0 siblings, 0 replies; only message in thread
From: Kewen Lin @ 2023-07-27  2:43 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:9890d4e8bcda1f34b8eefb481935ef0e4cd8069e

commit r14-2813-g9890d4e8bcda1f34b8eefb481935ef0e4cd8069e
Author: Kewen Lin <linkw@linux.ibm.com>
Date:   Wed Jul 26 21:43:09 2023 -0500

    vect: Treat VMAT_ELEMENTWISE as scalar load in costing [PR110776]
    
    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.
    
    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.

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

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 5018bd23e6e..6a4e8fce126 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -9876,7 +9876,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,

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-07-27  2:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-27  2:43 [gcc r14-2813] vect: Treat VMAT_ELEMENTWISE as scalar load in costing [PR110776] 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).