Author: Carl Friedrich Bolz-Tereick <cfb...@gmx.de>
Branch: regalloc-playground
Changeset: r92245:f19f3e988faf
Date: 2017-08-24 10:20 +0200
http://bitbucket.org/pypy/pypy/changeset/f19f3e988faf/

Log:    cleanups

diff --git a/rpython/jit/backend/llsupport/regalloc.py 
b/rpython/jit/backend/llsupport/regalloc.py
--- a/rpython/jit/backend/llsupport/regalloc.py
+++ b/rpython/jit/backend/llsupport/regalloc.py
@@ -403,23 +403,18 @@
             self.free_regs.remove(loc)
             return loc
 
-    def _spill_var(self, v, forbidden_vars, selected_reg,
+    def _spill_var(self, forbidden_vars, selected_reg,
                    need_lower_byte=False):
-        v_to_spill = self._pick_variable_to_spill(v, forbidden_vars,
+        v_to_spill = self._pick_variable_to_spill(forbidden_vars,
                                selected_reg, need_lower_byte=need_lower_byte)
         loc = self.reg_bindings[v_to_spill]
+        self.assembler.num_spills += 1
+        self._sync_var(v_to_spill)
         del self.reg_bindings[v_to_spill]
-        self.assembler.num_spills += 1
-        if self.frame_manager.get(v_to_spill) is None:
-            newloc = self.frame_manager.loc(v_to_spill)
-            self.assembler.regalloc_mov(loc, newloc)
-        else:
-            self.assembler.num_spills_to_existing += 1
         return loc
 
-    def _pick_variable_to_spill(self, v, forbidden_vars, selected_reg=None,
+    def _pick_variable_to_spill(self, forbidden_vars, selected_reg=None,
                                 need_lower_byte=False, vars=None):
-        # YYY v is unused, remove
 
         # try to spill a variable that has no further real usages, ie that only
         # appears in failargs or in a jump
@@ -529,7 +524,7 @@
             if selected_reg in self.free_regs:
                 self.assembler.regalloc_mov(immloc, selected_reg)
                 return selected_reg
-            loc = self._spill_var(v, forbidden_vars, selected_reg)
+            loc = self._spill_var(forbidden_vars, selected_reg)
             self.free_regs.append(loc)
             self.assembler.regalloc_mov(immloc, loc)
             return loc
@@ -578,12 +573,8 @@
         self._check_type(result_v)
         self._check_type(v)
         if isinstance(v, Const):
-            if self.free_regs:
-                loc = self.free_regs.pop()
-            else:
-                loc = self._spill_var(v, forbidden_vars, None)
+            loc = self.force_allocate_reg(result_v, forbidden_vars)
             self.assembler.regalloc_mov(self.convert_to_imm(v), loc)
-            self.reg_bindings[result_v] = loc
             return loc
         if v not in self.reg_bindings:
             # v not in a register. allocate one for result_v and move v there
@@ -605,11 +596,13 @@
         return loc
 
     def _sync_var(self, v):
+        self.assembler.num_spills += 1
         if not self.frame_manager.get(v):
-            self.assembler.num_moves_calls += 1
             reg = self.reg_bindings[v]
             to = self.frame_manager.loc(v)
             self.assembler.regalloc_mov(reg, to)
+        else:
+            self.assembler.num_spills_to_existing += 1
         # otherwise it's clean
 
     def _bc_spill(self, v, new_free_regs):
@@ -1102,6 +1095,7 @@
 
     return LifetimeManager(longevity)
 
+# YYY unused?
 def is_comparison_or_ovf_op(opnum):
     return rop.is_comparison(opnum) or rop.is_ovf(opnum)
 
diff --git a/rpython/jit/backend/llsupport/test/test_regalloc.py 
b/rpython/jit/backend/llsupport/test/test_regalloc.py
--- a/rpython/jit/backend/llsupport/test/test_regalloc.py
+++ b/rpython/jit/backend/llsupport/test/test_regalloc.py
@@ -334,7 +334,7 @@
     longevity.fixed_register(35, r2, b2)
 
     loc = longevity.try_pick_free_reg(0, b3, [r1, r2])
-    # r2 is picked, otherwise b0 can't b0 can't end up in r1
+    # r2 is picked, otherwise b0 can't end up in r1
     assert loc is r2
 
     loc = longevity.try_pick_free_reg(0, b4, [r1, r2])
@@ -1303,7 +1303,6 @@
         i5 = escape_i()
         jump(i4, i5, descr=targettoken)
         '''
-        self.targettoken._fake_arglocs = [r5, r6]
         emitted = self.allocate(ops)
         assert emitted == [
             ('escape_i', r0, []),
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to