[pypy-svn] r74165 - in pypy/branch/blackhole-improvement/pypy/jit/codewriter: . test

arigo at codespeak.net arigo at codespeak.net
Wed Apr 28 14:09:24 CEST 2010


Author: arigo
Date: Wed Apr 28 14:09:23 2010
New Revision: 74165

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitter.py
Log:
Correctly transform ptr_xxx into int_xxx operations
when the pointers being handled are non-gc.


Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py	Wed Apr 28 14:09:23 2010
@@ -349,6 +349,16 @@
         else:
             return op
 
+    def _rewrite_nongc_ptrs(self, op):
+        if op.args[0].concretetype.TO._gckind == 'gc':
+            return op
+        else:
+            opname = {'ptr_eq': 'int_eq',
+                      'ptr_ne': 'int_ne',
+                      'ptr_iszero': 'int_is_zero',
+                      'ptr_nonzero': 'int_is_true'}[op.opname]
+            return SpaceOperation(opname, op.args, op.result)
+
     def rewrite_op_int_eq(self, op):
         return self._rewrite_equality(op, 'int_is_zero')
 
@@ -356,10 +366,15 @@
         return self._rewrite_equality(op, 'int_is_true')
 
     def rewrite_op_ptr_eq(self, op):
-        return self._rewrite_equality(op, 'ptr_iszero')
+        op1 = self._rewrite_equality(op, 'ptr_iszero')
+        return self._rewrite_nongc_ptrs(op1)
 
     def rewrite_op_ptr_ne(self, op):
-        return self._rewrite_equality(op, 'ptr_nonzero')
+        op1 = self._rewrite_equality(op, 'ptr_nonzero')
+        return self._rewrite_nongc_ptrs(op1)
+
+    rewrite_op_ptr_iszero = _rewrite_nongc_ptrs
+    rewrite_op_ptr_nonzero = _rewrite_nongc_ptrs
 
 # ____________________________________________________________
 

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitter.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitter.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitter.py	Wed Apr 28 14:09:23 2010
@@ -314,11 +314,11 @@
     v3 = varoftype(lltype.Bool)
     c0 = Constant(lltype.nullptr(rclass.NONGCOBJECT), rclass.NONGCOBJECTPTR)
     #
-    for opname, reducedname in [('int_eq', 'int_is_zero'),
-                                ('int_ne', 'int_is_true')]:
+    for opname, reducedname in [('ptr_eq', 'int_is_zero'),
+                                ('ptr_ne', 'int_is_true')]:
         op = SpaceOperation(opname, [v1, v2], v3)
         op1 = Transformer().rewrite_operation(op)
-        assert op1.opname == opname
+        assert op1.opname == opname.replace('ptr_', 'int_')
         assert op1.args == [v1, v2]
         #
         op = SpaceOperation(opname, [v1, c0], v3)
@@ -330,3 +330,13 @@
         op1 = Transformer().rewrite_operation(op)
         assert op1.opname == reducedname
         assert op1.args == [v2]
+    #
+    op = SpaceOperation('ptr_iszero', [v1], v3)
+    op1 = Transformer().rewrite_operation(op)
+    assert op1.opname == 'int_is_zero'
+    assert op1.args == [v1]
+    #
+    op = SpaceOperation('ptr_nonzero', [v1], v3)
+    op1 = Transformer().rewrite_operation(op)
+    assert op1.opname == 'int_is_true'
+    assert op1.args == [v1]



More information about the Pypy-commit mailing list