Author: Remi Meier <remi.me...@inf.ethz.ch> Branch: stmgc-c7 Changeset: r70706:11a2f6c88ca6 Date: 2014-04-17 17:28 +0200 http://bitbucket.org/pypy/pypy/changeset/11a2f6c88ca6/
Log: Backed out changeset: 10a78b65a5a9 (no measurable performance improvements) 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 @@ -81,15 +81,11 @@ continue # ---------- fallback case (overwritten in stmrewrite) ----------- self.other_operation(op) - self.flush_caches() return self.newops def other_operation(self, op): self.newops.append(op) - def flush_caches(self): - pass - # ---------- def handle_malloc_operation(self, op): diff --git a/rpython/jit/backend/llsupport/stmrewrite.py b/rpython/jit/backend/llsupport/stmrewrite.py --- a/rpython/jit/backend/llsupport/stmrewrite.py +++ b/rpython/jit/backend/llsupport/stmrewrite.py @@ -4,8 +4,10 @@ from rpython.jit.metainterp.resoperation import ResOperation, rop from rpython.jit.metainterp.history import BoxPtr, ConstPtr, ConstInt from rpython.rlib.objectmodel import specialize +from rpython.rlib.objectmodel import we_are_translated from rpython.rlib.debug import (have_debug_prints, debug_start, debug_stop, debug_print) +from rpython.jit.codewriter.effectinfo import EffectInfo class GcStmRewriterAssembler(GcRewriterAssembler): @@ -16,7 +18,6 @@ GcRewriterAssembler.__init__(self, *args) self.always_inevitable = False self.read_barrier_applied = {} - self.read_barrier_cache = [] def other_operation(self, op): opnum = op.getopnum() @@ -34,10 +35,6 @@ return # ---------- pure operations, guards ---------- if op.is_always_pure() or op.is_guard() or op.is_ovf(): - if op.is_guard(): - # XXX: store this info on the guard descr - # to be able to do the stm_reads in resume - self.flush_read_barrier_cache() self.newops.append(op) return # ---------- non-pure getfields ---------- @@ -86,11 +83,7 @@ self.newops.append(op) return # ---------- jumps, finish, other ignored ops ---------- - if opnum in (rop.JUMP, rop.FINISH): - self.flush_read_barrier_cache() - self.newops.append(op) - return - if opnum in (rop.FORCE_TOKEN, + if opnum in (rop.JUMP, rop.FINISH, rop.FORCE_TOKEN, rop.READ_TIMESTAMP, rop.MARK_OPAQUE_PTR, rop.JIT_DEBUG, rop.KEEPALIVE, rop.QUASIIMMUT_FIELD, rop.RECORD_KNOWN_CLASS, @@ -101,7 +94,6 @@ # Check that none of the ops handled here can collect. # This is not done by the fallback here assert not op.is_call() and not op.is_malloc() - self.flush_caches() self.fallback_inevitable(op) def handle_call_assembler(self, op): @@ -110,28 +102,10 @@ self.next_op_may_be_in_new_transaction() GcRewriterAssembler.handle_call_assembler(self, op) - def emitting_an_operation_that_can_collect(self): - self.flush_read_barrier_cache() - GcRewriterAssembler.emitting_an_operation_that_can_collect(self) - def next_op_may_be_in_new_transaction(self): - self.flush_read_barrier_cache() self.always_inevitable = False self.read_barrier_applied.clear() - def flush_caches(self): - self.flush_read_barrier_cache() - - def flush_read_barrier_cache(self): - for v_ptr in self.read_barrier_cache: - if (v_ptr not in self.read_barrier_applied # if multiple times in this list - and v_ptr not in self.write_barrier_applied): - op1 = ResOperation(rop.STM_READ, [v_ptr], None) - self.newops.append(op1) - self.read_barrier_applied[v_ptr] = None - - del self.read_barrier_cache[:] - def handle_getfields(self, op): # XXX missing optimitations: the placement of stm_read should # ideally be delayed for a bit longer after the getfields; if we @@ -142,7 +116,9 @@ v_ptr = op.getarg(0) if (v_ptr not in self.read_barrier_applied and v_ptr not in self.write_barrier_applied): - self.read_barrier_cache.append(v_ptr) + op1 = ResOperation(rop.STM_READ, [v_ptr], None) + self.newops.append(op1) + self.read_barrier_applied[v_ptr] = None def must_apply_write_barrier(self, val, v=None): @@ -166,6 +142,7 @@ debug_print("fallback for", op.repr()) def maybe_handle_raw_accesses(self, op): + from rpython.jit.backend.llsupport.descr import FieldDescr descr = op.getdescr() assert isinstance(descr, FieldDescr) if descr.stm_dont_track_raw_accesses: diff --git a/rpython/jit/backend/llsupport/test/test_stmrewrite.py b/rpython/jit/backend/llsupport/test/test_stmrewrite.py --- a/rpython/jit/backend/llsupport/test/test_stmrewrite.py +++ b/rpython/jit/backend/llsupport/test/test_stmrewrite.py @@ -157,11 +157,11 @@ """, """ [p1, p2] p3 = getfield_gc(p1, descr=tzdescr) + stm_read(p1) p4 = getfield_gc(p1, descr=tzdescr) p5 = getfield_gc(p2, descr=tzdescr) + stm_read(p2) p6 = getfield_gc(p1, descr=tzdescr) - stm_read(p1) - stm_read(p2) jump() """) @@ -191,10 +191,10 @@ """, """ [p0, p1, p2] p3 = getfield_gc(p1, descr=tzdescr) + stm_read(p1) cond_call_gc_wb(p2, descr=wbdescr) setfield_gc(p2, p0, descr=tzdescr) p4 = getfield_gc(p1, descr=tzdescr) - stm_read(p1) jump() """, t=NULL) @@ -388,8 +388,8 @@ """, """ [p1] p2 = getfield_gc(p1, descr=tzdescr) + stm_read(p1) i2 = getfield_gc(p2, descr=tydescr) - stm_read(p1) stm_read(p2) jump(p2, i2) """) @@ -406,6 +406,7 @@ """, """ [p1] i1 = getfield_gc(p1, descr=tydescr) + stm_read(p1) i2 = int_add(i1, 1) cond_call_gc_wb(p1, descr=wbdescr) setfield_gc(p1, i2, descr=tydescr) @@ -766,7 +767,7 @@ """, """ [i0, f0, p1] p2 = getfield_gc(p1, descr=tzdescr) - + stm_read(p1) cond_call_gc_wb(p1, descr=wbdescr) setfield_gc(p1, p2, descr=tzdescr) @@ -781,6 +782,7 @@ guard_not_forced() [] p3 = getfield_gc(p1, descr=tzdescr) + stm_read(p1) cond_call_gc_wb(p1, descr=wbdescr) setfield_gc(p1, p3, descr=tzdescr) """) @@ -1180,8 +1182,8 @@ """ % d, """ [p1, p3, i1, p4] p2 = getfield_gc%(pure)s(p1, descr=uxdescr) + %(comment)s stm_read(p1) i4 = getarrayitem_gc%(pure)s(p4, i1, descr=vdescr) - %(comment)s stm_read(p1) %(comment)s stm_read(p4) jump(p2) """ % d, uxdescr=uxdescr, vdescr=vdescr) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit