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