When splitting intervals, the split child was given the same hardware
register as the parent.
This is incorrect because the split child has by definition not been
assigned any register at this point: REG_UNASSIGNED is the correct value
for ->reg.

This is a correctness fix: split childs with !REG_UNASSIGNED would make
it impossible for the register allocator to detect when
try_allocate_free_reg failed - and therefore assuming a reg had
successfully been allocated, whereas it should spill one instead.

Signed-off-by: Arthur HUILLET <[email protected]>
---
 jit/interval.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/jit/interval.c b/jit/interval.c
index bab19e3..62de2db 100644
--- a/jit/interval.c
+++ b/jit/interval.c
@@ -83,7 +83,7 @@ struct live_interval *split_interval_at(struct live_interval 
*interval,
        if (!new)
                return NULL;
 
-       new->reg = interval->reg;
+       new->reg = REG_UNASSIGNED;
        new->range.start = pos;
        new->range.end = interval->range.end;
        interval->range.end = pos;
-- 
1.6.2.2


------------------------------------------------------------------------------
Crystal Reports &#45; New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty&#45;free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to