[pypy-svn] r73957 - in pypy/branch/blackhole-improvement/pypy/jit: codewriter metainterp metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Thu Apr 22 11:47:26 CEST 2010
Author: arigo
Date: Thu Apr 22 11:47:24 2010
New Revision: 73957
Modified:
pypy/branch/blackhole-improvement/pypy/jit/codewriter/codewriter.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py
Log:
Two tests in test_basic pass again, this time running on the
new blackhole interp.
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/codewriter.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/codewriter.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/codewriter.py Thu Apr 22 11:47:24 2010
@@ -3,11 +3,13 @@
from pypy.jit.codewriter.flatten import flatten_graph, KINDS
from pypy.jit.codewriter.assembler import Assembler
from pypy.jit.codewriter.jitter import transform_graph
+from pypy.jit.codewriter.format import format_assembler
class CodeWriter(object):
- def __init__(self):
+ def __init__(self, rtyper=None):
+ self.rtyper = rtyper
self.assembler = Assembler()
def transform_func_to_jitcode(self, func, values, type_system='lltype'):
@@ -16,11 +18,22 @@
graph = rtyper.annotator.translator.graphs[0]
return self.transform_graph_to_jitcode(graph)
- def transform_graph_to_jitcode(self, graph):
+ def transform_graph_to_jitcode(self, graph, verbose=False):
transform_graph(graph)
regallocs = {}
for kind in KINDS:
regallocs[kind] = perform_register_allocation(graph, kind)
ssarepr = flatten_graph(graph, regallocs)
+ if verbose:
+ print graph
+ print indent(format_assembler(ssarepr), 4)
jitcode = self.assembler.assemble(ssarepr)
return jitcode
+
+ def make_jitcodes(self, maingraph, verbose=False):
+ return self.transform_graph_to_jitcode(maingraph, verbose)
+
+
+def indent(s, indent):
+ indent = ' ' * indent
+ return indent + s.replace('\n', '\n'+indent).rstrip(' ')
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py Thu Apr 22 11:47:24 2010
@@ -26,7 +26,8 @@
class BlackholeInterpreter(object):
- def __init__(self):
+ def __init__(self, cpu=None):
+ self.cpu = cpu
self.registers_i = [MissingValue()] * 256
self.registers_r = [MissingValue()] * 256
self.registers_f = [MissingValue()] * 256
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py Thu Apr 22 11:47:24 2010
@@ -6,15 +6,33 @@
from pypy.jit.backend.llgraph import runner
from pypy.jit.metainterp import pyjitpl, history
from pypy.jit.metainterp.policy import JitPolicy, StopAtXPolicy
-from pypy.jit.codewriter import support
from pypy import conftest
from pypy.rlib.rarithmetic import ovfcheck
from pypy.jit.metainterp.typesystem import LLTypeHelper, OOTypeHelper
from pypy.rpython.lltypesystem import lltype
from pypy.rpython.ootypesystem import ootype
-def _get_bare_metainterp(func, values, CPUClass, type_system,
- listops=False):
+def _get_jitcodes(func, values, type_system):
+ from pypy.jit.codewriter import support, codewriter
+
+ rtyper = support.annotate(func, values, type_system=type_system)
+ graphs = rtyper.annotator.translator.graphs
+ cw = codewriter.CodeWriter(rtyper)
+ mainjitcode = cw.make_jitcodes(graphs[0], verbose=True)
+ return cw, mainjitcode
+
+def _run_with_blackhole(CPUClass, cw, mainjitcode, args):
+ from pypy.jit.metainterp.blackhole import BlackholeInterpreter
+ stats = history.Stats()
+ cpu = CPUClass(cw.rtyper, stats, None, False)
+ blackholeinterp = BlackholeInterpreter(cpu)
+ blackholeinterp.setup_insns(cw.assembler.insns)
+ for i, value in enumerate(args):
+ blackholeinterp.setarg_i(i, value)
+ blackholeinterp.run(mainjitcode, 0)
+ return blackholeinterp.result_i
+
+def _get_bare_metainterp(func, values, CPUClass, type_system):
from pypy.annotation.policy import AnnotatorPolicy
from pypy.annotation.model import lltype_to_annotation
from pypy.rpython.test.test_llinterp import gengraph
@@ -64,6 +82,14 @@
return ll_meta_interp(*args, **kwds)
def interp_operations(self, f, args, **kwds):
+ # get the JitCodes for the function f
+ cw, mainjitcode = _get_jitcodes(f, args, self.type_system)
+ # try to run it with blackhole.py
+ result = _run_with_blackhole(self.CPUClass, cw, mainjitcode, args)
+ # try to run it with pyjitpl.py
+ # -- XXX --- missing
+ return result
+
from pypy.jit.metainterp import simple_optimize
class DoneWithThisFrame(Exception):
More information about the Pypy-commit
mailing list