[pypy-svn] r68167 - in pypy/branch/merge-floats-via-sse2/pypy/jit: backend/llgraph metainterp metainterp/test

fijal at codespeak.net fijal at codespeak.net
Mon Oct 5 14:23:18 CEST 2009


Author: fijal
Date: Mon Oct  5 14:23:17 2009
New Revision: 68167

Modified:
   pypy/branch/merge-floats-via-sse2/pypy/jit/backend/llgraph/runner.py
   pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/optimizeopt.py
   pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/test/test_optimizefindnode.py
   pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/test/test_optimizeopt.py
Log:
A couple of fixes for optimizeopt


Modified: pypy/branch/merge-floats-via-sse2/pypy/jit/backend/llgraph/runner.py
==============================================================================
--- pypy/branch/merge-floats-via-sse2/pypy/jit/backend/llgraph/runner.py	(original)
+++ pypy/branch/merge-floats-via-sse2/pypy/jit/backend/llgraph/runner.py	Mon Oct  5 14:23:17 2009
@@ -47,9 +47,15 @@
     def is_pointer_field(self):
         return self.typeinfo == REF
 
+    def is_float_field(self):
+        return self.typeinfo == FLOAT
+
     def is_array_of_pointers(self):
         return self.typeinfo == REF
 
+    def is_array_of_floats(self):
+        return self.typeinfo == FLOAT
+
     def equals(self, other):
         if not isinstance(other, Descr):
             return False
@@ -775,6 +781,7 @@
         self.getfield = getfield
         self.setfield = setfield
         self._is_pointer_field = (history.getkind(T) == 'ref')
+        self._is_float_field = (history.getkind(T) == 'float')
 
     def sort_key(self):
         return self._keys.getkey((self.TYPE, self.fieldname))
@@ -782,6 +789,9 @@
     def is_pointer_field(self):
         return self._is_pointer_field
 
+    def is_float_field(self):
+        return self._is_float_field
+
     def equals(self, other):
         return self.TYPE == other.TYPE and \
             self.fieldname == other.fieldname

Modified: pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/optimizeopt.py	(original)
+++ pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/optimizeopt.py	Mon Oct  5 14:23:17 2009
@@ -1,4 +1,5 @@
-from pypy.jit.metainterp.history import Box, BoxInt, LoopToken
+from pypy.jit.metainterp.history import Box, BoxInt, LoopToken, BoxFloat,\
+     ConstFloat
 from pypy.jit.metainterp.history import Const, ConstInt, ConstPtr, ConstObj, REF
 from pypy.jit.metainterp.resoperation import rop, ResOperation
 from pypy.jit.metainterp.executor import execute_nonspec
@@ -143,6 +144,7 @@
 CONST_0      = ConstInt(0)
 CONST_1      = ConstInt(1)
 CVAL_ZERO    = ConstantValue(CONST_0)
+CVAL_ZERO_FLOAT = ConstantValue(ConstFloat(0.0))
 llhelper.CONST_NULL = ConstPtr(ConstPtr.value)
 llhelper.CVAL_NULLREF = ConstantValue(llhelper.CONST_NULL)
 oohelper.CONST_NULL = ConstObj(ConstObj.value)
@@ -438,24 +440,32 @@
     def new_box(self, fieldofs):
         if fieldofs.is_pointer_field():
             return self.new_ptr_box()
+        elif fieldofs.is_float_field():
+            return BoxFloat()
         else:
             return BoxInt()
 
     def new_const(self, fieldofs):
         if fieldofs.is_pointer_field():
             return self.cpu.ts.CVAL_NULLREF
+        elif fieldofs.is_float_field():
+            return CVAL_ZERO_FLOAT
         else:
             return CVAL_ZERO
 
     def new_box_item(self, arraydescr):
         if arraydescr.is_array_of_pointers():
             return self.new_ptr_box()
+        elif arraydescr.is_array_of_floats():
+            return BoxFloat()
         else:
             return BoxInt()
 
     def new_const_item(self, arraydescr):
         if arraydescr.is_array_of_pointers():
             return self.cpu.ts.CVAL_NULLREF
+        elif arraydescr.is_array_of_floats():
+            return CVAL_ZERO_FLOAT
         else:
             return CVAL_ZERO
 

Modified: pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/test/test_optimizefindnode.py
==============================================================================
--- pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/test/test_optimizefindnode.py	(original)
+++ pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/test/test_optimizefindnode.py	Mon Oct  5 14:23:17 2009
@@ -107,6 +107,7 @@
     cpu = runner.OOtypeCPU(None)
     NODE = ootype.Instance('NODE', ootype.ROOT, {})
     NODE._add_fields({'value': ootype.Signed,
+                      'floatval' : ootype.Float,
                       'next': NODE})
     NODE2 = ootype.Instance('NODE2', NODE, {'other': NODE})
 
@@ -121,6 +122,7 @@
     myptr2 = ootype.cast_to_object(ootype.new(NODE))
     nodebox2 = BoxObj(ootype.cast_to_object(node))
     valuedescr = cpu.fielddescrof(NODE, 'value')
+    floatdescr = cpu.fielddescrof(NODE, 'floatval')
     nextdescr = cpu.fielddescrof(NODE, 'next')
     otherdescr = cpu.fielddescrof(NODE2, 'other')
     nodesize = cpu.typedescrof(NODE)

Modified: pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/test/test_optimizeopt.py	(original)
+++ pypy/branch/merge-floats-via-sse2/pypy/jit/metainterp/test/test_optimizeopt.py	Mon Oct  5 14:23:17 2009
@@ -584,7 +584,6 @@
         self.optimize_loop(ops, 'Not, Virtual(node_vtable, valuedescr=Not)',
                            expected, checkspecnodes=False)
 
-    @py.test.mark.xfail()
     def test_virtual_float(self):
         ops = """
         [f, p0]
@@ -595,7 +594,7 @@
         """
         expected = """
         [f, f2]
-        f1 = int_add(f2, f)
+        f1 = float_add(f2, f)
         jump(f, f1)
         """
         self.optimize_loop(ops, 'Not, Virtual(node_vtable, floatdescr=Not)',



More information about the Pypy-commit mailing list