------- Comment #4 from spark at gcc dot gnu dot org  2007-01-31 00:28 -------
Looks like eliminable_regset is not cleared per every invocation of
global_alloc, making stale bits from the compilation of previous function hang
around - hence a presence of a previous function makes difference. 
Following patch seems to fix -O2 problem.
I'm now on to -O1 and -O0 issues.

Index: global.c
===================================================================
--- global.c    (revision 121353)
+++ global.c    (working copy)
@@ -354,6 +354,7 @@ global_alloc (void)
      are safe to use only within a basic block.  */

   CLEAR_HARD_REG_SET (no_global_alloc_regs);
+  CLEAR_HARD_REG_SET (eliminable_regset);

   /* Build the regset of all eliminable registers and show we can't use those
      that we already know won't be eliminated.  */
@@ -2548,4 +2549,3 @@ struct tree_opt_pass pass_global_alloc =
   TODO_ggc_collect,                     /* todo_flags_finish */
   'g'                                   /* letter */
 };
-


-- 

spark at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |spark at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28686

Reply via email to