[pypy-commit] pypy optresult-unroll: test and a fix

fijal noreply at buildbot.pypy.org
Sun Sep 6 19:54:19 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79481:6bc488bd103b
Date: 2015-09-06 19:54 +0200
http://bitbucket.org/pypy/pypy/changeset/6bc488bd103b/

Log:	test and a fix

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
@@ -560,6 +560,8 @@
                     self.propagate_bounds_backward(op.getarg(1))
 
     def _propagate_int_is_true_or_zero(self, op, valnonzero, valzero):
+        if self.is_raw_ptr(op.getarg(0)):
+            return
         r = self.getintbound(op)
         if r.is_constant():
             if r.getint() == valnonzero:
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
@@ -49,7 +49,7 @@
         self.last_emitted_operation = op
         self.next_optimization.propagate_forward(op)
 
-    def getintbound(self, op):#, create=True):
+    def getintbound(self, op):
         assert op.type == 'i'
         op = self.get_box_replacement(op)
         if isinstance(op, ConstInt):
@@ -75,13 +75,13 @@
             op.set_forwarded(bound)
 
     def getnullness(self, op):
-        if op.type == 'i':
-            return self.getintbound(op).getnullness()
-        elif op.type == 'r':
+        if op.type == 'r' or self.is_raw_ptr(op):
             ptrinfo = self.getptrinfo(op)
             if ptrinfo is None:
                 return info.INFO_UNKNOWN
             return ptrinfo.getnullness()
+        elif op.type == 'i':
+            return self.getintbound(op).getnullness()
         assert False
 
     def make_constant_class(self, op, class_const, update_last_guard=True):
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -504,7 +504,8 @@
             self.emit_operation(op)
 
     def optimize_INT_IS_TRUE(self, op):
-        if self.getintbound(op.getarg(0)).is_bool():
+        if (not self.is_raw_ptr(op.getarg(0)) and
+            self.getintbound(op.getarg(0)).is_bool()):
             self.make_equal_to(op, op.getarg(0))
             return
         self._optimize_nullness(op, op.getarg(0), True)
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
@@ -8736,23 +8736,22 @@
         """
         self.optimize_loop(ops, ops)
 
-    def test_pass_both_short_preamble_and_arg(self):
-        ops = """
-        [i0, i1]
-        i2 = int_add(i0, 1)
-        jump(i0, i2)
-        """
-        expected = """
-        [i0, i1, i2]
-        jump(i0, i2, i2)
-        """
-        preamble = """
-        [i0, i1]
-        i2 = int_add(i0, 1)
-        i3 = same_as(i2)
-        jump(i0, i2, i3)
-        """
-        self.optimize_loop(ops, expected, preamble)
+    def test_raw_buffer_int_is_true(self):
+        ops = """
+        [iinp]
+        i0 = call_i(123, 10, descr=raw_malloc_descr)
+        i1 = int_is_true(i0)
+        guard_true(i1) []
+        i2 = int_is_zero(i0)
+        guard_false(i2) []
+        jump(i0)
+        """
+        expected = """
+        [i2]
+        i0 = call_i(123, 10, descr=raw_malloc_descr)
+        jump(i0)
+        """
+        self.optimize_loop(ops, expected)
 
 
 class TestLLtype(OptimizeOptTest, LLtypeMixin):


More information about the pypy-commit mailing list