[pypy-commit] pypy default: Optimize int_xor(_, 0)
arigo
noreply at buildbot.pypy.org
Tue Aug 20 10:39:35 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r66250:0a2651680d0a
Date: 2013-08-20 10:31 +0200
http://bitbucket.org/pypy/pypy/changeset/0a2651680d0a/
Log: Optimize int_xor(_, 0)
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -178,6 +178,17 @@
else:
self.emit_operation(op)
+ def optimize_INT_XOR(self, op):
+ v1 = self.getvalue(op.getarg(0))
+ v2 = self.getvalue(op.getarg(1))
+
+ if v1.is_constant() and v1.box.getint() == 0:
+ self.make_equal_to(op.result, v2)
+ elif v2.is_constant() and v2.box.getint() == 0:
+ self.make_equal_to(op.result, v1)
+ else:
+ self.emit_operation(op)
+
def optimize_FLOAT_MUL(self, op):
arg1 = op.getarg(0)
arg2 = op.getarg(1)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -3263,6 +3263,20 @@
"""
self.optimize_loop(ops, expected)
+ def test_fold_partially_constant_xor(self):
+ ops = """
+ [i0, i1]
+ i2 = int_xor(i0, 23)
+ i3 = int_xor(i1, 0)
+ jump(i2, i3)
+ """
+ expected = """
+ [i0, i1]
+ i2 = int_xor(i0, 23)
+ jump(i2, i1)
+ """
+ self.optimize_loop(ops, expected)
+
# ----------
def test_residual_call_does_not_invalidate_caches(self):
More information about the pypy-commit
mailing list