Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r79323:256f5d6b85c3 Date: 2015-08-31 18:43 +0200 http://bitbucket.org/pypy/pypy/changeset/256f5d6b85c3/
Log: cleanup a bit diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py b/rpython/jit/metainterp/optimizeopt/shortpreamble.py --- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py +++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py @@ -418,4 +418,5 @@ return [label_op] + self.short + [jump_op] class ExtendedShortPreambleBuilder(AbstractShortPreambleBuilder): - pass + def __init__(self, sb): + self.sb = sb 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 @@ -1,5 +1,4 @@ -import sys from rpython.jit.metainterp.history import Const, TargetToken, JitCellToken from rpython.jit.metainterp.optimizeopt.shortpreamble import ShortBoxes,\ ShortPreambleBuilder, ExtendedShortPreambleBuilder, PreambleOp @@ -199,7 +198,7 @@ target_token.virtual_state = virtual_state target_token.short_preamble = short_preamble jitcelltoken.target_tokens.append(target_token) - self.short_preamble_producer = None # ExtendedShortPreambleBuilder() + self.short_preamble_producer = ExtendedShortPreambleBuilder(sb) label_op.initarglist(label_op.getarglist() + sb.used_boxes) return target_token @@ -232,25 +231,24 @@ self.send_extra_operation(guard) except VirtualStatesCantMatch: continue - pass_to_short = target_virtual_state.make_inputargs(args, - self.optimizer, append_virtuals=True) - args = target_virtual_state.make_inputargs(args, - self.optimizer) + args, virtuals = target_virtual_state.make_inputargs_and_virtuals( + args, self.optimizer) short_preamble = target_token.short_preamble - lgt = len(short_preamble) - 1 - assert lgt >= 0 - extra = self.inline_short_preamble(pass_to_short, args, - short_preamble[0].getarglist(), short_preamble[1:lgt], - short_preamble[-1].getarglist(), self.optimizer.patchguardop) + extra = self.inline_short_preamble(args + virtuals, args, + short_preamble, self.optimizer.patchguardop) self.send_extra_operation(jump_op.copy_and_change(rop.JUMP, args=args + extra, descr=target_token)) return None # explicit because the return can be non-None return virtual_state - def inline_short_preamble(self, jump_args, args_no_virtuals, - short_inputargs, short_ops, - short_jump_op, patchguardop): + def inline_short_preamble(self, jump_args, args_no_virtuals, short, + patchguardop): + short_inputargs = short[0].getarglist() + short_jump_op = short[-1].getarglist() + lgt = len(short) - 1 + assert lgt >= 0 + short_ops = short[1:lgt] try: self._check_no_forwarding([short_inputargs, short_ops], False) assert len(short_inputargs) == len(jump_args) @@ -284,15 +282,14 @@ infos = {} for arg in end_args: infos[arg] = self.optimizer.getinfo(arg) - label_args = virtual_state.make_inputargs(end_args, self.optimizer) + label_args, virtuals = virtual_state.make_inputargs_and_virtuals( + end_args, self.optimizer) for arg in label_args: infos[arg] = self.optimizer.getinfo(arg) sb = ShortBoxes() - label_args_plus_virtuals = virtual_state.make_inputargs(end_args, - self.optimizer, append_virtuals=True) short_boxes = sb.create_short_boxes(self.optimizer, renamed_inputargs, - label_args_plus_virtuals) - short_inputargs = sb.create_short_inputargs(label_args_plus_virtuals) + label_args + virtuals) + short_inputargs = sb.create_short_inputargs(label_args + virtuals) for produced_op in short_boxes: op = produced_op.short_op.res if not isinstance(op, Const): diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py --- a/rpython/jit/metainterp/optimizeopt/virtualstate.py +++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py @@ -572,8 +572,7 @@ runtime_boxes[i], state) return state - def make_inputargs(self, inputargs, optimizer, force_boxes=False, - append_virtuals=False): + def make_inputargs(self, inputargs, optimizer, force_boxes=False): if optimizer.optearlyforce: optimizer = optimizer.optearlyforce assert len(inputargs) == len(self.state) @@ -589,15 +588,19 @@ for i in range(len(inputargs)): self.state[i].enum_forced_boxes(boxes, inputargs[i], optimizer) - if append_virtuals: - # we append the virtuals here in case some stuff is proven - # to be not a virtual and there are getfields in the short preamble - # that will read items out of there - for i in range(len(inputargs)): - if not isinstance(self.state[i], NotVirtualStateInfo): - boxes.append(inputargs[i]) + return boxes + + def make_inputargs_and_virtuals(self, inputargs, optimizer): + inpargs = self.make_inputargs(inputargs, optimizer) + # we append the virtuals here in case some stuff is proven + # to be not a virtual and there are getfields in the short preamble + # that will read items out of there + virtuals = [] + for i in range(len(inputargs)): + if not isinstance(self.state[i], NotVirtualStateInfo): + virtuals.append(inputargs[i]) - return boxes + return inpargs, virtuals def debug_print(self, hdr='', bad=None, metainterp_sd=None): if bad is None: diff --git a/rpython/jit/tool/oparser.py b/rpython/jit/tool/oparser.py --- a/rpython/jit/tool/oparser.py +++ b/rpython/jit/tool/oparser.py @@ -325,7 +325,7 @@ def parse_op_no_result(self, line): opnum, args, descr, fail_args = self.parse_op(line) - res = self.create_op_no_result(opnum, args, descr, fail_args) + res = self.create_op(opnum, args, None, descr, fail_args) return res def parse_next_op(self, line): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit