[pypy-svn] r66225 - in pypy/branch/pyjitpl5/pypy/jit/metainterp: . test

arigo at codespeak.net arigo at codespeak.net
Wed Jul 15 11:24:41 CEST 2009


Author: arigo
Date: Wed Jul 15 11:24:41 2009
New Revision: 66225

Modified:
   pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize4.py
   pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimize4.py
Log:
Test and fix, of the kind "how could it ever work".


Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize4.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize4.py	(original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize4.py	Wed Jul 15 11:24:41 2009
@@ -366,6 +366,7 @@
         # cpu.execute_operations()).
         rebuild_ops.append(op_fail)
         op1 = op.clone()
+        op1.args = self.new_arguments(op1)
         op1.suboperations = rebuild_ops
         op.optimized = op1
         return op1

Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimize4.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimize4.py	(original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimize4.py	Wed Jul 15 11:24:41 2009
@@ -909,6 +909,33 @@
 
 # ____________________________________________________________
 
+class Q:
+    locals().update(A.__dict__)    # :-)
+    inputargs = [sum]
+    ops = [
+        ResOperation('new_with_vtable', [ConstAddr(node_vtable, cpu)], n1,
+                     size_of_node),
+        ResOperation('setfield_gc', [n1, sum], None, ofs_value),
+        ResOperation('getfield_gc', [n1], sum2, ofs_value),
+        ResOperation('guard_true', [sum2], None),
+        ResOperation('int_sub', [sum, ConstInt(1)], v),
+        ResOperation('jump', [v], None),
+        ]
+    set_guard(ops[-3], [sum])
+
+def test_Q_optimize_loop():
+    spec = CheckPerfectSpecializer(Loop(Q.inputargs, Q.ops), cpu=cpu)
+    spec.find_nodes()
+    spec.intersect_input_and_output()
+    spec.optimize_loop()
+    equaloplists(spec.loop.operations, [
+        ResOperation('guard_true', [Q.sum], None),
+        ResOperation('int_sub', [Q.sum, ConstInt(1)], Q.v),
+        ResOperation('jump', [Q.v], None),
+        ])
+
+# ____________________________________________________________
+
 class R:
     locals().update(A.__dict__)    # :-)
     inputargs = [sum]



More information about the Pypy-commit mailing list