------- Comment #10 from steven at gcc dot gnu dot org  2007-03-26 22:33 -------
Just a small heuristics problem.  This could be fixed by giving insns to move
with comp_cost - size_cost == 0 in gain_for_invariant a small gain anyway.  Or
maybe comp_cost should overrule size_cost.

Just as a demonstration of how trivial this is, consider this hack:

Index: loop-invariant.c
===================================================================
--- loop-invariant.c    (revision 123222)
+++ loop-invariant.c    (working copy)
@@ -1101,8 +1101,10 @@ find_invariants_to_move (void)
     }

   new_regs = 0;
+
+  /* Find instructions to move.  Nothing gained is nothing lost.  */
   while (best_gain_for_invariant (&inv, &regs_needed,
-                                 new_regs, regs_used, n_inv_uses) > 0)
+                                 new_regs, regs_used, n_inv_uses) >= 0)
     {
       set_move_mark (inv->invno);
       new_regs += regs_needed;


Looks to me like a small heuristics tweak and some benchmarking would get this
one out of the way with only a small effort.


-- 

steven at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|4.2.0                       |4.3.0


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

Reply via email to