Author: Maciej Fijalkowski <fij...@gmail.com> Branch: share-guard-info Changeset: r79761:c167bc541cbb Date: 2015-09-22 12:48 +0200 http://bitbucket.org/pypy/pypy/changeset/c167bc541cbb/
Log: don't look into guard_exception for now 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 @@ -847,6 +847,9 @@ assert 0, box.type self.status = ty | (r_uint(i) << self.ST_SHIFT) +class ResumeGuardExcDescr(ResumeGuardDescr): + pass + class ResumeAtPositionDescr(ResumeGuardDescr): pass @@ -934,6 +937,8 @@ elif opnum in (rop.GUARD_IS_OBJECT, rop.GUARD_SUBCLASS, rop.GUARD_GC_TYPE): # note - this only happens in tests resumedescr = ResumeAtPositionDescr() + elif opnum in (rop.GUARD_EXCEPTION, rop.GUARD_NO_EXCEPTION): + resumedescr = ResumeGuardExcDescr() else: resumedescr = ResumeGuardDescr() return resumedescr 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 @@ -603,7 +603,8 @@ self._last_guard_op) else: op = self.store_final_boxes_in_guard(guard_op, pendingfields) - self._last_guard_op = op + if op.getopnum() != rop.GUARD_EXCEPTION: + self._last_guard_op = op # for unrolling for farg in op.getfailargs(): if farg: @@ -612,6 +613,8 @@ def _copy_resume_data_from(self, guard_op, last_guard_op): + if guard_op.getopnum() in (rop.GUARD_NO_EXCEPTION, rop.GUARD_EXCEPTION): + assert last_guard_op.getopnum() == rop.GUARD_NOT_FORCED descr = compile.invent_fail_descr_for_op(guard_op.getopnum(), self) descr.copy_all_attributes_from(last_guard_op.getdescr()) guard_op.setdescr(descr) diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py --- a/rpython/jit/metainterp/pyjitpl.py +++ b/rpython/jit/metainterp/pyjitpl.py @@ -2322,7 +2322,7 @@ if isinstance(key, compile.ResumeAtPositionDescr): self.seen_loop_header_for_jdindex = self.jitdriver_sd.index try: - self.prepare_resume_from_failure(deadframe) + self.prepare_resume_from_failure(deadframe, key) if self.resumekey_original_loop_token is None: # very rare case raise SwitchToBlackhole(Counters.ABORT_BRIDGE) self.interpret() @@ -2465,17 +2465,20 @@ else: assert 0 self.jitdriver_sd.warmstate.execute_assembler(loop_token, *args) - def prepare_resume_from_failure(self, deadframe): + def prepare_resume_from_failure(self, deadframe, resumedescr): exception = self.cpu.grab_exc_value(deadframe) - if exception: - self.execute_ll_raised(lltype.cast_opaque_ptr(rclass.OBJECTPTR, - exception)) - #else: - # self.clear_exception() - #try: - # self.handle_possible_exception() - #except ChangeFrame: - # pass + if isinstance(resumedescr, compile.ResumeGuardExcDescr): + if exception: + self.execute_ll_raised(lltype.cast_opaque_ptr(rclass.OBJECTPTR, + exception)) + else: + self.clear_exception() + try: + self.handle_possible_exception() + except ChangeFrame: + pass + else: + assert not exception def get_procedure_token(self, greenkey, with_compiled_targets=False): JitCell = self.jitdriver_sd.warmstate.JitCell _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit