Author: Maciej Fijalkowski <[email protected]>
Branch: rewrite-unrolling
Changeset: r75290:3087933208c6
Date: 2015-01-10 19:36 +0100
http://bitbucket.org/pypy/pypy/changeset/3087933208c6/

Log:    (fijal, arigo) start branch to rewrite unrolling from scratch

diff --git a/rpython/jit/metainterp/optimizeopt/__init__.py 
b/rpython/jit/metainterp/optimizeopt/__init__.py
--- a/rpython/jit/metainterp/optimizeopt/__init__.py
+++ b/rpython/jit/metainterp/optimizeopt/__init__.py
@@ -31,7 +31,7 @@
 assert ENABLE_ALL_OPTS == ALL_OPTS_NAMES, (
     'please fix rlib/jit.py to say ENABLE_ALL_OPTS = %r' % (ALL_OPTS_NAMES,))
 
-def build_opt_chain(metainterp_sd, enable_opts):
+def build_opt_chain(enable_opts):
     optimizations = []
     unroll = 'unroll' in enable_opts    # 'enable_opts' is normally a dict
     for name, opt in unroll_all_opts:
@@ -57,7 +57,7 @@
     try:
         loop.logops = metainterp_sd.logger_noopt.log_loop(loop.inputargs,
                                                           loop.operations)
-        optimizations, unroll = build_opt_chain(metainterp_sd, enable_opts)
+        optimizations, unroll = build_opt_chain(enable_opts)
         if unroll:
             return optimize_unroll(metainterp_sd, jitdriver_sd, loop,
                                    optimizations,
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py 
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -16,24 +16,23 @@
         names = [opt.__class__.__name__ for opt in chain]
         assert names == expected_names
     #
-    metainterp_sd = FakeMetaInterpStaticData(None)
-    chain, _ = build_opt_chain(metainterp_sd, "")
+    chain, _ = build_opt_chain("")
     check(chain, ["OptSimplify"])
     #
-    chain, _ = build_opt_chain(metainterp_sd, "")
+    chain, _ = build_opt_chain("")
     check(chain, ["OptSimplify"])
     #
-    chain, _ = build_opt_chain(metainterp_sd, "")
+    chain, _ = build_opt_chain("")
     check(chain, ["OptSimplify"])
     #
-    chain, _ = build_opt_chain(metainterp_sd, "heap:intbounds")
+    chain, _ = build_opt_chain("heap:intbounds")
     check(chain, ["OptIntBounds", "OptHeap", "OptSimplify"])
     #
-    chain, unroll = build_opt_chain(metainterp_sd, "unroll")
+    chain, unroll = build_opt_chain("unroll")
     check(chain, ["OptSimplify"])
     assert unroll
     #
-    chain, _ = build_opt_chain(metainterp_sd, "aaa:bbb")
+    chain, _ = build_opt_chain("aaa:bbb")
     check(chain, ["OptSimplify"])
 
 
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py 
b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
new file mode 100644
--- /dev/null
+++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
@@ -0,0 +1,37 @@
+
+from rpython.jit.tool.oparser import parse
+from rpython.jit.metainterp.optimizeopt import optimize_trace
+from rpython.jit.metainterp.optimizeopt.test.test_util import BaseTest,\
+     FakeMetaInterpStaticData
+from rpython.jit.backend.llgraph import runner
+
+class TestUnrollDirect(BaseTest):
+    cpu = runner.LLGraphCPU(None)
+    enable_opts = 
"intbounds:rewrite:virtualize:string:earlyforce:pure:heap:unroll"
+
+    def optimize(self, loop, expected=None, export_state=False, 
start_state=None):
+        metainterp_sd = FakeMetaInterpStaticData(self.cpu)
+        loop = parse(loop)
+        state = optimize_trace(metainterp_sd, None, loop, self.enable_opts,
+                               export_state=export_state, 
start_state=start_state)
+        if expected is not None:
+            expected = parse(expected)
+            self.assert_equal(loop, expected)
+        return state
+    
+    def test_basic_unroll(self):
+        preamble = """
+        [i0]
+        label(i0)
+        i1 = int_add(i0, 1)
+        label(i1)
+        """
+        exported_state = self.optimize(preamble, export_state=True)
+        loop = """
+        [i0]
+        label(i0)
+        i1 = int_add(i0, 1)
+        jump(i1)
+        """
+        self.optimize(loop, loop, start_state=exported_state)
+        
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py 
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -21,7 +21,7 @@
 from rpython.jit.metainterp.counter import DeterministicJitCounter
 from rpython.config.translationoption import get_combined_translation_config
 from rpython.jit.metainterp.resoperation import rop, opname, ResOperation
-from rpython.jit.metainterp.optimizeopt.unroll import Inliner
+from rpython.jit.metainterp.inliner import Inliner
 
 def test_sort_descrs():
     class PseudoDescr(AbstractDescr):
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py 
b/rpython/jit/metainterp/optimizeopt/unroll2.py
rename from rpython/jit/metainterp/optimizeopt/unroll.py
rename to rpython/jit/metainterp/optimizeopt/unroll2.py
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to