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 - New Free Runtime and 30 Day Trial Check out the new simplified licensign option that enables unlimited royalty-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
