[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