Author: Maciej Fijalkowski <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit