Author: Spenser Bauman <[email protected]>
Branch: clean-exported-state
Changeset: r87880:00541301b3ef
Date: 2016-10-19 12:38 -0400
http://bitbucket.org/pypy/pypy/changeset/00541301b3ef/
Log: Add checks in _do_optimize_loop to ensure optimization info is
cleaned up
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
@@ -24,9 +24,17 @@
llhelper.CONST_NULLREF = llhelper.CONST_NULL
REMOVED = AbstractResOp()
+def check_no_forwarding(lsts):
+ for lst in lsts:
+ for op in lst:
+ assert op.get_forwarded() is None
+
class LoopInfo(object):
label_op = None
+ def _check_no_forwarding(self):
+ pass
+
def forget_optimization_info(self):
pass
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
@@ -573,6 +573,7 @@
#
compile_data.enable_opts = self.enable_opts
state = optimize_trace(metainterp_sd, None, compile_data)
+ state[0]._check_no_forwarding()
return state
def _convert_call_pure_results(self, d):
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
@@ -6,7 +6,7 @@
from rpython.jit.metainterp.optimizeopt import info, intutils
from rpython.jit.metainterp.optimize import InvalidLoop, SpeculativeError
from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer,\
- Optimization, LoopInfo, MININT, MAXINT, BasicLoopInfo
+ Optimization, LoopInfo, MININT, MAXINT, BasicLoopInfo, check_no_forwarding
from rpython.jit.metainterp.optimizeopt.vstring import StrPtrInfo
from rpython.jit.metainterp.optimizeopt.virtualstate import (
VirtualStateConstructor, VirtualStatesCantMatch)
@@ -97,7 +97,6 @@
elif isinstance(preamble_info, info.FloatConstInfo):
op.set_forwarded(preamble_info._const)
-
class UnrollOptimizer(Optimization):
"""Unroll the loop into two iterations. The first one will
become the preamble or entry bridge (don't think there is a
@@ -115,13 +114,10 @@
return modifier.get_virtual_state(args)
def _check_no_forwarding(self, lsts, check_newops=True):
- for lst in lsts:
- for op in lst:
- assert op.get_forwarded() is None
+ check_no_forwarding(lsts)
if check_newops:
assert not self.optimizer._newoperations
-
def optimize_preamble(self, trace, runtime_boxes, call_pure_results, memo):
info, newops = self.optimizer.propagate_all_forward(
trace.get_iter(), call_pure_results, flush=False)
@@ -469,7 +465,7 @@
assert (len(exported_state.next_iteration_args) ==
len(targetargs))
self._check_no_forwarding([targetargs])
- exported_state._check_no_forwarding(self)
+ exported_state._check_no_forwarding()
for i, target in enumerate(exported_state.next_iteration_args):
source = targetargs[i]
assert source is not target
@@ -547,11 +543,11 @@
debug_print(" " + box.repr(memo))
debug_stop("jit-log-exported-state")
- def _check_no_forwarding(self, optimizer):
+ def _check_no_forwarding(self):
""" Ensures that no optimization state is attached to relevant
operations
before importing anything. """
# Some of these may be redunant
- optimizer._check_no_forwarding([
+ check_no_forwarding([
self.end_args,
self.next_iteration_args,
self.renamed_inputargs,
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit