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]

[PR46602] sel-sched: move toporder checking


Hi,

After the fix for PR 46204, we can enter maybe_tidy_empty_bb with invalid
topological order, but will make no attempt to recompute it (instead the caller,
tidy_control_flow, will do it later).  That leads to an ICE in verify_backedges.

Rather than bringing back some complexity into maybe_tidy_empty_bb to allow it
to recompute toporder again, I'd like to move verify_backedges into the caller
that creates edges between unrelated BBs, thus breaking toporder.

Bootstrapped and regtested on x86_64-linux, ia64-linux (+ with sel-sched
enabled at -O2), OK for trunk?

2010-11-24  Alexander Monakov  <amonakov@ispras.ru>

	PR rtl-optimization/46602
	* sel-sched-ir.c (maybe_tidy_empty_bb): Move checking ...
	(tidy_control_flow): Here.

diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c
index 71c02c4..231358b 100644
--- a/gcc/sel-sched-ir.c
+++ b/gcc/sel-sched-ir.c
@@ -3650,10 +3650,6 @@ maybe_tidy_empty_bb (basic_block bb)
       remove_empty_bb (bb, true);
     }
 
-#ifdef ENABLE_CHECKING
-  verify_backedges ();
-#endif
-
   return true;
 }
 
@@ -3735,6 +3731,11 @@ tidy_control_flow (basic_block xbb, bool full_tidying)
       if (recompute_toporder_p)
 	sel_recompute_toporder ();
     }
+
+#ifdef ENABLE_CHECKING
+  verify_backedges ();
+#endif
+
   return changed;
 }
 


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