Author: Carl Friedrich Bolz <[email protected]>
Branch: guard-compatible
Changeset: r83184:ada9ee9869bc
Date: 2016-03-20 09:39 +0100
http://bitbucket.org/pypy/pypy/changeset/ada9ee9869bc/
Log: fix: things were broken with more than two args that are not the
quasi-immutable case
diff --git a/rpython/jit/metainterp/compatible.py
b/rpython/jit/metainterp/compatible.py
--- a/rpython/jit/metainterp/compatible.py
+++ b/rpython/jit/metainterp/compatible.py
@@ -78,6 +78,10 @@
if op.numargs() == 2:
return copied_op, PureCallCondition(op)
arg2 = copied_op.getarg(2)
+ if arg2.is_constant():
+ # already a constant, can just use PureCallCondition
+ return copied_op, PureCallCondition(op)
+
# really simple-minded pattern matching
# the order of things is like this:
# GUARD_COMPATIBLE(x)
diff --git a/rpython/jit/metainterp/compile.py
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -1095,13 +1095,11 @@
assert typetag == self.TY_REF # for now
refval = metainterp_sd.cpu.get_value_direct(deadframe, 'r', index)
if self.is_compatible(metainterp_sd.cpu, refval):
- print "~~~~~~~~~~~~~~~~~~~ compatible! growing switch", self
from rpython.jit.metainterp.blackhole import resume_in_blackhole
metainterp_sd.cpu.grow_guard_compatible_switch(
self.rd_loop_token, self, refval)
resume_in_blackhole(metainterp_sd, jitdriver_sd, self, deadframe)
else:
- print "~~~~~~~~~~~~~~~~~~~ not compatible!", self
# a real failure
return ResumeGuardDescr.handle_fail(self, deadframe,
metainterp_sd, jitdriver_sd)
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
@@ -22,7 +22,7 @@
c = A()
c.count = 0
@jit.elidable_compatible()
- def g(s):
+ def g(s, ignored):
c.count += 1
return s.x
@@ -30,9 +30,10 @@
while n > 0:
driver.can_enter_jit(n=n, x=x)
driver.jit_merge_point(n=n, x=x)
- n -= g(x)
+ n -= g(x, 7)
def main():
+ g(p1, 9) # make annotator not make argument constant
f(100, p1)
f(100, p2)
f(100, p3)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit