[pypy-svn] r74104 - in pypy/branch/blackhole-improvement/pypy/jit/codewriter: . test

arigo at codespeak.net arigo at codespeak.net
Tue Apr 27 11:33:24 CEST 2010


Author: arigo
Date: Tue Apr 27 11:33:23 2010
New Revision: 74104

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/format.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_format.py
Log:
Remove the hacking of the formatted assembler,
and print directly in a simpler format.


Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/format.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/format.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/format.py	Tue Apr 27 11:33:23 2010
@@ -1,5 +1,6 @@
 import py
 from pypy.objspace.flow.model import Constant
+from pypy.rpython.lltypesystem import lltype
 from pypy.jit.codewriter.flatten import SSARepr, Label, TLabel, Register
 from pypy.jit.codewriter.flatten import ListOfKind, SwitchDictDescr
 from pypy.jit.metainterp.history import AbstractDescr
@@ -14,6 +15,9 @@
         if isinstance(x, Register):
             return '%%%s%d' % (x.kind[0], x.index)    # e.g. %i1 or %r2 or %f3
         elif isinstance(x, Constant):
+            if (isinstance(x.concretetype, lltype.Ptr) and
+                isinstance(x.concretetype.TO, lltype.Struct)):
+                return '$<* struct %s>' % (x.concretetype.TO._name,)
             return '$%r' % (x.value,)
         elif isinstance(x, TLabel):
             return getlabelname(x)

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py	Tue Apr 27 11:33:23 2010
@@ -53,32 +53,11 @@
         self.assert_format(ssarepr, expected)
 
     def assert_format(self, ssarepr, expected):
-        def replace_struct(s):
-            """ Replace all $<* struct ...> with $STRUCT
-            """
-            while True:
-                i = s.find('$<* struct')
-                if i == -1:
-                    return s
-                count = 1
-                start = i
-                i += 2
-                while True:
-                    if s[i] == '<':
-                        count += 1
-                    if s[i] == '>':
-                        count -= 1
-                        if count == 0:
-                            break
-                    i += 1
-                s = s[:start] + '$STRUCT' + s[i + 1:]
-        
         asm = format_assembler(ssarepr)
         expected = str(py.code.Source(expected)).strip() + '\n'
         asmlines = asm.split("\n")
         explines = expected.split("\n")
         for asm, exp in zip(asmlines, explines):
-            asm = replace_struct(asm)
             if asm != exp:
                 print
                 print "Got:      " + asm
@@ -258,10 +237,10 @@
         goto_if_exception L1
         int_return $3
         L1:
-        goto_if_exception_mismatch $STRUCT, L2
+        goto_if_exception_mismatch $<* struct object_vtable>, L2
         int_return $1
         L2:
-        goto_if_exception_mismatch $STRUCT, L3
+        goto_if_exception_mismatch $<* struct object_vtable>, L3
         int_return $2
         L3:
         reraise

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_format.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_format.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_format.py	Tue Apr 27 11:33:23 2010
@@ -33,14 +33,28 @@
     """
     assert asm == str(py.code.Source(expected)).strip() + '\n'
 
+def test_format_assembler_const_struct():
+    S = lltype.GcStruct('S', ('x', lltype.Signed))
+    s = lltype.malloc(S)
+    s.x = 123
+    ssarepr = SSARepr("test")
+    ssarepr.insns = [
+        ('foobar', Constant(s, lltype.typeOf(s))),
+        ]
+    asm = format_assembler(ssarepr)
+    expected = """
+        foobar $<* struct S>
+    """
+    assert asm == str(py.code.Source(expected)).strip() + '\n'
+
 def test_format_assembler_loop():
     ssarepr = SSARepr("test")
     i0, i1 = Register('int', 0), Register('int', 1)
     ssarepr.insns = [
         (Label('L1'),),
-        ('goto_if_not_int_gt', TLabel('L2'), i0, Constant(0)),
+        ('goto_if_not_int_gt', TLabel('L2'), i0, Constant(0, lltype.Signed)),
         ('int_add', i1, i0, i1),
-        ('int_sub', i0, Constant(1), i0),
+        ('int_sub', i0, Constant(1, lltype.Signed), i0),
         ('goto', TLabel('L1')),
         (Label('L2'),),
         ('int_return', i1),



More information about the Pypy-commit mailing list