Author: Carl Friedrich Bolz <cfb...@gmx.de> Branch: guard-compatible Changeset: r83014:4f6cf238e74a Date: 2016-03-13 18:06 +0100 http://bitbucket.org/pypy/pypy/changeset/4f6cf238e74a/
Log: emitting guard_value after guard_compatible replaces the guard_compatible 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 @@ -228,6 +228,7 @@ info._compatibility_conditions = CompatibilityCondition( op.getarg(1)) self.emit_operation(op) + info.mark_last_guard(self.optimizer) def optimize_GUARD_NO_EXCEPTION(self, op): if self.last_emitted_operation is REMOVED: 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 @@ -416,6 +416,12 @@ r = self.optimizer.metainterp_sd.logger_ops.repr_of_resop(op) raise InvalidLoop('A GUARD_VALUE (%s) was proven to ' 'always fail' % r) + if old_guard_op.getopnum() == rop.GUARD_COMPATIBLE: + if not old_guard_op.getarg(1).same_constant(op.getarg(1)): + r1 = self.optimizer.metainterp_sd.logger_ops.repr_of_resop(op) + r2 = self.optimizer.metainterp_sd.logger_ops.repr_of_resop(old_guard) + raise InvalidLoop('a GUARD_COMPATIBLE (%s) is inconsistent ' + 'with a GUARD_VALUE (%s)' % (r1, r2)) descr = compile.ResumeGuardDescr() op = old_guard_op.copy_and_change(rop.GUARD_VALUE, args = [old_guard_op.getarg(0), op.getarg(1)], diff --git a/rpython/jit/metainterp/optimizeopt/test/test_compatible.py b/rpython/jit/metainterp/optimizeopt/test/test_compatible.py --- a/rpython/jit/metainterp/optimizeopt/test/test_compatible.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_compatible.py @@ -22,6 +22,14 @@ """ self.optimize_loop(ops, expected) + ops = """ + [p1] + guard_compatible(p1, ConstPtr(myptr)) [] + guard_value(p1, ConstPtr(myptr)) [] + jump(ConstPtr(myptr)) + """ + self.optimize_loop(ops, expected) + def test_guard_compatible_after_guard_compatible(self): ops = """ [p1] _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit