Author: Ronan Lamy <[email protected]>
Branch: optimizeopt-cleanup
Changeset: r96585:2853f7476ba2
Date: 2019-05-09 15:38 +0100
http://bitbucket.org/pypy/pypy/changeset/2853f7476ba2/
Log: Make optimize_trace() a method of CompileData
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
@@ -39,6 +39,26 @@
for arg in self.trace.inputargs:
arg.set_forwarded(None)
+ def optimize_trace(self, metainterp_sd, jitdriver_sd, memo):
+ """Optimize loop.operations to remove internal overheadish operations.
+ """
+ from rpython.jit.metainterp.optimizeopt import build_opt_chain
+ # mark that a new trace has been started
+ log = metainterp_sd.jitlog.log_trace(jl.MARK_TRACE, metainterp_sd,
None)
+ log.write_trace(self.trace)
+ if self.log_noopt:
+ metainterp_sd.logger_noopt.log_loop_from_trace(self.trace,
memo=memo)
+
+ self.box_names_memo = memo
+ optimizations = build_opt_chain(self.enable_opts)
+ debug_start("jit-optimize")
+ try:
+ return self.optimize(metainterp_sd, jitdriver_sd, optimizations)
+ finally:
+ self.forget_optimization_info()
+ debug_stop("jit-optimize")
+
+
class PreambleCompileData(CompileData):
"""
This is the case of label() ops label()
@@ -54,10 +74,9 @@
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)
+ 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
@@ -72,7 +91,8 @@
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
+ from rpython.jit.metainterp.optimizeopt.bridgeopt \
+ import deserialize_optimizer_knowledge
opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
traceiter = self.trace.get_iter()
if self.resumestorage:
@@ -86,8 +106,9 @@
""" This represents ops() with a jump at the end that goes to some
loop, we need to deal with virtual state and inlining of short preamble
"""
- def __init__(self, trace, runtime_boxes, resumestorage=None,
call_pure_results=None,
- enable_opts=None, inline_short_preamble=False):
+ def __init__(self, trace, runtime_boxes, resumestorage=None,
+ call_pure_results=None, enable_opts=None,
+ inline_short_preamble=False):
self.trace = trace
self.runtime_boxes = runtime_boxes
self.call_pure_results = call_pure_results
@@ -203,8 +224,6 @@
def compile_simple_loop(metainterp, greenkey, trace, runtime_args, enable_opts,
cut_at):
- from rpython.jit.metainterp.optimizeopt import optimize_trace
-
jitdriver_sd = metainterp.jitdriver_sd
metainterp_sd = metainterp.staticdata
jitcell_token = make_jitcell_token(jitdriver_sd)
@@ -212,8 +231,8 @@
data = SimpleCompileData(trace, call_pure_results=call_pure_results,
enable_opts=enable_opts)
try:
- loop_info, ops = optimize_trace(
- metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo)
+ loop_info, ops = data.optimize_trace(
+ metainterp_sd, jitdriver_sd, metainterp.box_names_memo)
except InvalidLoop:
metainterp_sd.jitlog.trace_aborted()
trace.cut_at(cut_at)
@@ -242,8 +261,6 @@
"""Try to compile a new procedure by closing the current history back
to the first operation.
"""
- from rpython.jit.metainterp.optimizeopt import optimize_trace
-
metainterp_sd = metainterp.staticdata
jitdriver_sd = metainterp.jitdriver_sd
history = metainterp.history
@@ -267,9 +284,8 @@
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)
+ start_state, preamble_ops = preamble_data.optimize_trace(
+ metainterp_sd, jitdriver_sd, metainterp.box_names_memo)
except InvalidLoop:
metainterp_sd.jitlog.trace_aborted()
history.cut(cut_at)
@@ -284,8 +300,8 @@
call_pure_results=call_pure_results,
enable_opts=enable_opts)
try:
- loop_info, loop_ops = optimize_trace(
- metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo)
+ loop_info, loop_ops = loop_data.optimize_trace(
+ metainterp_sd, jitdriver_sd, metainterp.box_names_memo)
except InvalidLoop:
metainterp_sd.jitlog.trace_aborted()
history.cut(cut_at)
@@ -332,8 +348,6 @@
"""Try to compile a new procedure by closing the current history back
to the first operation.
"""
- from rpython.jit.metainterp.optimizeopt import optimize_trace
-
trace = metainterp.history.trace.cut_trace_from(start, inputargs)
metainterp_sd = metainterp.staticdata
jitdriver_sd = metainterp.jitdriver_sd
@@ -353,8 +367,8 @@
call_pure_results=call_pure_results,
enable_opts=enable_opts)
try:
- loop_info, loop_ops = optimize_trace(
- metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo)
+ loop_info, loop_ops = loop_data.optimize_trace(
+ metainterp_sd, jitdriver_sd, metainterp.box_names_memo)
except InvalidLoop:
# Fall back on jumping directly to preamble
history.cut(cut)
@@ -364,9 +378,8 @@
enable_opts=enable_opts,
inline_short_preamble=False)
try:
- loop_info, loop_ops = optimize_trace(
- metainterp_sd, jitdriver_sd, loop_data,
- metainterp.box_names_memo)
+ loop_info, loop_ops = loop_data.optimize_trace(
+ metainterp_sd, jitdriver_sd, metainterp.box_names_memo)
except InvalidLoop:
metainterp_sd.jitlog.trace_aborted()
history.cut(cut)
@@ -1024,8 +1037,6 @@
"""Try to compile a new bridge leading from the beginning of the history
to some existing place.
"""
- from rpython.jit.metainterp.optimizeopt import optimize_trace
-
# The history contains new operations to attach as the code for the
# failure of 'resumekey.guard_op'.
#
@@ -1060,8 +1071,8 @@
call_pure_results=call_pure_results,
enable_opts=enable_opts)
try:
- info, newops = optimize_trace(
- metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo)
+ info, newops = data.optimize_trace(
+ metainterp_sd, jitdriver_sd, 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
@@ -1,4 +1,3 @@
-from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer
from rpython.jit.metainterp.optimizeopt.rewrite import OptRewrite
from rpython.jit.metainterp.optimizeopt.intbounds import OptIntBounds
from rpython.jit.metainterp.optimizeopt.virtualize import OptVirtualize
@@ -7,10 +6,8 @@
from rpython.jit.metainterp.optimizeopt.simplify import OptSimplify
from rpython.jit.metainterp.optimizeopt.pure import OptPure
from rpython.jit.metainterp.optimizeopt.earlyforce import OptEarlyForce
-from rpython.rlib.rjitlog import rjitlog as jl
from rpython.rlib.jit import PARAMETERS, ENABLE_ALL_OPTS
from rpython.rlib.unroll import unrolling_iterable
-from rpython.rlib.debug import debug_start, debug_stop, debug_print
ALL_OPTS = [('intbounds', OptIntBounds),
@@ -43,29 +40,5 @@
optimizations.append(OptSimplify())
return optimizations
-def _log_loop_from_trace(metainterp_sd, trace, memo=None, is_unrolled=False):
- # mark that a new trace has been started
- log = metainterp_sd.jitlog.log_trace(jl.MARK_TRACE, metainterp_sd, None)
- log.write_trace(trace)
- 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):
- """Optimize loop.operations to remove internal overheadish operations.
- """
- if memo is None:
- memo = {}
- debug_start("jit-optimize")
- try:
- _log_loop_from_trace(metainterp_sd, compile_data.trace, memo,
- is_unrolled=not compile_data.log_noopt)
- compile_data.box_names_memo = memo
- optimizations = build_opt_chain(compile_data.enable_opts)
- return compile_data.optimize(
- metainterp_sd, jitdriver_sd, optimizations)
- finally:
- compile_data.forget_optimization_info()
- debug_stop("jit-optimize")
-
if __name__ == '__main__':
print ALL_OPTS_NAMES
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,6 @@
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
from rpython.jit.metainterp.optimizeopt.util import (
sort_descrs, equaloplists, args_dict)
@@ -544,7 +543,7 @@
compute_bitstrings(self.cpu.fetch_all_descrs())
#
compile_data.enable_opts = self.enable_opts
- state = optimize_trace(metainterp_sd, None, compile_data)
+ state = compile_data.optimize_trace(metainterp_sd, None, {})
return state
def _convert_call_pure_results(self, d):
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,6 @@
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
from rpython.jit.metainterp.optimizeopt.util import args_dict
self.bridge = bridge
@@ -871,7 +870,7 @@
data = compile.BridgeCompileData(trace, runtime_boxes,
enable_opts=self.enable_opts, inline_short_preamble=True)
- info, newops = optimize_trace(metainterp_sd, None, data)
+ info, newops = data.optimize_trace(metainterp_sd, None, {})
if info.final():
bridge.operations = newops
bridge.inputargs = info.inputargs
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit