Author: Brian Kearns <[email protected]>
Branch: 
Changeset: r69570:56c6402c9b80
Date: 2014-03-01 02:39 -0500
http://bitbucket.org/pypy/pypy/changeset/56c6402c9b80/

Log:    use intbounds to optimize int_force_ge_zero

diff --git a/pypy/module/micronumpy/test/test_zjit.py 
b/pypy/module/micronumpy/test/test_zjit.py
--- a/pypy/module/micronumpy/test/test_zjit.py
+++ b/pypy/module/micronumpy/test/test_zjit.py
@@ -532,7 +532,6 @@
                            'guard_true': 9,
                            'guard_value': 4,
                            'int_add': 6,
-                           'int_force_ge_zero': 1,
                            'int_ge': 3,
                            'int_lt': 4,
                            'jump': 3,
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
@@ -329,6 +329,13 @@
         else:
             self.emit_operation(op)
 
+    def optimize_INT_FORCE_GE_ZERO(self, op):
+        value = self.getvalue(op.getarg(0))
+        if value.intbound.known_ge(IntBound(0, 0)):
+            self.make_equal_to(op.result, value)
+        else:
+            self.emit_operation(op)
+
     def optimize_ARRAYLEN_GC(self, op):
         self.emit_operation(op)
         array = self.getvalue(op.getarg(0))
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
@@ -654,6 +654,3 @@
 
 dispatch_opt = make_dispatcher_method(Optimizer, 'optimize_',
         default=Optimizer.optimize_default)
-
-
-
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
@@ -4392,6 +4392,27 @@
         """
         self.optimize_strunicode_loop(ops, expected, preamble)
 
+    def test_bound_force_ge_zero(self):
+        ops = """
+        [p0]
+        i0 = arraylen_gc(p0)
+        i1 = int_force_ge_zero(i0)
+        escape(i1)
+        jump(p0)
+        """
+        preamble = """
+        [p0]
+        i0 = arraylen_gc(p0)
+        escape(i0)
+        jump(p0, i0)
+        """
+        expected = """
+        [p0, i0]
+        escape(i0)
+        jump(p0, i0)
+        """
+        self.optimize_loop(ops, expected, preamble)
+
     def test_addsub_const(self):
         ops = """
         [i0]
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to