[pypy-commit] pypy default: minor simplification - only export state when necessary (that is when we're
fijal
noreply at buildbot.pypy.org
Wed Dec 17 10:26:18 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch:
Changeset: r74964:f2d7e0e3f156
Date: 2014-12-17 11:25 +0200
http://bitbucket.org/pypy/pypy/changeset/f2d7e0e3f156/
Log: minor simplification - only export state when necessary (that is
when we're optimizing preamble or base for retrace)
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
@@ -128,7 +128,8 @@
[ResOperation(rop.LABEL, jumpargs, None, descr=jitcell_token)]
try:
- start_state = optimize_trace(metainterp_sd, part, enable_opts)
+ start_state = optimize_trace(metainterp_sd, part, enable_opts,
+ export_state=True)
except InvalidLoop:
return None
target_token = part.operations[0].getdescr()
@@ -156,7 +157,7 @@
try:
optimize_trace(metainterp_sd, part, enable_opts,
- start_state=start_state)
+ start_state=start_state, export_state=False)
except InvalidLoop:
return None
@@ -209,7 +210,7 @@
assert label.getopnum() == rop.LABEL
try:
optimize_trace(metainterp_sd, part, jitdriver_sd.warmstate.enable_opts,
- start_state=start_state)
+ start_state=start_state, export_state=False)
except InvalidLoop:
# Fall back on jumping to preamble
target_token = label.getdescr()
@@ -220,7 +221,8 @@
try:
optimize_trace(metainterp_sd, part,
jitdriver_sd.warmstate.enable_opts,
- inline_short_preamble=False, start_state=start_state)
+ inline_short_preamble=False, start_state=start_state,
+ export_state=False)
except InvalidLoop:
return None
assert part.operations[-1].getopnum() != rop.LABEL
@@ -789,7 +791,8 @@
else:
inline_short_preamble = True
try:
- state = optimize_trace(metainterp_sd, new_trace, state.enable_opts, inline_short_preamble)
+ state = optimize_trace(metainterp_sd, new_trace, state.enable_opts,
+ inline_short_preamble, export_state=True)
except InvalidLoop:
debug_print("compile_new_bridge: got an InvalidLoop")
# XXX I am fairly convinced that optimize_bridge cannot actually raise
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
@@ -48,7 +48,8 @@
return optimizations, unroll
def optimize_trace(metainterp_sd, loop, enable_opts,
- inline_short_preamble=True, start_state=None):
+ inline_short_preamble=True, start_state=None,
+ export_state=True):
"""Optimize loop.operations to remove internal overheadish operations.
"""
@@ -59,7 +60,8 @@
optimizations, unroll = build_opt_chain(metainterp_sd, enable_opts)
if unroll:
return optimize_unroll(metainterp_sd, loop, optimizations,
- inline_short_preamble, start_state)
+ inline_short_preamble, start_state,
+ export_state)
else:
optimizer = Optimizer(metainterp_sd, loop, optimizations)
optimizer.propagate_all_forward()
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_multilabel.py b/rpython/jit/metainterp/optimizeopt/test/test_multilabel.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_multilabel.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_multilabel.py
@@ -45,7 +45,8 @@
part.operations = operations
self.add_guard_future_condition(part)
- state = self._do_optimize_loop(part, None, state)
+ state = self._do_optimize_loop(part, None, state,
+ export_state=True)
if part.operations[-1].getopnum() == rop.LABEL:
last_label = [part.operations.pop()]
else:
@@ -497,7 +498,8 @@
class BaseTestOptimizerRenamingBoxes(BaseTestMultiLabel):
- def _do_optimize_loop(self, loop, call_pure_results, state):
+ def _do_optimize_loop(self, loop, call_pure_results, state,
+ export_state=False):
from rpython.jit.metainterp.optimizeopt.unroll import optimize_unroll
from rpython.jit.metainterp.optimizeopt.util import args_dict
from rpython.jit.metainterp.optimizeopt.pure import OptPure
@@ -505,7 +507,7 @@
self.loop = loop
loop.call_pure_results = args_dict()
metainterp_sd = FakeMetaInterpStaticData(self.cpu)
- return optimize_unroll(metainterp_sd, loop, [OptRewrite(), OptRenameStrlen(), OptHeap(), OptPure()], True, state)
+ return optimize_unroll(metainterp_sd, loop, [OptRewrite(), OptRenameStrlen(), OptHeap(), OptPure()], True, state, export_state)
def test_optimizer_renaming_boxes1(self):
ops = """
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
@@ -104,7 +104,7 @@
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)
+ self._do_optimize_loop(loop, call_pure_results, export_state=False)
print '\n'.join([str(o) for o in loop.operations])
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
@@ -390,7 +390,8 @@
assert equaloplists(optimized.operations,
expected.operations, False, remap, text_right)
- def _do_optimize_loop(self, loop, call_pure_results, start_state=None):
+ def _do_optimize_loop(self, loop, call_pure_results, start_state=None,
+ export_state=False):
from rpython.jit.metainterp.optimizeopt import optimize_trace
from rpython.jit.metainterp.optimizeopt.util import args_dict
@@ -406,7 +407,8 @@
metainterp_sd.callinfocollection = self.callinfocollection
#
return optimize_trace(metainterp_sd, loop, self.enable_opts,
- start_state=start_state)
+ start_state=start_state,
+ export_state=export_state)
def unroll_and_optimize(self, loop, call_pure_results=None):
self.add_guard_future_condition(loop)
@@ -426,7 +428,8 @@
preamble.operations = [ResOperation(rop.LABEL, inputargs, None, descr=TargetToken(token))] + \
operations + \
[ResOperation(rop.LABEL, jump_args, None, descr=token)]
- start_state = self._do_optimize_loop(preamble, call_pure_results)
+ start_state = self._do_optimize_loop(preamble, call_pure_results,
+ export_state=True)
assert preamble.operations[-1].getopnum() == rop.LABEL
@@ -440,7 +443,8 @@
assert loop.operations[0].getopnum() == rop.LABEL
loop.inputargs = loop.operations[0].getarglist()
- self._do_optimize_loop(loop, call_pure_results, start_state)
+ self._do_optimize_loop(loop, call_pure_results, start_state,
+ export_state=False)
extra_same_as = []
while loop.operations[0].getopnum() != rop.LABEL:
extra_same_as.append(loop.operations[0])
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -16,10 +16,11 @@
# FIXME: Introduce some VirtualOptimizer super class instead
def optimize_unroll(metainterp_sd, loop, optimizations,
- inline_short_preamble=True, start_state=None):
+ inline_short_preamble=True, start_state=None,
+ export_state=True):
opt = UnrollOptimizer(metainterp_sd, loop, optimizations)
opt.inline_short_preamble = inline_short_preamble
- return opt.propagate_all_forward(start_state)
+ return opt.propagate_all_forward(start_state, export_state)
class UnrollableOptimizer(Optimizer):
@@ -70,7 +71,7 @@
prev = self.fix_snapshot(jump_args, snapshot.prev)
return Snapshot(prev, new_snapshot_args)
- def propagate_all_forward(self, starting_state):
+ def propagate_all_forward(self, starting_state, export_state=True):
loop = self.optimizer.loop
self.optimizer.clear_newoperations()
@@ -148,7 +149,10 @@
KillHugeIntBounds(self.optimizer).apply()
loop.operations = self.optimizer.get_newoperations()
- final_state = self.export_state(stop_label)
+ if export_state:
+ final_state = self.export_state(stop_label)
+ else:
+ final_state = None
loop.operations.append(stop_label)
return final_state
More information about the pypy-commit
mailing list