On April 24, 2019 9:57:05 AM GMT+02:00, Jakub Jelinek <ja...@redhat.com> wrote:
>Hi!
>
>The parloops code when walking over PHI arguments from the loop exit
>edge assumes that the arguments must be SSA_NAMEs, without checking.
>As can be seen on the following testcase, in some cases it can be a
>constant
>as well.  And we don't really need to do anything special in those
>cases,
>the constant can remain even when the loop is parallelized.
>
>Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK. 

Richard. 

>2019-04-24  Jakub Jelinek  <ja...@redhat.com>
>
>       PR tree-optimization/90211
>       * tree-parloops.c (try_create_reduction_list): Ignore phi arguments
>       which are not SSA_NAMEs.
>
>       * gcc.dg/autopar/pr90211.c: New test.
>
>--- gcc/tree-parloops.c.jj     2019-02-26 14:13:08.297824084 +0100
>+++ gcc/tree-parloops.c        2019-04-23 12:35:13.253037933 +0200
>@@ -2794,7 +2794,7 @@ try_create_reduction_list (loop_p loop,
>       gimple *reduc_phi;
>       tree val = PHI_ARG_DEF_FROM_EDGE (phi, exit);
> 
>-      if (!virtual_operand_p (val))
>+      if (TREE_CODE (val) == SSA_NAME && !virtual_operand_p (val))
>       {
>         if (dump_file && (dump_flags & TDF_DETAILS))
>           {
>--- gcc/testsuite/gcc.dg/autopar/pr90211.c.jj  2019-04-23
>12:56:30.426338537 +0200
>+++ gcc/testsuite/gcc.dg/autopar/pr90211.c     2019-04-23
>12:29:12.747882701 +0200
>@@ -0,0 +1,24 @@
>+/* PR tree-optimization/90211 */
>+/* { dg-do compile } */
>+/* { dg-require-effective-target pthread } */
>+/* { dg-options "-O3 -fassociative-math -ftree-parallelize-loops=2
>-fno-signed-zeros -fno-trapping-math -fno-tree-copy-prop" } */
>+
>+double
>+foo (int x)
>+{
>+  double a, b = 0.0;
>+  while (x < 3)
>+    {
>+      int c;
>+      a = 0.0;
>+      c = 0;
>+      while (c < x)
>+        {
>+          a += 1.0;
>+          ++c;
>+        }
>+      b += 1.0;
>+      ++x;
>+    }
>+  return a + b;
>+}
>
>       Jakub

Reply via email to