[pypy-commit] pypy default: Add some comments on why loops become invalid
hakanardo
noreply at buildbot.pypy.org
Sat Apr 28 20:26:29 CEST 2012
Author: Hakan Ardo <hakan at debian.org>
Branch:
Changeset: r54795:18980028c2dc
Date: 2012-04-28 20:25 +0200
http://bitbucket.org/pypy/pypy/changeset/18980028c2dc/
Log: Add some comments on why loops become invalid
diff --git a/pypy/jit/metainterp/optimizeopt/intbounds.py b/pypy/jit/metainterp/optimizeopt/intbounds.py
--- a/pypy/jit/metainterp/optimizeopt/intbounds.py
+++ b/pypy/jit/metainterp/optimizeopt/intbounds.py
@@ -191,10 +191,13 @@
# GUARD_OVERFLOW, then the loop is invalid.
lastop = self.last_emitted_operation
if lastop is None:
- raise InvalidLoop
+ raise InvalidLoop('An INT_xxx_OVF was proven not to overflow but' +
+ 'guarded with GUARD_OVERFLOW')
opnum = lastop.getopnum()
if opnum not in (rop.INT_ADD_OVF, rop.INT_SUB_OVF, rop.INT_MUL_OVF):
- raise InvalidLoop
+ raise InvalidLoop('An INT_xxx_OVF was proven not to overflow but' +
+ 'guarded with GUARD_OVERFLOW')
+
self.emit_operation(op)
def optimize_INT_ADD_OVF(self, op):
diff --git a/pypy/jit/metainterp/optimizeopt/rewrite.py b/pypy/jit/metainterp/optimizeopt/rewrite.py
--- a/pypy/jit/metainterp/optimizeopt/rewrite.py
+++ b/pypy/jit/metainterp/optimizeopt/rewrite.py
@@ -208,7 +208,8 @@
box = value.box
assert isinstance(box, Const)
if not box.same_constant(constbox):
- raise InvalidLoop
+ raise InvalidLoop('A GURAD_{VALUE,TRUE,FALSE} was proven to' +
+ 'always fail')
return
if emit_operation:
self.emit_operation(op)
@@ -220,7 +221,7 @@
if value.is_null():
return
elif value.is_nonnull():
- raise InvalidLoop
+ raise InvalidLoop('A GUARD_ISNULL was proven to always fail')
self.emit_operation(op)
value.make_constant(self.optimizer.cpu.ts.CONST_NULL)
@@ -229,7 +230,7 @@
if value.is_nonnull():
return
elif value.is_null():
- raise InvalidLoop
+ raise InvalidLoop('A GUARD_NONNULL was proven to always fail')
self.emit_operation(op)
value.make_nonnull(op)
@@ -278,7 +279,7 @@
if realclassbox is not None:
if realclassbox.same_constant(expectedclassbox):
return
- raise InvalidLoop
+ raise InvalidLoop('A GUARD_CLASS was proven to always fail')
if value.last_guard:
# there already has been a guard_nonnull or guard_class or
# guard_nonnull_class on this value.
@@ -301,7 +302,8 @@
def optimize_GUARD_NONNULL_CLASS(self, op):
value = self.getvalue(op.getarg(0))
if value.is_null():
- raise InvalidLoop
+ raise InvalidLoop('A GUARD_NONNULL_CLASS was proven to always ' +
+ 'fail')
self.optimize_GUARD_CLASS(op)
def optimize_CALL_LOOPINVARIANT(self, op):
diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py b/pypy/jit/metainterp/optimizeopt/unroll.py
--- a/pypy/jit/metainterp/optimizeopt/unroll.py
+++ b/pypy/jit/metainterp/optimizeopt/unroll.py
@@ -378,7 +378,10 @@
#final_virtual_state.debug_print("Bad virtual state at end of loop, ",
# bad)
#debug_stop('jit-log-virtualstate')
- raise InvalidLoop
+ raise InvalidLoop('The virtual state at the end of the peeled ' +
+ 'loop is not compatible with the virtual ' +
+ 'state at the start of the loop which makes ' +
+ 'it impossible to close the loop')
#debug_stop('jit-log-virtualstate')
More information about the pypy-commit
mailing list