Author: Carl Friedrich Bolz <cfb...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit