[pypy-commit] pypy optresult-unroll: start fighting the unrolling - step one is calling the short boxes
fijal
noreply at buildbot.pypy.org
Mon Jul 6 10:37:03 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r78447:966c24dd62ad
Date: 2015-07-06 10:37 +0200
http://bitbucket.org/pypy/pypy/changeset/966c24dd62ad/
Log: start fighting the unrolling - step one is calling the short boxes
diff --git a/rpython/jit/metainterp/optimizeopt/generalize.py b/rpython/jit/metainterp/optimizeopt/generalize.py
deleted file mode 100644
--- a/rpython/jit/metainterp/optimizeopt/generalize.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#from rpython.jit.metainterp.optimizeopt.optimizer import MININT, MAXINT
-
-
-class GeneralizationStrategy(object):
- def __init__(self, optimizer):
- self.optimizer = optimizer
-
- def apply(self):
- raise NotImplementedError
-
-
-class KillHugeIntBounds(GeneralizationStrategy):
- def apply(self):
- pass
- #for v in self.optimizer.values.values():
- # if v.is_constant():
- # continue
- # if isinstance(v, IntOptValue):
- # if v.intbound.lower < MININT / 2:
- # v.intbound.lower = MININT
- # if v.intbound.upper > MAXINT / 2:
- # v.intbound.upper = MAXINT
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
@@ -218,7 +218,7 @@
return recentops.lookup(self.optimizer, op)
def produce_potential_short_preamble_ops(self, sb):
- ops = sb.optimizer._newoperations
+ ops = self.optimizer._newoperations
for i, op in enumerate(ops):
if op.is_always_pure():
sb.add_potential(op)
diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
--- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
+++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
@@ -23,6 +23,7 @@
for op, preamble_op in self.potential_ops:
self.produce_short_preamble_op(op, preamble_op)
+ return self.short_boxes
def add_to_short(self, op, short_op):
self.short_boxes[op] = short_op
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_short.py b/rpython/jit/metainterp/optimizeopt/test/test_short.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_short.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_short.py
@@ -62,3 +62,4 @@
assert op1 in sb.short_boxes.values()
assert op in sb.short_boxes.values()
assert op in sb.short_boxes.keys()
+
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
@@ -13,7 +13,7 @@
class FakeOptimizer(object):
optearlyforce = None
-class TestUnroll(BaseTest, LLtypeMixin):
+class BaseTestUnroll(BaseTest, LLtypeMixin):
enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap:unroll"
def optimize(self, ops):
@@ -38,8 +38,9 @@
start_state = self._do_optimize_loop(preamble, None,
export_state=True)
vs = preamble.operations[-1].getdescr().virtual_state
- return start_state, vs, loop
+ return start_state, vs, loop, preamble
+class TestUnroll(BaseTestUnroll):
def test_simple(self):
loop = """
[i0]
@@ -47,7 +48,7 @@
guard_value(i1, 1) []
jump(i1)
"""
- es, vs, loop = self.optimize(loop)
+ es, vs, loop, preamble = self.optimize(loop)
assert isinstance(vs.state[0], NotVirtualStateInfo)
# the virtual state is constant, so we don't need to have it in
# inputargs
@@ -56,6 +57,7 @@
# we have exported values for i1, which happens to be an inputarg
assert es.inputarg_mapping[0][1].getint() == 1
assert isinstance(es.inputarg_mapping[0][1], ConstInt)
+ assert es.short_boxes == {}
def test_not_constant(self):
loop = """
@@ -63,6 +65,8 @@
i1 = int_add(i0, 1)
jump(i0)
"""
- es, vs, loop = self.optimize(loop)
+ es, vs, loop, preamble = self.optimize(loop)
assert isinstance(vs.state[0], NotVirtualStateInfo)
assert vs.state[0].level == LEVEL_UNKNOWN
+ op = preamble.operations[1]
+ assert es.short_boxes == {op: op}
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
@@ -1,9 +1,8 @@
import sys
from rpython.jit.metainterp.history import TargetToken, JitCellToken, Const
-from rpython.jit.metainterp.logger import LogOperations
+from rpython.jit.metainterp.optimizeopt.shortpreamble import ShortBoxes
from rpython.jit.metainterp.optimize import InvalidLoop
-from rpython.jit.metainterp.optimizeopt.generalize import KillHugeIntBounds
from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer,\
Optimization
from rpython.jit.metainterp.optimizeopt.virtualstate import (VirtualStateConstructor,
@@ -165,8 +164,6 @@
self.close_bridge(start_label)
self.optimizer.flush()
- if export_state:
- KillHugeIntBounds(self.optimizer).apply()
loop.operations = self.optimizer.get_newoperations()
if export_state:
@@ -211,8 +208,11 @@
target_token = targetop.getdescr()
assert isinstance(target_token, TargetToken)
target_token.virtual_state = virtual_state
- return ExportedState([(label_op.getarg(i), jump_args[i]) for i in range(len(jump_args))], [], [], [])
- xxx
+ sb = ShortBoxes()
+ sb.create_short_boxes(self.optimizer, jump_args)
+ inparg_mapping = [(label_op.getarg(i), jump_args[i])
+ for i in range(len(jump_args))]
+ return ExportedState(inparg_mapping, [], sb.short_boxes)
inputargs = virtual_state.make_inputargs(jump_args, self.optimizer)
@@ -298,14 +298,11 @@
#for source, target in exported_state.inputarg_setup_ops:
# source.set_forwarded(target)
- #for op in self.short_boxes.operations():
- # if not op:
- # continue
- # if op.is_always_pure():
- # self.pure(op.getopnum(),
- # PreambleOp(op, self.optimizer.getinfo(op)))
- # else:
- # yyy
+ for op, preamble_op in exported_state.short_boxes.iteritems():
+ if preamble_op.is_always_pure():
+ self.pure(op.getopnum(), PreambleOp(op, None))
+ else:
+ xxx
return
seen = {}
for op in self.short_boxes.operations():
@@ -336,8 +333,8 @@
# debug_print(' Falling back to add extra: ' +
# self.optimizer.loop.logops.repr_of_resop(op))
- self.optimizer.flush()
- self.optimizer.emitting_dissabled = False
+ #self.optimizer.flush()
+ #self.optimizer.emitting_dissabled = False
def close_bridge(self, start_label):
inputargs = self.inputargs
@@ -709,28 +706,10 @@
as the first element and the second element being
what it maps to (potentially const)
* exported_infos - a mapping from ops to infos, including inputargs
- * pure operations - a list of pure operations that can produce various
- ops
- * heap cache operations - an additional list of how to produce various
- ops
+ * short boxes - a mapping op -> preamble_op
"""
- def __init__(self, inputarg_mapping, exported_infos, pure_ops,
- heap_cache_ops):
+ def __init__(self, inputarg_mapping, exported_infos, short_boxes):
self.inputarg_mapping = inputarg_mapping
self.exported_infos = exported_infos
- self.pure_ops = pure_ops
- self.heap_cache_ops = heap_cache_ops
-
- def dump(self, metainterp_sd):
- debug_start("jit-exported-state")
- logops = LogOperations(metainterp_sd, False)
- debug_print(" inputarg setup")
- logops._log_operations([], self.inputarg_setup_ops)
- debug_print(" short boxes")
- self.short_boxes.dump(logops)
- debug_print(" exported values")
- for k, v in self.exported_values.iteritems():
- debug_print("%s:%s" % (logops.repr_of_resop(k),
- logops.repr_of_resop(v.box)))
- debug_stop("jit-exported-state")
+ self.short_boxes = short_boxes
More information about the pypy-commit
mailing list