[pypy-commit] pypy optresult-unroll: test and a fix
fijal
noreply at buildbot.pypy.org
Sun Sep 6 19:54:19 CEST 2015
Author: Maciej Fijalkowski <fijall at 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):
More information about the pypy-commit
mailing list