Author: Brian Kearns <bdkea...@gmail.com> Branch: Changeset: r74849:794a98c020bf Date: 2014-12-05 16:39 -0500 http://bitbucket.org/pypy/pypy/changeset/794a98c020bf/
Log: eliminate some ops in logical_xor diff --git a/pypy/module/micronumpy/test/test_zjit.py b/pypy/module/micronumpy/test/test_zjit.py --- a/pypy/module/micronumpy/test/test_zjit.py +++ b/pypy/module/micronumpy/test/test_zjit.py @@ -429,14 +429,13 @@ 'getfield_gc': 2, 'getfield_gc_pure': 11, 'guard_class': 1, - 'guard_false': 2, + 'guard_false': 1, 'guard_not_invalidated': 1, - 'guard_true': 4, + 'guard_true': 5, 'int_add': 2, 'int_and': 1, 'int_ge': 1, - 'int_is_true': 3, - 'int_xor': 1, + 'int_is_true': 2, 'jump': 1, 'new_with_vtable': 1, 'raw_load': 1, diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py --- a/pypy/module/micronumpy/types.py +++ b/pypy/module/micronumpy/types.py @@ -285,7 +285,9 @@ @raw_binary_op def logical_xor(self, v1, v2): - return bool(v1) ^ bool(v2) + a = bool(v1) + b = bool(v2) + return (not b and a) or (not a and b) @raw_unary_op def bool(self, v): @@ -1258,7 +1260,9 @@ @raw_binary_op def logical_xor(self, v1, v2): - return self._bool(v1) ^ self._bool(v2) + a = self._bool(v1) + b = self._bool(v2) + return (not b and a) or (not a and b) def min(self, v1, v2): if self.le(v1, v2) or self.isnan(v1): @@ -1733,7 +1737,9 @@ @str_binary_op def logical_xor(self, v1, v2): - return bool(v1) ^ bool(v2) + a = bool(v1) + b = bool(v2) + return (not b and a) or (not a and b) def bool(self, v): return bool(self.to_str(v)) diff --git a/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py b/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py --- a/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py +++ b/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py @@ -30,9 +30,7 @@ guard_true(i14, descr=...) i15 = getfield_gc_pure(p1, descr=<FieldU pypy.module.micronumpy.boxes.W_BoolBox.inst_value \d+>) i16 = int_is_true(i15) - i18 = int_xor(i16, 1) - i19 = int_is_true(i18) - guard_true(i19, descr=...) + guard_false(i16, descr=...) i20 = getfield_gc(p2, descr=<FieldS pypy.module.micronumpy.iterators.IterState.inst_index \d+>) i21 = getfield_gc_pure(p0, descr=<FieldU pypy.module.micronumpy.iterators.ArrayIter.inst_track_index \d+>) guard_true(i21, descr=...) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit