def test_bridge_from_interpreter_4(self): jitdriver = JitDriver(reds = ['n', 'k'], greens = []) def f(n, k): while n > 0: jitdriver.can_enter_jit(n=n, k=k) jitdriver.jit_merge_point(n=n, k=k) if k: n -= 2 else: n -= 1 return n + k from pypy.rpython.test.test_llinterp import get_interpreter, clear_tcache from pypy.jit.metainterp.warmspot import WarmRunnerDesc interp, graph = get_interpreter(f, [0, 0], backendopt=False, inline_threshold=0, type_system=self.type_system) clear_tcache() translator = interp.typer.annotator.translator translator.config.translation.gc = "boehm" warmrunnerdesc = WarmRunnerDesc(translator, CPUClass=self.CPUClass) warmrunnerdesc.state.set_param_threshold(3) # for tests warmrunnerdesc.state.set_param_trace_eagerness(0) # for tests warmrunnerdesc.finish() for n, k in [(20, 0), (20, 1)]: interp.eval_graph(graph, [n, k])
def meta_interp( self, function, args, repeat=1, inline=False, trace_limit=sys.maxint, backendopt=None, listcomp=False, **kwds ): # XXX ignored from pypy.jit.metainterp.warmspot import WarmRunnerDesc from pypy.annotation.listdef import s_list_of_strings from pypy.annotation import model as annmodel for arg in args: assert is_valid_int(arg) self.pre_translation_hook() t = self._get_TranslationContext() t.config.translation.type_system = self.type_system # force typesystem-specific options if listcomp: t.config.translation.list_comprehension_operations = True arglist = ", ".join(["int(argv[%d])" % (i + 1) for i in range(len(args))]) if len(args) == 1: arglist += "," arglist = "(%s)" % arglist if repeat != 1: src = py.code.Source( """ def entry_point(argv): args = %s res = function(*args) for k in range(%d - 1): res = function(*args) print res return 0 """ % (arglist, repeat) ) else: src = py.code.Source( """ def entry_point(argv): args = %s res = function(*args) print res return 0 """ % (arglist,) ) exec src.compile() in locals() t.buildannotator().build_types(function, [int] * len(args), main_entry_point=True) t.buildrtyper(type_system=self.type_system).specialize() warmrunnerdesc = WarmRunnerDesc(t, translate_support_code=True, CPUClass=self.CPUClass, **kwds) for jd in warmrunnerdesc.jitdrivers_sd: jd.warmstate.set_param_threshold(3) # for tests jd.warmstate.set_param_trace_eagerness(2) # for tests jd.warmstate.set_param_trace_limit(trace_limit) jd.warmstate.set_param_inlining(inline) jd.warmstate.set_param_enable_opts(ALL_OPTS_NAMES) mixlevelann = warmrunnerdesc.annhelper entry_point_graph = mixlevelann.getgraph(entry_point, [s_list_of_strings], annmodel.SomeInteger()) warmrunnerdesc.finish() self.post_translation_hook() return self._compile_and_run(t, entry_point, entry_point_graph, args)
def test_bridge_from_interpreter_4(self): jitdriver = JitDriver(reds=['n', 'k'], greens=[]) def f(n, k): while n > 0: jitdriver.can_enter_jit(n=n, k=k) jitdriver.jit_merge_point(n=n, k=k) if k: n -= 2 else: n -= 1 return n + k from pypy.rpython.test.test_llinterp import get_interpreter, clear_tcache from pypy.jit.metainterp.warmspot import WarmRunnerDesc interp, graph = get_interpreter(f, [0, 0], backendopt=False, inline_threshold=0, type_system=self.type_system) clear_tcache() translator = interp.typer.annotator.translator translator.config.translation.gc = "boehm" warmrunnerdesc = WarmRunnerDesc(translator, CPUClass=self.CPUClass) warmrunnerdesc.state.set_param_threshold(3) # for tests warmrunnerdesc.state.set_param_trace_eagerness(0) # for tests warmrunnerdesc.finish() for n, k in [(20, 0), (20, 1)]: interp.eval_graph(graph, [n, k])
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
def setup_class(cls): from pypy.jit.metainterp.typesystem import llhelper from pypy.jit.codewriter.support import annotate from pypy.jit.metainterp.warmspot import WarmRunnerDesc from pypy.rpython.lltypesystem.rclass import OBJECT, OBJECT_VTABLE from pypy.rpython.lltypesystem import lltype, llmemory exc_vtable = lltype.malloc(OBJECT_VTABLE, immortal=True) cls.exc_vtable = exc_vtable class FakeFailDescr(object): def __init__(self, no): self.no = no def handle_fail(self, metainterp_sd, jitdrivers_sd): no = self.no if no == 0: raise metainterp_sd.warmrunnerdesc.DoneWithThisFrameInt(3) if no == 1: raise metainterp_sd.warmrunnerdesc.ContinueRunningNormally( [0], [], [], [1], [], []) if no == 3: exc = lltype.malloc(OBJECT) exc.typeptr = exc_vtable raise metainterp_sd.warmrunnerdesc.ExitFrameWithExceptionRef( metainterp_sd.cpu, lltype.cast_opaque_ptr(llmemory.GCREF, exc)) assert 0 class FakeDescr: def as_vtable_size_descr(self): return self class FakeCPU(object): supports_floats = False supports_longlong = False supports_singlefloats = False ts = llhelper translate_support_code = False stats = "stats" def get_fail_descr_number(self, d): return -1 def __init__(self, *args, **kwds): pass def nodescr(self, *args, **kwds): return FakeDescr() fielddescrof = nodescr calldescrof = nodescr sizeof = nodescr def get_fail_descr_from_number(self, no): return FakeFailDescr(no) def make_execute_token(self, *ARGS): return "not callable" driver = JitDriver(reds=['red'], greens=['green']) def f(green): red = 0 while red < 10: driver.can_enter_jit(red=red, green=green) driver.jit_merge_point(red=red, green=green) red += 1 return red rtyper = annotate(f, [0]) FakeCPU.rtyper = rtyper translator = rtyper.annotator.translator translator.config.translation.gc = 'hybrid' cls.desc = WarmRunnerDesc(translator, CPUClass=FakeCPU)
def meta_interp(self, function, args, repeat=1, inline=False, trace_limit=sys.maxint, backendopt=None, listcomp=False, **kwds): # XXX ignored from pypy.jit.metainterp.warmspot import WarmRunnerDesc from pypy.annotation.listdef import s_list_of_strings from pypy.annotation import model as annmodel for arg in args: assert isinstance(arg, int) self.pre_translation_hook() t = self._get_TranslationContext() t.config.translation.type_system = self.type_system # force typesystem-specific options if listcomp: t.config.translation.list_comprehension_operations = True arglist = ", ".join( ['int(argv[%d])' % (i + 1) for i in range(len(args))]) if len(args) == 1: arglist += ',' arglist = '(%s)' % arglist if repeat != 1: src = py.code.Source(""" def entry_point(argv): args = %s res = function(*args) for k in range(%d - 1): res = function(*args) print res return 0 """ % (arglist, repeat)) else: src = py.code.Source(""" def entry_point(argv): args = %s res = function(*args) print res return 0 """ % (arglist, )) exec src.compile() in locals() t.buildannotator().build_types(function, [int] * len(args)) t.buildrtyper(type_system=self.type_system).specialize() warmrunnerdesc = WarmRunnerDesc(t, translate_support_code=True, CPUClass=self.CPUClass, **kwds) warmrunnerdesc.state.set_param_threshold(3) # for tests warmrunnerdesc.state.set_param_trace_eagerness(2) # for tests warmrunnerdesc.state.set_param_trace_limit(trace_limit) warmrunnerdesc.state.set_param_inlining(inline) warmrunnerdesc.state.set_param_optimizer(OPTIMIZER_FULL) mixlevelann = warmrunnerdesc.annhelper entry_point_graph = mixlevelann.getgraph(entry_point, [s_list_of_strings], annmodel.SomeInteger()) warmrunnerdesc.finish() self.post_translation_hook() return self._compile_and_run(t, entry_point, entry_point_graph, args)