[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