Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: 
Changeset: r79596:b4456aa540b3
Date: 2015-09-13 10:55 +0200
http://bitbucket.org/pypy/pypy/changeset/b4456aa540b3/

Log:    a test and a fix for numpy crash

diff --git a/rpython/jit/metainterp/optimizeopt/info.py 
b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -782,5 +782,11 @@
     def __init__(self, const):
         self._const = const
 
+    def is_constant(self):
+        return True
+
+    def getconst(self):
+        return self._const
+
     def make_guards(self, op, short, optimizer):
         short.append(ResOperation(rop.GUARD_VALUE, [op, self._const]))
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
@@ -8827,5 +8827,21 @@
         """
         self.optimize_loop(ops, expected)
 
+    def test_virtual_with_floats(self):
+        ops = """
+        [p1, i1]
+        p0 = new_with_vtable(descr=nodesize)
+        i2 = int_add(i1, 1)
+        setfield_gc(p0, 0.0000, descr=floatdescr)
+        setfield_gc(p0, i2, descr=valuedescr)
+        jump(p0, i2)
+        """
+        expected = """
+        [i1]
+        i2 = int_add(i1, 1)
+        jump(i2)
+        """
+        self.optimize_loop(ops, expected)
+
 class TestLLtype(OptimizeOptTest, LLtypeMixin):
     pass
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py 
b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -378,6 +378,10 @@
                 if info.upper > MAXINT / 2:
                     info.upper = MAXINT
                 self.intbound = info
+        elif type == 'f':
+            if info and info.is_constant():
+                self.level = LEVEL_CONSTANT
+                self.constbox = info.getconst()
 
     def is_const(self):
         return self.constbox is not None
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to