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

Reply via email to