[pypy-commit] pypy default: kill the pure_reverse function and just move the parts to the relevant
cfbolz
pypy.commits at gmail.com
Tue Oct 11 06:15:56 EDT 2016
Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch:
Changeset: r87704:018a54181f0f
Date: 2016-10-11 12:10 +0200
http://bitbucket.org/pypy/pypy/changeset/018a54181f0f/
Log: kill the pure_reverse function and just move the parts to the
relevant postprocess_* functions. It doesn't make sense to dispatch
*twice* on the opnum.
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -865,63 +865,6 @@
return opinfo is not None and opinfo.is_virtual()
return False
- def pure_reverse(self, op):
- import sys
- if self.optpure is None:
- return
- optpure = self.optpure
- if op.getopnum() == rop.INT_ADD:
- arg0 = op.getarg(0)
- arg1 = op.getarg(1)
- optpure.pure_from_args(rop.INT_ADD, [arg1, arg0], op)
- # Synthesize the reverse op for optimize_default to reuse
- optpure.pure_from_args(rop.INT_SUB, [op, arg1], arg0)
- optpure.pure_from_args(rop.INT_SUB, [op, arg0], arg1)
- if isinstance(arg0, ConstInt):
- # invert the constant
- i0 = arg0.getint()
- if i0 == -sys.maxint - 1:
- return
- inv_arg0 = ConstInt(-i0)
- elif isinstance(arg1, ConstInt):
- # commutative
- i0 = arg1.getint()
- if i0 == -sys.maxint - 1:
- return
- inv_arg0 = ConstInt(-i0)
- arg1 = arg0
- else:
- return
- optpure.pure_from_args(rop.INT_SUB, [arg1, inv_arg0], op)
- optpure.pure_from_args(rop.INT_SUB, [arg1, op], inv_arg0)
- optpure.pure_from_args(rop.INT_ADD, [op, inv_arg0], arg1)
- optpure.pure_from_args(rop.INT_ADD, [inv_arg0, op], arg1)
-
- elif op.getopnum() == rop.INT_SUB:
- arg0 = op.getarg(0)
- arg1 = op.getarg(1)
- optpure.pure_from_args(rop.INT_ADD, [op, arg1], arg0)
- optpure.pure_from_args(rop.INT_SUB, [arg0, op], arg1)
- if isinstance(arg1, ConstInt):
- # invert the constant
- i1 = arg1.getint()
- if i1 == -sys.maxint - 1:
- return
- inv_arg1 = ConstInt(-i1)
- optpure.pure_from_args(rop.INT_ADD, [arg0, inv_arg1], op)
- optpure.pure_from_args(rop.INT_ADD, [inv_arg1, arg0], op)
- optpure.pure_from_args(rop.INT_SUB, [op, inv_arg1], arg0)
- optpure.pure_from_args(rop.INT_SUB, [op, arg0], inv_arg1)
- elif op.getopnum() == rop.FLOAT_MUL:
- optpure.pure_from_args(rop.FLOAT_MUL,
- [op.getarg(1), op.getarg(0)], op)
- elif op.getopnum() == rop.FLOAT_NEG:
- optpure.pure_from_args(rop.FLOAT_NEG, [op], op.getarg(0))
- elif op.getopnum() == rop.CAST_INT_TO_PTR:
- optpure.pure_from_args(rop.CAST_PTR_TO_INT, [op], op.getarg(0))
- elif op.getopnum() == rop.CAST_PTR_TO_INT:
- optpure.pure_from_args(rop.CAST_INT_TO_PTR, [op], op.getarg(0))
-
# These are typically removed already by OptRewrite, but it can be
# dissabled and unrolling emits some SAME_AS ops to setup the
# optimizier state. These needs to always be optimized out.
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
@@ -143,7 +143,21 @@
return self.emit(op)
def postprocess_INT_SUB(self, op):
- self.optimizer.pure_reverse(op)
+ import sys
+ arg0 = op.getarg(0)
+ arg1 = op.getarg(1)
+ self.optimizer.pure_from_args(rop.INT_ADD, [op, arg1], arg0)
+ self.optimizer.pure_from_args(rop.INT_SUB, [arg0, op], arg1)
+ if isinstance(arg1, ConstInt):
+ # invert the constant
+ i1 = arg1.getint()
+ if i1 == -sys.maxint - 1:
+ return
+ inv_arg1 = ConstInt(-i1)
+ self.optimizer.pure_from_args(rop.INT_ADD, [arg0, inv_arg1], op)
+ self.optimizer.pure_from_args(rop.INT_ADD, [inv_arg1, arg0], op)
+ self.optimizer.pure_from_args(rop.INT_SUB, [op, inv_arg1], arg0)
+ self.optimizer.pure_from_args(rop.INT_SUB, [op, arg0], inv_arg1)
def optimize_INT_ADD(self, op):
if self.is_raw_ptr(op.getarg(0)) or self.is_raw_ptr(op.getarg(1)):
@@ -162,7 +176,32 @@
return self.emit(op)
def postprocess_INT_ADD(self, op):
- self.optimizer.pure_reverse(op)
+ import sys
+ arg0 = op.getarg(0)
+ arg1 = op.getarg(1)
+ self.optimizer.pure_from_args(rop.INT_ADD, [arg1, arg0], op)
+ # Synthesize the reverse op for optimize_default to reuse
+ self.optimizer.pure_from_args(rop.INT_SUB, [op, arg1], arg0)
+ self.optimizer.pure_from_args(rop.INT_SUB, [op, arg0], arg1)
+ if isinstance(arg0, ConstInt):
+ # invert the constant
+ i0 = arg0.getint()
+ if i0 == -sys.maxint - 1:
+ return
+ inv_arg0 = ConstInt(-i0)
+ elif isinstance(arg1, ConstInt):
+ # commutative
+ i0 = arg1.getint()
+ if i0 == -sys.maxint - 1:
+ return
+ inv_arg0 = ConstInt(-i0)
+ arg1 = arg0
+ else:
+ return
+ self.optimizer.pure_from_args(rop.INT_SUB, [arg1, inv_arg0], op)
+ self.optimizer.pure_from_args(rop.INT_SUB, [arg1, op], inv_arg0)
+ self.optimizer.pure_from_args(rop.INT_ADD, [op, inv_arg0], arg1)
+ self.optimizer.pure_from_args(rop.INT_ADD, [inv_arg0, op], arg1)
def optimize_INT_MUL(self, op):
arg1 = self.get_box_replacement(op.getarg(0))
@@ -250,7 +289,8 @@
return self.emit(op)
def postprocess_FLOAT_MUL(self, op):
- self.optimizer.pure_reverse(op)
+ self.optimizer.pure_from_args(rop.FLOAT_MUL,
+ [op.getarg(1), op.getarg(0)], op)
def optimize_FLOAT_TRUEDIV(self, op):
arg1 = op.getarg(0)
@@ -277,7 +317,7 @@
return self.emit(op)
def postprocess_FLOAT_NEG(self, op):
- self.optimizer.pure_reverse(op)
+ self.optimizer.pure_from_args(rop.FLOAT_NEG, [op], op.getarg(0))
def optimize_guard(self, op, constbox):
box = op.getarg(0)
@@ -799,11 +839,11 @@
return True
def optimize_CAST_PTR_TO_INT(self, op):
- self.optimizer.pure_reverse(op)
+ self.optimizer.pure_from_args(rop.CAST_INT_TO_PTR, [op], op.getarg(0))
return self.emit(op)
def optimize_CAST_INT_TO_PTR(self, op):
- self.optimizer.pure_reverse(op)
+ self.optimizer.pure_from_args(rop.CAST_PTR_TO_INT, [op], op.getarg(0))
return self.emit(op)
def optimize_SAME_AS_I(self, op):
More information about the pypy-commit
mailing list