[pypy-commit] pypy optresult-unroll: fix fix fix
fijal
noreply at buildbot.pypy.org
Tue Jul 7 09:36:34 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r78478:7b6353983251
Date: 2015-07-06 17:04 +0200
http://bitbucket.org/pypy/pypy/changeset/7b6353983251/
Log: fix fix fix
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
@@ -285,14 +285,6 @@
else:
zzz
- def setinfo_from_preamble(self, op, old_info):
- if isinstance(old_info, info.PtrInfo):
- if op.is_constant():
- return # nothing we can learn
- known_class = old_info.get_known_class(self.cpu)
- if known_class:
- self.make_constant_class(op, known_class, False)
-
def get_box_replacement(self, op):
from rpython.jit.metainterp.optimizeopt.unroll import PreambleOp
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -81,7 +81,6 @@
if expected_preamble:
self.assert_equal(preamble, convert_old_style_to_targets(expected_preamble, jump=False),
text_right='expected preamble')
- assert preamble.operations[-1].getdescr() == loop.operations[0].getdescr()
if expected_short:
short_preamble = TreeLoop('short preamble')
assert short[0].getopnum() == rop.LABEL
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
@@ -10,6 +10,7 @@
from rpython.jit.metainterp.compile import LoopCompileData
from rpython.jit.metainterp.optimizeopt.virtualstate import \
NotVirtualStateInfo, LEVEL_CONSTANT, LEVEL_UNKNOWN
+from rpython.jit.codewriter import heaptracker
class FakeOptimizer(object):
optearlyforce = None
@@ -71,3 +72,16 @@
assert vs.state[0].level == LEVEL_UNKNOWN
op = preamble.operations[0]
assert es.short_boxes == {op: op}
+
+ def test_guard_class(self):
+ loop = """
+ [p0]
+ guard_class(p0, ConstClass(node_vtable)) []
+ jump(p0)
+ """
+ es, loop, preamble = self.optimize(loop)
+ p0 = loop.inputargs[0]
+ assert (heaptracker.adr2int(self.node_vtable_adr) ==
+ es.exported_infos[p0]._known_class.getint())
+
+
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
@@ -513,7 +513,7 @@
loop.operations
if not jump:
assert newloop.operations[-1].getopnum() == rop.JUMP
- newloop.operations[-1] = ResOperation(rop.LABEL, newloop.operations[-1].getarglist(), descr=FakeDescr())
+ newloop.operations = newloop.operations[:-1]
return newloop
# ____________________________________________________________
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
@@ -3,6 +3,7 @@
from rpython.jit.metainterp.history import TargetToken, JitCellToken, Const
from rpython.jit.metainterp.optimizeopt.shortpreamble import ShortBoxes
from rpython.jit.metainterp.optimize import InvalidLoop
+from rpython.jit.metainterp.optimizeopt import info
from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer,\
Optimization
from rpython.jit.metainterp.optimizeopt.virtualstate import (VirtualStateConstructor,
@@ -35,6 +36,15 @@
preamble_op.info.make_guards(op, self.optunroll.short)
return op
+ def setinfo_from_preamble(self, op, old_info):
+ op = self.get_box_replacement(op)
+ if isinstance(old_info, info.PtrInfo):
+ if op.is_constant():
+ return # nothing we can learn
+ known_class = old_info.get_known_class(self.cpu)
+ if known_class:
+ self.make_constant_class(op, known_class, False)
+
class UnrollOptimizer(Optimization):
"""Unroll the loop into two iterations. The first one will
@@ -173,7 +183,11 @@
inparg_mapping = [(start_label.getarg(i), end_args[i])
for i in range(len(end_args)) if
start_label.getarg(i) is not end_args[i]]
- return ExportedState(inparg_mapping, virtual_state, [], sb.short_boxes)
+ infos = {}
+ for arg in end_args:
+ infos[arg] = self.optimizer.getinfo(arg)
+ return ExportedState(inparg_mapping, virtual_state, infos,
+ sb.short_boxes)
inputargs = virtual_state.make_inputargs(jump_args, self.optimizer)
@@ -224,7 +238,8 @@
# the mapping between input args (from old label) and what we need
# to actually emit
for source, target in exported_state.inputarg_mapping:
- xxx
+ if source is not target:
+ source.set_forwarded(target)
# import the optimizer state, starting from boxes that can be produced
# by short preamble
for op, preamble_op in exported_state.short_boxes.items():
@@ -232,6 +247,9 @@
self.pure(op.getopnum(), PreambleOp(op, preamble_op, None))
else:
yyy
+
+ for op, info in exported_state.exported_infos.iteritems():
+ self.optimizer.setinfo_from_preamble(op, info)
return
self.inputargs = targetop.getarglist()
target_token = targetop.getdescr()
More information about the pypy-commit
mailing list