[pypy-commit] pypy rewrite-unrolling: shuffle stuff around so we don't need unroller as an attribute
fijal
noreply at buildbot.pypy.org
Sun Jan 11 11:22:20 CET 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: rewrite-unrolling
Changeset: r75297:2c65ae7ccd02
Date: 2015-01-11 12:22 +0200
http://bitbucket.org/pypy/pypy/changeset/2c65ae7ccd02/
Log: shuffle stuff around so we don't need unroller as an attribute
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
@@ -847,6 +847,20 @@
op.getopnum(), argboxes, op.getdescr())
return resbox.constbox()
+ # for unrolling
+ def reuse_pure_result(self, box):
+ #if box in self.short_boxes_seen:
+ # return
+ label1_op = self.loop.operations[0]
+ label1_args = label1_op.getarglist()
+ label2_op = self.loop.operations[-1]
+ label2_args = label2_op.getarglist()
+ assert len(label1_args) == len(self.loop.inputargs)
+ assert len(label2_args) == len(self.loop.inputargs)
+ self.loop.inputargs.append(box)
+ label1_args.append(box)
+ label2_args.append(box)
+
#def optimize_GUARD_NO_OVERFLOW(self, op):
# # otherwise the default optimizer will clear fields, which is unwanted
# # in this case
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
@@ -388,8 +388,7 @@
assert equaloplists(optimized.operations,
expected.operations, False, remap, text_right)
- def _do_optimize_loop(self, loop, call_pure_results, start_state=None,
- export_state=False):
+ def _do_optimize_loop(self, loop, call_pure_results, unroller=None):
from rpython.jit.metainterp.optimizeopt import optimize_trace
from rpython.jit.metainterp.optimizeopt.util import args_dict
@@ -406,8 +405,7 @@
#
return optimize_trace(metainterp_sd, None, loop,
self.enable_opts,
- start_state=start_state,
- export_state=export_state)
+ unroller=unroller)
def unroll_and_optimize(self, loop, call_pure_results=None):
self.add_guard_future_condition(loop)
@@ -427,8 +425,7 @@
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,
- export_state=True)
+ start_state = self._do_optimize_loop(preamble, call_pure_results)
assert preamble.operations[-1].getopnum() == rop.LABEL
@@ -442,8 +439,7 @@
assert loop.operations[0].getopnum() == rop.LABEL
loop.inputargs = loop.operations[0].getarglist()
- self._do_optimize_loop(loop, call_pure_results, start_state,
- export_state=False)
+ self._do_optimize_loop(loop, call_pure_results, unroller=start_state)
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
@@ -13,17 +13,17 @@
class OptPureValue(OptValue):
- _attrs_ = ('unroller', 'keybox')
+ _attrs_ = ('keybox',)
box = None
def __init__(self, unroller, keybox):
self.unroller = unroller
self.keybox = keybox
- def force_box(self, ignored):
+ def force_box(self, optforce):
if self.box is None:
self.box = self.keybox
- self.unroller.reuse_pure_result(self.box)
+ optforce.optimizer.reuse_pure_result(self.box)
return self.box
@@ -48,14 +48,3 @@
if not value.is_virtual():
pure_value = OptPureValue(self, value.box)
new_optpure.pure_operations[opargs] = pure_value
-
- def reuse_pure_result(self, box):
- label1_op = self.optimizer.loop.operations[0]
- label1_args = label1_op.getarglist()
- label2_op = self.optimizer.loop.operations[-1]
- label2_args = label2_op.getarglist()
- assert len(label1_args) == len(self.optimizer.loop.inputargs)
- assert len(label2_args) == len(self.optimizer.loop.inputargs)
- self.optimizer.loop.inputargs.append(box)
- label1_args.append(box)
- label2_args.append(box)
More information about the pypy-commit
mailing list