[pypy-svn] r67626 - in pypy/trunk/pypy: jit/backend/x86/test jit/metainterp jit/metainterp/test jit/tl jit/tl/tla rlib
pedronis at codespeak.net
pedronis at codespeak.net
Thu Sep 10 18:49:16 CEST 2009
Author: pedronis
Date: Thu Sep 10 18:49:15 2009
New Revision: 67626
Added:
pypy/trunk/pypy/jit/metainterp/test/test_zrpy_set_param.py (contents, props changed)
Modified:
pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py
pypy/trunk/pypy/jit/metainterp/compile.py
pypy/trunk/pypy/jit/metainterp/pyjitpl.py
pypy/trunk/pypy/jit/metainterp/test/test_basic.py
pypy/trunk/pypy/jit/metainterp/test/test_exception.py
pypy/trunk/pypy/jit/metainterp/test/test_loop_dummy.py
pypy/trunk/pypy/jit/metainterp/test/test_recursive.py
pypy/trunk/pypy/jit/metainterp/test/test_slist.py
pypy/trunk/pypy/jit/metainterp/test/test_tl.py
pypy/trunk/pypy/jit/metainterp/test/test_virtualizable.py
pypy/trunk/pypy/jit/metainterp/test/test_warmspot.py
pypy/trunk/pypy/jit/metainterp/test/test_zrpy_basic.py
pypy/trunk/pypy/jit/metainterp/warmspot.py
pypy/trunk/pypy/jit/tl/pypyjit_child.py
pypy/trunk/pypy/jit/tl/tla/test_tla.py
pypy/trunk/pypy/rlib/jit.py
Log:
(micke, pedronis) make the optimizer switchable at runtime with
jitdrive.set_param('optimizer', jit.OPTIMIZER_FULL|jit.OPTIMIZER_SIMPLE)
full is the default corresponding to pypy.metainterp.optimize, simpe is simple_optimize
Modified: pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/test/test_zrpy_gc.py Thu Sep 10 18:49:15 2009
@@ -9,7 +9,7 @@
from pypy.rlib import rgc
from pypy.rpython.lltypesystem import lltype, llmemory, rffi
from pypy.rpython.lltypesystem.lloperation import llop
-from pypy.rlib.jit import JitDriver
+from pypy.rlib.jit import JitDriver, OPTIMIZER_SIMPLE
from pypy.jit.backend.x86.runner import CPU386
from pypy.jit.backend.llsupport.gc import GcRefList, GcRootMap_asmgcc
from pypy.jit.backend.x86.regalloc import stack_pos
@@ -58,7 +58,6 @@
from pypy.annotation.listdef import s_list_of_strings
from pypy.translator.translator import TranslationContext
from pypy.jit.metainterp.warmspot import apply_jit
- from pypy.jit.metainterp import simple_optimize
from pypy.translator.c import genc
#
t = TranslationContext()
@@ -69,7 +68,7 @@
t.buildannotator().build_types(f, [s_list_of_strings])
t.buildrtyper().specialize()
if kwds['jit']:
- apply_jit(t, CPUClass=CPU386, optimizer=simple_optimize)
+ apply_jit(t, CPUClass=CPU386, optimizer=OPTIMIZER_SIMPLE)
cbuilder = genc.CStandaloneBuilder(t, f, t.config)
cbuilder.generate_source()
cbuilder.compile()
Modified: pypy/trunk/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/compile.py (original)
+++ pypy/trunk/pypy/jit/metainterp/compile.py Thu Sep 10 18:49:15 2009
@@ -104,8 +104,8 @@
loop.operations = history.operations
loop.operations[-1].jump_target = loop
metainterp_sd = metainterp.staticdata
- old_loop = metainterp_sd.optimize_loop(metainterp_sd.options, old_loops,
- loop, metainterp.cpu)
+ old_loop = metainterp_sd.state.optimize_loop(metainterp_sd.options, old_loops,
+ loop, metainterp.cpu)
if old_loop is not None:
if we_are_translated() and DEBUG > 0:
debug_print("reusing old loop")
@@ -374,9 +374,9 @@
new_loop = create_empty_loop(metainterp)
new_loop.operations = metainterp.history.operations
metainterp_sd = metainterp.staticdata
- target_loop = metainterp_sd.optimize_bridge(metainterp_sd.options,
- old_loops, new_loop,
- metainterp.cpu)
+ target_loop = metainterp_sd.state.optimize_bridge(metainterp_sd.options,
+ old_loops, new_loop,
+ metainterp.cpu)
# Did it work? If not, prepare_loop_from_bridge() will probably be used.
if target_loop is not None:
# Yes, we managed to create a bridge. Dispatch to resumekey to
Modified: pypy/trunk/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/trunk/pypy/jit/metainterp/pyjitpl.py Thu Sep 10 18:49:15 2009
@@ -1018,7 +1018,7 @@
virtualizable_info = None
def __init__(self, portal_graph, graphs, cpu, stats, options,
- optimizer=None, profile=None, warmrunnerdesc=None,
+ profile=None, warmrunnerdesc=None,
leave_graph=None):
self.portal_graph = portal_graph
self.cpu = cpu
@@ -1032,10 +1032,6 @@
self.opcode_implementations = []
self.opcode_names = []
self.opname_to_index = {}
- if optimizer is None:
- from pypy.jit.metainterp import optimize as optimizer
- self.optimize_loop = optimizer.optimize_loop
- self.optimize_bridge = optimizer.optimize_bridge
if profile is not None:
self.profiler = profile()
@@ -1046,23 +1042,21 @@
self.warmrunnerdesc = warmrunnerdesc
self._op_goto_if_not = self.find_opcode('goto_if_not')
- optmodule = self.optimize_loop.__module__
- optmodule = optmodule.split('.')[-1]
backendmodule = self.cpu.__module__
backendmodule = backendmodule.split('.')[-2]
- self.jit_starting_line = 'JIT starting (%s, %s)' % (optmodule,
- backendmodule)
-
+ self.jit_starting_line = 'JIT starting (%s)' % backendmodule
self.leave_graph = leave_graph
def _freeze_(self):
return True
- def finish_setup(self):
+ def finish_setup(self, optimizer=None):
warmrunnerdesc = self.warmrunnerdesc
if warmrunnerdesc is not None:
self.num_green_args = warmrunnerdesc.num_green_args
self.state = warmrunnerdesc.state
+ if optimizer is not None:
+ self.state.set_param_optimizer(optimizer)
else:
self.num_green_args = 0
self.state = None
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 Sep 10 18:49:15 2009
@@ -1,6 +1,7 @@
import py
import sys
from pypy.rlib.jit import JitDriver, we_are_jitted, hint, dont_look_inside
+from pypy.rlib.jit import OPTIMIZER_FULL, OPTIMIZER_SIMPLE
from pypy.jit.metainterp.warmspot import ll_meta_interp, get_stats
from pypy.jit.backend.llgraph import runner
from pypy.jit.metainterp import support, codewriter, pyjitpl, history
@@ -12,7 +13,7 @@
from pypy.rpython.ootypesystem import ootype
def get_metainterp(func, values, CPUClass, type_system, policy,
- listops=False, optimizer=None):
+ listops=False, optimizer=OPTIMIZER_FULL):
from pypy.annotation.policy import AnnotatorPolicy
from pypy.annotation.model import lltype_to_annotation
from pypy.rpython.test.test_llinterp import gengraph
@@ -23,9 +24,8 @@
cpu = CPUClass(rtyper, stats, False)
graph = rtyper.annotator.translator.graphs[0]
opt = history.Options(specialize=False, listops=listops)
- metainterp_sd = pyjitpl.MetaInterpStaticData(graph, [], cpu, stats, opt,
- optimizer=optimizer)
- metainterp_sd.finish_setup()
+ metainterp_sd = pyjitpl.MetaInterpStaticData(graph, [], cpu, stats, opt)
+ metainterp_sd.finish_setup(optimizer=optimizer)
metainterp = pyjitpl.MetaInterp(metainterp_sd)
return metainterp, rtyper
@@ -74,13 +74,17 @@
def attach_unoptimized_bridge_from_interp(self, greenkey, newloop):
pass
+ # pick the optimizer this way
+ optimize_loop = staticmethod(simple_optimize.optimize_loop)
+ optimize_bridge = staticmethod(simple_optimize.optimize_bridge)
+
trace_limit = sys.maxint
if policy is None:
policy = JitPolicy()
metainterp, rtyper = get_metainterp(f, args, self.CPUClass,
self.type_system, policy=policy,
- optimizer=simple_optimize,
+ optimizer="bogus",
**kwds)
cw = codewriter.CodeWriter(metainterp.staticdata, policy)
graph = rtyper.annotator.translator.graphs[0]
@@ -785,7 +789,6 @@
self.meta_interp(f, [40, 0])
def test_const_inputargs(self):
- from pypy.jit.metainterp import simple_optimize
myjitdriver = JitDriver(greens = ['m'], reds = ['n', 'x'])
def f(n, x):
m = 0x7FFFFFFF
@@ -798,7 +801,7 @@
return x
res = self.meta_interp(f, [50, 1],
- optimizer=simple_optimize)
+ optimizer=OPTIMIZER_SIMPLE)
assert res == 42
def test_set_param(self):
@@ -832,7 +835,7 @@
res = self.interp_operations(f, [3, 5])
assert res == 8
self.check_history_(int_add=0, call=1)
-
+
class TestOOtype(BasicTests, OOJitMixin):
@@ -886,7 +889,6 @@
def test_subclassof(self):
- from pypy.jit.metainterp import simple_optimize
A = ootype.Instance("A", ootype.ROOT)
B = ootype.Instance("B", A)
clsA = ootype.runtimeClass(A)
@@ -911,12 +913,12 @@
res = self.meta_interp(f, [1, 100],
policy=StopAtXPolicy(getcls),
- optimizer=simple_optimize)
+ optimizer=OPTIMIZER_SIMPLE)
assert not res
res = self.meta_interp(f, [0, 100],
policy=StopAtXPolicy(getcls),
- optimizer=simple_optimize)
+ optimizer=OPTIMIZER_SIMPLE)
assert res
Modified: pypy/trunk/pypy/jit/metainterp/test/test_exception.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_exception.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_exception.py Thu Sep 10 18:49:15 2009
@@ -1,9 +1,8 @@
import py, sys
from pypy.jit.metainterp.test.test_basic import LLJitMixin, OOJitMixin
-from pypy.rlib.jit import JitDriver
+from pypy.rlib.jit import JitDriver, OPTIMIZER_SIMPLE
from pypy.rlib.rarithmetic import ovfcheck, LONG_BIT, intmask
from pypy.jit.metainterp.policy import StopAtXPolicy
-from pypy.jit.metainterp import simple_optimize
class ExceptionTests:
@@ -447,10 +446,10 @@
n += 1
return m
- res = self.meta_interp(f, [1, 1, 0], optimizer=simple_optimize)
+ res = self.meta_interp(f, [1, 1, 0], optimizer=OPTIMIZER_SIMPLE)
assert res == f(1, 1, 0)
res = self.meta_interp(f, [809644098, 16, 0],
- optimizer=simple_optimize)
+ optimizer=OPTIMIZER_SIMPLE)
assert res == f(809644098, 16, 0)
def test_int_neg_ovf(self):
@@ -471,7 +470,7 @@
return m
res = self.meta_interp(f, [-sys.maxint-1+100, 0],
- optimizer=simple_optimize)
+ optimizer=OPTIMIZER_SIMPLE)
assert res == 16
def test_reraise_through_portal(self):
@@ -554,7 +553,7 @@
return 8
res = self.meta_interp(main, [41], repeat=7, policy=StopAtXPolicy(x),
- optimizer=simple_optimize)
+ optimizer=OPTIMIZER_SIMPLE)
assert res == 8
class MyError(Exception):
Modified: pypy/trunk/pypy/jit/metainterp/test/test_loop_dummy.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_loop_dummy.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_loop_dummy.py Thu Sep 10 18:49:15 2009
@@ -1,12 +1,12 @@
from pypy.jit.metainterp.test import test_loop, test_send
from pypy.jit.metainterp.warmspot import ll_meta_interp
-from pypy.jit.metainterp import simple_optimize
+from pypy.rlib.jit import OPTIMIZER_SIMPLE
from pypy.jit.metainterp.test.test_basic import LLJitMixin, OOJitMixin
class LoopDummyTest(test_loop.LoopTest, test_send.SendTests):
def meta_interp(self, func, args, **kwds):
- return ll_meta_interp(func, args, optimizer=simple_optimize,
+ return ll_meta_interp(func, args, optimizer=OPTIMIZER_SIMPLE,
CPUClass=self.CPUClass,
type_system=self.type_system,
**kwds)
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 Sep 10 18:49:15 2009
@@ -1,7 +1,6 @@
import py
-from pypy.rlib.jit import JitDriver, we_are_jitted
+from pypy.rlib.jit import JitDriver, we_are_jitted, OPTIMIZER_SIMPLE
from pypy.jit.metainterp.test.test_basic import LLJitMixin, OOJitMixin
-from pypy.jit.metainterp import simple_optimize
from pypy.jit.metainterp.policy import StopAtXPolicy
from pypy.rpython.annlowlevel import hlstr
from pypy.jit.metainterp.warmspot import CannotInlineCanEnterJit, get_stats
@@ -23,7 +22,7 @@
return f(n+1)
else:
return 1
- res = self.meta_interp(main, [20], optimizer=simple_optimize)
+ res = self.meta_interp(main, [20], optimizer=OPTIMIZER_SIMPLE)
assert res == main(20)
def test_simple_recursion_with_exc(self):
@@ -49,7 +48,7 @@
return f(n+1)
else:
return 1
- res = self.meta_interp(main, [20], optimizer=simple_optimize)
+ res = self.meta_interp(main, [20], optimizer=OPTIMIZER_SIMPLE)
assert res == main(20)
def test_recursion_three_times(self):
@@ -72,7 +71,7 @@
print
for i in range(1, 11):
print '%3d %9d' % (i, f(i))
- res = self.meta_interp(main, [10], optimizer=simple_optimize)
+ res = self.meta_interp(main, [10], optimizer=OPTIMIZER_SIMPLE)
assert res == main(10)
self.check_enter_count_at_most(10)
@@ -92,7 +91,7 @@
opaque(n, i)
i += 1
return stack.pop()
- res = self.meta_interp(f, [1], optimizer=simple_optimize, repeat=2,
+ res = self.meta_interp(f, [1], optimizer=OPTIMIZER_SIMPLE, repeat=2,
policy=StopAtXPolicy(opaque))
assert res == 1
@@ -144,9 +143,9 @@
codes = [code, subcode]
f = self.get_interpreter(codes)
- assert self.meta_interp(f, [0, 0, 0], optimizer=simple_optimize) == 42
+ assert self.meta_interp(f, [0, 0, 0], optimizer=OPTIMIZER_SIMPLE) == 42
self.check_loops(int_add = 1, call = 1)
- assert self.meta_interp(f, [0, 0, 0], optimizer=simple_optimize,
+ assert self.meta_interp(f, [0, 0, 0], optimizer=OPTIMIZER_SIMPLE,
inline=True) == 42
self.check_loops(int_add = 2, call = 0, guard_no_exception = 0)
@@ -157,7 +156,7 @@
f = self.get_interpreter(codes)
- assert self.meta_interp(f, [0, 0, 0], optimizer=simple_optimize,
+ assert self.meta_interp(f, [0, 0, 0], optimizer=OPTIMIZER_SIMPLE,
inline=True) == 42
self.check_loops(call = 1)
@@ -169,7 +168,7 @@
f = self.get_interpreter(codes, always_inline=True)
try:
- self.meta_interp(f, [0, 0, 0], optimizer=simple_optimize,
+ self.meta_interp(f, [0, 0, 0], optimizer=OPTIMIZER_SIMPLE,
inline=True)
except CannotInlineCanEnterJit:
pass
@@ -210,7 +209,7 @@
def main(n):
return f("c-l", n)
print main(100)
- res = self.meta_interp(main, [100], optimizer=simple_optimize, inline=True)
+ res = self.meta_interp(main, [100], optimizer=OPTIMIZER_SIMPLE, inline=True)
assert res == 0
def test_exception_in_inlined_function(self):
@@ -253,7 +252,7 @@
return n
def main(n):
return f("c-l", n)
- res = self.meta_interp(main, [100], optimizer=simple_optimize, inline=True)
+ res = self.meta_interp(main, [100], optimizer=OPTIMIZER_SIMPLE, inline=True)
assert res == main(100)
def test_recurse_during_blackholing(self):
@@ -295,7 +294,7 @@
myjitdriver.set_param('trace_eagerness', 5)
return f("c-l", n)
expected = main(100)
- res = self.meta_interp(main, [100], optimizer=simple_optimize, inline=True)
+ res = self.meta_interp(main, [100], optimizer=OPTIMIZER_SIMPLE, inline=True)
assert res == expected
def check_max_trace_length(self, length):
@@ -321,7 +320,7 @@
n -= 1
return n
TRACE_LIMIT = 66
- res = self.meta_interp(loop, [100], optimizer=simple_optimize, inline=True, trace_limit=TRACE_LIMIT)
+ res = self.meta_interp(loop, [100], optimizer=OPTIMIZER_SIMPLE, inline=True, trace_limit=TRACE_LIMIT)
assert res == 0
self.check_max_trace_length(TRACE_LIMIT)
self.check_enter_count(15) # maybe
@@ -345,7 +344,7 @@
n = recursive(n)
n -= 1
TRACE_LIMIT = 20
- res = self.meta_interp(loop, [100], optimizer=simple_optimize, inline=True, trace_limit=TRACE_LIMIT)
+ res = self.meta_interp(loop, [100], optimizer=OPTIMIZER_SIMPLE, inline=True, trace_limit=TRACE_LIMIT)
self.check_max_trace_length(TRACE_LIMIT)
self.check_aborted_count(8)
self.check_enter_count_at_most(30)
@@ -370,10 +369,10 @@
myjitdriver.set_param('inlining', False)
return loop(100)
- res = self.meta_interp(main, [0], optimizer=simple_optimize, trace_limit=TRACE_LIMIT)
+ res = self.meta_interp(main, [0], optimizer=OPTIMIZER_SIMPLE, trace_limit=TRACE_LIMIT)
self.check_loops(call=1)
- res = self.meta_interp(main, [1], optimizer=simple_optimize, trace_limit=TRACE_LIMIT)
+ res = self.meta_interp(main, [1], optimizer=OPTIMIZER_SIMPLE, trace_limit=TRACE_LIMIT)
self.check_loops(call=0)
def test_leave_jit_hook(self):
@@ -441,7 +440,7 @@
def main(n):
frame = Frame(n)
return frame.f("C-l")
- res = self.meta_interp(main, [100], optimizer=simple_optimize, inline=True)
+ res = self.meta_interp(main, [100], optimizer=OPTIMIZER_SIMPLE, inline=True)
assert res == main(100)
class TestLLtype(RecursiveTests, LLJitMixin):
Modified: pypy/trunk/pypy/jit/metainterp/test/test_slist.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_slist.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_slist.py Thu Sep 10 18:49:15 2009
@@ -1,7 +1,7 @@
import py
from pypy.jit.metainterp.policy import StopAtXPolicy
from pypy.jit.metainterp.test.test_basic import LLJitMixin, OOJitMixin
-from pypy.rlib.jit import JitDriver
+from pypy.rlib.jit import JitDriver, OPTIMIZER_SIMPLE
class ListTests:
@@ -61,7 +61,7 @@
myjitdriver.jit_merge_point(n=n, lst=lst)
n -= 1
return lst[n]
- res = self.meta_interp(f, [21], listops=True, optimizer=simple_optimize)
+ res = self.meta_interp(f, [21], listops=True, optimizer=OPTIMIZER_SIMPLE)
assert res == 0
def test_getitem(self):
Modified: pypy/trunk/pypy/jit/metainterp/test/test_tl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_tl.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_tl.py Thu Sep 10 18:49:15 2009
@@ -1,5 +1,5 @@
import py
-from pypy.rlib.jit import JitDriver
+from pypy.rlib.jit import JitDriver, OPTIMIZER_SIMPLE
from pypy.jit.metainterp.policy import StopAtXPolicy
from pypy.jit.metainterp.test.test_basic import OOJitMixin, LLJitMixin
@@ -144,7 +144,7 @@
def main(num, arg):
return interp(codes[num], inputarg=arg)
- res = self.meta_interp(main, [0, 20], optimizer=simple_optimize,
+ res = self.meta_interp(main, [0, 20], optimizer=OPTIMIZER_SIMPLE,
listops=listops, backendopt=True, policy=policy)
assert res == 0
Modified: pypy/trunk/pypy/jit/metainterp/test/test_virtualizable.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_virtualizable.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_virtualizable.py Thu Sep 10 18:49:15 2009
@@ -4,12 +4,13 @@
from pypy.rpython.annlowlevel import llhelper
from pypy.jit.metainterp.policy import StopAtXPolicy
from pypy.rlib.jit import JitDriver, hint, dont_look_inside
+from pypy.rlib.jit import OPTIMIZER_SIMPLE, OPTIMIZER_FULL
from pypy.rlib.rarithmetic import intmask
from pypy.jit.metainterp.test.test_basic import LLJitMixin, OOJitMixin
from pypy.rpython.lltypesystem.rvirtualizable2 import VABLERTIPTR
from pypy.rpython.rclass import FieldListAccessor
from pypy.jit.metainterp.warmspot import get_stats, get_translator
-from pypy.jit.metainterp import history, heaptracker, simple_optimize
+from pypy.jit.metainterp import history, heaptracker
from pypy.jit.metainterp.test.test_optimizefindnode import LLtypeMixin
def promote_virtualizable(*args):
@@ -437,7 +438,7 @@
promote_virtualizable(xy2, 'inst_l2')
return xy2.inst_l2[0]
expected = f(20)
- res = self.meta_interp(f, [20], optimizer=simple_optimize)
+ res = self.meta_interp(f, [20], optimizer=OPTIMIZER_SIMPLE)
assert res == expected
self.check_loops(getfield_gc=3, setfield_gc=0,
arraylen_gc=1, getarrayitem_gc=1, setarrayitem_gc=1)
@@ -1021,9 +1022,8 @@
frame = Frame(n)
return f("c-l", frame)
print main(100)
- from pypy.jit.metainterp import optimize
- res = self.meta_interp(main, [100],
- inline=True, optimizer=optimize)
+ res = self.meta_interp(main, [100], inline=True,
+ optimizer=OPTIMIZER_FULL)
class TestOOtype(#ExplicitVirtualizableTests,
ImplicitVirtualizableTests,
Modified: pypy/trunk/pypy/jit/metainterp/test/test_warmspot.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_warmspot.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_warmspot.py Thu Sep 10 18:49:15 2009
@@ -1,8 +1,10 @@
from pypy.jit.metainterp.warmspot import ll_meta_interp, cast_whatever_to_int
from pypy.jit.metainterp.warmspot import get_stats
-from pypy.rlib.jit import JitDriver
+from pypy.rlib.jit import JitDriver, OPTIMIZER_FULL, OPTIMIZER_SIMPLE
from pypy.jit.backend.llgraph import runner
+from pypy.jit.metainterp.test.test_basic import LLJitMixin, OOJitMixin
+
def test_translate_cast_whatever_to_int():
from pypy.rpython.test.test_llinterp import interpret
@@ -19,12 +21,6 @@
class WarmspotTests(object):
- def meta_interp(self, *args, **kwds):
- assert 'CPUClass' not in kwds
- assert 'type_system' not in kwds
- kwds['CPUClass'] = self.CPUClass
- kwds['type_system'] = self.type_system
- return ll_meta_interp(*args, **kwds)
def test_basic(self):
mydriver = JitDriver(reds=['a'],
@@ -105,11 +101,62 @@
for loc in get_stats().locations:
assert loc == 'GREEN IS 123.'
+ def test_set_param_optimizer(self):
+ myjitdriver = JitDriver(greens = [], reds = ['n'])
+ class A(object):
+ def m(self, n):
+ return n-1
+
+ def g(n):
+ while n > 0:
+ myjitdriver.can_enter_jit(n=n)
+ myjitdriver.jit_merge_point(n=n)
+ n = A().m(n)
+ return n
+ def f(n, optimizer):
+ myjitdriver.set_param('optimizer', optimizer)
+ return g(n)
+
+ # check that the set_param will override the default
+ res = self.meta_interp(f, [10, OPTIMIZER_SIMPLE],
+ optimizer=OPTIMIZER_FULL)
+ assert res == 0
+ self.check_loops(new_with_vtable=1)
+
+ res = self.meta_interp(f, [10, OPTIMIZER_FULL],
+ optimizer=OPTIMIZER_SIMPLE)
+ assert res == 0
+ self.check_loops(new_with_vtable=0)
+
+ def test_optimizer_default_choice(self):
+ myjitdriver = JitDriver(greens = [], reds = ['n'])
+ def f(n):
+ while n > 0:
+ myjitdriver.can_enter_jit(n=n)
+ myjitdriver.jit_merge_point(n=n)
+ n -= 1
+ return n
+
+ from pypy.rpython.test.test_llinterp import gengraph
+ t, rtyper, graph = gengraph(f, [int], type_system=self.type_system,
+ **{'translation.gc': 'boehm'})
+
+ from pypy.jit.metainterp.warmspot import WarmRunnerDesc
+
+ warmrunnerdescr = WarmRunnerDesc(t, CPUClass=self.CPUClass,
+ optimizer=None) # pick default
+
+ from pypy.jit.metainterp import optimize
+
+ assert warmrunnerdescr.state.optimize_loop is optimize.optimize_loop
+ assert warmrunnerdescr.state.optimize_bridge is optimize.optimize_bridge
+
+
-class TestLLWarmspot(WarmspotTests):
+class TestLLWarmspot(WarmspotTests, LLJitMixin):
CPUClass = runner.LLtypeCPU
type_system = 'lltype'
-class TestOOWarmspot(WarmspotTests):
+class TestOOWarmspot(WarmspotTests, OOJitMixin):
CPUClass = runner.OOtypeCPU
type_system = 'ootype'
Modified: pypy/trunk/pypy/jit/metainterp/test/test_zrpy_basic.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_zrpy_basic.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_zrpy_basic.py Thu Sep 10 18:49:15 2009
@@ -2,7 +2,7 @@
from pypy.jit.metainterp.warmspot import rpython_ll_meta_interp, ll_meta_interp
from pypy.jit.metainterp.test import test_basic
from pypy.jit.backend.llgraph import runner
-from pypy.rlib.jit import JitDriver
+from pypy.rlib.jit import JitDriver, OPTIMIZER_FULL
from pypy.jit.conftest import option
@@ -49,7 +49,7 @@
from pypy.jit.metainterp import optimize
res = rpython_ll_meta_interp(f, [17], loops=2, CPUClass=self.CPUClass,
type_system=self.type_system,
- optimizer=optimize)
+ optimizer=OPTIMIZER_FULL)
assert res == (17+14+11+8+7+6+5+4) * 10
Added: pypy/trunk/pypy/jit/metainterp/test/test_zrpy_set_param.py
==============================================================================
--- (empty file)
+++ pypy/trunk/pypy/jit/metainterp/test/test_zrpy_set_param.py Thu Sep 10 18:49:15 2009
@@ -0,0 +1,10 @@
+import py, sys
+from pypy.jit.metainterp.test import test_warmspot, test_basic
+from pypy.jit.metainterp.test.test_zrpy_basic import LLInterpJitMixin
+
+
+class TestLLSetParam(LLInterpJitMixin):
+
+ test_set_param = test_basic.BasicTests.test_set_param.im_func
+
+ test_set_param_optimizer = test_warmspot.WarmspotTests.test_set_param_optimizer.im_func
Modified: pypy/trunk/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/warmspot.py (original)
+++ pypy/trunk/pypy/jit/metainterp/warmspot.py Thu Sep 10 18:49:15 2009
@@ -10,7 +10,7 @@
from pypy.objspace.flow.model import checkgraph, Link, copygraph
from pypy.rlib.objectmodel import we_are_translated
from pypy.rlib.unroll import unrolling_iterable
-from pypy.rlib.jit import PARAMETERS
+from pypy.rlib.jit import PARAMETERS, OPTIMIZER_SIMPLE, OPTIMIZER_FULL
from pypy.rlib.rarithmetic import r_uint, intmask
from pypy.rlib.debug import debug_print
from pypy.rpython.lltypesystem.lloperation import llop
@@ -135,7 +135,7 @@
class WarmRunnerDesc:
def __init__(self, translator, policy=None, backendopt=True, CPUClass=None,
- **kwds):
+ optimizer=None, **kwds):
pyjitpl._warmrunnerdesc = self # this is a global for debugging only!
if policy is None:
policy = JitPolicy()
@@ -160,7 +160,7 @@
self.rewrite_can_enter_jit()
self.rewrite_set_param()
self.add_profiler_finish()
- self.metainterp_sd.finish_setup()
+ self.metainterp_sd.finish_setup(optimizer=optimizer)
def finish(self):
vinfo = self.metainterp_sd.virtualizable_info
@@ -217,7 +217,7 @@
really_remove_asserts=True)
def build_meta_interp(self, CPUClass, translate_support_code=False,
- view="auto", optimizer=None, profile=None, **kwds):
+ view="auto", profile=None, **kwds):
assert CPUClass is not None
opt = history.Options(**kwds)
self.stats = history.Stats()
@@ -232,7 +232,6 @@
self.metainterp_sd = MetaInterpStaticData(self.portal_graph,
self.translator.graphs, cpu,
self.stats, opt,
- optimizer=optimizer,
profile=profile,
warmrunnerdesc=self,
leave_graph=self.leave_graph)
@@ -772,6 +771,18 @@
# invariant: (self.mccounters[j] < 0) if and only if
# (self.mcentrypoints[j] is not None)
+ def set_param_optimizer(self, optimizer):
+ if optimizer == OPTIMIZER_SIMPLE:
+ from pypy.jit.metainterp import simple_optimize
+ self.optimize_loop = simple_optimize.optimize_loop
+ self.optimize_bridge = simple_optimize.optimize_bridge
+ elif optimizer == OPTIMIZER_FULL:
+ from pypy.jit.metainterp import optimize
+ self.optimize_loop = optimize.optimize_loop
+ self.optimize_bridge = optimize.optimize_bridge
+ else:
+ raise ValueError("unknown optimizer")
+
def create_tables_now(self):
count = 1 << self.hashbits
self.hashtablemask = count - 1
Modified: pypy/trunk/pypy/jit/tl/pypyjit_child.py
==============================================================================
--- pypy/trunk/pypy/jit/tl/pypyjit_child.py (original)
+++ pypy/trunk/pypy/jit/tl/pypyjit_child.py Thu Sep 10 18:49:15 2009
@@ -1,9 +1,6 @@
from pypy.conftest import option
from pypy.rpython.lltypesystem import lltype
from pypy.jit.metainterp import warmspot
-#from pypy.jit.metainterp import simple_optimize as optimize
-from pypy.jit.metainterp import optimize
-#from pypy.jit.metainterp import optimize2 as optimize
from pypy.module.pypyjit.policy import PyPyJitPolicy
# Current output: http://paste.pocoo.org/show/106540/
@@ -43,8 +40,7 @@
option.view = True
warmspot.jittify_and_run(interp, graph, [], policy=policy,
listops=True, CPUClass=LLtypeCPU,
- backendopt=True,
- optimizer=optimize)
+ backendopt=True)
def run_child_ootype(glob, loc):
@@ -58,5 +54,4 @@
option.view = True
warmspot.jittify_and_run(interp, graph, [], policy=policy,
listops=True, CPUClass=OOtypeCPU,
- backendopt=True,
- optimizer=optimize)
+ backendopt=True)
Modified: pypy/trunk/pypy/jit/tl/tla/test_tla.py
==============================================================================
--- pypy/trunk/pypy/jit/tl/tla/test_tla.py (original)
+++ pypy/trunk/pypy/jit/tl/tla/test_tla.py Thu Sep 10 18:49:15 2009
@@ -156,7 +156,7 @@
# ____________________________________________________________
from pypy.jit.metainterp.test.test_basic import LLJitMixin
-from pypy.jit.metainterp import optimize
+from pypy.rlib.jit import OPTIMIZER_FULL
class TestLLtype(LLJitMixin):
def test_loop(self):
@@ -172,5 +172,5 @@
assert isinstance(w_result, tla.W_IntObject)
return w_result.intvalue
res = self.meta_interp(interp_w, [42], listops=True,
- optimizer=optimize)
+ optimizer=OPTIMIZER_FULL)
assert res == 0
Modified: pypy/trunk/pypy/rlib/jit.py
==============================================================================
--- pypy/trunk/pypy/rlib/jit.py (original)
+++ pypy/trunk/pypy/rlib/jit.py Thu Sep 10 18:49:15 2009
@@ -80,11 +80,15 @@
class JitHintError(Exception):
"""Inconsistency in the JIT hints."""
+OPTIMIZER_SIMPLE = 0
+OPTIMIZER_FULL = 1
+
PARAMETERS = {'threshold': 1000,
'trace_eagerness': 200,
'hash_bits': 14,
'trace_limit': 10000,
'inlining': False,
+ 'optimizer': OPTIMIZER_FULL,
}
unroll_parameters = unrolling_iterable(PARAMETERS.keys())
More information about the Pypy-commit
mailing list