Author: Remi Meier <[email protected]>
Branch: guard-compatible
Changeset: r94061:aab085ce1480
Date: 2018-03-22 09:08 +0100
http://bitbucket.org/pypy/pypy/changeset/aab085ce1480/
Log: (arigato, remi) cleanup test and make the bridge not contain a
call_pure
By preventing to share descrs with the GUARD_NOT_INVALIDATED coming
from the elidable_compatible decorator, a later guard will not share
the descr and therefore attach the bridge where it failed itself.
With that, we don't start the trace at the GUARD_NOT_INVALIDATED,
which is right after a guard_compatible. (Previously that meant that
the bridge didn't contain all the information to remove a call_pure)
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -658,6 +658,8 @@
#
if opnum == rop.GUARD_COMPATIBLE: # XXX don't share that for now
self._last_guard_op = None
+ #
+ # can resume data be shared with previous guard(s):
if (self._last_guard_op and guard_op.getdescr() is None):
self.metainterp_sd.profiler.count_ops(opnum,
jitprof.Counters.OPT_GUARDS_SHARED)
@@ -672,7 +674,11 @@
for farg in op.getfailargs():
if farg:
self.force_box(farg)
- if op.getopnum() == rop.GUARD_EXCEPTION:
+
+ if opnum == rop.GUARD_NOT_INVALIDATED:
+ self._last_guard_op = None # XXX don't share the next one either
+
+ if opnum == rop.GUARD_EXCEPTION:
self._last_guard_op = None
return op
diff --git a/rpython/jit/metainterp/test/test_compatible.py
b/rpython/jit/metainterp/test/test_compatible.py
--- a/rpython/jit/metainterp/test/test_compatible.py
+++ b/rpython/jit/metainterp/test/test_compatible.py
@@ -485,8 +485,8 @@
c = Counter()
c.count = 0
- @jit.elidable_compatible()
- def g(cls, v):
+
@jit.elidable_compatible(quasi_immut_field_name_for_second_arg='version')
+ def g(cls, version):
if we_are_translated():
c.count += 1
return cls.x
@@ -497,8 +497,7 @@
driver.can_enter_jit(n=n, x=x)
driver.jit_merge_point(n=n, x=x)
x = jit.hint(x, promote_compatible=True)
- v = x.version
- res = g(x, x.version)
+ res = g(x)
n -= res
if n % 11 == 5:
n -= 1
@@ -562,8 +561,8 @@
c = Counter()
c.count = 0
- @jit.elidable_compatible()
- def g(cls, v):
+
@jit.elidable_compatible(quasi_immut_field_name_for_second_arg='version')
+ def g(cls, version):
if we_are_translated():
c.count += 1
return cls.x
@@ -580,8 +579,7 @@
driver.can_enter_jit(n=n)
driver.jit_merge_point(n=n)
x = jit.hint(glob_b.x, promote_compatible=True)
- v = x.version
- res = g(x, v)
+ res = g(x)
n -= res
if n % 11 == 5:
n -= 1
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit