Hi,

while playing around with inserting pass_ccp here and there in the pass list, I put it after a pass where the loops state contained LOOP_CLOSED_SSA.

And apparently pass_ccp does not preserve loop-closed ssa.

As a consequence, during executing the pass_ccp todos, verify_loop_closed_ssa fails.

This patch fixes that by noting in pass_ccp that it does not preserve loop-closed ssa.

OK for trunk if bootstrap and reg-test succeeds?

Thanks,
- Tom

Clear LOOP_CLOSED_SSA after pass_ccp

2015-11-16  Tom de Vries  <t...@codesourcery.com>

	* tree-ssa-ccp.c (do_ssa_ccp): Clear LOOP_CLOSED_SSA in loops state if
	something changed.

---
 gcc/tree-ssa-ccp.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index 7b6b451..7e8bc52 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -139,6 +139,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "params.h"
 #include "builtins.h"
 #include "tree-chkp.h"
+#include "cfgloop.h"
 
 
 /* Possible lattice values.  */
@@ -2402,10 +2403,17 @@ do_ssa_ccp (bool nonzero_p)
 {
   unsigned int todo = 0;
   calculate_dominance_info (CDI_DOMINATORS);
+
   ccp_initialize ();
   ssa_propagate (ccp_visit_stmt, ccp_visit_phi_node);
   if (ccp_finalize (nonzero_p))
-    todo = (TODO_cleanup_cfg | TODO_update_ssa);
+    {
+      todo = (TODO_cleanup_cfg | TODO_update_ssa);
+
+      /* ccp_finalize does not preserve loop-closed ssa.  */
+      loops_state_clear (LOOP_CLOSED_SSA);
+    }
+
   free_dominance_info (CDI_DOMINATORS);
   return todo;
 }

Reply via email to