[pypy-commit] pypy optresult-unroll: port test_optimizebasic to the new style
fijal
noreply at buildbot.pypy.org
Mon Jul 6 15:24:28 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r78457:b16656d315c9
Date: 2015-07-06 15:24 +0200
http://bitbucket.org/pypy/pypy/changeset/b16656d315c9/
Log: port test_optimizebasic to the new style
diff --git a/rpython/jit/metainterp/compile.py b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -23,25 +23,27 @@
from rpython.jit.metainterp.pyjitpl import SwitchToBlackhole
raise SwitchToBlackhole(Counters.ABORT_BRIDGE)
+class CompileData(object):
+ def forget_optimization_info(self):
+ for arg in self.start_label.getarglist():
+ arg.set_forwarded(None)
+ for op in self.operations:
+ op.set_forwarded(None)
-class LoopCompileData(object):
+class LoopCompileData(CompileData):
""" An object that accumulates all of the necessary info for
the optimization phase, but does not actually have any other state
This is the case of label() ops label()
"""
- def __init__(self, start_label, end_label, operations):
+ def __init__(self, start_label, end_label, operations,
+ call_pure_results=None):
self.start_label = start_label
self.end_label = end_label
assert start_label.getopnum() == rop.LABEL
assert end_label.getopnum() == rop.LABEL
self.operations = operations
-
- def forget_optimization_info(self):
- for arg in self.start_label.getarglist():
- arg.set_forwarded(None)
- for op in self.operations:
- op.set_forwarded(None)
+ self.call_pure_results = call_pure_results
def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer
@@ -54,6 +56,22 @@
else:
xxx
+class SimpleCompileData(CompileData):
+ """ This represents label() ops jump with no extra info associated with
+ the label
+ """
+ def __init__(self, start_label, operations, call_pure_results=None):
+ self.start_label = start_label
+ self.operations = operations
+ self.call_pure_results = call_pure_results
+
+ def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
+ from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer
+
+ opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
+ return opt.propagate_all_forward(self.start_label.getarglist(),
+ self.operations,
+ self.call_pure_results)
def show_procedures(metainterp_sd, procedure=None, error=None):
# debugging
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -439,8 +439,9 @@
else:
return CONST_0
- def propagate_all_forward(self, inputargs, ops, create_inp_args=True):
+ def propagate_all_forward(self, inputargs, ops, call_pure_results=None):
self.init_inparg_dict_from(inputargs)
+ self.call_pure_results = call_pure_results
for op in ops:
self._really_emitted_operation = None
self.first_optimization.propagate_forward(op)
@@ -448,6 +449,7 @@
#self.loop.quasi_immutable_deps = self.quasi_immutable_deps
# accumulate counters
self.resumedata_memo.update_counters(self.metainterp_sd.profiler)
+ return None, self._newoperations
def send_extra_operation(self, op):
self.first_optimization.propagate_forward(op)
diff --git a/rpython/jit/metainterp/optimizeopt/pure.py b/rpython/jit/metainterp/optimizeopt/pure.py
--- a/rpython/jit/metainterp/optimizeopt/pure.py
+++ b/rpython/jit/metainterp/optimizeopt/pure.py
@@ -151,9 +151,9 @@
opnum = OpHelpers.call_for_descr(op.getdescr())
newop = self.optimizer.replace_op_with(op, opnum)
self.emit_operation(newop)
- if self.optimizer.emitting_dissabled:
- self.extra_call_pure.append(op) # XXX
- else:
+ #if self.optimizer.emitting_dissabled:
+ # self.extra_call_pure.append(op) # XXX
+ #else:
# don't move call_pure_with_exception in the short preamble...
# issue #2015
@@ -162,9 +162,9 @@
# fix together with unroll
#effectinfo = op.getdescr().get_extra_info()
#if not effectinfo.check_can_raise(ignore_memoryerror=True):
- if 1:
- self.call_pure_positions.append(
- len(self.optimizer._newoperations) - 1)
+ # if 1:
+ self.call_pure_positions.append(
+ len(self.optimizer._newoperations) - 1)
optimize_CALL_PURE_R = optimize_CALL_PURE_I
optimize_CALL_PURE_F = optimize_CALL_PURE_I
diff --git a/rpython/jit/metainterp/optimizeopt/simplify.py b/rpython/jit/metainterp/optimizeopt/simplify.py
--- a/rpython/jit/metainterp/optimizeopt/simplify.py
+++ b/rpython/jit/metainterp/optimizeopt/simplify.py
@@ -45,29 +45,29 @@
def optimize_RECORD_KNOWN_CLASS(self, op):
pass
- def optimize_LABEL(self, op):
- if not self.unroll:
- descr = op.getdescr()
- if isinstance(descr, JitCellToken):
- return self.optimize_JUMP(op.copy_and_change(rop.JUMP))
- self.last_label_descr = op.getdescr()
- self.emit_operation(op)
+ # def optimize_LABEL(self, op):
+ # if not self.unroll:
+ # descr = op.getdescr()
+ # if isinstance(descr, JitCellToken):
+ # return self.optimize_JUMP(op.copy_and_change(rop.JUMP))
+ # self.last_label_descr = op.getdescr()
+ # self.emit_operation(op)
- def optimize_JUMP(self, op):
- if not self.unroll:
- op = op.copy_and_change(op.getopnum())
- descr = op.getdescr()
- assert isinstance(descr, JitCellToken)
- if not descr.target_tokens:
- assert self.last_label_descr is not None
- target_token = self.last_label_descr
- assert isinstance(target_token, TargetToken)
- assert target_token.targeting_jitcell_token is descr
- op.setdescr(self.last_label_descr)
- else:
- assert len(descr.target_tokens) == 1
- op.setdescr(descr.target_tokens[0])
- self.emit_operation(op)
+ # def optimize_JUMP(self, op):
+ # if not self.unroll:
+ # op = op.copy_and_change(op.getopnum())
+ # descr = op.getdescr()
+ # assert isinstance(descr, JitCellToken)
+ # if not descr.target_tokens:
+ # assert self.last_label_descr is not None
+ # target_token = self.last_label_descr
+ # assert isinstance(target_token, TargetToken)
+ # assert target_token.targeting_jitcell_token is descr
+ # op.setdescr(self.last_label_descr)
+ # else:
+ # assert len(descr.target_tokens) == 1
+ # op.setdescr(descr.target_tokens[0])
+ # self.emit_operation(op)
def optimize_GUARD_FUTURE_CONDITION(self, op):
pass
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -73,17 +73,28 @@
enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap"
def optimize_loop(self, ops, optops, call_pure_results=None):
+ from rpython.jit.metainterp.optimizeopt.util import args_dict
+
loop = self.parse(ops, postprocess=self.postprocess)
token = JitCellToken()
- loop.operations = [ResOperation(rop.LABEL, loop.inputargs, descr=TargetToken(token))] + \
- loop.operations
+ label_op = ResOperation(rop.LABEL, loop.inputargs,
+ descr=TargetToken(token))
if loop.operations[-1].getopnum() == rop.JUMP:
loop.operations[-1].setdescr(token)
exp = parse(optops, namespace=self.namespace.copy())
expected = convert_old_style_to_targets(exp, jump=True)
- self._do_optimize_loop(loop, call_pure_results, export_state=False)
+ if call_pure_results is not None:
+ d = call_pure_results
+ call_pure_results = args_dict()
+ for k, v in d.items():
+ call_pure_results[list(k)] = v
+ compile_data = compile.SimpleCompileData(label_op, loop.operations,
+ call_pure_results)
+ _, ops = self._do_optimize_loop(compile_data)
+ loop.operations = [label_op] + ops
#print '\n'.join([str(o) for o in loop.operations])
+ self.loop = loop
self.assert_equal(loop, expected)
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
@@ -407,12 +407,6 @@
def _do_optimize_loop(self, compile_data, call_pure_results=None):
from rpython.jit.metainterp.optimizeopt import optimize_trace
- from rpython.jit.metainterp.optimizeopt.util import args_dict
-
- # XXX
- if call_pure_results is not None:
- for k, v in call_pure_results.items():
- loop.call_pure_results[list(k)] = v
metainterp_sd = FakeMetaInterpStaticData(self.cpu)
if hasattr(self, 'vrefinfo'):
metainterp_sd.virtualref_info = self.vrefinfo
More information about the pypy-commit
mailing list