Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r79481:6bc488bd103b Date: 2015-09-06 19:54 +0200 http://bitbucket.org/pypy/pypy/changeset/6bc488bd103b/
Log: test and a fix diff --git a/rpython/jit/metainterp/optimizeopt/intbounds.py b/rpython/jit/metainterp/optimizeopt/intbounds.py --- a/rpython/jit/metainterp/optimizeopt/intbounds.py +++ b/rpython/jit/metainterp/optimizeopt/intbounds.py @@ -560,6 +560,8 @@ self.propagate_bounds_backward(op.getarg(1)) def _propagate_int_is_true_or_zero(self, op, valnonzero, valzero): + if self.is_raw_ptr(op.getarg(0)): + return r = self.getintbound(op) if r.is_constant(): if r.getint() == valnonzero: 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 @@ -49,7 +49,7 @@ self.last_emitted_operation = op self.next_optimization.propagate_forward(op) - def getintbound(self, op):#, create=True): + def getintbound(self, op): assert op.type == 'i' op = self.get_box_replacement(op) if isinstance(op, ConstInt): @@ -75,13 +75,13 @@ op.set_forwarded(bound) def getnullness(self, op): - if op.type == 'i': - return self.getintbound(op).getnullness() - elif op.type == 'r': + if op.type == 'r' or self.is_raw_ptr(op): ptrinfo = self.getptrinfo(op) if ptrinfo is None: return info.INFO_UNKNOWN return ptrinfo.getnullness() + elif op.type == 'i': + return self.getintbound(op).getnullness() assert False def make_constant_class(self, op, class_const, update_last_guard=True): 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 @@ -504,7 +504,8 @@ self.emit_operation(op) def optimize_INT_IS_TRUE(self, op): - if self.getintbound(op.getarg(0)).is_bool(): + if (not self.is_raw_ptr(op.getarg(0)) and + self.getintbound(op.getarg(0)).is_bool()): self.make_equal_to(op, op.getarg(0)) return self._optimize_nullness(op, op.getarg(0), True) diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py --- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py @@ -8736,23 +8736,22 @@ """ self.optimize_loop(ops, ops) - def test_pass_both_short_preamble_and_arg(self): - ops = """ - [i0, i1] - i2 = int_add(i0, 1) - jump(i0, i2) - """ - expected = """ - [i0, i1, i2] - jump(i0, i2, i2) - """ - preamble = """ - [i0, i1] - i2 = int_add(i0, 1) - i3 = same_as(i2) - jump(i0, i2, i3) - """ - self.optimize_loop(ops, expected, preamble) + def test_raw_buffer_int_is_true(self): + ops = """ + [iinp] + i0 = call_i(123, 10, descr=raw_malloc_descr) + i1 = int_is_true(i0) + guard_true(i1) [] + i2 = int_is_zero(i0) + guard_false(i2) [] + jump(i0) + """ + expected = """ + [i2] + i0 = call_i(123, 10, descr=raw_malloc_descr) + jump(i0) + """ + self.optimize_loop(ops, expected) class TestLLtype(OptimizeOptTest, LLtypeMixin): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit