[pypy-commit] pypy inline-simple-generators: (fijal, hodgestar) make the test pass
fijal
noreply at buildbot.pypy.org
Sun Jul 24 19:14:17 CEST 2011
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: inline-simple-generators
Changeset: r45946:637652763be4
Date: 2011-07-24 19:12 +0200
http://bitbucket.org/pypy/pypy/changeset/637652763be4/
Log: (fijal, hodgestar) make the test pass
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -901,7 +901,6 @@
any_operation = len(self.metainterp.history.operations) > 0
jitdriver_sd = self.metainterp.staticdata.jitdrivers_sd[jdindex]
self.verify_green_args(jitdriver_sd, greenboxes)
- import pdb; pdb.set_trace()
self.debug_merge_point(jitdriver_sd, jdindex, self.metainterp.in_recursion,
greenboxes)
@@ -931,6 +930,8 @@
# close the loop. We have to put the possibly-modified list
# 'redboxes' back into the registers where it comes from.
put_back_list_of_boxes3(self, jcposition, redboxes)
+ elif jitdriver_sd.warmstate.should_unroll_one_iteration(greenboxes):
+ return
else:
# warning! careful here. We have to return from the current
# frame containing the jit_merge_point, and then use
diff --git a/pypy/jit/metainterp/test/test_ajit.py b/pypy/jit/metainterp/test/test_ajit.py
--- a/pypy/jit/metainterp/test/test_ajit.py
+++ b/pypy/jit/metainterp/test/test_ajit.py
@@ -508,7 +508,7 @@
assert res == 84 - 61 - 62
self.check_history(call=1) # because the trace starts immediately
- def test_unroll_one_loop(self):
+ def test_unroll_one_loop_iteration(self):
def unroll(x):
return x == 0
myjitdriver = JitDriver(greens = ['x'], reds = ['y'], should_unroll_one_iteration=unroll)
diff --git a/pypy/jit/metainterp/warmstate.py b/pypy/jit/metainterp/warmstate.py
--- a/pypy/jit/metainterp/warmstate.py
+++ b/pypy/jit/metainterp/warmstate.py
@@ -572,6 +572,19 @@
return can_inline_greenargs(*greenargs)
self.can_inline_greenargs = can_inline_greenargs
self.can_inline_callable = can_inline_callable
+
+ if jd._should_unroll_one_iteration_ptr is None:
+ def should_unroll_one_iteration(greenkey):
+ return False
+ else:
+ rtyper = self.warmrunnerdesc.rtyper
+ inline_ptr = jd._should_unroll_one_iteration_ptr
+ def should_unroll_one_iteration(greenkey):
+ greenargs = unwrap_greenkey(greenkey)
+ fn = support.maybe_on_top_of_llinterp(rtyper, inline_ptr)
+ return fn(*greenargs)
+ self.should_unroll_one_iteration = should_unroll_one_iteration
+
if hasattr(jd.jitdriver, 'on_compile'):
def on_compile(logger, token, operations, type, greenkey):
greenargs = unwrap_greenkey(greenkey)
More information about the pypy-commit
mailing list