[pypy-svn] pypy commit 9c2aca640d70: Next register allocation fix
Bitbucket
commits-noreply at bitbucket.org
Tue Dec 14 11:41:49 CET 2010
# HG changeset patch -- Bitbucket.org
# Project pypy
# URL http://bitbucket.org/pypy/pypy/overview
# User David Schneider <david.schneider at picle.org>
# Date 1292266968 0
# Node ID 9c2aca640d703d6152e4223d7e6746c4391ceb59
# Parent c1dae116dd3ea2d26b66e5324f99029203113ec2
Next register allocation fix
--- a/pypy/jit/backend/arm/regalloc.py
+++ b/pypy/jit/backend/arm/regalloc.py
@@ -143,8 +143,8 @@ class ARMRegisterManager(RegisterManager
boxes.append(box)
l1, box = self._ensure_value_is_boxed(a1, [box])
boxes.append(box)
- res = self.force_allocate_reg(op.result, boxes)
self.possibly_free_vars(boxes)
+ res = self.force_allocate_reg(op.result)
self.possibly_free_var(op.result)
return [l0, l1, res]
@@ -167,8 +167,8 @@ class ARMRegisterManager(RegisterManager
boxes.append(box)
l1, box = self._ensure_value_is_boxed(a1, boxes)
boxes.append(box)
- res = self.force_allocate_reg(op.result, boxes)
self.possibly_free_vars(boxes)
+ res = self.force_allocate_reg(op.result)
self.possibly_free_var(op.result)
return [l0, l1, res]
@@ -181,8 +181,8 @@ class ARMRegisterManager(RegisterManager
reg2, box = self._ensure_value_is_boxed(a1, forbidden_vars=boxes)
boxes.append(box)
- res = self.force_allocate_reg(op.result, boxes)
self.possibly_free_vars(boxes)
+ res = self.force_allocate_reg(op.result)
self.possibly_free_var(op.result)
return [reg1, reg2, res]
@@ -241,8 +241,9 @@ class ARMRegisterManager(RegisterManager
def prepare_op_int_neg(self, op, fcond):
l0, box = self._ensure_value_is_boxed(op.getarg(0))
- resloc = self.force_allocate_reg(op.result, [box])
- self.possibly_free_vars([box, op.result])
+ self.possibly_free_var(box)
+ resloc = self.force_allocate_reg(op.result)
+ self.possibly_free_var(op.result)
return [l0, resloc]
prepare_op_int_invert = prepare_op_int_neg
@@ -376,7 +377,7 @@ class ARMRegisterManager(RegisterManager
base_loc, base_box = self._ensure_value_is_boxed(a0)
self.possibly_free_var(a0)
self.possibly_free_var(base_box)
- res = self.force_allocate_reg(op.result, [a0])
+ res = self.force_allocate_reg(op.result)
self.possibly_free_var(op.result)
return [base_loc, imm(ofs), res, imm(size)]
--- a/pypy/jit/backend/arm/helper/regalloc.py
+++ b/pypy/jit/backend/arm/helper/regalloc.py
@@ -49,13 +49,10 @@ def prepare_op_by_helper_call():
arg2 = self.make_sure_var_in_reg(a1, selected_reg=r.r1)
assert arg1 == r.r0
assert arg2 == r.r1
- spilled = False
if isinstance(a0, Box) and self.stays_alive(a0):
- spilled = True
self.force_spill_var(a0)
+ self.possibly_free_var(a0)
self.after_call(op.result)
- if spilled:
- self.possibly_free_var(a0)
self.possibly_free_var(a1)
self.possibly_free_var(op.result)
return []
More information about the Pypy-commit
mailing list