public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-6891] rs6000: Fix an assertion in update_target_cost_per_stmt [PR103702]
@ 2022-01-27 11:16 Kewen Lin
  0 siblings, 0 replies; only message in thread
From: Kewen Lin @ 2022-01-27 11:16 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:2022be54daf638885e1e685afd36619cb4b01a93

commit r12-6891-g2022be54daf638885e1e685afd36619cb4b01a93
Author: Kewen Lin <linkw@linux.ibm.com>
Date:   Thu Jan 27 03:46:28 2022 -0600

    rs6000: Fix an assertion in update_target_cost_per_stmt [PR103702]
    
    This patch is to fix one wrong assertion which is too aggressive.
    Vectorizer can do vec_construct costing for the vector type which
    only has one unit.  For the failed case, the passed in vector type
    is "vector(1) int", though it doesn't end up with any construction
    eventually, we have to handle this kind of possibility.
    
    gcc/ChangeLog:
    
            PR target/103702
            * config/rs6000/rs6000.cc
            (rs6000_cost_data::update_target_cost_per_stmt): Fix one wrong
            assertion with early return.
    
    gcc/testsuite/ChangeLog:
    
            PR target/103702
            * gcc.target/powerpc/pr103702.c: New test.

Diff:
---
 gcc/config/rs6000/rs6000.cc                 |  7 +++++--
 gcc/testsuite/gcc.target/powerpc/pr103702.c | 24 ++++++++++++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index e5471da4504..a5fd36b72d9 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -5439,8 +5439,11 @@ rs6000_cost_data::update_target_cost_per_stmt (vect_cost_for_stmt kind,
 	{
 	  tree vectype = STMT_VINFO_VECTYPE (stmt_info);
 	  unsigned int nunits = vect_nunits_for_cost (vectype);
-	  /* We don't expect strided/elementwise loads for just 1 nunit.  */
-	  gcc_assert (nunits > 1);
+	  /* As PR103702 shows, it's possible that vectorizer wants to do
+	     costings for only one unit here, it's no need to do any
+	     penalization for it, so simply early return here.  */
+	  if (nunits == 1)
+	    return;
 	  /* i386 port adopts nunits * stmt_cost as the penalized cost
 	     for this kind of penalization, we used to follow it but
 	     found it could result in an unreliable body cost especially
diff --git a/gcc/testsuite/gcc.target/powerpc/pr103702.c b/gcc/testsuite/gcc.target/powerpc/pr103702.c
new file mode 100644
index 00000000000..585946fd64b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr103702.c
@@ -0,0 +1,24 @@
+/* We don't have one powerpc.*_ok for Power6, use altivec_ok conservatively.  */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-mdejagnu-cpu=power6 -O2 -ftree-loop-vectorize -fno-tree-scev-cprop" } */
+
+/* Verify there is no ICE.  */
+
+unsigned short a, e;
+int *b, *d;
+int c;
+extern int fn2 ();
+void
+fn1 ()
+{
+  void *f;
+  for (;;)
+    {
+      fn2 ();
+      b = f;
+      e = 0;
+      for (; e < a; ++e)
+	b[e] = d[e * c];
+    }
+}
+


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

only message in thread, other threads:[~2022-01-27 11:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-27 11:16 [gcc r12-6891] rs6000: Fix an assertion in update_target_cost_per_stmt [PR103702] 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).