Author: Armin Rigo <[email protected]>
Branch:
Changeset: r90951:e691a4f66264
Date: 2017-04-04 20:47 +0200
http://bitbucket.org/pypy/pypy/changeset/e691a4f66264/
Log: Another case where we read .upper without checking .has_upper
diff --git a/rpython/jit/metainterp/optimizeopt/intbounds.py
b/rpython/jit/metainterp/optimizeopt/intbounds.py
--- a/rpython/jit/metainterp/optimizeopt/intbounds.py
+++ b/rpython/jit/metainterp/optimizeopt/intbounds.py
@@ -94,8 +94,11 @@
if b1.known_ge(IntBound(0, 0)) and \
b2.known_ge(IntBound(0, 0)):
r = self.getintbound(op)
- mostsignificant = b1.upper | b2.upper
- r.intersect(IntBound(0, next_pow2_m1(mostsignificant)))
+ if b1.has_upper and b2.has_upper:
+ mostsignificant = b1.upper | b2.upper
+ r.intersect(IntBound(0, next_pow2_m1(mostsignificant)))
+ else:
+ r.make_ge(IntBound(0, 0))
optimize_INT_OR = optimize_INT_OR_or_XOR
optimize_INT_XOR = optimize_INT_OR_or_XOR
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -5643,6 +5643,51 @@
"""
self.optimize_loop(ops, ops)
+ def test_bug_int_or(self):
+ ops = """
+ [p0, p1]
+ i51 = arraylen_gc(p0, descr=arraydescr)
+ i52 = arraylen_gc(p1, descr=arraydescr)
+ i57 = int_or(i51, i52)
+ i62 = int_eq(i57, 0)
+ guard_false(i62) []
+ """
+ self.optimize_loop(ops, ops)
+
+ def test_int_and_positive(self):
+ ops = """
+ [p0, p1]
+ i51 = arraylen_gc(p0, descr=arraydescr)
+ i52 = arraylen_gc(p1, descr=arraydescr)
+ i57 = int_and(i51, i52)
+ i62 = int_lt(i57, 0)
+ guard_false(i62) []
+ """
+ expected = """
+ [p0, p1]
+ i51 = arraylen_gc(p0, descr=arraydescr)
+ i52 = arraylen_gc(p1, descr=arraydescr)
+ i57 = int_and(i51, i52)
+ """
+ self.optimize_loop(ops, expected)
+
+ def test_int_or_positive(self):
+ ops = """
+ [p0, p1]
+ i51 = arraylen_gc(p0, descr=arraydescr)
+ i52 = arraylen_gc(p1, descr=arraydescr)
+ i57 = int_or(i51, i52)
+ i62 = int_lt(i57, 0)
+ guard_false(i62) []
+ """
+ expected = """
+ [p0, p1]
+ i51 = arraylen_gc(p0, descr=arraydescr)
+ i52 = arraylen_gc(p1, descr=arraydescr)
+ i57 = int_or(i51, i52)
+ """
+ self.optimize_loop(ops, expected)
+
class TestLLtype(BaseTestOptimizeBasic, LLtypeMixin):
pass
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit