diff mbox series

Fix another parloops reduction ICE (PR tree-optimization/90385)

Message ID 20190510072952.GF19695@tucnak
State New
Headers show
Series Fix another parloops reduction ICE (PR tree-optimization/90385) | expand

Commit Message

Jakub Jelinek May 10, 2019, 7:29 a.m. UTC
Hi!

Based on the single testcase we had I thought the rest of parloops will
handle the exit PHIs with non-SSA_NAME arguments just fine, but this patch
shows that is not the case and doesn't seem trivial to fix (just punting
on the other ICE spot doesn't work).  As both the testcases are about
massive -fno-* disabling of optimizations, I don't see a sufficient use case
to actually support that, so this patch modifies the last change to punt
instead of trying to support it.  If we find an important use case, anyone
with sufficient motivaction can change this again and add full support for
that.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk and
after a while for 9.2?

2019-05-10  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/90385
	* tree-parloops.c (try_create_reduction_list): Punt on non-SSA_NAME
	arguments of the exit phis.

	* gfortran.dg/pr90385.f90: New test.


	Jakub

Comments

Richard Biener May 10, 2019, 7:35 a.m. UTC | #1
On Fri, 10 May 2019, Jakub Jelinek wrote:

> Hi!
> 
> Based on the single testcase we had I thought the rest of parloops will
> handle the exit PHIs with non-SSA_NAME arguments just fine, but this patch
> shows that is not the case and doesn't seem trivial to fix (just punting
> on the other ICE spot doesn't work).  As both the testcases are about
> massive -fno-* disabling of optimizations, I don't see a sufficient use case
> to actually support that, so this patch modifies the last change to punt
> instead of trying to support it.  If we find an important use case, anyone
> with sufficient motivaction can change this again and add full support for
> that.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk and
> after a while for 9.2?

OK.

Richard.

> 2019-05-10  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR tree-optimization/90385
> 	* tree-parloops.c (try_create_reduction_list): Punt on non-SSA_NAME
> 	arguments of the exit phis.
> 
> 	* gfortran.dg/pr90385.f90: New test.
> 
> --- gcc/tree-parloops.c.jj	2019-05-03 15:22:07.000000000 +0200
> +++ gcc/tree-parloops.c	2019-05-09 11:33:19.238730902 +0200
> @@ -2794,8 +2794,16 @@ try_create_reduction_list (loop_p loop,
>        gimple *reduc_phi;
>        tree val = PHI_ARG_DEF_FROM_EDGE (phi, exit);
>  
> -      if (TREE_CODE (val) == SSA_NAME && !virtual_operand_p (val))
> +      if (!virtual_operand_p (val))
>  	{
> +	  if (TREE_CODE (val) != SSA_NAME)
> +	    {
> +	      if (dump_file && (dump_flags & TDF_DETAILS))
> +		fprintf (dump_file,
> +			 "  FAILED: exit PHI argument invariant.\n");
> +	      return false;
> +	    }
> +
>  	  if (dump_file && (dump_flags & TDF_DETAILS))
>  	    {
>  	      fprintf (dump_file, "phi is ");
> --- gcc/testsuite/gfortran.dg/pr90385.f90.jj	2019-05-09 11:42:21.463573092 +0200
> +++ gcc/testsuite/gfortran.dg/pr90385.f90	2019-05-09 11:42:14.622688340 +0200
> @@ -0,0 +1,6 @@
> +! PR tree-optimization/90385
> +! { dg-do compile }
> +! { dg-require-effective-target pthread }
> +! { dg-options "-O1 -ftree-parallelize-loops=2 -fno-tree-ccp -fno-tree-ch -fno-tree-copy-prop -fno-tree-forwprop -fno-tree-sink --param parloops-min-per-thread=5" }
> +
> +include 'array_constructor_47.f90'
> 
> 	Jakub
>
diff mbox series

Patch

--- gcc/tree-parloops.c.jj	2019-05-03 15:22:07.000000000 +0200
+++ gcc/tree-parloops.c	2019-05-09 11:33:19.238730902 +0200
@@ -2794,8 +2794,16 @@  try_create_reduction_list (loop_p loop,
       gimple *reduc_phi;
       tree val = PHI_ARG_DEF_FROM_EDGE (phi, exit);
 
-      if (TREE_CODE (val) == SSA_NAME && !virtual_operand_p (val))
+      if (!virtual_operand_p (val))
 	{
+	  if (TREE_CODE (val) != SSA_NAME)
+	    {
+	      if (dump_file && (dump_flags & TDF_DETAILS))
+		fprintf (dump_file,
+			 "  FAILED: exit PHI argument invariant.\n");
+	      return false;
+	    }
+
 	  if (dump_file && (dump_flags & TDF_DETAILS))
 	    {
 	      fprintf (dump_file, "phi is ");
--- gcc/testsuite/gfortran.dg/pr90385.f90.jj	2019-05-09 11:42:21.463573092 +0200
+++ gcc/testsuite/gfortran.dg/pr90385.f90	2019-05-09 11:42:14.622688340 +0200
@@ -0,0 +1,6 @@ 
+! PR tree-optimization/90385
+! { dg-do compile }
+! { dg-require-effective-target pthread }
+! { dg-options "-O1 -ftree-parallelize-loops=2 -fno-tree-ccp -fno-tree-ch -fno-tree-copy-prop -fno-tree-forwprop -fno-tree-sink --param parloops-min-per-thread=5" }
+
+include 'array_constructor_47.f90'