[pypy-commit] pypy resume-refactor: shuffle stuff around, one more test pass
fijal
noreply at buildbot.pypy.org
Fri Jan 31 15:56:31 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r69037:44ef0203c38b
Date: 2014-01-31 15:55 +0100
http://bitbucket.org/pypy/pypy/changeset/44ef0203c38b/
Log: shuffle stuff around, one more test pass
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
@@ -4,6 +4,7 @@
from rpython.jit.metainterp.optimizeopt.virtualize import OptVirtualize
from rpython.jit.metainterp.optimizeopt.heap import OptHeap
from rpython.jit.metainterp.optimizeopt.vstring import OptString
+from rpython.jit.metainterp.optimizeopt.resume import OptResume
from rpython.jit.metainterp.optimizeopt.unroll import optimize_unroll
from rpython.jit.metainterp.optimizeopt.simplify import OptSimplify
from rpython.jit.metainterp.optimizeopt.pure import OptPure
@@ -13,7 +14,8 @@
from rpython.rlib.debug import debug_start, debug_stop, debug_print
-ALL_OPTS = [('intbounds', OptIntBounds),
+ALL_OPTS = [('resume', OptResume),
+ ('intbounds', OptIntBounds),
('rewrite', OptRewrite),
('virtualize', OptVirtualize),
('string', OptString),
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
@@ -347,6 +347,7 @@
def __init__(self, metainterp_sd, loop, optimizations=None):
self.metainterp_sd = metainterp_sd
self.cpu = metainterp_sd.cpu
+ self.delayed_resume_put = None
self.loop = loop
self.values = {}
self.interned_refs = self.cpu.ts.new_ref_dict()
@@ -567,6 +568,10 @@
raise ValueError, "invalid optimization"
self.seen_results[op.result] = None
self._newoperations.append(op)
+ if (self.delayed_resume_put is not None and
+ self.delayed_resume_put.getarg(0) is op.result):
+ self._newoperations.append(self.delayed_resume_put)
+ self.delayed_resume_put = None
def replace_op(self, old_op, new_op):
# XXX: Do we want to cache indexes to prevent search?
@@ -671,17 +676,6 @@
value = self.getvalue(op.getarg(0))
self.optimizer.opaque_pointers[value] = True
- # the following stuff should go to the default Optimization thing,
- # pending refactor
-
- def optimize_ENTER_FRAME(self, op):
- self.resumebuilder.enter_frame(op.getarg(0).getint(), op.getdescr())
- self.optimize_default(op)
-
- def optimize_LEAVE_FRAME(self, op):
- self.resumebuilder.leave_frame(op)
- self.optimize_default(op)
-
dispatch_opt = make_dispatcher_method(Optimizer, 'optimize_',
default=Optimizer.optimize_default)
diff --git a/rpython/jit/metainterp/optimizeopt/resume.py b/rpython/jit/metainterp/optimizeopt/resume.py
new file mode 100644
--- /dev/null
+++ b/rpython/jit/metainterp/optimizeopt/resume.py
@@ -0,0 +1,32 @@
+
+from rpython.jit.metainterp.optimizeopt import optimizer
+from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
+
+""" All of this directly emit the ops, without calling emit_operation
+(they also don't have boxes except a resume_put)
+"""
+
+class OptResume(optimizer.Optimization):
+ def optimize_RESUME_PUT(self, op):
+ if op.getarg(0) in self.optimizer.producer:
+ self.optimizer.resumebuilder.resume_put(op)
+ else:
+ self.optimizer.delayed_resume_put = op
+ # otherwise we did not emit the operation just yet
+
+ def optimize_ENTER_FRAME(self, op):
+ rb = self.optimizer.resumebuilder
+ rb.enter_frame(op.getarg(0).getint(), op.getdescr())
+ self.optimizer._newoperations.append(op)
+
+ def optimize_LEAVE_FRAME(self, op):
+ self.optimizer.resumebuilder.leave_frame(op)
+ self.optimizer._newoperations.append(op)
+
+ def optimize_RESUME_SET_PC(self, op):
+ self.optimizer._newoperations.append(op)
+
+dispatch_opt = make_dispatcher_method(OptResume, 'optimize_',
+ default=OptResume.emit_operation)
+
+OptResume.propagate_forward = dispatch_opt
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
@@ -57,17 +57,6 @@
self.optimizer = UnrollableOptimizer(metainterp_sd, loop, optimizations)
self.boxes_created_this_iteration = None
- def fix_snapshot(self, jump_args, snapshot):
- if snapshot is None:
- return None
- snapshot_args = snapshot.boxes
- new_snapshot_args = []
- for a in snapshot_args:
- a = self.getvalue(a).get_key_box()
- new_snapshot_args.append(a)
- prev = self.fix_snapshot(jump_args, snapshot.prev)
- return Snapshot(prev, new_snapshot_args)
-
def propagate_all_forward(self):
loop = self.optimizer.loop
self.optimizer.clear_newoperations()
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -841,11 +841,6 @@
value.ensure_nonnull()
self.emit_operation(op)
- def optimize_RESUME_PUT(self, op):
- if op.getarg(0) in self.optimizer.producer:
- self.optimizer.resumebuilder.resume_put(op)
- # otherwise we did not emit the operation just yet
-
dispatch_opt = make_dispatcher_method(OptVirtualize, 'optimize_',
default=OptVirtualize.emit_operation)
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')
+ 'resume:intbounds:rewrite:virtualize:string:earlyforce:pure:heap:unroll')
PARAMETER_DOCS = {
'threshold': 'number of times a loop has to run for it to become hot',
More information about the pypy-commit
mailing list