This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Dev tree housekeeping


This pushes a bunch of changes from my dev tree to trunk.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

2015-04-22  Richard Biener  <rguenther@suse.de>

	* cfgexpand.c (expand_gimple_stmt_1): Use ops.code.
	* cfgloop.c (verify_loop_structure): Verify the root loop node.
	* except.c (duplicate_eh_regions): Call get_eh_region_from_lp_number_fn
	instead of get_eh_region_from_lp_number.
	* loop-init.c (fix_loop_structure): If we removed a loop, reset
	the SCEV cache.

Index: gcc/cfgexpand.c
===================================================================
--- gcc/cfgexpand.c	(revision 222320)
+++ gcc/cfgexpand.c	(working copy)
@@ -3413,7 +3413,7 @@ expand_gimple_stmt_1 (gimple stmt)
 
 	    ops.code = gimple_assign_rhs_code (assign_stmt);
 	    ops.type = TREE_TYPE (lhs);
-	    switch (get_gimple_rhs_class (gimple_expr_code (stmt)))
+	    switch (get_gimple_rhs_class (ops.code))
 	      {
 		case GIMPLE_TERNARY_RHS:
 		  ops.op2 = gimple_assign_rhs3 (assign_stmt);
Index: gcc/cfgloop.c
===================================================================
--- gcc/cfgloop.c	(revision 222320)
+++ gcc/cfgloop.c	(working copy)
@@ -1347,6 +1347,16 @@ verify_loop_structure (void)
   else
     verify_dominators (CDI_DOMINATORS);
 
+  /* Check the loop tree root.  */
+  if (current_loops->tree_root->header != ENTRY_BLOCK_PTR_FOR_FN (cfun)
+      || current_loops->tree_root->latch != EXIT_BLOCK_PTR_FOR_FN (cfun)
+      || (current_loops->tree_root->num_nodes
+	  != (unsigned) n_basic_blocks_for_fn (cfun)))
+    {
+      error ("corrupt loop tree root");
+      err = 1;
+    }
+
   /* Check the headers.  */
   FOR_EACH_BB_FN (bb, cfun)
     if (bb_loop_header_p (bb))
Index: gcc/except.c
===================================================================
--- gcc/except.c	(revision 222320)
+++ gcc/except.c	(working copy)
@@ -649,7 +649,7 @@ duplicate_eh_regions (struct function *i
   data.label_map_data = map_data;
   data.eh_map = new hash_map<void *, void *>;
 
-  outer_region = get_eh_region_from_lp_number (outer_lp);
+  outer_region = get_eh_region_from_lp_number_fn (cfun, outer_lp);
 
   /* Copy all the regions in the subtree.  */
   if (copy_region)
Index: gcc/loop-init.c
===================================================================
--- gcc/loop-init.c	(revision 222320)
+++ gcc/loop-init.c	(working copy)
@@ -49,6 +49,7 @@ along with GCC; see the file COPYING3.
 #include "ggc.h"
 #include "tree-ssa-loop-niter.h"
 #include "loop-unroll.h"
+#include "tree-scalar-evolution.h"
 
 
 /* Apply FLAGS to the loop state.  */
@@ -221,6 +222,9 @@ fix_loop_structure (bitmap changed_bbs)
 
   timevar_push (TV_LOOP_INIT);
 
+  if (dump_file && (dump_flags & TDF_DETAILS))
+    fprintf (dump_file, "fix_loop_structure: fixing up loops for function\n");
+
   /* We need exact and fast dominance info to be available.  */
   gcc_assert (dom_info_state (CDI_DOMINATORS) == DOM_OK);
 
@@ -290,6 +294,7 @@ fix_loop_structure (bitmap changed_bbs)
     }
 
   /* Finally free deleted loops.  */
+  bool any_deleted = false;
   FOR_EACH_VEC_ELT (*get_loops (cfun), i, loop)
     if (loop && loop->header == NULL)
       {
@@ -322,8 +327,14 @@ fix_loop_structure (bitmap changed_bbs)
 	  }
 	(*get_loops (cfun))[i] = NULL;
 	flow_loop_free (loop);
+	any_deleted = true;
       }
 
+  /* If we deleted loops then the cached scalar evolutions refering to
+     those loops become invalid.  */
+  if (any_deleted && scev_initialized_p ())
+    scev_reset_htab ();
+
   loops_state_clear (LOOPS_NEED_FIXUP);
 
   /* Apply flags to loops.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]