[pypy-commit] pypy default: Store values in pure_operations instead of ops (I wonder what it changes,
fijal
noreply at buildbot.pypy.org
Sun Dec 21 11:34:16 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch:
Changeset: r75043:0d5b714ce13a
Date: 2014-12-19 15:48 +0200
http://bitbucket.org/pypy/pypy/changeset/0d5b714ce13a/
Log: Store values in pure_operations instead of ops (I wonder what it
changes, actually)
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
@@ -299,8 +299,8 @@
def make_constant_int(self, box, intconst):
return self.optimizer.make_constant_int(box, intconst)
- def make_equal_to(self, box, value):
- return self.optimizer.make_equal_to(box, value)
+ def make_equal_to(self, box, value, replace=False):
+ return self.optimizer.make_equal_to(box, value, replace=replace)
def get_constant_box(self, box):
return self.optimizer.get_constant_box(box)
diff --git a/rpython/jit/metainterp/optimizeopt/pure.py b/rpython/jit/metainterp/optimizeopt/pure.py
--- a/rpython/jit/metainterp/optimizeopt/pure.py
+++ b/rpython/jit/metainterp/optimizeopt/pure.py
@@ -25,6 +25,7 @@
else:
nextop = None
+ args = None
if canfold:
for i in range(op.numargs()):
if self.get_constant_box(op.getarg(i)) is None:
@@ -39,15 +40,11 @@
# did we do the exact same operation already?
args = self.optimizer.make_args_key(op)
- oldop = self.pure_operations.get(args, None)
- if oldop is not None and oldop.getdescr() is op.getdescr():
- assert oldop.getopnum() == op.getopnum()
- self.optimizer.make_equal_to(op.result,
- self.getvalue(oldop.result),
- True)
+ oldvalue = self.pure_operations.get(args, None)
+ if oldvalue is not None:
+ self.optimizer.make_equal_to(op.result, oldvalue, True)
return
else:
- self.pure_operations[args] = op
self.remember_emitting_pure(op)
# otherwise, the operation remains
@@ -56,6 +53,8 @@
self.optimizer.bool_boxes[self.getvalue(op.result)] = None
if nextop:
self.emit_operation(nextop)
+ if args is not None:
+ self.pure_operations[args] = self.getvalue(op.result)
def optimize_CALL_PURE(self, op):
# Step 1: check if all arguments are constant
@@ -69,16 +68,15 @@
# Step 2: check if all arguments are the same as a previous
# CALL_PURE.
args = self.optimizer.make_args_key(op)
- oldop = self.pure_operations.get(args, None)
- if oldop is not None and oldop.getdescr() is op.getdescr():
- assert oldop.getopnum() == op.getopnum()
+ oldvalue = self.pure_operations.get(args, None)
+ if oldvalue is not None:
# this removes a CALL_PURE that has the same (non-constant)
# arguments as a previous CALL_PURE.
- self.make_equal_to(op.result, self.getvalue(oldop.result))
+ self.make_equal_to(op.result, oldvalue)
self.last_emitted_operation = REMOVED
return
else:
- self.pure_operations[args] = op
+ self.pure_operations[args] = self.getvalue(op.result)
self.remember_emitting_pure(op)
# replace CALL_PURE with just CALL
@@ -103,15 +101,12 @@
op = ResOperation(opnum, args, result)
key = self.optimizer.make_args_key(op)
if key not in self.pure_operations:
- self.pure_operations[key] = op
+ self.pure_operations[key] = self.getvalue(op.result)
def has_pure_result(self, opnum, args, descr):
op = ResOperation(opnum, args, None, descr)
key = self.optimizer.make_args_key(op)
- op = self.pure_operations.get(key, None)
- if op is None:
- return False
- return op.getdescr() is descr
+ return self.pure_operations.get(key, None) is not None
def get_pure_result(self, key):
return self.pure_operations.get(key, None)
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
@@ -33,9 +33,8 @@
dispatch_opt(self, op)
def try_boolinvers(self, op, targs):
- oldop = self.get_pure_result(targs)
- if oldop is not None and oldop.getdescr() is op.getdescr():
- value = self.getvalue(oldop.result)
+ value = self.get_pure_result(targs)
+ if value is not None:
if value.is_constant():
if value.box.same_constant(CONST_1):
self.make_constant(op.result, CONST_0)
@@ -59,9 +58,9 @@
if oldopnum != -1:
targs = self.optimizer.make_args_key(ResOperation(oldopnum, [args[1], args[0]],
None))
- oldop = self.get_pure_result(targs)
- if oldop is not None and oldop.getdescr() is op.getdescr():
- self.make_equal_to(op.result, self.getvalue(oldop.result))
+ value = self.get_pure_result(targs)
+ if value is not None:
+ self.optimizer.make_equal_to(op.result, value, True)
return True
if op.boolreflex == -1:
More information about the pypy-commit
mailing list