[pypy-svn] r74809 - in pypy/trunk/pypy: jit/metainterp jit/metainterp/test rlib rlib/test
arigo at codespeak.net
arigo at codespeak.net
Thu May 27 15:22:36 CEST 2010
Author: arigo
Date: Thu May 27 15:22:34 2010
New Revision: 74809
Modified:
pypy/trunk/pypy/jit/metainterp/codewriter.py
pypy/trunk/pypy/jit/metainterp/pyjitpl.py
pypy/trunk/pypy/jit/metainterp/test/test_basic.py
pypy/trunk/pypy/jit/metainterp/test/test_codewriter.py
pypy/trunk/pypy/jit/metainterp/test/test_pyjitpl.py
pypy/trunk/pypy/jit/metainterp/test/test_recursive.py
pypy/trunk/pypy/jit/metainterp/warmspot.py
pypy/trunk/pypy/rlib/jit.py
pypy/trunk/pypy/rlib/test/test_jit.py
Log:
Kill the deprecated "leave" hook. Preparation for trying
to clean up pyjitpl's production of CALL_ASSEMBLER.
Modified: pypy/trunk/pypy/jit/metainterp/codewriter.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/codewriter.py (original)
+++ pypy/trunk/pypy/jit/metainterp/codewriter.py Thu May 27 15:22:34 2010
@@ -76,16 +76,13 @@
self.raise_analyzer = None
self.jitdriver = None
- def find_all_graphs(self, portal_graph, leave_graph,
- policy, supports_floats):
+ def find_all_graphs(self, portal_graph, policy, supports_floats):
from pypy.translator.simplify import get_graph
def is_candidate(graph):
return policy.look_inside_graph(graph)
policy.set_supports_floats(supports_floats)
todo = [portal_graph]
- if leave_graph is not None:
- todo.append(leave_graph)
self.candidate_graphs = seen = set(todo)
def callers():
@@ -178,15 +175,12 @@
return graph in self.candidate_graphs
- def generate_bytecode(self, metainterp_sd, portal_graph, leave_graph,
+ def generate_bytecode(self, metainterp_sd, portal_graph,
portal_runner_ptr):
self._start(metainterp_sd, portal_runner_ptr)
- leave_code = None
- if leave_graph:
- leave_code = self.make_one_bytecode((leave_graph, None), False)
portal_code = self.make_portal_bytecode(portal_graph)
- self.metainterp_sd.info_from_codewriter(portal_code, leave_code,
+ self.metainterp_sd.info_from_codewriter(portal_code,
self.class_sizes,
self.list_of_addr2name,
portal_runner_ptr)
@@ -1285,8 +1279,6 @@
calldescr, non_void_args = self.codewriter.getcalldescr(op.args[0],
args,
op.result)
- self.emit('recursion_leave_prep')
- self.emit_varargs(non_void_args)
self.emit('recursive_call')
self.emit(self.get_position(calldescr))
self.emit_varargs([op.args[0]] + non_void_args)
Modified: pypy/trunk/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/trunk/pypy/jit/metainterp/pyjitpl.py Thu May 27 15:22:34 2010
@@ -647,19 +647,6 @@
@arguments("descr", "varargs")
def opimpl_residual_call_loopinvariant(self, calldescr, varargs):
return self.execute_varargs(rop.CALL_LOOPINVARIANT, varargs, calldescr, exc=True)
-
- @arguments("varargs")
- def opimpl_recursion_leave_prep(self, varargs):
- warmrunnerstate = self.metainterp.staticdata.state
- if warmrunnerstate.inlining:
- num_green_args = self.metainterp.staticdata.num_green_args
- greenkey = varargs[:num_green_args]
- if warmrunnerstate.can_inline_callable(greenkey):
- return False
- leave_code = self.metainterp.staticdata.leave_code
- if leave_code is None:
- return False
- return self.perform_call(leave_code, varargs)
@arguments("orgpc", "descr", "varargs")
def opimpl_recursive_call(self, pc, calldescr, varargs):
@@ -1133,7 +1120,6 @@
self.jit_starting_line = 'JIT starting (%s)' % backendmodule
self.portal_code = None
- self.leave_code = None
self._class_sizes = None
self._addr2name_keys = []
self._addr2name_values = []
@@ -1146,10 +1132,9 @@
def _freeze_(self):
return True
- def info_from_codewriter(self, portal_code, leave_code, class_sizes,
+ def info_from_codewriter(self, portal_code, class_sizes,
list_of_addr2name, portal_runner_ptr):
self.portal_code = portal_code
- self.leave_code = leave_code
self._class_sizes = class_sizes
self._addr2name_keys = [key for key, value in list_of_addr2name]
self._addr2name_values = [value for key, value in list_of_addr2name]
Modified: pypy/trunk/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_basic.py Thu May 27 15:22:34 2010
@@ -93,7 +93,7 @@
portal_graph = rtyper.annotator.translator.graphs[0]
cw = codewriter.CodeWriter(rtyper)
- graphs = cw.find_all_graphs(portal_graph, None, JitPolicy(),
+ graphs = cw.find_all_graphs(portal_graph, JitPolicy(),
self.CPUClass.supports_floats)
cw._start(metainterp.staticdata, None)
portal_graph.func._jit_unroll_safe_ = True
Modified: pypy/trunk/pypy/jit/metainterp/test/test_codewriter.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_codewriter.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_codewriter.py Thu May 27 15:22:34 2010
@@ -25,7 +25,7 @@
rtyper = support.annotate(i, [7])
cw = CodeWriter(rtyper)
jitpolicy = JitPolicy()
- res = cw.find_all_graphs(rtyper.annotator.translator.graphs[0], None,
+ res = cw.find_all_graphs(rtyper.annotator.translator.graphs[0],
jitpolicy, True)
translator = rtyper.annotator.translator
@@ -41,13 +41,13 @@
cw = CodeWriter(rtyper)
jitpolicy = JitPolicy()
translator = rtyper.annotator.translator
- res = cw.find_all_graphs(translator.graphs[0], None, jitpolicy,
+ res = cw.find_all_graphs(translator.graphs[0], jitpolicy,
supports_floats=True)
funcs = set([graph.func for graph in res])
assert funcs == set([f, g])
cw = CodeWriter(rtyper)
- res = cw.find_all_graphs(translator.graphs[0], None, jitpolicy,
+ res = cw.find_all_graphs(translator.graphs[0], jitpolicy,
supports_floats=False)
funcs = [graph.func for graph in res]
assert funcs == [f]
@@ -75,7 +75,7 @@
cw = CodeWriter(rtyper)
jitpolicy = JitPolicy()
translator = rtyper.annotator.translator
- res = cw.find_all_graphs(translator.graphs[0], None, jitpolicy,
+ res = cw.find_all_graphs(translator.graphs[0], jitpolicy,
supports_floats=True)
funcs = set([graph.func for graph in res])
assert funcs == set([f, h])
@@ -96,7 +96,7 @@
cw = CodeWriter(rtyper)
jitpolicy = JitPolicy()
translator = rtyper.annotator.translator
- res = cw.find_all_graphs(translator.graphs[0], None, jitpolicy,
+ res = cw.find_all_graphs(translator.graphs[0], jitpolicy,
supports_floats=True)
funcs = set([graph.func for graph in res])
assert funcs == set([g, h])
@@ -110,7 +110,7 @@
jitpolicy = JitPolicy()
translator = rtyper.annotator.translator
# does not explode
- cw.find_all_graphs(translator.graphs[0], None, jitpolicy, True)
+ cw.find_all_graphs(translator.graphs[0], jitpolicy, True)
class SomeLabel(object):
def __eq__(self, other):
Modified: pypy/trunk/pypy/jit/metainterp/test/test_pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_pyjitpl.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_pyjitpl.py Thu May 27 15:22:34 2010
@@ -121,7 +121,7 @@
def __init__(self):
pass
metainterp_sd = FakeMetaInterpSd()
- metainterp_sd.info_from_codewriter(None, None, None,
+ metainterp_sd.info_from_codewriter(None, None,
[(123, "a"), (456, "b")],
None)
assert metainterp_sd.get_name_from_address(123) == 'a'
Modified: pypy/trunk/pypy/jit/metainterp/test/test_recursive.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_recursive.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_recursive.py Thu May 27 15:22:34 2010
@@ -494,77 +494,6 @@
res = self.meta_interp(main, [1], optimizer=OPTIMIZER_SIMPLE, trace_limit=TRACE_LIMIT)
self.check_loops(call_may_force=0, call=0)
- def test_leave_jit_hook(self):
- from pypy.rpython.annlowlevel import hlstr
- def p(code, pc):
- code = hlstr(code)
- return "%s %d %s" % (code, pc, code[pc])
- def c(code, pc):
- return "L" not in hlstr(code)
-
- def really_leave(frame):
- frame.hookcalled = True
-
- def leave(code, pc, frame):
- really_leave(frame)
-
- class ExpectedHook(Exception):
- pass
- class UnexpectedHook(Exception):
- pass
-
- myjitdriver = JitDriver(greens=['code', 'pc'], reds=['self'],
- get_printable_location=p, can_inline=c,
- leave=leave)
- class Frame(object):
- hookcalled = True
-
- def __init__(self, n):
- self.n = n
- self.hookcalled = False
- def f(self, code):
- pc = 0
- while pc < len(code):
-
- myjitdriver.jit_merge_point(self=self, code=code, pc=pc)
- op = code[pc]
- if op == "-":
- self.n -= 1
- elif op == "c":
- frame = Frame(self.n)
- self.n = frame.f("---i---")
- if we_are_jitted():
- if frame.hookcalled:
- raise UnexpectedHook
- elif op == "C":
- frame = Frame(self.n)
- self.n = frame.f("cL")
- if we_are_jitted():
- if not frame.hookcalled:
- raise ExpectedHook
- elif op == "i":
- if self.n % 5 == 1:
- return self.n
- elif op == "l":
- if self.n > 0:
- myjitdriver.can_enter_jit(self=self, code=code, pc=0)
- pc = 0
- continue
- elif op == "L":
- if self.n > 50:
- myjitdriver.can_enter_jit(self=self, code=code, pc=0)
- pc = 0
- continue
- else:
- assert 0
- pc += 1
- return self.n
- def main(n):
- frame = Frame(n)
- return frame.f("C-l")
- res = self.meta_interp(main, [100], optimizer=OPTIMIZER_SIMPLE, inline=True)
- assert res == main(100)
-
def test_trace_from_start(self):
def p(code, pc):
code = hlstr(code)
Modified: pypy/trunk/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/warmspot.py (original)
+++ pypy/trunk/pypy/jit/metainterp/warmspot.py Thu May 27 15:22:34 2010
@@ -150,10 +150,8 @@
policy = JitPolicy()
self.set_translator(translator)
self.find_portal()
- self.make_leave_jit_graph()
self.codewriter = codewriter.CodeWriter(self.rtyper)
graphs = self.codewriter.find_all_graphs(self.portal_graph,
- self.leave_graph,
policy,
CPUClass.supports_floats)
policy.dump_unsafe_loops()
@@ -177,7 +175,6 @@
self.codewriter.generate_bytecode(self.metainterp_sd,
self.portal_graph,
- self.leave_graph,
self.portal_runner_ptr
)
self.rewrite_can_enter_jit()
@@ -332,6 +329,7 @@
self.metainterp_sd.DoneWithThisFrameFloat = DoneWithThisFrameFloat
self.metainterp_sd.ExitFrameWithExceptionRef = ExitFrameWithExceptionRef
self.metainterp_sd.ContinueRunningNormally = ContinueRunningNormally
+
def make_enter_function(self):
from pypy.jit.metainterp.warmstate import WarmEnterState
state = WarmEnterState(self)
@@ -369,18 +367,6 @@
maybe_compile_and_run(*args)
maybe_enter_from_start._always_inline_ = True
self.maybe_enter_from_start_fn = maybe_enter_from_start
-
-
- def make_leave_jit_graph(self):
- self.leave_graph = None
- if self.jitdriver.leave:
- args_s = self.portal_args_s
- from pypy.annotation import model as annmodel
- annhelper = MixLevelHelperAnnotator(self.translator.rtyper)
- s_result = annmodel.s_None
- self.leave_graph = annhelper.getgraph(self.jitdriver.leave,
- args_s, s_result)
- annhelper.finish()
def make_driverhook_graphs(self):
from pypy.rlib.jit import BaseJitCell
Modified: pypy/trunk/pypy/rlib/jit.py
==============================================================================
--- pypy/trunk/pypy/rlib/jit.py (original)
+++ pypy/trunk/pypy/rlib/jit.py Thu May 27 15:22:34 2010
@@ -224,8 +224,7 @@
def __init__(self, greens=None, reds=None, virtualizables=None,
get_jitcell_at=None, set_jitcell_at=None,
can_inline=None, get_printable_location=None,
- confirm_enter_jit=None,
- leave=None): # XXX 'leave' is deprecated
+ confirm_enter_jit=None):
if greens is not None:
self.greens = greens
if reds is not None:
@@ -243,7 +242,6 @@
self.get_printable_location = get_printable_location
self.can_inline = can_inline
self.confirm_enter_jit = confirm_enter_jit
- self.leave = leave
def _freeze_(self):
return True
@@ -358,7 +356,6 @@
**kwds_s)
self.annotate_hook(driver.can_inline, driver.greens, **kwds_s)
self.annotate_hook(driver.get_printable_location, driver.greens, **kwds_s)
- self.annotate_hook(driver.leave, driver.greens + driver.reds, **kwds_s)
def annotate_hook(self, func, variables, args_s=[], **kwds_s):
if func is None:
Modified: pypy/trunk/pypy/rlib/test/test_jit.py
==============================================================================
--- pypy/trunk/pypy/rlib/test/test_jit.py (original)
+++ pypy/trunk/pypy/rlib/test/test_jit.py Thu May 27 15:22:34 2010
@@ -61,12 +61,10 @@
def can_inline(m): pass
def get_printable_location(m): pass
- def leave(m, n): pass
myjitdriver = JitDriver(greens=['m'], reds=['n'],
can_inline=can_inline,
- get_printable_location=get_printable_location,
- leave=leave)
+ get_printable_location=get_printable_location)
def fn(n):
m = 42.5
while n > 0:
@@ -83,9 +81,6 @@
return [v.concretetype for v in graph.getargs()]
raise Exception, 'function %r has not been annotated' % func
- leave_args = getargs(leave)
- assert leave_args == [lltype.Float, lltype.Signed]
-
can_inline_args = getargs(can_inline)
get_printable_location_args = getargs(get_printable_location)
assert can_inline_args == get_printable_location_args == [lltype.Float]
More information about the Pypy-commit
mailing list