Author: Remi Meier <remi.me...@gmail.com>
Branch: stmgc-c8
Changeset: r80770:1fc1326bc941
Date: 2015-11-19 12:18 +0100
http://bitbucket.org/pypy/pypy/changeset/1fc1326bc941/

Log:    remove some cases where we became inevitable unnecessarily

        AFAICS, "pure" in llmodel means "don't become inevitable" and
        doesn't have any other effect anywhere else. So maybe it should be
        renamed.

diff --git a/rpython/jit/backend/llsupport/gc.py 
b/rpython/jit/backend/llsupport/gc.py
--- a/rpython/jit/backend/llsupport/gc.py
+++ b/rpython/jit/backend/llsupport/gc.py
@@ -1,6 +1,6 @@
 import os
 from rpython.rlib import rgc
-from rpython.rlib.objectmodel import we_are_translated, specialize
+from rpython.rlib.objectmodel import we_are_translated, specialize, stm_ignored
 from rpython.rlib.rarithmetic import ovfcheck
 from rpython.rtyper.lltypesystem import lltype, llmemory, rffi, rstr
 from rpython.rtyper import rclass
@@ -809,7 +809,12 @@
             self.get_translated_info_for_guard_is_object())
         p = base_type_info + (typeid << shift_by) + infobits_offset
         p = rffi.cast(rffi.CCHARP, p)
-        return (ord(p[0]) & IS_OBJECT_FLAG) != 0
+        if self.stm:
+            with stm_ignored:
+                c = p[0]
+        else:
+            c = p[0]
+        return (ord(c) & IS_OBJECT_FLAG) != 0
 
 # ____________________________________________________________
 
diff --git a/rpython/jit/backend/llsupport/llmodel.py 
b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -690,23 +690,32 @@
 
     @specialize.argtype(1)
     def bh_getfield_gc_i(self, struct, fielddescr, pure=False):
+        assert isinstance(fielddescr, FieldDescr)
         ofs, size, sign = self.unpack_fielddescr_size(fielddescr)
         if isinstance(lltype.typeOf(struct), lltype.Ptr):
             fielddescr.assert_correct_type(struct)
+        if not pure:
+            pure = fielddescr.is_immutable() or not 
fielddescr.stm_should_track_raw_accesses()
         return self.read_int_at_mem(struct, ofs, size, sign, pure)
 
     @specialize.argtype(1)
     def bh_getfield_gc_r(self, struct, fielddescr, pure=False):
+        assert isinstance(fielddescr, FieldDescr)
         ofs = self.unpack_fielddescr(fielddescr)
         if isinstance(lltype.typeOf(struct), lltype.Ptr):
             fielddescr.assert_correct_type(struct)
+        if not pure:
+            pure = fielddescr.is_immutable() or not 
fielddescr.stm_should_track_raw_accesses()
         return self.read_ref_at_mem(struct, ofs, pure)
 
     @specialize.argtype(1)
     def bh_getfield_gc_f(self, struct, fielddescr, pure=False):
+        assert isinstance(fielddescr, FieldDescr)
         ofs = self.unpack_fielddescr(fielddescr)
         if isinstance(lltype.typeOf(struct), lltype.Ptr):
             fielddescr.assert_correct_type(struct)
+        if not pure:
+            pure = fielddescr.is_immutable() or not 
fielddescr.stm_should_track_raw_accesses()
         return self.read_float_at_mem(struct, ofs, pure)
 
     bh_getfield_raw_i = bh_getfield_gc_i
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to