[pypy-svn] r69089 - in pypy/branch/guard-nonnull/pypy/jit/metainterp: . test
fijal at codespeak.net
fijal at codespeak.net
Mon Nov 9 13:57:21 CET 2009
Author: fijal
Date: Mon Nov 9 13:57:21 2009
New Revision: 69089
Modified:
pypy/branch/guard-nonnull/pypy/jit/metainterp/codewriter.py
pypy/branch/guard-nonnull/pypy/jit/metainterp/test/test_codewriter.py
Log:
(arigo, fijal)
Optimize away ptr_eq(stuff, NULL) on codewriter level
Modified: pypy/branch/guard-nonnull/pypy/jit/metainterp/codewriter.py
==============================================================================
--- pypy/branch/guard-nonnull/pypy/jit/metainterp/codewriter.py (original)
+++ pypy/branch/guard-nonnull/pypy/jit/metainterp/codewriter.py Mon Nov 9 13:57:21 2009
@@ -808,6 +808,29 @@
serialize_op_uint_is_true = serialize_op_int_is_true
+ def _serialize_op_ptr_eq(self, op, opname):
+ arg0, arg1 = op.args
+ if isinstance(arg0, Constant) and not arg0.value:
+ self.emit(opname, self.var_position(arg1))
+ self.register_var(op.result)
+ elif isinstance(arg1, Constant) and not arg1.value:
+ self.emit(opname, self.var_position(arg0))
+ self.register_var(op.result)
+ else:
+ self.default_serialize_op(op)
+
+ def serialize_op_ptr_eq(self, op):
+ self._serialize_op_ptr_eq(op, 'ptr_iszero')
+
+ def serialize_op_ptr_ne(self, op):
+ self._serialize_op_ptr_eq(op, 'ptr_nonzero')
+
+ def serialize_op_oois(self, op):
+ self._serialize_op_ptr_eq(op, 'ooisnull')
+
+ def serialize_op_ooisnot(self, op):
+ self._serialize_op_ptr_eq(op, 'oononnull')
+
def serialize_op_malloc(self, op):
assert op.args[1].value == {'flavor': 'gc'}
STRUCT = op.args[0].value
Modified: pypy/branch/guard-nonnull/pypy/jit/metainterp/test/test_codewriter.py
==============================================================================
--- pypy/branch/guard-nonnull/pypy/jit/metainterp/test/test_codewriter.py (original)
+++ pypy/branch/guard-nonnull/pypy/jit/metainterp/test/test_codewriter.py Mon Nov 9 13:57:21 2009
@@ -363,6 +363,8 @@
jitcode = cw.make_one_bytecode((graphs[0], None), False)
assert 'ptr_eq' not in jitcode._source
assert 'ptr_ne' not in jitcode._source
+ assert jitcode._source.count('ptr_iszero') == 2
+ assert jitcode._source.count('ptr_nonzero') == 2
class ImmutableFieldsTests:
More information about the Pypy-commit
mailing list