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 get_interpreter(func, values, view=False, viewbefore=False, policy=None, someobjects=False): key = (func,) + tuple([typeOf(x) for x in values])+ (someobjects,) try: (t, interp, graph) = _tcache[key] except KeyError: def annotation(x): T = typeOf(x) if T == Ptr(PyObject) and someobjects: return object elif T == Ptr(rstr.STR): return str else: return lltype_to_annotation(T) t, typer, graph = gengraph(func, [annotation(x) for x in values], viewbefore, policy) interp = LLInterpreter(typer, heap=gclltype) _tcache[key] = (t, interp, graph) # keep the cache small _lastinterpreted.append(key) if len(_lastinterpreted) >= 4: del _tcache[_lastinterpreted.pop(0)] if view: t.view() return interp, graph
def test_mark_dict_non_null(): def f(): d = {"ac": "bx"} mark_dict_non_null(d) return d t, typer, graph = gengraph(f, []) assert sorted(graph.returnblock.inputargs[0].concretetype.TO.entries.TO.OF._flds.keys()) == ['key', 'value']
def find_mallocs(func, argtypes): t, typer, graph = gengraph(func, argtypes) backend_optimizations(t, inline_threshold=10*INLINE_THRESHOLD_FOR_TEST) if conftest.option.view: t.view() result = [] for block in t.graphs[0].iterblocks(): for op in block.operations: if op.opname.startswith('malloc'): result.append(op.result.concretetype) return result
def test_collect(): def f(): return gc.collect() t, typer, graph = gengraph(f, []) ops = list(graph.iterblockops()) assert len(ops) == 1 op = ops[0][1] assert op.opname == 'gc__collect' res = interpret(f, []) assert res is None
def gengraph(self, func, argtypes=[], viewbefore='auto', policy=None, backendopt=False, config=None): return gengraph(func, argtypes, viewbefore, policy, type_system=self.type_system, backendopt=backendopt, config=config)
def test_can_move(): T0 = lltype.GcStruct('T') T1 = lltype.GcArray(lltype.Float) def f(i): if i: return rgc.can_move(lltype.malloc(T0)) else: return rgc.can_move(lltype.malloc(T1, 1)) t, typer, graph = gengraph(f, [int]) ops = list(graph.iterblockops()) res = [op for op in ops if op[1].opname == 'gc_can_move'] assert len(res) == 2 res = interpret(f, [1]) assert res == True
def test_collect_0(): if sys.version_info < (2, 5): py.test.skip("requires Python 2.5 to call gc.collect() with an arg") def f(): return gc.collect(0) t, typer, graph = gengraph(f, []) ops = list(graph.iterblockops()) assert len(ops) == 1 op = ops[0][1] assert op.opname == 'gc__collect' assert len(op.args) == 1 assert op.args[0].value == 0 res = interpret(f, []) assert res is None
def test_ignore_breaking_transformations(): def f(): pass f._annspecialcase_ = "override:ignore" def g(i): if i == 1: return "ab" else: try: return f() except: return "hello!" t, typer, graph = gengraph(g, [int]) from pypy.translator import simplify from pypy.translator.backendopt import removenoops from pypy.objspace.flow.model import checkgraph removenoops.remove_same_as(graph) simplify.eliminate_empty_blocks(graph) #should not crash: checkgraph(graph)
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 test_gengraph(): t, typer, graph = gengraph(main, [int])
def directtesthelper(self, FUNC, func): from pypy.annotation import model as annmodel argtypes = [annmodel.lltype_to_annotation(T) for T in FUNC.TO.ARGS] t, rtyper, graph = gengraph(func, argtypes) return rtyper.getcallable(graph)