Пример #1
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
Пример #2
0
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
Пример #3
0
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']
Пример #4
0
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
Пример #5
0
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
Пример #6
0
 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)
Пример #7
0
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
Пример #8
0
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
Пример #9
0
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
Пример #10
0
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
Пример #11
0
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)
Пример #12
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
Пример #13
0
def test_gengraph():
    t, typer, graph = gengraph(main, [int])
Пример #14
0
 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)
Пример #15
0
 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)
Пример #16
0
 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)