[pypy-commit] pypy default: Issue #3128
arigo
pypy.commits at gmail.com
Thu Dec 19 01:53:33 EST 2019
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r98324:96dad0986a20
Date: 2019-12-19 07:53 +0100
http://bitbucket.org/pypy/pypy/changeset/96dad0986a20/
Log: Issue #3128
Potential fix in rare-case JIT optimizer
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
@@ -683,7 +683,14 @@
elif constvalue == 1:
opnum = rop.GUARD_TRUE
else:
- raise AssertionError("uh?")
+ # Issue #3128: there might be rare cases where strange
+ # code is produced. That issue hits the assert from
+ # OptUnroll.inline_short_preamble's send_extra_operation().
+ # Better just disable this optimization than crash with
+ # an AssertionError here. Note also that such code might
+ # trigger an InvalidLoop to be raised later---so we must
+ # not crash here.
+ return op
newop = self.replace_op_with(op, opnum, [op.getarg(0)], descr)
return newop
return op
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -698,6 +698,15 @@
"""
self.optimize_loop(ops, expected, preamble)
+ def test_guard_value_on_boolean_but_not_zero_or_one(self):
+ ops = """
+ [i]
+ i1 = int_lt(i, 3)
+ guard_value(i1, -1) [i]
+ jump(i)
+ """
+ py.test.raises(InvalidLoop, self.optimize_loop, ops, ops, ops)
+
def test_int_is_true_of_bool(self):
ops = """
[i0, i1]
More information about the pypy-commit
mailing list