[pypy-commit] pypy default: SETINTERIORFIELD_GC should also generate a COND_CALL_GC_WB_ARRAY. This
arigo
noreply at buildbot.pypy.org
Mon Jun 30 18:46:44 CEST 2014
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r72292:b4bca9ebe10b
Date: 2014-06-30 16:32 +0200
http://bitbucket.org/pypy/pypy/changeset/b4bca9ebe10b/
Log: SETINTERIORFIELD_GC should also generate a COND_CALL_GC_WB_ARRAY.
This looks essential to get correct performance behavior in programs
that do a couple of writes to very large dictionaries every minor
collection.
diff --git a/rpython/jit/backend/llsupport/rewrite.py b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -396,16 +396,6 @@
#op = op.copy_and_change(rop.SETFIELD_RAW)
self.newops.append(op)
- def handle_write_barrier_setinteriorfield(self, op):
- val = op.getarg(0)
- if val not in self.write_barrier_applied:
- v = op.getarg(2)
- if isinstance(v, BoxPtr) or (isinstance(v, ConstPtr) and
- bool(v.value)): # store a non-NULL
- self.gen_write_barrier(val)
- #op = op.copy_and_change(rop.SETINTERIORFIELD_RAW)
- self.newops.append(op)
-
def handle_write_barrier_setarrayitem(self, op):
val = op.getarg(0)
if val not in self.write_barrier_applied:
@@ -413,9 +403,11 @@
if isinstance(v, BoxPtr) or (isinstance(v, ConstPtr) and
bool(v.value)): # store a non-NULL
self.gen_write_barrier_array(val, op.getarg(1))
- #op = op.copy_and_change(rop.SETARRAYITEM_RAW)
+ #op = op.copy_and_change(rop.SET{ARRAYITEM,INTERIORFIELD}_RAW)
self.newops.append(op)
+ handle_write_barrier_setinteriorfield = handle_write_barrier_setarrayitem
+
def gen_write_barrier(self, v_base):
write_barrier_descr = self.gc_ll_descr.write_barrier_descr
args = [v_base]
diff --git a/rpython/jit/backend/llsupport/test/test_rewrite.py b/rpython/jit/backend/llsupport/test/test_rewrite.py
--- a/rpython/jit/backend/llsupport/test/test_rewrite.py
+++ b/rpython/jit/backend/llsupport/test/test_rewrite.py
@@ -669,7 +669,7 @@
jump(p1, p2)
""", """
[p1, p2]
- cond_call_gc_wb(p1, descr=wbdescr)
+ cond_call_gc_wb_array(p1, 0, descr=wbdescr)
setinteriorfield_gc(p1, 0, p2, descr=interiorzdescr)
jump(p1, p2)
""", interiorzdescr=interiorzdescr)
More information about the pypy-commit
mailing list