[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