[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