Signed-off-by: Arthur HUILLET <arthur.huil...@free.fr>
---
 jit/spill-reload.c |   36 ++++++++++++++++++++++--------------
 1 files changed, 22 insertions(+), 14 deletions(-)

diff --git a/jit/spill-reload.c b/jit/spill-reload.c
index 8750dae..520e6d7 100644
--- a/jit/spill-reload.c
+++ b/jit/spill-reload.c
@@ -186,31 +186,35 @@ static void insert_mov_insns(struct compilation_unit *cu,
                             struct basic_block *to_bb)
 {
        int i;
+       struct insn *spill_at_insn, *reload_at_insn;
+       struct live_interval *from_it, *to_it;
+       struct stack_slot *slots[nr_mapped];
+       
+       spill_at_insn   = bb_last_insn(from_bb);
 
        /* Spill all intervals that have to be resolved */
        for (i = 0; i < nr_mapped; i++) {
-               struct insn *spill_at_insn, *reload_at_insn;
-               struct live_interval *from_it, *to_it;
-               struct stack_slot *slot;
-
-               spill_at_insn   = bb_last_insn(from_bb);
                from_it         = mappings[i].from;
-               to_it           = mappings[i].to;
 
-               if (from_it->need_spill && from_it->range.end <= 
from_bb->end_insn)
-                       slot = from_it->spill_slot;
-               else
-                       slot = spill_interval(from_it, cu, spill_at_insn, true);
+               if (from_it->need_spill && from_it->range.end <= 
from_bb->end_insn) {
+                       slots[i] = from_it->spill_slot;
+               } else {
+                       slots[i] = spill_interval(from_it, cu, spill_at_insn, 
true);
+               }
+       }
 
-               /* Reload those intervals into their new location */
+       /* Reload those intervals into their new location */
+       for (i = 0; i < nr_mapped; i++) {
+               to_it           = mappings[i].to;
+               
                reload_at_insn = bb_first_insn(to_bb);
 
                if (to_it->need_reload && to_it->range.start >= 
to_bb->start_insn) {
-                       insert_copy_slot_insn(mappings[i].to, cu, slot,
+                       insert_copy_slot_insn(mappings[i].to, cu, slots[i],
                                        to_it->spill_parent->spill_slot,
                                        spill_at_insn, reload_at_insn);
                } else {
-                       insert_reload_insn(from_it, cu, slot, reload_at_insn);
+                       insert_reload_insn(to_it, cu, slots[i], spill_at_insn);
                }
        }
 }
@@ -254,8 +258,12 @@ static void maybe_add_mapping(struct live_interval_mapping 
*mappings,
                assert(to_it);
        }
 
+       /* 
+        * Same goes for the source interval, but we do not have a prev_child 
+        * field, so we need to cheat a bit.
+        */
        while (from_it->reg == REG_UNASSIGNED) {
-               from_it = from_it->next_child;
+               from_it = from_it->prev_child;
                assert(from_it);
        }
 
-- 
1.6.3.3



------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to