[pypy-commit] pypy optresult: progress
fijal
noreply at buildbot.pypy.org
Wed Dec 17 18:33:24 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r74990:e42a2a263bf7
Date: 2014-12-17 19:29 +0200
http://bitbucket.org/pypy/pypy/changeset/e42a2a263bf7/
Log: progress
diff --git a/rpython/jit/metainterp/logger.py b/rpython/jit/metainterp/logger.py
--- a/rpython/jit/metainterp/logger.py
+++ b/rpython/jit/metainterp/logger.py
@@ -1,6 +1,6 @@
from rpython.jit.metainterp.history import (ConstInt, BoxInt, ConstFloat,
BoxFloat, TargetToken)
-from rpython.jit.metainterp.resoperation import rop
+from rpython.jit.metainterp.resoperation import rop, AbstractInputArg
from rpython.rlib.debug import (have_debug_prints, debug_start, debug_stop,
debug_print)
from rpython.rlib.objectmodel import we_are_translated, compute_unique_id
@@ -132,6 +132,8 @@
return '?'
def repr_of_resop(self, op, ops_offset=None):
+ if isinstance(op, AbstractInputArg):
+ return self.repr_of_arg(op)
if op.getopnum() == rop.DEBUG_MERGE_POINT:
jd_sd = self.metainterp_sd.jitdrivers_sd[op.getarg(0).getint()]
s = jd_sd.warmstate.get_location_str(op.getarglist()[3:])
@@ -196,6 +198,8 @@
offset = ops_offset[None]
debug_print("+%d: --end of the loop--" % offset)
+ def log_loop(self, loop):
+ self._log_operations(loop.inputargs, loop.operations)
def int_could_be_an_address(x):
if we_are_translated():
diff --git a/rpython/jit/metainterp/optimizeopt/heap.py b/rpython/jit/metainterp/optimizeopt/heap.py
--- a/rpython/jit/metainterp/optimizeopt/heap.py
+++ b/rpython/jit/metainterp/optimizeopt/heap.py
@@ -151,7 +151,11 @@
getop.source_op = result
if isinstance(result, Const):
optimizer.make_constant(getop, result)
- shortboxes.add_potential(result, getop, synthetic=True)
+ getop.is_source_op = True
+ shortboxes.add_potential(getop, getop, synthetic=True)
+ else:
+ getop.source_op = result
+ shortboxes.add_potential(result, getop, synthetic=True)
if op.getopnum() == rop.SETARRAYITEM_GC:
result = op.getarg(2)
opnum = OpHelpers.getarrayitem_for_descr(op.getdescr())
@@ -159,6 +163,7 @@
op.getdescr())
getop.source_op = result
if isinstance(result, Const):
+ xxx
optimizer.make_constant(getop, result)
shortboxes.add_potential(result, getop, synthetic=True)
elif op.type != 'v':
diff --git a/rpython/jit/metainterp/optimizeopt/intutils.py b/rpython/jit/metainterp/optimizeopt/intutils.py
--- a/rpython/jit/metainterp/optimizeopt/intutils.py
+++ b/rpython/jit/metainterp/optimizeopt/intutils.py
@@ -1,7 +1,7 @@
from rpython.rlib.rarithmetic import ovfcheck, LONG_BIT, maxint, is_valid_int
from rpython.rlib.objectmodel import we_are_translated
from rpython.jit.metainterp.resoperation import rop, ResOperation
-from rpython.jit.metainterp.history import BoxInt, ConstInt
+from rpython.jit.metainterp.history import ConstInt
MAXINT = maxint
MININT = -maxint - 1
@@ -238,17 +238,15 @@
def make_guards(self, box, guards):
if self.has_lower and self.lower > MININT:
bound = self.lower
- res = BoxInt()
- op = ResOperation(rop.INT_GE, [box, ConstInt(bound)], res)
+ op = ResOperation(rop.INT_GE, [box, ConstInt(bound)])
guards.append(op)
- op = ResOperation(rop.GUARD_TRUE, [res], None)
+ op = ResOperation(rop.GUARD_TRUE, [op])
guards.append(op)
if self.has_upper and self.upper < MAXINT:
bound = self.upper
- res = BoxInt()
- op = ResOperation(rop.INT_LE, [box, ConstInt(bound)], res)
+ op = ResOperation(rop.INT_LE, [box, ConstInt(bound)])
guards.append(op)
- op = ResOperation(rop.GUARD_TRUE, [res], None)
+ op = ResOperation(rop.GUARD_TRUE, [op])
guards.append(op)
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
@@ -105,7 +105,7 @@
# once when parsing 'preamble', once when parsing 'expected'.
self.oparse = oparse
self.rd_frame_info_list, self.rd_snapshot = snapshot(fail_args)
- def _clone_if_mutable(self):
+ def _clone_if_mutable(self, memo):
assert self is fdescr
return fdescr2
def __repr__(self):
@@ -1809,7 +1809,7 @@
def test_virtual_raw_malloc_force(self):
ops = """
[i1]
- i2 = call('malloc', 20, descr=raw_malloc_descr)
+ i2 = call_i('malloc', 20, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, i1, descr=rawarraydescr_char)
setarrayitem_raw(i2, 2, 456, descr=rawarraydescr_char)
@@ -1817,20 +1817,20 @@
setarrayitem_raw(i2, 1, 789, descr=rawarraydescr_float)
label('foo') # we expect the buffer to be forced *after* the label
escape_n(i2)
- call('free', i2, descr=raw_free_descr)
+ call_n('free', i2, descr=raw_free_descr)
jump(i1)
"""
expected = """
[i1]
label('foo')
- i2 = call('malloc', 20, descr=raw_malloc_descr)
+ i2 = call_i('malloc', 20, descr=raw_malloc_descr)
#guard_no_exception() [] # XXX should appear
raw_store(i2, 0, i1, descr=rawarraydescr_char)
raw_store(i2, 1, 123, descr=rawarraydescr_char)
raw_store(i2, 2, 456, descr=rawarraydescr_char)
raw_store(i2, 8, 789, descr=rawarraydescr_float)
escape_n(i2)
- call('free', i2, descr=raw_free_descr)
+ call_n('free', i2, descr=raw_free_descr)
jump(i1)
"""
self.optimize_loop(ops, expected)
@@ -1838,22 +1838,22 @@
def test_virtual_raw_malloc_invalid_write_force(self):
ops = """
[i1]
- i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, i1, descr=rawarraydescr)
label('foo') # we expect the buffer to be forced *after* the label
setarrayitem_raw(i2, 2, 456, descr=rawarraydescr_char) # overlap!
- call('free', i2, descr=raw_free_descr)
+ call_n('free', i2, descr=raw_free_descr)
jump(i1)
"""
expected = """
[i1]
label('foo')
- i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i('malloc', 10, descr=raw_malloc_descr)
#guard_no_exception() [] # XXX should appear
raw_store(i2, 0, i1, descr=rawarraydescr)
setarrayitem_raw(i2, 2, 456, descr=rawarraydescr_char)
- call('free', i2, descr=raw_free_descr)
+ call_n('free', i2, descr=raw_free_descr)
jump(i1)
"""
self.optimize_loop(ops, expected)
@@ -1861,22 +1861,22 @@
def test_virtual_raw_malloc_invalid_read_force(self):
ops = """
[i1]
- i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, i1, descr=rawarraydescr)
label('foo') # we expect the buffer to be forced *after* the label
- i3 = getarrayitem_raw(i2, 0, descr=rawarraydescr_char)
- call('free', i2, descr=raw_free_descr)
+ i3 = getarrayitem_raw_i(i2, 0, descr=rawarraydescr_char)
+ call_n('free', i2, descr=raw_free_descr)
jump(i1)
"""
expected = """
[i1]
label('foo')
- i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i('malloc', 10, descr=raw_malloc_descr)
#guard_no_exception() [] # XXX should appear
raw_store(i2, 0, i1, descr=rawarraydescr)
- i3 = getarrayitem_raw(i2, 0, descr=rawarraydescr_char)
- call('free', i2, descr=raw_free_descr)
+ i3 = getarrayitem_raw_i(i2, 0, descr=rawarraydescr_char)
+ call_n('free', i2, descr=raw_free_descr)
jump(i1)
"""
self.optimize_loop(ops, expected)
@@ -1884,15 +1884,15 @@
def test_virtual_raw_slice(self):
ops = """
[i0, i1]
- i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, 42, descr=rawarraydescr_char)
i3 = int_add(i2, 1) # get a slice of the original buffer
setarrayitem_raw(i3, 0, 4242, descr=rawarraydescr) # write to the slice
- i4 = getarrayitem_raw(i2, 0, descr=rawarraydescr_char)
+ i4 = getarrayitem_raw_i(i2, 0, descr=rawarraydescr_char)
i5 = int_add(i2, 1)
- i6 = getarrayitem_raw(i5, 0, descr=rawarraydescr)
- call('free', i2, descr=raw_free_descr)
+ i6 = getarrayitem_raw_i(i5, 0, descr=rawarraydescr)
+ call_n('free', i2, descr=raw_free_descr)
jump(i0, i1)
"""
expected = """
@@ -1904,13 +1904,13 @@
def test_virtual_raw_slice_of_a_raw_slice(self):
ops = """
[i0, i1]
- i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
i3 = int_add(i2, 1) # get a slice of the original buffer
i4 = int_add(i3, 1) # get a slice of a slice
setarrayitem_raw(i4, 0, i1, descr=rawarraydescr_char) # write to the slice
- i5 = getarrayitem_raw(i2, 2, descr=rawarraydescr_char)
- call('free', i2, descr=raw_free_descr)
+ i5 = getarrayitem_raw_i(i2, 2, descr=rawarraydescr_char)
+ call_n('free', i2, descr=raw_free_descr)
jump(i0, i5)
"""
expected = """
@@ -1922,7 +1922,7 @@
def test_virtual_raw_slice_force(self):
ops = """
[i0, i1]
- i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, 42, descr=rawarraydescr_char)
i3 = int_add(i2, 1) # get a slice of the original buffer
@@ -1935,7 +1935,7 @@
[i0, i1]
label('foo')
# these ops are generated by VirtualRawBufferValue._really_force
- i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i2 = call_i('malloc', 10, descr=raw_malloc_descr)
#guard_no_exception() [] # XXX should appear
raw_store(i2, 0, 42, descr=rawarraydescr_char)
raw_store(i2, 5, 4242, descr=rawarraydescr_char)
@@ -1949,10 +1949,10 @@
def test_virtual_raw_malloc_virtualstate(self):
ops = """
[i0]
- i1 = getarrayitem_raw(i0, 0, descr=rawarraydescr)
+ i1 = getarrayitem_raw_i(i0, 0, descr=rawarraydescr)
i2 = int_add(i1, 1)
- call('free', i0, descr=raw_free_descr)
- i3 = call('malloc', 10, descr=raw_malloc_descr)
+ call_n('free', i0, descr=raw_free_descr)
+ i3 = call_i('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i3, 0, i2, descr=rawarraydescr)
label('foo')
@@ -1960,11 +1960,11 @@
"""
expected = """
[i0]
- i1 = getarrayitem_raw(i0, 0, descr=rawarraydescr)
+ i1 = getarrayitem_raw_i(i0, 0, descr=rawarraydescr)
i2 = int_add(i1, 1)
- call('free', i0, descr=raw_free_descr)
+ call_n('free', i0, descr=raw_free_descr)
label('foo')
- i3 = call('malloc', 10, descr=raw_malloc_descr)
+ i3 = call_i('malloc', 10, descr=raw_malloc_descr)
#guard_no_exception() [] # XXX should appear
raw_store(i3, 0, i2, descr=rawarraydescr)
jump(i3)
@@ -1974,12 +1974,12 @@
def test_virtual_raw_store_raw_load(self):
ops = """
[i1]
- i0 = call('malloc', 10, descr=raw_malloc_descr)
+ i0 = call_i('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
raw_store(i0, 0, i1, descr=rawarraydescr)
- i2 = raw_load(i0, 0, descr=rawarraydescr)
+ i2 = raw_load_i(i0, 0, descr=rawarraydescr)
i3 = int_add(i1, i2)
- call('free', i0, descr=raw_free_descr)
+ call_n('free', i0, descr=raw_free_descr)
jump(i3)
"""
expected = """
@@ -1992,12 +1992,12 @@
def test_virtual_raw_store_getarrayitem_raw(self):
ops = """
[f1]
- i0 = call('malloc', 16, descr=raw_malloc_descr)
+ i0 = call_i('malloc', 16, descr=raw_malloc_descr)
guard_no_exception() []
raw_store(i0, 8, f1, descr=rawarraydescr_float)
- f2 = getarrayitem_raw(i0, 1, descr=rawarraydescr_float)
+ f2 = getarrayitem_raw_f(i0, 1, descr=rawarraydescr_float)
f3 = float_add(f1, f2)
- call('free', i0, descr=raw_free_descr)
+ call_n('free', i0, descr=raw_free_descr)
jump(f3)
"""
expected = """
@@ -2010,12 +2010,12 @@
def test_virtual_setarrayitem_raw_raw_load(self):
ops = """
[f1]
- i0 = call('malloc', 16, descr=raw_malloc_descr)
+ i0 = call_i('malloc', 16, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i0, 1, f1, descr=rawarraydescr_float)
- f2 = raw_load(i0, 8, descr=rawarraydescr_float)
+ f2 = raw_load_f(i0, 8, descr=rawarraydescr_float)
f3 = float_add(f1, f2)
- call('free', i0, descr=raw_free_descr)
+ call_n('free', i0, descr=raw_free_descr)
jump(f3)
"""
expected = """
@@ -2028,7 +2028,7 @@
def test_virtual_raw_buffer_forced_but_slice_not_forced(self):
ops = """
[f1]
- i0 = call('malloc', 16, descr=raw_malloc_descr)
+ i0 = call_i('malloc', 16, descr=raw_malloc_descr)
guard_no_exception() []
i1 = int_add(i0, 8)
escape_n(i0)
@@ -2037,7 +2037,7 @@
"""
expected = """
[f1]
- i0 = call('malloc', 16, descr=raw_malloc_descr)
+ i0 = call_i('malloc', 16, descr=raw_malloc_descr)
#guard_no_exception() [] # XXX should appear
escape_n(i0)
i1 = int_add(i0, 8)
@@ -2263,14 +2263,18 @@
setfield_gc(p1, i2, descr=valuedescr)
jump(p1, i1, i2)
"""
- expected = """
+ preamble = """
[p1, i1, i2]
setfield_gc(p1, i2, descr=valuedescr)
jump(p1, i1, i2)
"""
+ expected = """
+ [p1, i1, i2]
+ jump(p1, i1, i2)
+ """
# in this case, all setfields are removed, because we can prove
# that in the loop it will always have the same value
- self.optimize_loop(ops, expected)
+ self.optimize_loop(ops, expected, preamble)
def test_duplicate_setfield_1(self):
ops = """
@@ -2326,7 +2330,7 @@
setfield_gc(p1, i1, descr=valuedescr)
#
# some operations on which the above setfield_gc cannot have effect
- i3 = getarrayitem_gc_pure(p3, 1, descr=arraydescr)
+ i3 = getarrayitem_gc_pure_i(p3, 1, descr=arraydescr)
i4 = getarrayitem_gc_i(p3, i3, descr=arraydescr)
i5 = int_add(i3, i4)
setarrayitem_gc(p3, 0, i5, descr=arraydescr)
@@ -2339,7 +2343,7 @@
preamble = """
[p1, i1, i2, p3]
#
- i3 = getarrayitem_gc_pure(p3, 1, descr=arraydescr)
+ i3 = getarrayitem_gc_pure_i(p3, 1, descr=arraydescr)
i4 = getarrayitem_gc_i(p3, i3, descr=arraydescr)
i5 = int_add(i3, i4)
#
@@ -2370,7 +2374,7 @@
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p0, p1, descr=nextdescr)
setfield_raw(i1, i1, descr=valuedescr) # random op with side-effects
- p2 = getfield_gc(p0, descr=nextdescr)
+ p2 = getfield_gc_r(p0, descr=nextdescr)
i2 = getfield_gc_i(p2, descr=valuedescr)
setfield_gc(p0, NULL, descr=nextdescr)
escape_n(i2)
@@ -2410,8 +2414,8 @@
guard_true(i3) []
i4 = int_neg(i2)
setfield_gc(p1, i2, descr=valuedescr)
- i7 = same_as(i2) # This same_as should be killed by backend
- i6 = same_as(i4)
+ i7 = same_as_i(i2) # This same_as should be killed by backend
+ i6 = same_as_i(i4)
jump(p1, i1, i2, i4, i6)
"""
expected = """
@@ -2793,10 +2797,10 @@
[p1]
guard_nonnull(p1) []
guard_class(p1, ConstClass(node_vtable2)) []
- p2 = getfield_gc(p1, descr=nextdescr)
+ p2 = getfield_gc_r(p1, descr=nextdescr)
guard_nonnull(12) []
guard_class(p2, ConstClass(node_vtable)) []
- p3 = getfield_gc(p1, descr=otherdescr)
+ p3 = getfield_gc_r(p1, descr=otherdescr)
guard_nonnull(12) []
guard_class(p3, ConstClass(node_vtable)) []
setfield_gc(p3, p2, descr=otherdescr)
@@ -2811,9 +2815,9 @@
preamble = """
[p1]
guard_nonnull_class(p1, ConstClass(node_vtable2)) []
- p2 = getfield_gc(p1, descr=nextdescr)
+ p2 = getfield_gc_r(p1, descr=nextdescr)
guard_class(p2, ConstClass(node_vtable)) []
- p3 = getfield_gc(p1, descr=otherdescr)
+ p3 = getfield_gc_r(p1, descr=otherdescr)
guard_class(p3, ConstClass(node_vtable)) []
p3a = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p3, p2, descr=otherdescr)
@@ -2842,10 +2846,10 @@
[p1]
guard_nonnull(p1) []
guard_class(p1, ConstClass(node_vtable2)) []
- p2 = getfield_gc(p1, descr=nextdescr)
+ p2 = getfield_gc_r(p1, descr=nextdescr)
guard_nonnull(12) []
guard_class(p2, ConstClass(node_vtable)) []
- p3 = getfield_gc(p1, descr=otherdescr)
+ p3 = getfield_gc_r(p1, descr=otherdescr)
guard_nonnull(12) []
guard_class(p3, ConstClass(node_vtable)) []
p1a = new_with_vtable(ConstClass(node_vtable2))
@@ -2860,9 +2864,9 @@
preamble = """
[p1]
guard_nonnull_class(p1, ConstClass(node_vtable2)) []
- p2 = getfield_gc(p1, descr=nextdescr)
+ p2 = getfield_gc_r(p1, descr=nextdescr)
guard_class(p2, ConstClass(node_vtable)) []
- p3 = getfield_gc(p1, descr=otherdescr)
+ p3 = getfield_gc_r(p1, descr=otherdescr)
guard_class(p3, ConstClass(node_vtable)) []
# p1a = new_with_vtable(ConstClass(node_vtable2))
p3a = new_with_vtable(ConstClass(node_vtable))
@@ -2907,11 +2911,11 @@
ops = """
[p0]
i0 = escape_i()
- i2 = getfield_gc(p0, descr=valuedescr)
+ i2 = getfield_gc_i(p0, descr=valuedescr)
i4 = int_add(i2, 1)
setfield_gc(p0, i4, descr=valuedescr)
guard_true(i0) []
- i6 = getfield_gc(p0, descr=valuedescr)
+ i6 = getfield_gc_i(p0, descr=valuedescr)
i8 = int_sub(i6, 1)
setfield_gc(p0, i8, descr=valuedescr)
escape_n()
@@ -2920,7 +2924,7 @@
expected = """
[p0]
i0 = escape_i()
- i2 = getfield_gc(p0, descr=valuedescr)
+ i2 = getfield_gc_i(p0, descr=valuedescr)
i4 = int_add(i2, 1)
setfield_gc(p0, i4, descr=valuedescr)
guard_true(i0) []
@@ -2954,7 +2958,7 @@
def test_invalid_loop_3(self):
ops = """
[p1]
- p2 = getfield_gc(p1, descr=nextdescr)
+ p2 = getfield_gc_r(p1, descr=nextdescr)
guard_isnull(p2) []
#
p3 = new_with_vtable(ConstClass(node_vtable))
@@ -3092,8 +3096,8 @@
def test_oois_of_itself(self):
ops = """
[p0]
- p1 = getfield_gc(p0, descr=nextdescr)
- p2 = getfield_gc(p0, descr=nextdescr)
+ p1 = getfield_gc_r(p0, descr=nextdescr)
+ p2 = getfield_gc_r(p0, descr=nextdescr)
i1 = ptr_eq(p1, p2)
guard_true(i1) []
i2 = ptr_ne(p1, p2)
@@ -3102,7 +3106,7 @@
"""
preamble = """
[p0]
- p1 = getfield_gc(p0, descr=nextdescr)
+ p1 = getfield_gc_r(p0, descr=nextdescr)
jump(p0)
"""
expected = """
@@ -3245,8 +3249,8 @@
[p8, p11, i24]
p26 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p26, i24, descr=adescr)
- i34 = getfield_gc_pure(p11, descr=valuedescr)
- i35 = getfield_gc_pure(p26, descr=adescr)
+ i34 = getfield_gc_pure_i(p11, descr=valuedescr)
+ i35 = getfield_gc_pure_i(p26, descr=adescr)
i36 = int_add_ovf(i34, i35)
guard_no_overflow() []
jump(p8, p11, i35)
@@ -3260,21 +3264,21 @@
def test_ovf_guard_in_short_preamble2(self):
ops = """
[p8, p11, p12]
- p16 = getfield_gc(p8, descr=valuedescr)
- i17 = getfield_gc(p8, descr=nextdescr)
- i19 = getfield_gc(p16, descr=valuedescr)
+ p16 = getfield_gc_r(p8, descr=valuedescr)
+ i17 = getfield_gc_i(p8, descr=nextdescr)
+ i19 = getfield_gc_i(p16, descr=valuedescr)
i20 = int_ge(i17, i19)
guard_false(i20) []
- i21 = getfield_gc(p16, descr=otherdescr)
- i22 = getfield_gc(p16, descr=nextdescr)
+ i21 = getfield_gc_i(p16, descr=otherdescr)
+ i22 = getfield_gc_i(p16, descr=nextdescr)
i23 = int_mul(i17, i22)
i24 = int_add(i21, i23)
p26 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p26, i24, descr=adescr)
i28 = int_add(i17, 1)
setfield_gc(p8, i28, descr=nextdescr)
- i34 = getfield_gc_pure(p11, descr=valuedescr)
- i35 = getfield_gc_pure(p26, descr=adescr)
+ i34 = getfield_gc_pure_i(p11, descr=valuedescr)
+ i35 = getfield_gc_pure_i(p26, descr=adescr)
guard_nonnull(p12) []
i36 = int_add_ovf(i34, i35)
guard_no_overflow() []
@@ -3286,7 +3290,7 @@
[p8, p11, i24, i39, i19, p16, i21, i34]
i40 = int_ge(i39, i19)
guard_false(i40) []
- i41 = getfield_gc(p16, descr=nextdescr)
+ i41 = getfield_gc_i(p16, descr=nextdescr)
i42 = int_mul(i39, i41)
i43 = int_add(i21, i42)
i44 = int_add(i39, 1)
@@ -3444,17 +3448,17 @@
def test_residual_call_does_not_invalidate_caches(self):
ops = """
[p1, p2]
- i1 = getfield_gc(p1, descr=valuedescr)
- i2 = call(i1, descr=nonwritedescr)
- i3 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
+ i2 = call_i(i1, descr=nonwritedescr)
+ i3 = getfield_gc_i(p1, descr=valuedescr)
escape_n(i1)
escape_n(i3)
jump(p1, p2)
"""
expected = """
[p1, p2]
- i1 = getfield_gc(p1, descr=valuedescr)
- i2 = call(i1, descr=nonwritedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
+ i2 = call_i(i1, descr=nonwritedescr)
escape_n(i1)
escape_n(i1)
jump(p1, p2)
@@ -3464,11 +3468,11 @@
def test_residual_call_invalidate_some_caches(self):
ops = """
[p1, p2]
- i1 = getfield_gc(p1, descr=adescr)
- i2 = getfield_gc(p1, descr=bdescr)
- i3 = call(i1, descr=writeadescr)
- i4 = getfield_gc(p1, descr=adescr)
- i5 = getfield_gc(p1, descr=bdescr)
+ i1 = getfield_gc_i(p1, descr=adescr)
+ i2 = getfield_gc_i(p1, descr=bdescr)
+ i3 = call_i(i1, descr=writeadescr)
+ i4 = getfield_gc_i(p1, descr=adescr)
+ i5 = getfield_gc_i(p1, descr=bdescr)
escape_n(i1)
escape_n(i2)
escape_n(i4)
@@ -3477,10 +3481,10 @@
"""
expected = """
[p1, p2]
- i1 = getfield_gc(p1, descr=adescr)
- i2 = getfield_gc(p1, descr=bdescr)
- i3 = call(i1, descr=writeadescr)
- i4 = getfield_gc(p1, descr=adescr)
+ i1 = getfield_gc_i(p1, descr=adescr)
+ i2 = getfield_gc_i(p1, descr=bdescr)
+ i3 = call_i(i1, descr=writeadescr)
+ i4 = getfield_gc_i(p1, descr=adescr)
escape_n(i1)
escape_n(i2)
escape_n(i4)
@@ -3492,11 +3496,11 @@
def test_residual_call_invalidate_arrays(self):
ops = """
[p1, p2, i1]
- p3 = getarrayitem_gc(p1, 0, descr=arraydescr2)
- p4 = getarrayitem_gc(p2, 1, descr=arraydescr2)
- i3 = call(i1, descr=writeadescr)
- p5 = getarrayitem_gc(p1, 0, descr=arraydescr2)
- p6 = getarrayitem_gc(p2, 1, descr=arraydescr2)
+ p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ p4 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
+ i3 = call_i(i1, descr=writeadescr)
+ p5 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ p6 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
escape_n(p3)
escape_n(p4)
escape_n(p5)
@@ -3505,9 +3509,9 @@
"""
expected = """
[p1, p2, i1]
- p3 = getarrayitem_gc(p1, 0, descr=arraydescr2)
- p4 = getarrayitem_gc(p2, 1, descr=arraydescr2)
- i3 = call(i1, descr=writeadescr)
+ p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ p4 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
+ i3 = call_i(i1, descr=writeadescr)
escape_n(p3)
escape_n(p4)
escape_n(p3)
@@ -3519,12 +3523,12 @@
def test_residual_call_invalidate_some_arrays(self):
ops = """
[p1, p2, i1]
- p3 = getarrayitem_gc(p2, 0, descr=arraydescr2)
- p4 = getarrayitem_gc(p2, 1, descr=arraydescr2)
+ p3 = getarrayitem_gc_r(p2, 0, descr=arraydescr2)
+ p4 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
i2 = getarrayitem_gc_i(p1, 1, descr=arraydescr)
- i3 = call(i1, descr=writearraydescr)
- p5 = getarrayitem_gc(p2, 0, descr=arraydescr2)
- p6 = getarrayitem_gc(p2, 1, descr=arraydescr2)
+ i3 = call_i(i1, descr=writearraydescr)
+ p5 = getarrayitem_gc_r(p2, 0, descr=arraydescr2)
+ p6 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
i4 = getarrayitem_gc_i(p1, 1, descr=arraydescr)
escape_n(p3)
escape_n(p4)
@@ -3536,10 +3540,10 @@
"""
expected = """
[p1, p2, i1]
- p3 = getarrayitem_gc(p2, 0, descr=arraydescr2)
- p4 = getarrayitem_gc(p2, 1, descr=arraydescr2)
+ p3 = getarrayitem_gc_r(p2, 0, descr=arraydescr2)
+ p4 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
i2 = getarrayitem_gc_i(p1, 1, descr=arraydescr)
- i3 = call(i1, descr=writearraydescr)
+ i3 = call_i(i1, descr=writearraydescr)
i4 = getarrayitem_gc_i(p1, 1, descr=arraydescr)
escape_n(p3)
escape_n(p4)
@@ -3556,7 +3560,7 @@
[p1, i1, p2, i2]
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p2, i2, descr=adescr)
- i3 = call(i1, descr=readadescr)
+ i3 = call_i(i1, descr=readadescr)
setfield_gc(p1, i3, descr=valuedescr)
setfield_gc(p2, i3, descr=adescr)
jump(p1, i1, p2, i2)
@@ -3564,7 +3568,7 @@
expected = """
[p1, i1, p2, i2]
setfield_gc(p2, i2, descr=adescr)
- i3 = call(i1, descr=readadescr)
+ i3 = call_i(i1, descr=readadescr)
setfield_gc(p1, i3, descr=valuedescr)
setfield_gc(p2, i3, descr=adescr)
jump(p1, i1, p2, i2)
@@ -4682,11 +4686,11 @@
def test_add_sub_ovf_virtual_unroll(self):
ops = """
[p15]
- i886 = getfield_gc_pure(p15, descr=valuedescr)
+ i886 = getfield_gc_pure_i(p15, descr=valuedescr)
i888 = int_sub_ovf(i886, 1)
guard_no_overflow() []
escape_n(i888)
- i4360 = getfield_gc_pure(p15, descr=valuedescr)
+ i4360 = getfield_gc_pure_i(p15, descr=valuedescr)
i4362 = int_add_ovf(i4360, 1)
guard_no_overflow() []
i4360p = int_sub_ovf(i4362, 1)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -432,6 +432,8 @@
operations + \
[ResOperation(rop.LABEL, jump_args, descr=token)]
start_state = self._do_optimize_loop(preamble, call_pure_results)
+ import pdb
+ pdb.set_trace()
assert preamble.operations[-1].getopnum() == rop.LABEL
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -305,6 +305,8 @@
# Construct jumpargs from the virtual state
original_jumpargs = jumpop.getarglist()[:]
values = [self.getvalue(arg) for arg in jumpop.getarglist()]
+ import pdb
+ pdb.set_trace()
try:
jumpargs = virtual_state.make_inputargs(values, self.optimizer)
except BadVirtualState:
@@ -635,5 +637,7 @@
debug_print(" short boxes")
self.short_boxes.dump(logops)
debug_print(" exported values")
- #self.exported_values.dump(logops)
+ for k, v in self.exported_values.iteritems():
+ debug_print("%s:%s" % (logops.repr_of_resop(k),
+ logops.repr_of_resop(v.box)))
debug_stop("jit-exported-state")
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -421,8 +421,8 @@
class VRawBufferValue(AbstractVArrayValue):
is_about_raw = True
- def __init__(self, cpu, logops, size, keybox, source_op):
- AbstractVirtualValue.__init__(self, keybox, source_op)
+ def __init__(self, cpu, logops, size, source_op):
+ AbstractVirtualValue.__init__(self, source_op)
# note that size is unused, because we assume that the buffer is big
# enough to write/read everything we need. If it's not, it's undefined
# behavior anyway, although in theory we could probably detect such
@@ -467,7 +467,7 @@
itemvalue = self.buffer.values[i]
itembox = itemvalue.force_box(optforce)
op = ResOperation(rop.RAW_STORE,
- [self.box, ConstInt(offset), itembox], None,
+ [self.box, ConstInt(offset), itembox],
descr=descr)
optforce.emit_operation(op)
@@ -484,8 +484,8 @@
class VRawSliceValue(AbstractVirtualValue):
is_about_raw = True
- def __init__(self, rawbuffer_value, offset, keybox, source_op):
- AbstractVirtualValue.__init__(self, keybox, source_op)
+ def __init__(self, rawbuffer_value, offset, source_op):
+ AbstractVirtualValue.__init__(self, source_op)
self.rawbuffer_value = rawbuffer_value
self.offset = offset
@@ -540,15 +540,15 @@
self.make_equal_to(source_op, vvalue)
return vvalue
- def make_virtual_raw_memory(self, size, box, source_op):
+ def make_virtual_raw_memory(self, size, source_op):
logops = self.optimizer.loop.logops
- vvalue = VRawBufferValue(self.optimizer.cpu, logops, size, box, source_op)
- self.make_equal_to(box, vvalue)
+ vvalue = VRawBufferValue(self.optimizer.cpu, logops, size, source_op)
+ self.make_equal_to(source_op, vvalue)
return vvalue
- def make_virtual_raw_slice(self, rawbuffer_value, offset, box, source_op):
- vvalue = VRawSliceValue(rawbuffer_value, offset, box, source_op)
- self.make_equal_to(box, vvalue)
+ def make_virtual_raw_slice(self, rawbuffer_value, offset, source_op):
+ vvalue = VRawSliceValue(rawbuffer_value, offset, source_op)
+ self.make_equal_to(source_op, vvalue)
return vvalue
def optimize_GUARD_NO_EXCEPTION(self, op):
@@ -736,6 +736,7 @@
else:
self.emit_operation(op)
optimize_CALL_R = optimize_CALL_N
+ optimize_CALL_I = optimize_CALL_N
def do_RAW_MALLOC_VARSIZE_CHAR(self, op):
sizebox = self.get_constant_box(op.getarg(1))
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -644,6 +644,7 @@
# op = op.clone(self.memo)
# op.is_source_op = True
if box in self.short_boxes:
+ return # XXX avoid those corner cases
#if op is None:
# xxx
# oldop = self.short_boxes[box]
@@ -659,15 +660,15 @@
#value = self.optimizer.getvalue(box)
#self.optimizer.emit_operation(ResOperation(rop.SAME_AS, [box], newbox))
#self.optimizer.make_equal_to(newbox, value)
- if op is None:
- if self.short_boxes[box] is not box:
- xxx
- else:
- if self.short_boxes[box] is not op:
- if self.short_boxes[box] is None:
- self.short_boxes[box] = op
- else:
- xxx
+ #if op is None:
+ # if self.short_boxes[box] is not box:
+ # xxx
+ #else:
+ # if self.short_boxes[box] is not op:
+ # if self.short_boxes[box] is None:
+ # self.short_boxes[box] = op
+ # else:
+ # xxx
else:
self.short_boxes[box] = op
More information about the pypy-commit
mailing list