[pypy-commit] pypy default: Translation fix: can't force the EF_XXX here during codewriter, but we

arigo noreply at buildbot.pypy.org
Wed Oct 8 20:55:23 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r73845:bedbb718f291
Date: 2014-10-08 19:59 +0200
http://bitbucket.org/pypy/pypy/changeset/bedbb718f291/

Log:	Translation fix: can't force the EF_XXX here during codewriter, but
	we can make it irrelevant.

diff --git a/rpython/jit/codewriter/jtransform.py b/rpython/jit/codewriter/jtransform.py
--- a/rpython/jit/codewriter/jtransform.py
+++ b/rpython/jit/codewriter/jtransform.py
@@ -1572,8 +1572,7 @@
                     "%r: jit.not_in_trace() function must return None"
                     % (op.args[0],))
             return self._handle_oopspec_call(op, op.args[1:],
-                EffectInfo.OS_NOT_IN_TRACE,
-                EffectInfo.EF_CAN_RAISE)
+                EffectInfo.OS_NOT_IN_TRACE)
         else:
             raise AssertionError("missing support for %r" % oopspec_name)
 
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1393,6 +1393,9 @@
             #
             allboxes = self._build_allboxes(funcbox, argboxes, descr)
             effectinfo = descr.get_extra_info()
+            if effectinfo.oopspecindex == effectinfo.OS_NOT_IN_TRACE:
+                return self.metainterp.do_not_in_trace_call(allboxes, descr)
+
             if (assembler_call or
                     effectinfo.check_forces_virtual_or_virtualizable()):
                 # residual calls require attention to keep virtualizables in-sync
@@ -1427,8 +1430,6 @@
                 if effect == effectinfo.EF_LOOPINVARIANT:
                     return self.execute_varargs(rop.CALL_LOOPINVARIANT, allboxes,
                                                 descr, False, False)
-                if effectinfo.oopspecindex == effectinfo.OS_NOT_IN_TRACE:
-                    return self.metainterp.do_not_in_trace_call(allboxes, descr)
                 exc = effectinfo.check_can_raise()
                 pure = effectinfo.check_is_elidable()
                 return self.execute_varargs(rop.CALL, allboxes, descr, exc, pure)


More information about the pypy-commit mailing list