Author: Armin Rigo <[email protected]>
Branch: stm-gc
Changeset: r52677:b34d343bd69b
Date: 2012-02-20 14:18 +0100
http://bitbucket.org/pypy/pypy/changeset/b34d343bd69b/

Log:    Prevent popitem() from generating spurious conflicts.

diff --git a/pypy/rpython/lltypesystem/rdict.py 
b/pypy/rpython/lltypesystem/rdict.py
--- a/pypy/rpython/lltypesystem/rdict.py
+++ b/pypy/rpython/lltypesystem/rdict.py
@@ -850,7 +850,8 @@
     i = ll_dict_lookup(d, key, d.keyhash(key))
     return not i & HIGHEST_BIT
 
-POPITEMINDEX = lltype.Struct('PopItemIndex', ('nextindex', lltype.Unsigned))
+POPITEMINDEX = lltype.Struct('PopItemIndex', ('nextindex', lltype.Unsigned),
+                             hints={'stm_dont_track_raw_accesses': True})
 global_popitem_index = lltype.malloc(POPITEMINDEX, zero=True, immortal=True)
 
 def _ll_getnextitem(dic):
diff --git a/pypy/translator/stm/transform.py b/pypy/translator/stm/transform.py
--- a/pypy/translator/stm/transform.py
+++ b/pypy/translator/stm/transform.py
@@ -91,8 +91,10 @@
         if op.result.concretetype is lltype.Void:
             newoperations.append(op)
             return
-        if op.args[0].concretetype.TO._gckind == 'raw':
-            if not is_immutable(op):
+        S = op.args[0].concretetype.TO
+        if S._gckind == 'raw':
+            if not (is_immutable(op) or
+                    S._hints.get('stm_dont_track_raw_accesses', False)):
                 turn_inevitable(newoperations, op.opname + '-raw')
             newoperations.append(op)
             return
@@ -113,8 +115,10 @@
         if op.args[-1].concretetype is lltype.Void:
             newoperations.append(op)
             return
-        if op.args[0].concretetype.TO._gckind == 'raw':
-            if not is_immutable(op):
+        S = op.args[0].concretetype.TO
+        if S._gckind == 'raw':
+            if not (is_immutable(op) or
+                    S._hints.get('stm_dont_track_raw_accesses', False)):
                 turn_inevitable(newoperations, op.opname + '-raw')
             newoperations.append(op)
             return
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to