[pypy-commit] pypy optinfo-into-bridges: fix a number of problems found by other tests
cfbolz
pypy.commits at gmail.com
Thu Oct 13 06:30:28 EDT 2016
Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: optinfo-into-bridges
Changeset: r87749:d084b574cb5a
Date: 2016-10-13 12:29 +0200
http://bitbucket.org/pypy/pypy/changeset/d084b574cb5a/
Log: fix a number of problems found by other tests
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
@@ -1072,6 +1072,8 @@
if metainterp.history.ends_with_jump:
if isinstance(resumekey, ResumeGuardCopiedDescr):
key = resumekey.prev
+ elif isinstance(resumekey, ResumeFromInterpDescr):
+ key = None
else:
key = resumekey
data = BridgeCompileData(trace, runtime_boxes, key,
diff --git a/rpython/jit/metainterp/optimizeopt/bridgeopt.py b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
--- a/rpython/jit/metainterp/optimizeopt/bridgeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
@@ -50,6 +50,8 @@
def serialize_optimizer_knowledge(optimizer, numb_state, liveboxes, liveboxes_from_env, memo):
liveboxes_set = set(liveboxes)
+ if None in liveboxes_set:
+ liveboxes_set.remove(None)
metainterp_sd = optimizer.metainterp_sd
numb_state.grow(len(liveboxes)) # bit too much
@@ -57,7 +59,7 @@
bitfield = 0
shifts = 0
for box in liveboxes:
- if box.type != "r":
+ if box is None or box.type != "r":
continue
info = optimizer.getptrinfo(box)
known_class = info is not None and info.get_known_class(optimizer.cpu) is not None
@@ -83,7 +85,8 @@
numb_state.grow(1)
numb_state.append_int(0)
-def deserialize_optimizer_knowledge(optimizer, resumestorage, runtime_boxes, liveboxes):
+def deserialize_optimizer_knowledge(optimizer, resumestorage, frontend_boxes, liveboxes):
+ assert len(frontend_boxes) == len(liveboxes)
numb = resumestorage.rd_numb
metainterp_sd = optimizer.metainterp_sd
@@ -102,7 +105,7 @@
class_known = bitfield & mask
mask >>= 1
if class_known:
- cls = optimizer.cpu.ts.cls_of_box(runtime_boxes[i])
+ cls = optimizer.cpu.ts.cls_of_box(frontend_boxes[i])
optimizer.make_constant_class(box, cls)
# heap knowledge
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
@@ -30,6 +30,7 @@
self.add_guard_future_condition(bridge)
trace = oparser.convert_loop_to_trace(bridge, FakeMetaInterpStaticData(self.cpu))
data = compile.BridgeCompileData(trace, self.convert_values(bridge.operations[-1].getarglist(), bridge_values),
+ None,
enable_opts=self.enable_opts,
inline_short_preamble=inline_short_preamble)
bridge_info, ops = self._do_optimize_loop(data)
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
@@ -239,11 +239,13 @@
def optimize_bridge(self, trace, runtime_boxes, call_pure_results,
inline_short_preamble, box_names_memo, resumestorage):
from rpython.jit.metainterp.optimizeopt.bridgeopt import deserialize_optimizer_knowledge
+ frontend_inputargs = trace.inputargs
trace = trace.get_iter()
self._check_no_forwarding([trace.inputargs])
- deserialize_optimizer_knowledge(self.optimizer,
- resumestorage, runtime_boxes,
- trace.inputargs)
+ if resumestorage:
+ deserialize_optimizer_knowledge(self.optimizer,
+ resumestorage, frontend_inputargs,
+ trace.inputargs)
info, ops = self.optimizer.propagate_all_forward(trace,
call_pure_results, False)
jump_op = info.jump_op
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -190,7 +190,7 @@
item = self._pos
short = rffi.cast(rffi.SHORT, item)
assert rffi.cast(lltype.Signed, short) == item
- self.current[index] = item
+ self.current[index] = short
class ResumeDataLoopMemo(object):
diff --git a/rpython/jit/metainterp/test/test_resume.py b/rpython/jit/metainterp/test/test_resume.py
--- a/rpython/jit/metainterp/test/test_resume.py
+++ b/rpython/jit/metainterp/test/test_resume.py
@@ -40,6 +40,9 @@
class FakeOptimizer(object):
+ metainterp_sd = None
+ optheap = None
+
def __init__(self, trace=None):
self.trace = trace
@@ -1115,7 +1118,7 @@
class MyInfo:
@staticmethod
def enumerate_vars(callback_i, callback_r, callback_f, _, index):
- while index < len(self.numb.code):
+ while index < max_index:
tagged, _ = resumecode.numb_next_item(self.numb, index)
_, tag = untag(tagged)
if tag == TAGVIRTUAL:
@@ -1132,7 +1135,9 @@
else:
assert 0
- size, self.cur_index = resumecode.numb_next_item(self.numb, 0)
+ size_section, self.cur_index = resumecode.numb_next_item(self.numb, 0)
+ max_index = resumecode.numb_next_n_items(self.numb, size_section, 0)
+ size, self.cur_index = resumecode.numb_next_item(self.numb, self.cur_index)
assert size == 0
size, self.cur_index = resumecode.numb_next_item(self.numb, self.cur_index)
assert size == 0
More information about the pypy-commit
mailing list