]> git.unchartedbackwaters.co.uk Git - francis/libjit.git/commitdiff
fix spill cost calculation problem
authorAleksey Demakov <ademakov@gmail.com>
Wed, 24 May 2006 18:56:32 +0000 (18:56 +0000)
committerAleksey Demakov <ademakov@gmail.com>
Wed, 24 May 2006 18:56:32 +0000 (18:56 +0000)
ChangeLog
jit/jit-reg-alloc.c

index 9227aecbe87c62410ac0b644ceee2310d0d88a28..718623c7223450659943974b7fdee815f3c4181c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-05-25  Aleksey Demakov  <ademakov@gmail.com>
+
+       * jit/jit-reg-alloc.c (use_cheapest_register): fix cost calculation
+       that sometimes caused overlooking free registers. This was a serious
+       problem as there are some 'spill_before' rules that assume that the
+       allocator will always choose EAX as the first free register.
+
 2006-05-21  Aleksey Demakov  <ademakov@gmail.com>
 
        * jit/jit-reg-alloc.h: add _JIT_REGS_FREE_DEST flag to be used in
index cea4fe58e5aa665be1ab6cd5a92c8a927ccd3a23..47f9011470105915fc944afdb37f2d424e4cd38a 100644 (file)
@@ -2504,7 +2504,7 @@ use_cheapest_register(jit_gencode_t gen, _jit_regs_t *regs, int index, jit_regus
                }
                else
                {
-                       cost = 10 + compute_spill_cost(gen, regs, reg, other_reg);
+                       cost = compute_spill_cost(gen, regs, reg, other_reg);
                }
 
                if(cost < suitable_cost
@@ -3562,6 +3562,7 @@ _jit_regs_init(_jit_regs_t *regs, int flags)
        regs->on_stack = (flags & _JIT_REGS_STACK) != 0;
        regs->x87_arith = (flags & _JIT_REGS_X87_ARITH) != 0;
        regs->reversible = (flags & _JIT_REGS_REVERSIBLE) != 0;
+       regs->free_dest = (flags & _JIT_REGS_FREE_DEST) != 0;
 
        regs->no_pop = 0;
        regs->reverse_dest = 0;