[pypy-svn] r66414 - in pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp: . test
arigo at codespeak.net
arigo at codespeak.net
Sun Jul 19 18:25:47 CEST 2009
Author: arigo
Date: Sun Jul 19 18:25:46 2009
New Revision: 66414
Added:
pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py (contents, props changed)
pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py (contents, props changed)
Modified:
pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizefindnode.py
Log:
Add optimizeopt.py, the module in which to put the actual
optimization of the loop's list of operations.
Added: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- (empty file)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py Sun Jul 19 18:25:46 2009
@@ -0,0 +1,3 @@
+
+def optimize(loop):
+ pass
Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizefindnode.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizefindnode.py (original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizefindnode.py Sun Jul 19 18:25:46 2009
@@ -15,44 +15,6 @@
from pypy.jit.metainterp.specnode import VirtualInstanceSpecNode
from pypy.jit.metainterp.test.oparser import parse
-# ____________________________________________________________
-
-def equaloplists(oplist1, oplist2):
- print '-'*20, 'Comparing lists', '-'*20
- for op1, op2 in zip(oplist1, oplist2):
- txt1 = str(op1)
- txt2 = str(op2)
- while txt1 or txt2:
- print '%-39s| %s' % (txt1[:39], txt2[:39])
- txt1 = txt1[39:]
- txt2 = txt2[39:]
- assert op1.opnum == op2.opnum
- assert len(op1.args) == len(op2.args)
- for x, y in zip(op1.args, op2.args):
- assert x == y
- assert op1.result == op2.result
- assert op1.descr == op2.descr
- if op1.suboperations:
- assert equaloplists(op1.suboperations, op2.suboperations)
- assert len(oplist1) == len(oplist2)
- print '-'*57
- return True
-
-def test_equaloplists():
- ops = """
- [i0]
- i1 = int_add(i0, 1)
- guard_true(i1)
- i2 = int_add(i1, 1)
- fail(i2)
- jump(i1)
- """
- loop1 = parse(ops)
- loop2 = parse(ops)
- loop3 = parse(ops.replace("i2 = int_add", "i2 = int_sub"))
- assert equaloplists(loop1.operations, loop2.operations)
- py.test.raises(AssertionError,
- "equaloplists(loop1.operations, loop3.operations)")
def test_sort_descrs():
class PseudoDescr(AbstractDescr):
@@ -60,11 +22,12 @@
self.n = n
def sort_key(self):
return self.n
- lst = [PseudoDescr(2), PseudoDescr(3), PseudoDescr(6)]
- lst2 = lst[:]
- random.shuffle(lst2)
- sort_descrs(lst2)
- assert lst2 == lst
+ for i in range(17):
+ lst = [PseudoDescr(j) for j in range(i)]
+ lst2 = lst[:]
+ random.shuffle(lst2)
+ sort_descrs(lst2)
+ assert lst2 == lst
# ____________________________________________________________
@@ -122,19 +85,13 @@
node_vtable_adr2: cpu.typedescrof(NODE2)}
namespace = locals()
-# ____________________________________________________________
-
-class BaseTestOptimize(object):
+class BaseTest(object):
def parse(self, s, boxkinds=None):
return parse(s, self.cpu, self.namespace,
type_system=self.type_system,
boxkinds=boxkinds)
- def assert_equal(self, optimized, expected):
- equaloplists(optimized.operations,
- self.parse(expected).operations)
-
def unpack_specnodes(self, text):
#
def constclass(cls_vtable):
@@ -162,6 +119,10 @@
assert x._equals(y)
return True
+# ____________________________________________________________
+
+class BaseTestOptimizeFindNode(BaseTest):
+
def find_nodes(self, ops, spectext, boxkinds=None):
assert boxkinds is None or isinstance(boxkinds, dict)
loop = self.parse(ops, boxkinds=boxkinds)
@@ -546,8 +507,8 @@
nextdescr=Not)))''')
-class TestLLtype(BaseTestOptimize, LLtypeMixin):
+class TestLLtype(BaseTestOptimizeFindNode, LLtypeMixin):
pass
-class TestOOtype(BaseTestOptimize, OOtypeMixin):
+class TestOOtype(BaseTestOptimizeFindNode, OOtypeMixin):
pass
Added: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- (empty file)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py Sun Jul 19 18:25:46 2009
@@ -0,0 +1,78 @@
+import py
+from pypy.jit.metainterp.test.test_optimizefindnode import (LLtypeMixin,
+ OOtypeMixin,
+ BaseTest)
+from pypy.jit.metainterp.optimizeopt import optimize
+from pypy.jit.metainterp.test.oparser import parse
+
+# ____________________________________________________________
+
+def equaloplists(oplist1, oplist2):
+ print '-'*20, 'Comparing lists', '-'*20
+ for op1, op2 in zip(oplist1, oplist2):
+ txt1 = str(op1)
+ txt2 = str(op2)
+ while txt1 or txt2:
+ print '%-39s| %s' % (txt1[:39], txt2[:39])
+ txt1 = txt1[39:]
+ txt2 = txt2[39:]
+ assert op1.opnum == op2.opnum
+ assert len(op1.args) == len(op2.args)
+ for x, y in zip(op1.args, op2.args):
+ assert x == y
+ assert op1.result == op2.result
+ assert op1.descr == op2.descr
+ if op1.suboperations:
+ assert equaloplists(op1.suboperations, op2.suboperations)
+ assert len(oplist1) == len(oplist2)
+ print '-'*57
+ return True
+
+def test_equaloplists():
+ ops = """
+ [i0]
+ i1 = int_add(i0, 1)
+ guard_true(i1)
+ i2 = int_add(i1, 1)
+ fail(i2)
+ jump(i1)
+ """
+ loop1 = parse(ops)
+ loop2 = parse(ops)
+ loop3 = parse(ops.replace("i2 = int_add", "i2 = int_sub"))
+ assert equaloplists(loop1.operations, loop2.operations)
+ py.test.raises(AssertionError,
+ "equaloplists(loop1.operations, loop3.operations)")
+
+# ____________________________________________________________
+
+class BaseTestOptimizeOpt(BaseTest):
+
+ def assert_equal(self, optimized, expected):
+ assert optimized.inputargs == expected.inputargs
+ assert equaloplists(optimized.operations,
+ expected.operations)
+
+ def optimize(self, ops, spectext, optops, boxkinds=None):
+ loop = self.parse(ops, boxkinds=boxkinds)
+ loop.specnodes = self.unpack_specnodes(spectext)
+ optimize(loop)
+ expected = self.parse(optops, boxkinds=boxkinds)
+ self.assert_equal(loop, expected)
+
+ def test_simple(self):
+ ops = """
+ [i]
+ i0 = int_sub(i, 1)
+ guard_value(i0, 0)
+ fail(i0)
+ jump(i0)
+ """
+ self.optimize(ops, 'Not', ops)
+
+
+class TestLLtype(BaseTestOptimizeOpt, LLtypeMixin):
+ pass
+
+class TestOOtype(BaseTestOptimizeOpt, OOtypeMixin):
+ pass
More information about the Pypy-commit
mailing list