Author: Hakan Ardo <[email protected]>
Branch: jit-targets
Changeset: r48862:aa5ecf2901be
Date: 2011-11-07 12:48 +0100
http://bitbucket.org/pypy/pypy/changeset/aa5ecf2901be/
Log: make OptSimplify follow and test_optimizebasic follow the new model
diff --git a/pypy/jit/metainterp/optimizeopt/__init__.py
b/pypy/jit/metainterp/optimizeopt/__init__.py
--- a/pypy/jit/metainterp/optimizeopt/__init__.py
+++ b/pypy/jit/metainterp/optimizeopt/__init__.py
@@ -45,7 +45,7 @@
optimizations.append(OptFfiCall())
if ('rewrite' not in enable_opts or 'virtualize' not in enable_opts
- or 'heap' not in enable_opts):
+ or 'heap' not in enable_opts or 'unroll' not in enable_opts):
optimizations.append(OptSimplify())
if inline_short_preamble:
diff --git a/pypy/jit/metainterp/optimizeopt/simplify.py
b/pypy/jit/metainterp/optimizeopt/simplify.py
--- a/pypy/jit/metainterp/optimizeopt/simplify.py
+++ b/pypy/jit/metainterp/optimizeopt/simplify.py
@@ -1,9 +1,12 @@
from pypy.jit.metainterp.optimizeopt.optimizer import Optimization
from pypy.jit.metainterp.optimizeopt.util import make_dispatcher_method
from pypy.jit.metainterp.resoperation import ResOperation, rop
-
+from pypy.jit.metainterp.history import TargetToken, JitCellToken
class OptSimplify(Optimization):
+ def __init__(self):
+ self.last_label_descr = None
+
def optimize_CALL_PURE(self, op):
args = op.getarglist()
self.emit_operation(ResOperation(rop.CALL, args, op.result,
@@ -28,6 +31,20 @@
def optimize_MARK_OPAQUE_PTR(self, op):
pass
+ def optimize_LABEL(self, op):
+ self.last_label_descr = op.getdescr()
+ self.emit_operation(op)
+
+ def optimize_JUMP(self, op):
+ descr = op.getdescr()
+ assert isinstance(descr, JitCellToken)
+ if not descr.target_tokens:
+ assert self.last_label_descr is not None
+ assert self.last_label_descr.targeting_jitcell_token is descr
+ op.setdescr(self.last_label_descr)
+ else:
+ import pdb; pdb.set_trace()
+ self.emit_operation(op)
dispatch_opt = make_dispatcher_method(OptSimplify, 'optimize_',
default=OptSimplify.emit_operation)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -1,7 +1,8 @@
import py
from pypy.rlib.objectmodel import instantiate
from pypy.jit.metainterp.optimizeopt.test.test_util import (
- LLtypeMixin, BaseTest, FakeMetaInterpStaticData)
+ LLtypeMixin, BaseTest, FakeMetaInterpStaticData,
convert_old_style_to_targets)
+from pypy.jit.metainterp.history import TargetToken, JitCellToken
from pypy.jit.metainterp.test.test_compile import FakeLogger
import pypy.jit.metainterp.optimizeopt.optimizer as optimizeopt
import pypy.jit.metainterp.optimizeopt.virtualize as virtualize
@@ -11,7 +12,6 @@
from pypy.jit.metainterp.resoperation import rop, opname, ResOperation
from pypy.rlib.rarithmetic import LONG_BIT
-
def test_store_final_boxes_in_guard():
from pypy.jit.metainterp.compile import ResumeGuardDescr
from pypy.jit.metainterp.resume import tag, TAGBOX
@@ -116,9 +116,13 @@
enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap"
def optimize_loop(self, ops, optops, call_pure_results=None):
-
loop = self.parse(ops)
- expected = self.parse(optops)
+ token = JitCellToken()
+ loop.operations = [ResOperation(rop.LABEL, loop.inputargs, None,
descr=TargetToken(token))] + \
+ loop.operations
+ if loop.operations[-1].getopnum() == rop.JUMP:
+ loop.operations[-1].setdescr(token)
+ expected = convert_old_style_to_targets(self.parse(optops), jump=True)
self._do_optimize_loop(loop, call_pure_results)
print '\n'.join([str(o) for o in loop.operations])
self.assert_equal(loop, expected)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -1,7 +1,7 @@
import py
from pypy.rlib.objectmodel import instantiate
from pypy.jit.metainterp.optimizeopt.test.test_util import (
- LLtypeMixin, BaseTest, Storage, _sortboxes)
+ LLtypeMixin, BaseTest, Storage, _sortboxes, convert_old_style_to_targets)
import pypy.jit.metainterp.optimizeopt.optimizer as optimizeopt
import pypy.jit.metainterp.optimizeopt.virtualize as virtualize
from pypy.jit.metainterp.optimizeopt import optimize_loop_1, ALL_OPTS_DICT,
build_opt_chain
@@ -158,16 +158,6 @@
return loop
-def convert_old_style_to_targets(loop, jump):
- newloop = TreeLoop(loop.name)
- newloop.inputargs = loop.inputargs
- newloop.operations = [ResOperation(rop.LABEL, loop.inputargs, None,
descr=FakeDescr())] + \
- loop.operations
- if not jump:
- assert newloop.operations[-1].getopnum() == rop.JUMP
- newloop.operations[-1] = ResOperation(rop.LABEL,
newloop.operations[-1].getarglist(), None, descr=FakeDescr())
- return newloop
-
class OptimizeOptTest(BaseTestWithUnroll):
def setup_method(self, meth=None):
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_util.py
b/pypy/jit/metainterp/optimizeopt/test/test_util.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_util.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_util.py
@@ -18,6 +18,7 @@
from pypy.jit.metainterp import compile, resume, history
from pypy.jit.metainterp.jitprof import EmptyProfiler
from pypy.config.pypyoption import get_pypy_config
+from pypy.jit.metainterp.resoperation import rop, opname, ResOperation
def test_sort_descrs():
class PseudoDescr(AbstractDescr):
@@ -400,5 +401,21 @@
#
optimize_trace(metainterp_sd, loop, self.enable_opts)
+class FakeDescr(compile.ResumeGuardDescr):
+ def clone_if_mutable(self):
+ return FakeDescr()
+ def __eq__(self, other):
+ return isinstance(other, FakeDescr)
+
+def convert_old_style_to_targets(loop, jump):
+ newloop = TreeLoop(loop.name)
+ newloop.inputargs = loop.inputargs
+ newloop.operations = [ResOperation(rop.LABEL, loop.inputargs, None,
descr=FakeDescr())] + \
+ loop.operations
+ if not jump:
+ assert newloop.operations[-1].getopnum() == rop.JUMP
+ newloop.operations[-1] = ResOperation(rop.LABEL,
newloop.operations[-1].getarglist(), None, descr=FakeDescr())
+ return newloop
+
# ____________________________________________________________
diff --git a/pypy/jit/metainterp/test/test_compile.py
b/pypy/jit/metainterp/test/test_compile.py
--- a/pypy/jit/metainterp/test/test_compile.py
+++ b/pypy/jit/metainterp/test/test_compile.py
@@ -1,7 +1,7 @@
from pypy.config.pypyoption import get_pypy_config
from pypy.jit.metainterp.history import TargetToken, ConstInt, History, Stats
from pypy.jit.metainterp.history import BoxInt, INT
-from pypy.jit.metainterp.compile import insert_loop_token, compile_procedure
+from pypy.jit.metainterp.compile import insert_loop_token, compile_loop
from pypy.jit.metainterp.compile import ResumeGuardDescr
from pypy.jit.metainterp.compile import ResumeGuardCountersInt
from pypy.jit.metainterp.compile import compile_tmp_callback
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit