Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r77569:6cd831e762f8
Date: 2015-05-26 12:21 +0200
http://bitbucket.org/pypy/pypy/changeset/6cd831e762f8/
Log: unify some 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
@@ -561,9 +561,14 @@
def clear_newoperations(self):
self._newoperations = []
- def make_equal_to(self, op, oldop):
- assert op.get_forwarded() is None
- op.set_forwarded(oldop)
+ def make_equal_to(self, op, newop):
+ opinfo = op.get_forwarded()
+ if opinfo is not None:
+ assert isinstance(opinfo, info.AbstractInfo)
+ op.set_forwarded(newop)
+ newop.set_forwarded(opinfo)
+ else:
+ op.set_forwarded(newop)
def replace_op_with(self, op, newopnum, args=None, descr=None):
newop = op.copy_and_change(newopnum, args, descr)
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
@@ -22,7 +22,7 @@
op = self.lst[i]
if op is None:
break
- if op.getarg(0).same_box(box0) and op.getdescr() is descr:
+ if opt.get_box_replacement(op.getarg(0)).same_box(box0) and
op.getdescr() is descr:
return opt.get_box_replacement(op)
return None
@@ -31,7 +31,7 @@
op = self.lst[i]
if op is None:
break
- if (op.getarg(0).same_box(box0) and op.getarg(1).same_box(box1)
+ if (opt.get_box_replacement(op.getarg(0)).same_box(box0) and
opt.get_box_replacement(op.getarg(1)).same_box(box1)
and op.getdescr() is descr):
return opt.get_box_replacement(op)
return 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
@@ -250,14 +250,24 @@
self.optimizer.pure_reverse(op)
def optimize_guard(self, op, constbox, emit_operation=True):
- box = self.get_box_replacement(op.getarg(0))
- if box.is_constant():
- assert isinstance(box, Const)
- if not box.same_constant(constbox):
- r = self.optimizer.metainterp_sd.logger_ops.repr_of_resop(op)
- raise InvalidLoop('A GUARD_{VALUE,TRUE,FALSE} (%s) was proven '
- 'to always fail' % r)
- return
+ box = op.getarg(0)
+ if box.type == 'i':
+ intbound = self.getintbound(box)
+ if intbound.is_constant():
+ if not intbound.getint() == constbox.getint():
+ r = self.optimizer.metainterp_sd.logger_ops.repr_of_resop(
+ op)
+ raise InvalidLoop('A GUARD_{VALUE,TRUE,FALSE} (%s) was '
+ 'proven to always fail' % r)
+ return
+ elif box.type == 'r':
+ box = self.get_box_replacement(box)
+ if box.is_constant():
+ if not box.same_constant(constbox):
+ raise InvalidLoop('A GUARD_VALUE (%s) was proven '
+ 'to always fail' % r)
+ return
+
if emit_operation:
self.emit_operation(op)
self.make_constant(box, constbox)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit