[pypy-commit] pypy numpy-minilang: reuse the meta interped graph
fijal
noreply at buildbot.pypy.org
Fri Oct 28 00:21:02 CEST 2011
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: numpy-minilang
Changeset: r48546:a9aa7bc83108
Date: 2011-10-28 00:20 +0200
http://bitbucket.org/pypy/pypy/changeset/a9aa7bc83108/
Log: reuse the meta interped graph
diff --git a/pypy/jit/metainterp/history.py b/pypy/jit/metainterp/history.py
--- a/pypy/jit/metainterp/history.py
+++ b/pypy/jit/metainterp/history.py
@@ -929,6 +929,9 @@
def view(self, **kwds):
pass
+ def clear(self):
+ pass
+
class Stats(object):
"""For tests."""
@@ -943,6 +946,12 @@
self.aborted_keys = []
self.invalidated_token_numbers = set()
+ def clear(self):
+ del self.loops[:]
+ del self.locations[:]
+ del self.aborted_keys[:]
+ self.invalidated_token_numbers.clear()
+
def set_history(self, history):
self.operations = history.operations
diff --git a/pypy/jit/metainterp/warmspot.py b/pypy/jit/metainterp/warmspot.py
--- a/pypy/jit/metainterp/warmspot.py
+++ b/pypy/jit/metainterp/warmspot.py
@@ -62,7 +62,7 @@
clear_tcache()
return jittify_and_run(interp, graph, args, backendopt=backendopt, **kwds)
-def jittify_and_run(interp, graph, args, repeat=1,
+def jittify_and_run(interp, graph, args, repeat=1, graph_and_interp_only=False,
backendopt=False, trace_limit=sys.maxint,
inline=False, loop_longevity=0, retrace_limit=5,
function_threshold=4,
@@ -93,6 +93,8 @@
jd.warmstate.set_param_max_retrace_guards(max_retrace_guards)
jd.warmstate.set_param_enable_opts(enable_opts)
warmrunnerdesc.finish()
+ if graph_and_interp_only:
+ return interp, graph
res = interp.eval_graph(graph, args)
if not kwds.get('translate_support_code', False):
warmrunnerdesc.metainterp_sd.profiler.finish()
@@ -157,6 +159,9 @@
def get_stats():
return pyjitpl._warmrunnerdesc.stats
+def reset_stats():
+ pyjitpl._warmrunnerdesc.stats.clear()
+
def get_translator():
return pyjitpl._warmrunnerdesc.translator
diff --git a/pypy/module/micronumpy/test/test_zjit.py b/pypy/module/micronumpy/test/test_zjit.py
--- a/pypy/module/micronumpy/test/test_zjit.py
+++ b/pypy/module/micronumpy/test/test_zjit.py
@@ -7,13 +7,16 @@
from pypy.rlib.nonconst import NonConstant
from pypy.rpython.annlowlevel import llstr, hlstr
from pypy.rpython.test.test_llinterp import interpret
+from pypy.jit.metainterp.warmspot import reset_stats
import py
class TestNumpyJIt(LLJitMixin):
+ graph = None
+ interp = None
+
def run(self, code):
-
space = FakeSpace()
def f(code):
@@ -22,7 +25,17 @@
res = interp.results[0]
assert isinstance(res, BaseArray)
return interp.space.float_w(res.eval(0).wrap(interp.space))
- return self.meta_interp(f, [llstr(code)], listops=True, backendopt=True)
+
+ if self.graph is None:
+ interp, graph = self.meta_interp(f, [llstr(code)],
+ listops=True,
+ backendopt=True,
+ graph_and_interp_only=True)
+ self.__class__.interp = interp
+ self.__class__.graph = graph
+
+ reset_stats()
+ return self.interp.eval_graph(self.graph, [llstr(code)])
def test_add(self):
result = self.run("""
@@ -45,6 +58,7 @@
"setarrayitem_raw": 1, "int_add": 1,
"int_lt": 1, "guard_true": 1, "jump": 1})
+class TstXyz(object):
def test_sum(self):
space = self.space
float64_dtype = self.float64_dtype
More information about the pypy-commit
mailing list