[pypy-commit] pypy default: shuffle around sythesising of pure reverse ops (why we don't do more???)
fijal
noreply at buildbot.pypy.org
Mon Jan 12 15:09:25 CET 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch:
Changeset: r75307:b1bb8c9381a6
Date: 2015-01-12 16:06 +0200
http://bitbucket.org/pypy/pypy/changeset/b1bb8c9381a6/
Log: shuffle around sythesising of pure reverse ops (why we don't do
more???)
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
@@ -847,6 +847,27 @@
op.getopnum(), argboxes, op.getdescr())
return resbox.constbox()
+ def pure_reverse(self, op):
+ if self.optpure is None:
+ return
+ optpure = self.optpure
+ if op.getopnum() == rop.INT_ADD:
+ optpure.pure(rop.INT_ADD, [op.getarg(1), op.getarg(0)], op.result)
+ # Synthesize the reverse op for optimize_default to reuse
+ optpure.pure(rop.INT_SUB, [op.result, op.getarg(1)], op.getarg(0))
+ optpure.pure(rop.INT_SUB, [op.result, op.getarg(0)], op.getarg(1))
+ elif op.getopnum() == rop.INT_SUB:
+ optpure.pure(rop.INT_ADD, [op.result, op.getarg(1)], op.getarg(0))
+ optpure.pure(rop.INT_SUB, [op.getarg(0), op.result], op.getarg(1))
+ elif op.getopnum() == rop.FLOAT_MUL:
+ optpure.pure(rop.FLOAT_MUL, [op.getarg(1), op.getarg(0)], op.result)
+ elif op.getopnum() == rop.FLOAT_NEG:
+ optpure.pure(rop.FLOAT_NEG, [op.result], op.getarg(0))
+ elif op.getopnum() == rop.CAST_INT_TO_PTR:
+ optpure.pure(rop.CAST_PTR_TO_INT, [op.result], op.getarg(0))
+ elif op.getopnum() == rop.CAST_PTR_TO_INT:
+ optpure.pure(rop.CAST_INT_TO_PTR, [op.result], op.getarg(0))
+
#def optimize_GUARD_NO_OVERFLOW(self, op):
# # otherwise the default optimizer will clear fields, which is unwanted
# # in this case
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
@@ -117,9 +117,7 @@
self.make_constant_int(op.result, 0)
else:
self.emit_operation(op)
- # Synthesize the reverse ops for optimize_default to reuse
- self.pure(rop.INT_ADD, [op.result, op.getarg(1)], op.getarg(0))
- self.pure(rop.INT_SUB, [op.getarg(0), op.result], op.getarg(1))
+ self.optimizer.pure_reverse(op)
def optimize_INT_ADD(self, op):
v1 = self.getvalue(op.getarg(0))
@@ -132,10 +130,7 @@
self.make_equal_to(op.result, v1)
else:
self.emit_operation(op)
- self.pure(rop.INT_ADD, [op.getarg(1), op.getarg(0)], op.result)
- # Synthesize the reverse op for optimize_default to reuse
- self.pure(rop.INT_SUB, [op.result, op.getarg(1)], op.getarg(0))
- self.pure(rop.INT_SUB, [op.result, op.getarg(0)], op.getarg(1))
+ self.optimizer.pure_reverse(op)
def optimize_INT_MUL(self, op):
v1 = self.getvalue(op.getarg(0))
@@ -222,7 +217,7 @@
))
return
self.emit_operation(op)
- self.pure(rop.FLOAT_MUL, [arg2, arg1], op.result)
+ self.optimizer.pure_reverse(op)
def optimize_FLOAT_TRUEDIV(self, op):
arg1 = op.getarg(0)
@@ -244,9 +239,8 @@
self.emit_operation(op)
def optimize_FLOAT_NEG(self, op):
- v1 = op.getarg(0)
self.emit_operation(op)
- self.pure(rop.FLOAT_NEG, [op.result], v1)
+ self.optimizer.pure_reverse(op)
def optimize_guard(self, op, constbox, emit_operation=True):
value = self.getvalue(op.getarg(0))
@@ -583,11 +577,11 @@
self.emit_operation(op)
def optimize_CAST_PTR_TO_INT(self, op):
- self.pure(rop.CAST_INT_TO_PTR, [op.result], op.getarg(0))
+ self.optimizer.pure_reverse(op)
self.emit_operation(op)
def optimize_CAST_INT_TO_PTR(self, op):
- self.pure(rop.CAST_PTR_TO_INT, [op.result], op.getarg(0))
+ self.optimizer.pure_reverse(op)
self.emit_operation(op)
def optimize_SAME_AS(self, op):
More information about the pypy-commit
mailing list