Author: Remi Meier <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit