[pypy-svn] r51131 - in pypy/branch/jit-refactoring/pypy/jit/rainbow: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Wed Jan 30 16:17:38 CET 2008


Author: cfbolz
Date: Wed Jan 30 16:17:37 2008
New Revision: 51131

Modified:
   pypy/branch/jit-refactoring/pypy/jit/rainbow/bytecode.py
   pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_serializegraph.py
Log:
more complex switch test + fix


Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/bytecode.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/bytecode.py	(original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/bytecode.py	Wed Jan 30 16:17:37 2008
@@ -178,8 +178,7 @@
             self.make_bytecode_block(linkfalse.target, insert_goto=True)
             self.additional_positions[linktrue] = len(self.bytecode)
             self.insert_renaming(linktrue.args)
-            self.emit_2byte(self.interpreter.find_opcode("goto"))
-            self.emit_jumptarget(linktrue.target)
+            self.make_bytecode_block(linktrue.target, insert_goto=True)
         else:
             XXX
 

Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_serializegraph.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_serializegraph.py	(original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_serializegraph.py	Wed Jan 30 16:17:37 2008
@@ -4,6 +4,7 @@
 from pypy.jit.hintannotator.model import SomeLLAbstractConstant, OriginFlags
 from pypy.jit.rainbow.bytecode import BytecodeWriter
 from pypy.jit.codegen.llgraph.rgenop import RGenOp
+from pypy.rlib.jit import hint
 from pypy import conftest
 
 
@@ -83,6 +84,36 @@
                         )
         assert jitcode.code == expected
 
+    def test_switch2(self):
+        def f(x, y, z):
+            if x:
+                return y + z
+            else:
+                return y - z
+        writer, jitcode = self.serialize(f, [int, int, int])
+        expected = code(writer.interpreter,
+                        "red_int_is_true", 0,
+                        "red_goto_iftrue", 3, tlabel("true"),
+                        "make_new_redvars", 2, 1, 2,
+                        "make_new_greenvars", 0,
+                        label("sub"),
+                        "red_int_sub", 0, 1,
+                        "make_new_redvars", 1, 2,
+                        "make_new_greenvars", 0,
+                        label("return"),
+                        "red_return", 0,
+                        label("true"),
+                        "make_new_redvars", 2, 1, 2,
+                        "make_new_greenvars", 0,
+                        label("add"),
+                        "red_int_add", 0, 1,
+                        "make_new_redvars", 1, 2,
+                        "make_new_greenvars", 0,
+                        "goto", tlabel("return"),
+                        )
+        assert jitcode.code == expected
+
+
 
 class label(object):
     def __init__(self, name):



More information about the Pypy-commit mailing list