Author: Ronan Lamy <[email protected]>
Branch: optimizeopt-cleanup
Changeset: r96495:9aea58ad1da8
Date: 2019-04-14 02:00 +0100
http://bitbucket.org/pypy/pypy/changeset/9aea58ad1da8/
Log: Move try_disabling_unroll logic up to MetaInterp.compile_loop()
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
@@ -3,21 +3,22 @@
from rpython.rtyper.annlowlevel import (
cast_instance_to_gcref, cast_gcref_to_instance)
from rpython.rlib.objectmodel import we_are_translated
-from rpython.rlib.debug import debug_start, debug_stop, debug_print,
have_debug_prints
+from rpython.rlib.debug import (
+ debug_start, debug_stop, debug_print, have_debug_prints)
from rpython.rlib.rarithmetic import r_uint, intmask
from rpython.rlib import rstack
from rpython.rlib.jit import JitDebugInfo, Counters, dont_look_inside
from rpython.rlib.rjitlog import rjitlog as jl
-from rpython.jit.metainterp.resoperation import ResOperation, rop,\
- get_deep_immutable_oplist, OpHelpers, InputArgInt, InputArgRef,\
- InputArgFloat
-from rpython.jit.metainterp.history import (TreeLoop, Const, JitCellToken,
+from rpython.jit.metainterp.resoperation import (
+ ResOperation, rop, get_deep_immutable_oplist, OpHelpers, InputArgInt,
+ InputArgRef, InputArgFloat)
+from rpython.jit.metainterp.history import (TreeLoop, JitCellToken,
TargetToken, AbstractFailDescr, ConstInt)
from rpython.jit.metainterp import history, jitexc
from rpython.jit.metainterp.optimize import InvalidLoop
-from rpython.jit.metainterp.resume import (PENDINGFIELDSP,
- ResumeDataDirectReader, AccumInfo)
+from rpython.jit.metainterp.resume import (
+ PENDINGFIELDSP, ResumeDataDirectReader)
from rpython.jit.metainterp.resumecode import NUMBERING
from rpython.jit.metainterp.support import adr2int
from rpython.jit.codewriter import longlong
@@ -28,6 +29,9 @@
raise SwitchToBlackhole(Counters.ABORT_BRIDGE)
class CompileData(object):
+ """ An object that accumulates all of the necessary info for
+ the optimization phase, but does not actually have any other state
+ """
memo = None
log_noopt = True
@@ -36,9 +40,7 @@
arg.set_forwarded(None)
class PreambleCompileData(CompileData):
- """ An object that accumulates all of the necessary info for
- the optimization phase, but does not actually have any other state
-
+ """
This is the case of label() ops label()
"""
def __init__(self, trace, runtime_boxes, call_pure_results=None,
@@ -204,7 +206,6 @@
# ____________________________________________________________
-
def compile_simple_loop(metainterp, greenkey, trace, runtime_args, enable_opts,
cut_at):
from rpython.jit.metainterp.optimizeopt import optimize_trace
@@ -242,11 +243,11 @@
return target_token
def compile_loop(metainterp, greenkey, start, inputargs, jumpargs,
- full_preamble_needed=True, try_disabling_unroll=False):
+ use_unroll=True):
"""Try to compile a new procedure by closing the current history back
to the first operation.
"""
- from rpython.jit.metainterp.optimizeopt import optimize_trace,
use_unrolling
+ from rpython.jit.metainterp.optimizeopt import optimize_trace
metainterp_sd = metainterp.staticdata
jitdriver_sd = metainterp.jitdriver_sd
@@ -258,14 +259,6 @@
faildescr=None, entry_bridge=False)
#
enable_opts = jitdriver_sd.warmstate.enable_opts
- use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
- if try_disabling_unroll:
- if not use_unroll:
- return None
- enable_opts = enable_opts.copy()
- del enable_opts['unroll']
- use_unroll = False
-
jitcell_token = make_jitcell_token(jitdriver_sd)
cut_at = history.get_trace_position()
history.record(rop.JUMP, jumpargs, None, descr=jitcell_token)
@@ -344,7 +337,7 @@
"""Try to compile a new procedure by closing the current history back
to the first operation.
"""
- from rpython.jit.metainterp.optimizeopt import optimize_trace,
use_unrolling
+ from rpython.jit.metainterp.optimizeopt import optimize_trace
trace = metainterp.history.trace.cut_trace_from(start, inputargs)
metainterp_sd = metainterp.staticdata
@@ -360,8 +353,6 @@
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,
@@ -1039,7 +1030,7 @@
to some existing place.
"""
- from rpython.jit.metainterp.optimizeopt import optimize_trace,
use_unrolling
+ 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'.
@@ -1075,7 +1066,6 @@
data = SimpleCompileData(trace, resumestorage,
call_pure_results=call_pure_results,
enable_opts=enable_opts)
- use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
try:
info, newops = optimize_trace(
metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo)
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
@@ -31,9 +31,6 @@
assert ENABLE_ALL_OPTS == ALL_OPTS_NAMES, (
'please fix rlib/jit.py to say ENABLE_ALL_OPTS = %r' % (ALL_OPTS_NAMES,))
-def use_unrolling(cpu, enable_opts):
- return cpu.supports_guard_gc_type and 'unroll' in enable_opts
-
def build_opt_chain(enable_opts):
optimizations = []
for name, opt in unroll_all_opts:
diff --git a/rpython/jit/metainterp/pyjitpl.py
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -2733,14 +2733,21 @@
self.resumekey,
exported_state)
else:
- target_token = compile.compile_loop(self, greenkey, start,
-
original_boxes[num_green_args:],
-
live_arg_boxes[num_green_args:],
- try_disabling_unroll=try_disabling_unroll)
+ use_unroll = (self.staticdata.cpu.supports_guard_gc_type and
+ 'unroll' in self.jitdriver_sd.warmstate.enable_opts)
+ if try_disabling_unroll:
+ if not use_unroll:
+ return
+ use_unroll = False
+ target_token = compile.compile_loop(
+ self, greenkey, start, original_boxes[num_green_args:],
+ live_arg_boxes[num_green_args:], use_unroll=use_unroll)
if target_token is not None:
assert isinstance(target_token, TargetToken)
-
self.jitdriver_sd.warmstate.attach_procedure_to_interp(greenkey,
target_token.targeting_jitcell_token)
-
self.staticdata.stats.add_jitcell_token(target_token.targeting_jitcell_token)
+ self.jitdriver_sd.warmstate.attach_procedure_to_interp(
+ greenkey, target_token.targeting_jitcell_token)
+ self.staticdata.stats.add_jitcell_token(
+ target_token.targeting_jitcell_token)
if target_token is not None: # raise if it *worked* correctly
assert isinstance(target_token, TargetToken)
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
@@ -9,6 +9,7 @@
from rpython.jit.metainterp import history
from rpython.jit.metainterp.test.support import LLJitMixin, noConst
from rpython.jit.metainterp.warmspot import get_stats
+from rpython.jit.metainterp.pyjitpl import MetaInterp
from rpython.rlib import rerased
from rpython.rlib.jit import (JitDriver, we_are_jitted, hint, dont_look_inside,
loop_invariant, elidable, promote, jit_debug, assert_green,
@@ -2883,10 +2884,11 @@
i += 1
return i
#
- def my_optimize_trace(*args, **kwds):
- raise InvalidLoop
- old_optimize_trace = optimizeopt.optimize_trace
- optimizeopt.optimize_trace = my_optimize_trace
+ def my_compile_loop(self, original_boxes, live_arg_boxes, start,
+ try_disabling_unroll=False, exported_state=None):
+ return None
+ old_compile_loop = MetaInterp.compile_loop
+ MetaInterp.compile_loop = my_compile_loop
try:
res = self.meta_interp(f, [23, 4])
assert res == 23
@@ -2898,13 +2900,11 @@
self.check_trace_count(0)
self.check_aborted_count(2)
finally:
- optimizeopt.optimize_trace = old_optimize_trace
+ MetaInterp.compile_loop = old_compile_loop
def test_max_unroll_loops_retry_without_unroll(self):
if not self.basic:
py.test.skip("unrolling")
- from rpython.jit.metainterp.optimize import InvalidLoop
- from rpython.jit.metainterp import optimizeopt
myjitdriver = JitDriver(greens = [], reds = ['n', 'i'])
#
def f(n, limit):
@@ -2918,19 +2918,19 @@
return i
#
seen = []
- 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
- optimizeopt.optimize_trace = my_optimize_trace
+ def my_compile_loop(self, original_boxes, live_arg_boxes, start,
+ try_disabling_unroll=False, exported_state=None):
+ seen.append(try_disabling_unroll)
+ return None
+ old_compile_loop = MetaInterp.compile_loop
+ MetaInterp.compile_loop = my_compile_loop
try:
res = self.meta_interp(f, [23, 4])
assert res == 23
assert False in seen
assert True in seen
finally:
- optimizeopt.optimize_trace = old_optimize_trace
+ MetaInterp.compile_loop = old_compile_loop
def test_retrace_limit_with_extra_guards(self):
myjitdriver = JitDriver(greens = [], reds = ['n', 'i', 'sa', 'a',
diff --git a/rpython/jit/metainterp/test/test_compile.py
b/rpython/jit/metainterp/test/test_compile.py
--- a/rpython/jit/metainterp/test/test_compile.py
+++ b/rpython/jit/metainterp/test/test_compile.py
@@ -102,10 +102,10 @@
metainterp.history.trace = t
#
greenkey = 'faked'
- target_token = compile_loop(metainterp, greenkey, (0, 0, 0),
- t.inputargs,
- [t._mapping[x] for x in
loop.operations[-1].getarglist()],
- None)
+ target_token = compile_loop(
+ metainterp, greenkey, (0, 0, 0), t.inputargs,
+ [t._mapping[x] for x in loop.operations[-1].getarglist()],
+ use_unroll=False)
jitcell_token = target_token.targeting_jitcell_token
assert jitcell_token == target_token.original_jitcell_token
assert jitcell_token.target_tokens == [target_token]
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit