[pypy-commit] pypy gc_no_cleanup_nursery: Remove clear_array_contents on virtual values. Since they're initialized
fijal
noreply at buildbot.pypy.org
Sat Sep 6 23:36:31 CEST 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: gc_no_cleanup_nursery
Changeset: r73354:bf18cdaa79cf
Date: 2014-09-06 15:36 -0600
http://bitbucket.org/pypy/pypy/changeset/bf18cdaa79cf/
Log: Remove clear_array_contents on virtual values. Since they're
initialized to zeros (and we force zeros on force), it should be
about it
diff --git a/rpython/jit/codewriter/jtransform.py b/rpython/jit/codewriter/jtransform.py
--- a/rpython/jit/codewriter/jtransform.py
+++ b/rpython/jit/codewriter/jtransform.py
@@ -615,14 +615,13 @@
op1 = SpaceOperation('new_array', [op.args[2], arraydescr],
op.result)
if self._has_gcptrs_in(ARRAY):
- return self.zero_contents(op1, op.result, ARRAY,
+ return self.zero_contents([op1], op.result, ARRAY,
only_gc_pointers=True)
if op.args[1].value.get('zero', False):
- return self.zero_contents(op1, op.result, ARRAY)
+ return self.zero_contents([op1], op.result, ARRAY)
return op1
- def zero_contents(self, prev_op, v, TYPE, only_gc_pointers=False):
- ops = [prev_op]
+ def zero_contents(self, ops, v, TYPE, only_gc_pointers=False):
if isinstance(TYPE, lltype.Struct):
for name, FIELD in TYPE._flds.iteritems():
if (not only_gc_pointers or
@@ -922,9 +921,9 @@
sizedescr = self.cpu.sizeof(STRUCT)
op1 = SpaceOperation(opname, [sizedescr], op.result)
if true_zero:
- return self.zero_contents(op1, op.result, STRUCT)
+ return self.zero_contents([op1], op.result, STRUCT)
if self._has_gcptrs_in(STRUCT):
- return self.zero_contents(op1, op.result, STRUCT,
+ return self.zero_contents([op1], op.result, STRUCT,
only_gc_pointers=True)
return op1
@@ -1664,6 +1663,8 @@
v.concretetype = lltype.Signed
ops.append(SpaceOperation('int_force_ge_zero', [v_length], v))
ops.append(SpaceOperation('new_array', [v, arraydescr], op.result))
+ if self._has_gcptrs_in(op.result.concretetype.TO):
+ self.zero_contents(ops, op.result, op.result.concretetype.TO)
return ops
def do_fixed_list_len(self, op, args, arraydescr):
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -5461,6 +5461,17 @@
"""
self.optimize_loop(ops, expected)
+ def test_virtual_clear_array_contents(self):
+ ops = """
+ []
+ p0 = new_array(2, descr=arraydescr)
+ clear_array_contents(p0, descr=arraydescr)
+ """
+ expected = """
+ []
+ """
+ self.optimize_loop(ops, expected)
+
class TestLLtype(BaseTestOptimizeBasic, LLtypeMixin):
pass
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -284,7 +284,7 @@
def setitem(self, index, itemvalue):
assert isinstance(itemvalue, optimizer.OptValue)
- self._items[index] = itemvalue
+ self._items[index] = itemvalue
def force_at_end_of_preamble(self, already_forced, optforce):
# note that this method is on VArrayValue instead of
@@ -660,6 +660,12 @@
else:
self.emit_operation(op)
+ def optimize_CLEAR_ARRAY_CONTENTS(self, op):
+ v = self.getvalue(op.getarg(0))
+ if v.is_virtual():
+ return
+ self.emit_operation(op)
+
def optimize_CALL(self, op):
effectinfo = op.getdescr().get_extra_info()
if effectinfo.oopspecindex == EffectInfo.OS_RAW_MALLOC_VARSIZE_CHAR:
diff --git a/rpython/jit/metainterp/test/test_list.py b/rpython/jit/metainterp/test/test_list.py
--- a/rpython/jit/metainterp/test/test_list.py
+++ b/rpython/jit/metainterp/test/test_list.py
@@ -8,7 +8,7 @@
def check_all_virtualized(self):
self.check_resops(setarrayitem_gc=0, new_array=0, arraylen_gc=0,
- getarrayitem_gc=0)
+ getarrayitem_gc=0)
def test_simple_array(self):
jitdriver = JitDriver(greens = [], reds = ['n'])
More information about the pypy-commit
mailing list