[pypy-commit] pypy arm-backend-2: as pointed out by David Edelsohn and Maciej, get rid of redundant calls to list
bivab
noreply at buildbot.pypy.org
Sat Jan 14 17:19:27 CET 2012
Author: David Schneider <david.schneider at picle.org>
Branch: arm-backend-2
Changeset: r51312:483ce484be66
Date: 2012-01-14 16:34 +0100
http://bitbucket.org/pypy/pypy/changeset/483ce484be66/
Log: as pointed out by David Edelsohn and Maciej, get rid of redundant
calls to list when accessing the list of inputargs of an operation.
Also replace all calls to make_sure_var_in_reg with calls to
_ensure_value_is_boxes which makes sure that all temporary boxes are
also considered as forbidden.
diff --git a/pypy/jit/backend/arm/helper/regalloc.py b/pypy/jit/backend/arm/helper/regalloc.py
--- a/pypy/jit/backend/arm/helper/regalloc.py
+++ b/pypy/jit/backend/arm/helper/regalloc.py
@@ -33,9 +33,9 @@
imm_a1 = check_imm_box(a1, imm_size, allow_zero=allow_zero)
if not imm_a0 and imm_a1:
l0 = self._ensure_value_is_boxed(a0)
- l1 = self.make_sure_var_in_reg(a1, boxes)
+ l1 = self._ensure_value_is_boxed(a1, boxes)
elif commutative and imm_a0 and not imm_a1:
- l1 = self.make_sure_var_in_reg(a0, boxes)
+ l1 = self._ensure_value_is_boxed(a0, boxes)
l0 = self._ensure_value_is_boxed(a1, boxes)
else:
l0 = self._ensure_value_is_boxed(a0, boxes)
@@ -90,8 +90,8 @@
assert fcond is not None
a0 = op.getarg(0)
a1 = op.getarg(1)
- arg1 = self.make_sure_var_in_reg(a0, selected_reg=r.r0)
- arg2 = self.make_sure_var_in_reg(a1, selected_reg=r.r1)
+ arg1 = self.rm.make_sure_var_in_reg(a0, selected_reg=r.r0)
+ arg2 = self.rm.make_sure_var_in_reg(a1, selected_reg=r.r1)
assert arg1 == r.r0
assert arg2 == r.r1
if isinstance(a0, Box) and self.stays_alive(a0):
@@ -113,7 +113,7 @@
l0 = self._ensure_value_is_boxed(arg0, forbidden_vars=boxes)
if imm_a1:
- l1 = self.make_sure_var_in_reg(arg1, boxes)
+ l1 = self._ensure_value_is_boxed(arg1, boxes)
else:
l1 = self._ensure_value_is_boxed(arg1, forbidden_vars=boxes)
@@ -134,7 +134,7 @@
assert fcond is not None
a0 = op.getarg(0)
assert isinstance(a0, Box)
- reg = self.make_sure_var_in_reg(a0)
+ reg = self._ensure_value_is_boxed(a0)
self.possibly_free_vars_for_op(op)
if guard_op is None:
res = self.force_allocate_reg(op.result, [a0])
diff --git a/pypy/jit/backend/arm/opassembler.py b/pypy/jit/backend/arm/opassembler.py
--- a/pypy/jit/backend/arm/opassembler.py
+++ b/pypy/jit/backend/arm/opassembler.py
@@ -892,7 +892,7 @@
# need the box here
if isinstance(args[4], Box):
length_box = args[4]
- length_loc = regalloc.make_sure_var_in_reg(args[4], forbidden_vars)
+ length_loc = regalloc._ensure_value_is_boxed(args[4], forbidden_vars)
else:
length_box = TempInt()
length_loc = regalloc.force_allocate_reg(length_box,
diff --git a/pypy/jit/backend/arm/regalloc.py b/pypy/jit/backend/arm/regalloc.py
--- a/pypy/jit/backend/arm/regalloc.py
+++ b/pypy/jit/backend/arm/regalloc.py
@@ -183,7 +183,7 @@
self.assembler.load(loc, immvalue)
else:
loc = self.make_sure_var_in_reg(thing,
- forbidden_vars=forbidden_vars)
+ forbidden_vars=self.temp_boxes + forbidden_vars)
return loc
def get_scratch_reg(self, type=INT, forbidden_vars=[], selected_reg=None):
@@ -285,12 +285,7 @@
def make_sure_var_in_reg(self, var, forbidden_vars=[],
selected_reg=None, need_lower_byte=False):
- if var.type == FLOAT:
- return self.vfprm.make_sure_var_in_reg(var, forbidden_vars,
- selected_reg, need_lower_byte)
- else:
- return self.rm.make_sure_var_in_reg(var, forbidden_vars,
- selected_reg, need_lower_byte)
+ assert 0, 'should not be called directly'
def convert_to_imm(self, value):
if isinstance(value, ConstInt):
@@ -312,7 +307,7 @@
def prepare_loop(self, inputargs, operations):
self._prepare(inputargs, operations)
self._set_initial_bindings(inputargs)
- self.possibly_free_vars(list(inputargs))
+ self.possibly_free_vars(inputargs)
def prepare_bridge(self, inputargs, arglocs, ops):
self._prepare(inputargs, ops)
@@ -410,18 +405,18 @@
self.rm._sync_var(v)
def _prepare_op_int_add(self, op, fcond):
- boxes = list(op.getarglist())
+ boxes = op.getarglist()
a0, a1 = boxes
imm_a0 = check_imm_box(a0)
imm_a1 = check_imm_box(a1)
if not imm_a0 and imm_a1:
- l0 = self._ensure_value_is_boxed(a0)
- l1 = self.make_sure_var_in_reg(a1, boxes)
+ l0 = self._ensure_value_is_boxed(a0, boxes)
+ l1 = self._ensure_value_is_boxed(a1, boxes)
elif imm_a0 and not imm_a1:
- l0 = self.make_sure_var_in_reg(a0)
+ l0 = self._ensure_value_is_boxed(a0, boxes)
l1 = self._ensure_value_is_boxed(a1, boxes)
else:
- l0 = self._ensure_value_is_boxed(a0)
+ l0 = self._ensure_value_is_boxed(a0, boxes)
l1 = self._ensure_value_is_boxed(a1, boxes)
return [l0, l1]
@@ -438,9 +433,9 @@
imm_a1 = check_imm_box(a1)
if not imm_a0 and imm_a1:
l0 = self._ensure_value_is_boxed(a0, boxes)
- l1 = self.make_sure_var_in_reg(a1, boxes)
+ l1 = self._ensure_value_is_boxed(a1, boxes)
elif imm_a0 and not imm_a1:
- l0 = self.make_sure_var_in_reg(a0, boxes)
+ l0 = self._ensure_value_is_boxed(a0, boxes)
l1 = self._ensure_value_is_boxed(a1, boxes)
else:
l0 = self._ensure_value_is_boxed(a0, boxes)
@@ -455,7 +450,7 @@
return locs + [res]
def prepare_op_int_mul(self, op, fcond):
- boxes = list(op.getarglist())
+ boxes = op.getarglist()
a0, a1 = boxes
reg1 = self._ensure_value_is_boxed(a0, forbidden_vars=boxes)
@@ -597,14 +592,14 @@
prepare_op_guard_isnull = prepare_op_guard_true
def prepare_op_guard_value(self, op, fcond):
- boxes = list(op.getarglist())
+ boxes = op.getarglist()
a0, a1 = boxes
imm_a1 = check_imm_box(a1)
l0 = self._ensure_value_is_boxed(a0, boxes)
if not imm_a1:
l1 = self._ensure_value_is_boxed(a1, boxes)
else:
- l1 = self.make_sure_var_in_reg(a1, boxes)
+ l1 = self._ensure_value_is_boxed(a1, boxes)
assert op.result is None
arglocs = self._prepare_guard(op, [l0, l1])
self.possibly_free_vars(op.getarglist())
@@ -620,7 +615,7 @@
prepare_op_guard_not_invalidated = prepare_op_guard_no_overflow
def prepare_op_guard_exception(self, op, fcond):
- boxes = list(op.getarglist())
+ boxes = op.getarglist()
arg0 = ConstInt(rffi.cast(lltype.Signed, op.getarg(0).getint()))
loc = self._ensure_value_is_boxed(arg0)
loc1 = self.get_scratch_reg(INT, boxes)
@@ -648,7 +643,7 @@
def _prepare_guard_class(self, op, fcond):
assert isinstance(op.getarg(0), Box)
- boxes = list(op.getarglist())
+ boxes = op.getarglist()
x = self._ensure_value_is_boxed(boxes[0], boxes)
y = self.get_scratch_reg(REF, forbidden_vars=boxes)
@@ -727,7 +722,7 @@
return []
def prepare_op_setfield_gc(self, op, fcond):
- boxes = list(op.getarglist())
+ boxes = op.getarglist()
a0, a1 = boxes
ofs, size, sign = unpack_fielddescr(op.getdescr())
base_loc = self._ensure_value_is_boxed(a0, boxes)
@@ -806,23 +801,22 @@
return [res, base_loc, imm(ofs)]
def prepare_op_setarrayitem_gc(self, op, fcond):
- a0, a1, a2 = list(op.getarglist())
size, ofs, _ = unpack_arraydescr(op.getdescr())
scale = get_scale(size)
args = op.getarglist()
- base_loc = self._ensure_value_is_boxed(a0, args)
- ofs_loc = self._ensure_value_is_boxed(a1, args)
- value_loc = self._ensure_value_is_boxed(a2, args)
+ base_loc = self._ensure_value_is_boxed(args[0], args)
+ ofs_loc = self._ensure_value_is_boxed(args[1], args)
+ value_loc = self._ensure_value_is_boxed(args[2], args)
assert check_imm_arg(ofs)
return [value_loc, base_loc, ofs_loc, imm(scale), imm(ofs)]
prepare_op_setarrayitem_raw = prepare_op_setarrayitem_gc
def prepare_op_getarrayitem_gc(self, op, fcond):
- a0, a1 = boxes = list(op.getarglist())
+ boxes = op.getarglist()
size, ofs, _ = unpack_arraydescr(op.getdescr())
scale = get_scale(size)
- base_loc = self._ensure_value_is_boxed(a0, boxes)
- ofs_loc = self._ensure_value_is_boxed(a1, boxes)
+ base_loc = self._ensure_value_is_boxed(boxes[0], boxes)
+ ofs_loc = self._ensure_value_is_boxed(boxes[1], boxes)
self.possibly_free_vars_for_op(op)
self.free_temp_vars()
res = self.force_allocate_reg(op.result)
@@ -852,13 +846,13 @@
return [l0, l1, res]
def prepare_op_strgetitem(self, op, fcond):
- boxes = list(op.getarglist())
+ boxes = op.getarglist()
base_loc = self._ensure_value_is_boxed(boxes[0])
a1 = boxes[1]
imm_a1 = check_imm_box(a1)
if imm_a1:
- ofs_loc = self.make_sure_var_in_reg(a1, boxes)
+ ofs_loc = self._ensure_value_is_boxed(a1, boxes)
else:
ofs_loc = self._ensure_value_is_boxed(a1, boxes)
@@ -872,7 +866,7 @@
return [res, base_loc, ofs_loc, imm(basesize)]
def prepare_op_strsetitem(self, op, fcond):
- boxes = list(op.getarglist())
+ boxes = op.getarglist()
base_loc = self._ensure_value_is_boxed(boxes[0], boxes)
ofs_loc = self._ensure_value_is_boxed(boxes[1], boxes)
value_loc = self._ensure_value_is_boxed(boxes[2], boxes)
@@ -901,7 +895,7 @@
return [l0, l1, res]
def prepare_op_unicodegetitem(self, op, fcond):
- boxes = list(op.getarglist())
+ boxes = op.getarglist()
base_loc = self._ensure_value_is_boxed(boxes[0], boxes)
ofs_loc = self._ensure_value_is_boxed(boxes[1], boxes)
@@ -916,7 +910,7 @@
imm(scale), imm(basesize), imm(itemsize)]
def prepare_op_unicodesetitem(self, op, fcond):
- boxes = list(op.getarglist())
+ boxes = op.getarglist()
base_loc = self._ensure_value_is_boxed(boxes[0], boxes)
ofs_loc = self._ensure_value_is_boxed(boxes[1], boxes)
value_loc = self._ensure_value_is_boxed(boxes[2], boxes)
@@ -930,7 +924,7 @@
arg = op.getarg(0)
imm_arg = check_imm_box(arg)
if imm_arg:
- argloc = self.make_sure_var_in_reg(arg)
+ argloc = self._ensure_value_is_boxed(arg)
else:
argloc = self._ensure_value_is_boxed(arg)
self.possibly_free_vars_for_op(op)
More information about the pypy-commit
mailing list