[pypy-commit] pypy kill-gen-store-back-in: Hopefully no-op change, clarify a bit the role of Optimizer.pendingfields
arigo
noreply at buildbot.pypy.org
Wed Jun 26 17:05:09 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch: kill-gen-store-back-in
Changeset: r65005:fae0315b096e
Date: 2013-06-26 17:02 +0200
http://bitbucket.org/pypy/pypy/changeset/fae0315b096e/
Log: Hopefully no-op change, clarify a bit the role of
Optimizer.pendingfields
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
@@ -351,7 +351,8 @@
self.resumedata_memo = resume.ResumeDataLoopMemo(metainterp_sd)
self.bool_boxes = {}
self.producer = {}
- self.pendingfields = []
+ self.pendingfields = None # set temporarily to a list, normally by
+ # heap.py, as we're about to generate a guard
self.quasi_immutable_deps = None
self.opaque_pointers = {}
self.replaces_guard = {}
@@ -546,12 +547,14 @@
self.metainterp_sd.profiler.count(jitprof.Counters.OPT_OPS)
if op.is_guard():
self.metainterp_sd.profiler.count(jitprof.Counters.OPT_GUARDS)
+ pendingfields = self.pendingfields
+ self.pendingfields = None
if self.replaces_guard and op in self.replaces_guard:
self.replace_op(self.replaces_guard[op], op)
del self.replaces_guard[op]
return
else:
- op = self.store_final_boxes_in_guard(op)
+ op = self.store_final_boxes_in_guard(op, pendingfields)
elif op.can_raise():
self.exception_might_have_happened = True
if op.result:
@@ -571,12 +574,13 @@
else:
assert False
- def store_final_boxes_in_guard(self, op):
+ def store_final_boxes_in_guard(self, op, pendingfields):
+ assert pendingfields is not None
descr = op.getdescr()
assert isinstance(descr, compile.ResumeGuardDescr)
modifier = resume.ResumeDataVirtualAdder(descr, self.resumedata_memo)
try:
- newboxes = modifier.finish(self, self.pendingfields)
+ newboxes = modifier.finish(self, pendingfields)
if len(newboxes) > self.metainterp_sd.options.failargs_limit:
raise resume.TagOverflow
except resume.TagOverflow:
diff --git a/rpython/jit/metainterp/optimizeopt/simplify.py b/rpython/jit/metainterp/optimizeopt/simplify.py
--- a/rpython/jit/metainterp/optimizeopt/simplify.py
+++ b/rpython/jit/metainterp/optimizeopt/simplify.py
@@ -7,7 +7,13 @@
def __init__(self, unroll):
self.last_label_descr = None
self.unroll = unroll
-
+
+ def emit_operation(self, op):
+ if op.is_guard():
+ if self.optimizer.pendingfields is None:
+ self.optimizer.pendingfields = []
+ Optimization.emit_operation(self, op)
+
def optimize_CALL_PURE(self, op):
args = op.getarglist()
self.emit_operation(ResOperation(rop.CALL, args, op.result,
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
@@ -27,7 +27,7 @@
snapshot0 = resume.Snapshot(None, [b0])
fdescr.rd_snapshot = resume.Snapshot(snapshot0, [b1])
#
- opt.store_final_boxes_in_guard(op)
+ opt.store_final_boxes_in_guard(op, [])
if op.getfailargs() == [b0, b1]:
assert list(fdescr.rd_numb.nums) == [tag(1, TAGBOX)]
assert list(fdescr.rd_numb.prev.nums) == [tag(0, TAGBOX)]
More information about the pypy-commit
mailing list