[pypy-commit] pypy stm-gc: Optimize.
arigo
noreply at buildbot.pypy.org
Tue Apr 17 19:57:41 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: stm-gc
Changeset: r54485:6c3b8426808f
Date: 2012-04-17 19:36 +0200
http://bitbucket.org/pypy/pypy/changeset/6c3b8426808f/
Log: Optimize.
diff --git a/pypy/rpython/memory/gc/stmtls.py b/pypy/rpython/memory/gc/stmtls.py
--- a/pypy/rpython/memory/gc/stmtls.py
+++ b/pypy/rpython/memory/gc/stmtls.py
@@ -170,7 +170,11 @@
"""
#
debug_start("gc-local")
- self.ending_transaction = end_of_transaction
+ #
+ if end_of_transaction:
+ self.detect_flag_combination = GCFLAG_WAS_COPIED | GCFLAG_VISITED
+ else:
+ self.detect_flag_combination = -1
#
# Move away the previous sharedarea_tls and start a new one.
from pypy.rpython.memory.gc.stmshared import StmGCThreadLocalAllocator
@@ -313,19 +317,19 @@
if not self.is_in_nursery(obj):
# we ignore both GLOBAL objects and objects which have already
# been VISITED
- if hdr.tid & (GCFLAG_GLOBAL | GCFLAG_VISITED) == 0:
- ll_assert(hdr.tid & GCFLAG_WAS_COPIED == 0,
- "local GCFLAG_WAS_COPIED without GCFLAG_VISITED")
+ flag_combination = hdr.tid & (GCFLAG_GLOBAL |
+ GCFLAG_WAS_COPIED |
+ GCFLAG_VISITED)
+ if flag_combination == 0:
hdr.tid |= GCFLAG_VISITED
self.pending.append(obj)
- else:
- # xxx optimize this case: at the end of transactions,
- # replace references to the local copy with references
+ elif flag_combination == self.detect_flag_combination:
+ # At a normal time, self.detect_flag_combination is -1
+ # and this case is never seen. At end of transactions,
+ # detect_flag_combination is GCFLAG_WAS_COPIED|GCFLAG_VISITED.
+ # Replace references to the local copy with references
# to the global copy
- if (self.ending_transaction > 0 and
- hdr.tid & GCFLAG_GLOBAL == 0 and
- hdr.tid & GCFLAG_WAS_COPIED != 0):
- root.address[0] = hdr.version
+ root.address[0] = hdr.version
return
#
# If 'obj' was already forwarded, change it to its forwarding address.
More information about the pypy-commit
mailing list