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