Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r78296:3078ef9c2df9 Date: 2015-06-24 15:55 +0200 http://bitbucket.org/pypy/pypy/changeset/3078ef9c2df9/
Log: progress 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 @@ -203,11 +203,20 @@ short_boxes = ShortBoxes(self.optimizer, inputargs) - self.optimizer.clear_newoperations() - # for i in range(len(original_jump_args)): - # srcbox = jump_args[i] - # if srcbox is not original_jump_args[i]: - # xxx + inputarg_setup_ops = [] + for i in range(len(original_jump_args)): + srcbox = jump_args[i] + if srcbox is not original_jump_args[i]: + if srcbox.type == 'r': + info = self.optimizer.getptrinfo(srcbox) + if info and info.is_virtual(): + xxx + if original_jump_args[i] is not srcbox and srcbox.is_constant(): + inputarg_setup_ops.append((original_jump_args[i], srcbox)) + #opnum = OpHelpers.same_as_for_type(original_jump_args[i].type) + #op = ResOperation(opnum, [srcbox]) + #self.optimizer.emit_operation(op) + # if srcbox.type != 'r': # continue # info = self.optimizer.getptrinfo(srcbox) @@ -220,7 +229,8 @@ # opnum, [srcbox], # descr=DONT_CHANGE) # self.optimizer.emit_operation(op) - inputarg_setup_ops = self.optimizer.get_newoperations() + #inputarg_setup_ops = original_jump_args + #inputarg_setup_ops = self.optimizer.get_newoperations() target_token = targetop.getdescr() assert isinstance(target_token, TargetToken) @@ -266,8 +276,8 @@ # Setup the state of the new optimizer by emiting the # short operations and discarding the result self.optimizer.emitting_dissabled = True - for op in exported_state.inputarg_setup_ops: - self.optimizer.send_extra_operation(op) + for source, target in exported_state.inputarg_setup_ops: + source.set_forwarded(target) seen = {} for op in self.short_boxes.operations(): @@ -476,7 +486,7 @@ optimizer.send_extra_operation(guard) def is_call_pure_with_exception(self, op): - if op.getopnum() == rop.CALL_PURE: + if op.is_call_pure(): effectinfo = op.getdescr().get_extra_info() # Assert that only EF_ELIDABLE_CANNOT_RAISE or # EF_ELIDABLE_OR_MEMORYERROR end up here, not 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 @@ -502,6 +502,7 @@ if optimizer.optearlyforce: optimizer = optimizer.optearlyforce assert len(inputargs) == len(self.state) + return [x for x in inputargs if not isinstance(x, Const)] return inputargs inputargs = [None] * self.numnotvirtuals _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit