[pypy-commit] pypy resume-refactor: disable unrolling for now + fixes
fijal
noreply at buildbot.pypy.org
Tue Jan 14 16:55:51 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r68670:6debbdda22a5
Date: 2014-01-14 16:55 +0100
http://bitbucket.org/pypy/pypy/changeset/6debbdda22a5/
Log: disable unrolling for now + fixes
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
@@ -170,9 +170,6 @@
if not loop.quasi_immutable_deps:
loop.quasi_immutable_deps = None
- for frame in loop.inputframes:
- for box in frame:
- assert isinstance(box, Box)
loop.original_jitcell_token = jitcell_token
for label in all_target_tokens:
@@ -246,10 +243,6 @@
if quasi_immutable_deps:
loop.quasi_immutable_deps = quasi_immutable_deps
- for frame in loop.inputframes:
- for box in frame:
- assert isinstance(box, Box)
-
target_token = loop.operations[-1].getdescr()
resumekey.compile_and_attach(metainterp, loop)
diff --git a/rpython/jit/metainterp/history.py b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -616,6 +616,7 @@
class TreeLoop(object):
inputframes = None
+ inputargs = None
inputlocs = None
operations = None
call_pure_results = None
diff --git a/rpython/jit/metainterp/inliner.py b/rpython/jit/metainterp/inliner.py
--- a/rpython/jit/metainterp/inliner.py
+++ b/rpython/jit/metainterp/inliner.py
@@ -20,38 +20,16 @@
args = newop.getarglist()
newop.initarglist([self.inline_arg(a) for a in args])
- if newop.is_guard():
- args = newop.getfailargs()
- if args and not ignore_failargs:
- newop.setfailargs([self.inline_arg(a) for a in args])
- else:
- newop.setfailargs([])
-
if newop.result and not ignore_result:
old_result = newop.result
newop.result = newop.result.clonebox()
self.argmap[old_result] = newop.result
- self.inline_descr_inplace(newop.getdescr())
-
return newop
- def inline_descr_inplace(self, descr):
- from rpython.jit.metainterp.compile import ResumeGuardDescr
- if isinstance(descr, ResumeGuardDescr):
- descr.rd_snapshot = self.inline_snapshot(descr.rd_snapshot)
-
def inline_arg(self, arg):
if arg is None:
return None
if isinstance(arg, Const):
return arg
return self.argmap[arg]
-
- def inline_snapshot(self, snapshot):
- if snapshot in self.snapshot_map:
- return self.snapshot_map[snapshot]
- boxes = [self.inline_arg(a) for a in snapshot.boxes]
- new_snapshot = Snapshot(self.inline_snapshot(snapshot.prev), boxes)
- self.snapshot_map[snapshot] = new_snapshot
- return new_snapshot
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
@@ -19,8 +19,7 @@
('string', OptString),
('earlyforce', OptEarlyForce),
('pure', OptPure),
- ('heap', OptHeap),
- ('unroll', None)]
+ ('heap', OptHeap)]
# no direct instantiation of unroll
unroll_all_opts = unrolling_iterable(ALL_OPTS)
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
@@ -670,6 +670,9 @@
value = self.getvalue(op.getarg(0))
self.optimizer.opaque_pointers[value] = True
+ def optimize_ENTER_FRAME(self, op):
+ self.optimize_default(op)
+
dispatch_opt = make_dispatcher_method(Optimizer, 'optimize_',
default=Optimizer.optimize_default)
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
@@ -169,7 +169,6 @@
assert self.optimizer.loop.resume_at_jump_descr
resume_at_jump_descr = self.optimizer.loop.resume_at_jump_descr
assert isinstance(resume_at_jump_descr, ResumeGuardDescr)
- resume_at_jump_descr.rd_snapshot = self.fix_snapshot(jump_args, resume_at_jump_descr.rd_snapshot)
modifier = VirtualStateAdder(self.optimizer)
virtual_state = modifier.get_virtual_state(jump_args)
@@ -293,8 +292,6 @@
op = newoperations[i]
self.boxes_created_this_iteration[op.result] = None
args = op.getarglist()
- if op.is_guard():
- args = args + op.getfailargs()
for a in args:
self.import_box(a, inputargs, short_jumpargs, [])
i += 1
@@ -365,8 +362,6 @@
self.boxes_created_this_iteration[op.result] = None
args = op.getarglist()
- if op.is_guard():
- args = args + op.getfailargs()
#if self.optimizer.loop.logops:
# debug_print('OP: ' + self.optimizer.loop.logops.repr_of_resop(op))
@@ -445,7 +440,6 @@
target_token.assumed_classes[newop.result] = self.short_boxes.assumed_classes[op.result]
short[i] = newop
target_token.resume_at_jump_descr = target_token.resume_at_jump_descr
- inliner.inline_descr_inplace(target_token.resume_at_jump_descr)
# Forget the values to allow them to be freed
for box in short[0].getarglist():
@@ -604,8 +598,8 @@
'of the bridge does not mach the class ' +
'it has at the start of the target loop')
except InvalidLoop:
- #debug_print("Inlining failed unexpectedly",
- # "jumping to preamble instead")
+ debug_print("Inlining failed unexpectedly",
+ "jumping to preamble instead")
assert cell_token.target_tokens[0].virtual_state is None
jumpop.setdescr(cell_token.target_tokens[0])
self.optimizer.send_extra_operation(jumpop)
diff --git a/rpython/jit/metainterp/test/test_loop.py b/rpython/jit/metainterp/test/test_loop.py
--- a/rpython/jit/metainterp/test/test_loop.py
+++ b/rpython/jit/metainterp/test/test_loop.py
@@ -60,7 +60,7 @@
assert res == f(6, 13)
self.check_trace_count(1)
if self.enable_opts:
- self.check_resops(setfield_gc=2, getfield_gc=0)
+ self.check_resops(setfield_gc=1, getfield_gc=0)
def test_loop_with_two_paths(self):
@@ -107,10 +107,10 @@
pattern >>= 1
return 42
self.meta_interp(f, [0xF0F0F0])
- if self.enable_opts:
- self.check_trace_count(3)
- else:
- self.check_trace_count(2)
+ #if self.enable_opts:
+ # self.check_trace_count(3)
+ #else:
+ self.check_trace_count(2)
def test_interp_simple(self):
myjitdriver = JitDriver(greens = ['i'], reds = ['x', 'y'])
diff --git a/rpython/jit/metainterp/test/test_loop_unroll.py b/rpython/jit/metainterp/test/test_loop_unroll.py
--- a/rpython/jit/metainterp/test/test_loop_unroll.py
+++ b/rpython/jit/metainterp/test/test_loop_unroll.py
@@ -8,7 +8,7 @@
enable_opts = ALL_OPTS_NAMES
automatic_promotion_result = {
- 'int_gt': 2, 'guard_false': 2, 'jump': 1, 'int_add': 6,
+ 'int_gt': 1, 'guard_false': 1, 'jump': 1, 'int_add': 3,
'guard_value': 1
}
diff --git a/rpython/rlib/jit.py b/rpython/rlib/jit.py
--- a/rpython/rlib/jit.py
+++ b/rpython/rlib/jit.py
@@ -437,7 +437,7 @@
"""Inconsistency in the JIT hints."""
ENABLE_ALL_OPTS = (
- 'intbounds:rewrite:virtualize:string:earlyforce:pure:heap:unroll')
+ 'intbounds:rewrite:virtualize:string:earlyforce:pure:heap')
PARAMETER_DOCS = {
'threshold': 'number of times a loop has to run for it to become hot',
More information about the pypy-commit
mailing list