[pypy-commit] pypy stmgc-c4: turn inevitable before calls that don't have an effectinfo (to be safe)
Raemi
noreply at buildbot.pypy.org
Thu Sep 12 11:20:32 CEST 2013
Author: Remi Meier <remi.meier at gmail.com>
Branch: stmgc-c4
Changeset: r66922:b5034dc26351
Date: 2013-09-12 11:19 +0200
http://bitbucket.org/pypy/pypy/changeset/b5034dc26351/
Log: turn inevitable before calls that don't have an effectinfo (to be
safe)
diff --git a/rpython/jit/backend/llsupport/descr.py b/rpython/jit/backend/llsupport/descr.py
--- a/rpython/jit/backend/llsupport/descr.py
+++ b/rpython/jit/backend/llsupport/descr.py
@@ -406,8 +406,7 @@
assert 0
llop1 = llop
- if not stm or (
- self.extrainfo and self.extrainfo.call_needs_inevitable()):
+ if not stm or not self.extrainfo or self.extrainfo.call_needs_inevitable():
source = py.code.Source("""
def call_stub(func, args_i, args_r, args_f):
fnptr = rffi.cast(lltype.Ptr(FUNC), func)
diff --git a/rpython/jit/backend/llsupport/stmrewrite.py b/rpython/jit/backend/llsupport/stmrewrite.py
--- a/rpython/jit/backend/llsupport/stmrewrite.py
+++ b/rpython/jit/backend/llsupport/stmrewrite.py
@@ -111,8 +111,8 @@
else:
descr = op.getdescr()
assert not descr or isinstance(descr, CallDescr)
- if descr and descr.get_extra_info() and \
- descr.get_extra_info().call_needs_inevitable():
+ if not descr or not descr.get_extra_info() \
+ or descr.get_extra_info().call_needs_inevitable():
self.fallback_inevitable(op)
else:
self.newops.append(op)
diff --git a/rpython/jit/backend/llsupport/test/test_stmrewrite.py b/rpython/jit/backend/llsupport/test/test_stmrewrite.py
--- a/rpython/jit/backend/llsupport/test/test_stmrewrite.py
+++ b/rpython/jit/backend/llsupport/test/test_stmrewrite.py
@@ -469,21 +469,27 @@
def test_rewrite_getfield_gc_on_future_local_after_call(self):
# XXX could detect CALLs that cannot interrupt the transaction
# and/or could use the L category
+ class fakeextrainfo:
+ def call_needs_inevitable(self):
+ return False
+ T = rffi.CArrayPtr(rffi.TIME_T)
+ calldescr1 = get_call_descr(self.gc_ll_descr, [T], rffi.TIME_T,
+ fakeextrainfo())
self.check_rewrite("""
[p1]
p2 = getfield_gc(p1, descr=tzdescr)
- call(p2)
+ call(p2, descr=calldescr1)
setfield_gc(p1, 5, descr=tydescr)
jump(p2)
""", """
[p1]
cond_call_stm_b(p1, descr=P2Rdescr)
p2 = getfield_gc(p1, descr=tzdescr)
- call(p2)
+ call(p2, descr=calldescr1)
cond_call_stm_b(p1, descr=P2Wdescr)
setfield_gc(p1, 5, descr=tydescr)
jump(p2)
- """)
+ """, calldescr1=calldescr1)
def test_getfield_raw(self):
self.check_rewrite("""
@@ -658,8 +664,12 @@
""" % op)
def test_call_force(self):
+ class fakeextrainfo:
+ def call_needs_inevitable(self):
+ return False
T = rffi.CArrayPtr(rffi.TIME_T)
- calldescr2 = get_call_descr(self.gc_ll_descr, [T], rffi.TIME_T)
+ calldescr2 = get_call_descr(self.gc_ll_descr, [T], rffi.TIME_T,
+ fakeextrainfo())
for op in ["call(123, descr=calldescr2)",
"call_assembler(123, descr=casmdescr)",
"call_may_force(123, descr=calldescr2)",
More information about the pypy-commit
mailing list