Author: Armin Rigo <ar...@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): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit