[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