[pypy-commit] pypy optresult: hg merge default
arigo
noreply at buildbot.pypy.org
Tue Feb 24 17:49:53 CET 2015
Author: Armin Rigo <arigo at tunes.org>
Branch: optresult
Changeset: r76111:f66ed19fc711
Date: 2015-02-24 17:47 +0100
http://bitbucket.org/pypy/pypy/changeset/f66ed19fc711/
Log: hg merge default
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
@@ -498,20 +498,16 @@
if v2.getintbound().intersect(v1.getintbound()):
self.propagate_bounds_backward(op.getarg(1), v2)
- def propagate_bounds_INT_IS_TRUE(self, op):
+ def _propagate_int_is_true_or_zero(self, op, valnonzero, valzero):
r = self.get_box_replacement(op)
if r.is_constant():
- if r.getint() == 1:
+ if r.getint() == valnonzero:
b1 = self.getintbound(op.getarg(0))
if b1.known_ge(IntBound(0, 0)):
b1.make_gt(IntBound(0, 0))
self.propagate_bounds_backward(op.getarg(0))
-
- def propagate_bounds_INT_IS_ZERO(self, op):
- r = self.get_box_replacement(op)
- if r.is_constant():
- if r.getint() == 1:
- xxx
+ elif r.getint() == valzero:
+ XXX
v1 = self.getvalue(op.getarg(0))
# Clever hack, we can't use self.make_constant_int yet because
# the args aren't in the values dictionary yet so it runs into
@@ -520,6 +516,12 @@
v1.getintbound().make_lt(IntBound(1, 1))
self.propagate_bounds_backward(op.getarg(0), v1)
+ def propagate_bounds_INT_IS_TRUE(self, op):
+ self._propagate_int_is_true_or_zero(op, 1, 0)
+
+ def propagate_bounds_INT_IS_ZERO(self, op):
+ self._propagate_int_is_true_or_zero(op, 0, 1)
+
def propagate_bounds_INT_ADD(self, op):
b1 = self.getintbound(op.getarg(0))
b2 = self.getintbound(op.getarg(1))
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
@@ -530,7 +530,7 @@
[i]
i1 = int_is_true(i)
guard_false(i1) [i]
- jump(i)
+ jump(0)
"""
self.optimize_loop(ops, expected)
@@ -4797,6 +4797,25 @@
"""
self.optimize_strunicode_loop(ops, expected)
+ def test_int_is_zero_bounds(self):
+ ops = """
+ [p0]
+ i0 = strlen(p0)
+ i1 = int_is_zero(i0)
+ guard_false(i1) []
+ i2 = int_ge(0, i0)
+ guard_false(i2) []
+ jump(p0)
+ """
+ expected = """
+ [p0]
+ i0 = strlen(p0)
+ i1 = int_is_zero(i0)
+ guard_false(i1) []
+ jump(p0)
+ """
+ self.optimize_strunicode_loop(ops, expected)
+
def test_strslice_subtraction_folds(self):
ops = """
[p0, i0]
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
@@ -669,11 +669,11 @@
[i]
i1 = int_is_true(i)
guard_false(i1) [i]
- jump(i)
- """
- expected = """
- [i]
- jump(i)
+ jump()
+ """
+ expected = """
+ []
+ jump()
"""
self.optimize_loop(ops, expected, preamble)
More information about the pypy-commit
mailing list