[pypy-commit] pypy optimizeopt-cleanup: LoopCompileData.optimize() is only called with unroll=True; simplify optimize() and optimize_trace()
rlamy
pypy.commits at gmail.com
Sat Apr 13 19:18:37 EDT 2019
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: optimizeopt-cleanup
Changeset: r96465:f6577bae1fb3
Date: 2019-04-13 23:52 +0100
http://bitbucket.org/pypy/pypy/changeset/f6577bae1fb3/
Log: LoopCompileData.optimize() is only called with unroll=True; simplify
optimize() and optimize_trace()
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
@@ -35,7 +35,7 @@
for arg in self.trace.inputargs:
arg.set_forwarded(None)
-class LoopCompileData(CompileData):
+class PreambleCompileData(CompileData):
""" An object that accumulates all of the necessary info for
the optimization phase, but does not actually have any other state
@@ -49,19 +49,13 @@
assert runtime_boxes is not None
self.runtime_boxes = runtime_boxes
- def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
- from rpython.jit.metainterp.optimizeopt.unroll import (UnrollOptimizer,
- Optimizer)
-
- if unroll:
- opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations)
- return opt.optimize_preamble(self.trace,
- self.runtime_boxes,
- self.call_pure_results,
- self.box_names_memo)
- else:
- opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
- return opt.propagate_all_forward(self.trace, self.call_pure_results)
+ def optimize(self, metainterp_sd, jitdriver_sd, optimizations):
+ from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer
+ opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations)
+ return opt.optimize_preamble(self.trace,
+ self.runtime_boxes,
+ self.call_pure_results,
+ self.box_names_memo)
class SimpleCompileData(CompileData):
""" This represents label() ops jump with no extra info associated with
@@ -74,11 +68,9 @@
self.call_pure_results = call_pure_results
self.enable_opts = enable_opts
- def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
+ def optimize(self, metainterp_sd, jitdriver_sd, optimizations):
from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer
from rpython.jit.metainterp.optimizeopt.bridgeopt import deserialize_optimizer_knowledge
-
- #assert not unroll
opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
traceiter = self.trace.get_iter()
if self.resumestorage:
@@ -101,7 +93,7 @@
self.inline_short_preamble = inline_short_preamble
self.resumestorage = resumestorage
- def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
+ def optimize(self, metainterp_sd, jitdriver_sd, optimizations):
from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer
opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations)
@@ -113,7 +105,7 @@
class UnrolledLoopData(CompileData):
""" This represents label() ops jump with extra info that's from the
- run of LoopCompileData. Jump goes to the same label
+ run of PreambleCompileData. Jump goes to the same label
"""
log_noopt = False
@@ -127,10 +119,8 @@
self.call_pure_results = call_pure_results
self.inline_short_preamble = inline_short_preamble
- def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
+ def optimize(self, metainterp_sd, jitdriver_sd, optimizations):
from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer
-
- assert unroll # we should not be here if it's disabled
opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations)
return opt.optimize_peeled_loop(self.trace, self.celltoken, self.state,
self.call_pure_results, self.inline_short_preamble)
@@ -217,7 +207,7 @@
def compile_simple_loop(metainterp, greenkey, trace, runtime_args, enable_opts,
cut_at):
- from rpython.jit.metainterp.optimizeopt import optimize_trace, use_unrolling
+ from rpython.jit.metainterp.optimizeopt import optimize_trace
jitdriver_sd = metainterp.jitdriver_sd
metainterp_sd = metainterp.staticdata
@@ -225,11 +215,9 @@
call_pure_results = metainterp.call_pure_results
data = SimpleCompileData(trace, call_pure_results=call_pure_results,
enable_opts=enable_opts)
- use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
try:
loop_info, ops = optimize_trace(
- metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo,
- use_unrolling=use_unroll)
+ metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo)
except InvalidLoop:
metainterp_sd.jitlog.trace_aborted()
trace.cut_at(cut_at)
@@ -287,13 +275,13 @@
return compile_simple_loop(metainterp, greenkey, trace, jumpargs,
enable_opts, cut_at)
call_pure_results = metainterp.call_pure_results
- preamble_data = LoopCompileData(trace, jumpargs,
+ preamble_data = PreambleCompileData(trace, jumpargs,
call_pure_results=call_pure_results,
enable_opts=enable_opts)
try:
start_state, preamble_ops = optimize_trace(
metainterp_sd, jitdriver_sd, preamble_data,
- metainterp.box_names_memo, use_unrolling=use_unroll)
+ metainterp.box_names_memo)
except InvalidLoop:
metainterp_sd.jitlog.trace_aborted()
history.cut(cut_at)
@@ -309,8 +297,7 @@
enable_opts=enable_opts)
try:
loop_info, loop_ops = optimize_trace(
- metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo,
- use_unrolling=use_unroll)
+ metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo)
except InvalidLoop:
metainterp_sd.jitlog.trace_aborted()
history.cut(cut_at)
@@ -373,15 +360,15 @@
cut = history.get_trace_position()
history.record(rop.JUMP, jumpargs[:], None, descr=loop_jitcell_token)
enable_opts = jitdriver_sd.warmstate.enable_opts
+ use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
+ assert use_unroll
call_pure_results = metainterp.call_pure_results
loop_data = UnrolledLoopData(trace, loop_jitcell_token, start_state,
call_pure_results=call_pure_results,
enable_opts=enable_opts)
- use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
try:
loop_info, loop_ops = optimize_trace(
- metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo,
- use_unrolling=use_unroll)
+ metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo)
except InvalidLoop:
# Fall back on jumping directly to preamble
history.cut(cut)
@@ -393,7 +380,7 @@
try:
loop_info, loop_ops = optimize_trace(
metainterp_sd, jitdriver_sd, loop_data,
- metainterp.box_names_memo, use_unrolling=use_unroll)
+ metainterp.box_names_memo)
except InvalidLoop:
metainterp_sd.jitlog.trace_aborted()
history.cut(cut)
@@ -1091,8 +1078,7 @@
use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
try:
info, newops = optimize_trace(
- metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo,
- use_unrolling=use_unroll)
+ metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo)
except InvalidLoop:
metainterp_sd.jitlog.trace_aborted()
# 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
@@ -53,8 +53,7 @@
if not is_unrolled:
metainterp_sd.logger_noopt.log_loop_from_trace(trace, memo=memo)
-def optimize_trace(metainterp_sd, jitdriver_sd, compile_data,
- memo=None, use_unrolling=True):
+def optimize_trace(metainterp_sd, jitdriver_sd, compile_data, memo=None):
"""Optimize loop.operations to remove internal overheadish operations.
"""
debug_start("jit-optimize")
@@ -65,8 +64,8 @@
memo = {}
compile_data.box_names_memo = memo
optimizations = build_opt_chain(compile_data.enable_opts)
- return compile_data.optimize(metainterp_sd, jitdriver_sd,
- optimizations, unroll=use_unrolling)
+ return compile_data.optimize(
+ metainterp_sd, jitdriver_sd, optimizations)
finally:
compile_data.forget_optimization_info()
debug_stop("jit-optimize")
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
@@ -5,7 +5,6 @@
from rpython.rlib.rarithmetic import LONG_BIT
from rpython.rtyper import rclass
from rpython.rtyper.lltypesystem import lltype
-from rpython.jit.metainterp.optimizeopt import use_unrolling
from rpython.jit.metainterp.optimizeopt.test.test_util import (
BaseTest, FakeMetaInterpStaticData, convert_old_style_to_targets)
from rpython.jit.metainterp.history import (
@@ -34,10 +33,9 @@
expected = convert_old_style_to_targets(exp, jump=True)
call_pure_results = self._convert_call_pure_results(call_pure_results)
trace = convert_loop_to_trace(loop, FakeMetaInterpStaticData(self.cpu))
- use_unroll = use_unrolling(self.cpu, self.enable_opts)
compile_data = compile.SimpleCompileData(
trace, call_pure_results=call_pure_results)
- info, ops = self._do_optimize_loop(compile_data, use_unroll)
+ info, ops = self._do_optimize_loop(compile_data)
label_op = ResOperation(rop.LABEL, info.inputargs)
loop.inputargs = info.inputargs
loop.operations = [label_op] + ops
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
@@ -1,4 +1,3 @@
-from rpython.jit.metainterp.optimizeopt import use_unrolling
from rpython.jit.metainterp.optimizeopt.test.test_util import (
BaseTest, convert_old_style_to_targets, FakeMetaInterpStaticData)
from rpython.jit.metainterp import compile
@@ -30,13 +29,12 @@
self.add_guard_future_condition(bridge)
trace = oparser.convert_loop_to_trace(
bridge, FakeMetaInterpStaticData(self.cpu))
- use_unroll = use_unrolling(self.cpu, self.enable_opts)
data = compile.BridgeCompileData(
trace,
self.convert_values(bridge.operations[-1].getarglist(), bridge_values),
None, enable_opts=self.enable_opts,
inline_short_preamble=inline_short_preamble)
- bridge_info, ops = self._do_optimize_loop(data, use_unroll)
+ bridge_info, ops = self._do_optimize_loop(data)
loop.check_consistency(check_descr=False)
info.preamble.check_consistency(check_descr=False)
bridge.operations = ([ResOperation(rop.LABEL, bridge_info.inputargs)] +
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
@@ -11,12 +11,11 @@
from rpython.jit.metainterp.support import ptr2int
from rpython.jit.metainterp.optimizeopt.shortpreamble import (
ShortPreambleBuilder, PreambleOp, ShortInputArg)
-from rpython.jit.metainterp.compile import LoopCompileData
+from rpython.jit.metainterp.compile import PreambleCompileData
from rpython.jit.metainterp.optimizeopt.virtualstate import (
NotVirtualStateInfo, LEVEL_CONSTANT, LEVEL_UNKNOWN, LEVEL_KNOWNCLASS,
VirtualStateInfo)
from rpython.jit.metainterp.optimizeopt import info, optimizer
-from rpython.jit.metainterp.optimizeopt import use_unrolling
from rpython.jit.tool import oparser
class FakeOptimizer(object):
@@ -47,9 +46,8 @@
inputargs = loop.inputargs
preamble = TreeLoop('preamble')
trace = oparser.convert_loop_to_trace(loop, FakeMetaInterpStaticData(self.cpu))
- use_unroll = use_unrolling(self.cpu, self.enable_opts)
- compile_data = LoopCompileData(trace, inputargs)
- start_state, newops = self._do_optimize_loop(compile_data, use_unroll)
+ compile_data = PreambleCompileData(trace, inputargs)
+ start_state, newops = self._do_optimize_loop(compile_data)
preamble.operations = newops
preamble.inputargs = start_state.renamed_inputargs
return start_state, loop, preamble
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
@@ -23,7 +23,7 @@
from rpython.jit.metainterp.resoperation import (
rop, ResOperation, InputArgRef, AbstractValue)
from rpython.jit.metainterp.virtualref import VirtualRefInfo
-from rpython.jit.metainterp.optimizeopt import optimize_trace, use_unrolling
+from rpython.jit.metainterp.optimizeopt import optimize_trace
from rpython.jit.metainterp.optimizeopt.util import (
sort_descrs, equaloplists, args_dict)
@@ -538,14 +538,13 @@
assert equaloplists(optimized.operations,
expected.operations, False, remap, text_right)
- def _do_optimize_loop(self, compile_data, use_unroll):
+ def _do_optimize_loop(self, compile_data):
metainterp_sd = FakeMetaInterpStaticData(self.cpu)
metainterp_sd.virtualref_info = self.vrefinfo
compute_bitstrings(self.cpu.fetch_all_descrs())
#
compile_data.enable_opts = self.enable_opts
- state = optimize_trace(
- metainterp_sd, None, compile_data, use_unrolling=use_unroll)
+ state = optimize_trace(metainterp_sd, None, compile_data)
return state
def _convert_call_pure_results(self, d):
@@ -583,14 +582,13 @@
jump_op.setdescr(celltoken)
call_pure_results = self._convert_call_pure_results(call_pure_results)
t = convert_loop_to_trace(loop, FakeMetaInterpStaticData(self.cpu))
- use_unroll = use_unrolling(self.cpu, self.enable_opts)
- preamble_data = compile.LoopCompileData(t, runtime_boxes,
- call_pure_results)
- start_state, preamble_ops = self._do_optimize_loop(preamble_data, use_unroll)
+ preamble_data = compile.PreambleCompileData(
+ t, runtime_boxes, call_pure_results, enable_opts=self.enable_opts)
+ start_state, preamble_ops = self._do_optimize_loop(preamble_data)
preamble_data.forget_optimization_info()
loop_data = compile.UnrolledLoopData(preamble_data.trace,
celltoken, start_state, call_pure_results)
- loop_info, ops = self._do_optimize_loop(loop_data, use_unroll)
+ loop_info, ops = self._do_optimize_loop(loop_data)
preamble = TreeLoop('preamble')
preamble.inputargs = start_state.renamed_inputargs
start_label = ResOperation(rop.LABEL, start_state.renamed_inputargs)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
@@ -853,7 +853,7 @@
enable_opts = "intbounds:rewrite:virtualize:string:pure:earlyforce:heap:unroll"
def _do_optimize_bridge(self, bridge, call_pure_results, values):
- from rpython.jit.metainterp.optimizeopt import optimize_trace, use_unrolling
+ from rpython.jit.metainterp.optimizeopt import optimize_trace
from rpython.jit.metainterp.optimizeopt.util import args_dict
self.bridge = bridge
@@ -871,9 +871,7 @@
data = compile.BridgeCompileData(trace, runtime_boxes,
enable_opts=self.enable_opts, inline_short_preamble=True)
- use_unroll = use_unrolling(self.cpu, self.enable_opts)
- info, newops = optimize_trace(metainterp_sd, None, data,
- use_unrolling=use_unroll)
+ info, newops = optimize_trace(metainterp_sd, None, data)
if info.final():
bridge.operations = newops
bridge.inputargs = info.inputargs
diff --git a/rpython/jit/metainterp/test/test_ajit.py b/rpython/jit/metainterp/test/test_ajit.py
--- a/rpython/jit/metainterp/test/test_ajit.py
+++ b/rpython/jit/metainterp/test/test_ajit.py
@@ -2918,9 +2918,8 @@
return i
#
seen = []
- def my_optimize_trace(metainterp_sd, jitdriver_sd, data, memo=None,
- use_unrolling=True):
- assert use_unrolling == ('unroll' in data.enable_opts)
+ def my_optimize_trace(metainterp_sd, jitdriver_sd, data, memo=None):
+ use_unrolling = ('unroll' in data.enable_opts)
seen.append(use_unrolling)
raise InvalidLoop
old_optimize_trace = optimizeopt.optimize_trace
More information about the pypy-commit
mailing list