[pypy-commit] pypy optresult: port some more tests and fix some issues
fijal
noreply at buildbot.pypy.org
Wed Nov 26 12:41:56 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r74729:b066f43553d4
Date: 2014-11-26 13:41 +0200
http://bitbucket.org/pypy/pypy/changeset/b066f43553d4/
Log: port some more tests and fix some issues
diff --git a/rpython/jit/metainterp/optimizeopt/earlyforce.py b/rpython/jit/metainterp/optimizeopt/earlyforce.py
--- a/rpython/jit/metainterp/optimizeopt/earlyforce.py
+++ b/rpython/jit/metainterp/optimizeopt/earlyforce.py
@@ -4,7 +4,7 @@
def is_raw_free(op, opnum):
- if not op.is_call():
+ if not op.is_real_call():
return False
einfo = op.getdescr().get_extra_info()
return einfo.oopspecindex == EffectInfo.OS_RAW_FREE
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -2452,11 +2452,13 @@
for pvar, pfieldname, pfieldvar in pendingfields:
box = oparse.getvar(pvar)
fielddescr = self.namespace[pfieldname.strip()]
- fieldbox = executor.execute(self.cpu, None,
- rop.GETFIELD_GC,
+ opnum = OpHelpers.getfield_for_descr(fielddescr)
+ fieldval = executor.execute(self.cpu, None,
+ opnum,
fielddescr,
box)
- _variables_equal(fieldbox, pfieldvar, strict=True)
+ _variables_equal(executor.wrap_constant(fieldval), pfieldvar,
+ strict=True)
#
for match in parts:
pvar = match.group(1)
@@ -2476,8 +2478,9 @@
resolved)
elif tag[0] == 'varray':
fieldvalue = fieldtext
- fieldbox = executor.execute(self.cpu, None,
- rop.GETARRAYITEM_GC,
+ #opnum = OpHelpers.getarrayitem_for_descr(fielddescr)
+ fieldval = executor.execute(self.cpu, None,
+ rop.GETARRAYITEM_GC_I,
tag[1],
resolved, ConstInt(index))
else:
@@ -2637,7 +2640,7 @@
setarrayitem_gc(p1, 1, i1, descr=arraydescr)
setarrayitem_gc(p1, 0, 25, descr=arraydescr)
guard_true(i1, descr=fdescr) [p1]
- i2 = getarrayitem_gc(p1, 1, descr=arraydescr)
+ i2 = getarrayitem_gc_i(p1, 1, descr=arraydescr)
jump(i2)
"""
expected = """
@@ -2731,7 +2734,7 @@
jump(p1, i2, i4)
"""
self.optimize_loop(ops, expected)
- self.loop.inputargs[0].value = self.nodebox.value
+ self.loop.inputargs[0].setref_base(self.nodeaddr)
self.check_expanded_fail_descr('''
p1.nextdescr = p2
where p2 is a node_vtable, valuedescr=i2
@@ -2765,7 +2768,7 @@
ops = """
[p1, p2]
i1 = getfield_gc_i(p1, descr=valuedescr)
- i2 = call(i1, descr=nonwritedescr)
+ i2 = call_i(i1, descr=nonwritedescr)
i3 = getfield_gc_i(p1, descr=valuedescr)
escape(i1)
escape(i3)
@@ -2774,7 +2777,7 @@
expected = """
[p1, p2]
i1 = getfield_gc_i(p1, descr=valuedescr)
- i2 = call(i1, descr=nonwritedescr)
+ i2 = call_i(i1, descr=nonwritedescr)
escape(i1)
escape(i1)
jump(p1, p2)
@@ -2786,7 +2789,7 @@
[p1, p2]
i1 = getfield_gc_i(p1, descr=adescr)
i2 = getfield_gc_i(p1, descr=bdescr)
- i3 = call(i1, descr=writeadescr)
+ i3 = call_i(i1, descr=writeadescr)
i4 = getfield_gc_i(p1, descr=adescr)
i5 = getfield_gc_i(p1, descr=bdescr)
escape(i1)
@@ -2799,7 +2802,7 @@
[p1, p2]
i1 = getfield_gc_i(p1, descr=adescr)
i2 = getfield_gc_i(p1, descr=bdescr)
- i3 = call(i1, descr=writeadescr)
+ i3 = call_i(i1, descr=writeadescr)
i4 = getfield_gc_i(p1, descr=adescr)
escape(i1)
escape(i2)
@@ -2812,11 +2815,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(p3)
escape(p4)
escape(p5)
@@ -2825,9 +2828,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(p3)
escape(p4)
escape(p3)
@@ -2839,13 +2842,13 @@
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)
- i2 = getarrayitem_gc(p1, 1, descr=arraydescr)
- i3 = call(i1, descr=writearraydescr)
- p5 = getarrayitem_gc(p2, 0, descr=arraydescr2)
- p6 = getarrayitem_gc(p2, 1, descr=arraydescr2)
- i4 = getarrayitem_gc(p1, 1, descr=arraydescr)
+ 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_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(p3)
escape(p4)
escape(p5)
@@ -2856,11 +2859,11 @@
"""
expected = """
[p1, p2, i1]
- p3 = getarrayitem_gc(p2, 0, descr=arraydescr2)
- p4 = getarrayitem_gc(p2, 1, descr=arraydescr2)
- i2 = getarrayitem_gc(p1, 1, descr=arraydescr)
- i3 = call(i1, descr=writearraydescr)
- i4 = getarrayitem_gc(p1, 1, descr=arraydescr)
+ 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_i(i1, descr=writearraydescr)
+ i4 = getarrayitem_gc_i(p1, 1, descr=arraydescr)
escape(p3)
escape(p4)
escape(p3)
@@ -2876,7 +2879,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)
@@ -2884,7 +2887,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)
@@ -2896,7 +2899,7 @@
[p1, i1, p2, i2]
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p2, i2, descr=adescr)
- i3 = call(i1, descr=writeadescr)
+ i3 = call_i(i1, descr=writeadescr)
setfield_gc(p1, i3, descr=valuedescr)
setfield_gc(p2, i3, descr=adescr)
jump(p1, i1, p2, i2)
@@ -2904,7 +2907,7 @@
expected = """
[p1, i1, p2, i2]
setfield_gc(p2, i2, descr=adescr)
- i3 = call(i1, descr=writeadescr)
+ i3 = call_i(i1, descr=writeadescr)
setfield_gc(p1, i3, descr=valuedescr)
setfield_gc(p2, i3, descr=adescr)
jump(p1, i1, p2, i2)
@@ -2916,7 +2919,7 @@
[p1, i1, p2, i2]
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p2, i2, descr=adescr)
- i3 = call(i1, descr=plaincalldescr)
+ i3 = call_i(i1, descr=plaincalldescr)
setfield_gc(p1, i3, descr=valuedescr)
setfield_gc(p2, i3, descr=adescr)
jump(p1, i1, p2, i2)
@@ -2927,7 +2930,7 @@
ops = '''
[p1, i1]
setfield_gc(p1, i1, descr=valuedescr)
- i3 = call_assembler(i1, descr=asmdescr)
+ i3 = call_assembler_i(i1, descr=asmdescr)
setfield_gc(p1, i3, descr=valuedescr)
jump(p1, i3)
'''
@@ -2938,14 +2941,14 @@
ops = '''
[p1, i1]
setfield_gc(p1, i1, descr=valuedescr)
- i3 = call_pure(p1, descr=plaincalldescr)
+ i3 = call_pure_i(p1, descr=plaincalldescr)
setfield_gc(p1, i3, descr=valuedescr)
jump(p1, i3)
'''
expected = '''
[p1, i1]
setfield_gc(p1, i1, descr=valuedescr)
- i3 = call(p1, descr=plaincalldescr)
+ i3 = call_i(p1, descr=plaincalldescr)
setfield_gc(p1, i3, descr=valuedescr)
jump(p1, i3)
'''
@@ -2963,15 +2966,15 @@
[i0, i1, i2]
escape(i1)
escape(i2)
- i3 = call_pure(123456, 4, 5, 6, descr=plaincalldescr)
- i4 = call_pure(123456, 4, i0, 6, descr=plaincalldescr)
+ i3 = call_pure_i(123456, 4, 5, 6, descr=plaincalldescr)
+ i4 = call_pure_i(123456, 4, i0, 6, descr=plaincalldescr)
jump(i0, i3, i4)
'''
expected = '''
[i0, i1, i2]
escape(i1)
escape(i2)
- i4 = call(123456, 4, i0, 6, descr=plaincalldescr)
+ i4 = call_i(123456, 4, i0, 6, descr=plaincalldescr)
jump(i0, 42, i4)
'''
self.optimize_loop(ops, expected, call_pure_results)
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
@@ -17,7 +17,7 @@
from rpython.jit.metainterp.jitprof import EmptyProfiler
from rpython.jit.metainterp.counter import DeterministicJitCounter
from rpython.config.translationoption import get_combined_translation_config
-from rpython.jit.metainterp.resoperation import rop, ResOperation
+from rpython.jit.metainterp.resoperation import rop, ResOperation, InputArgRef
from rpython.jit.metainterp.optimizeopt.unroll import Inliner
def test_sort_descrs():
@@ -98,12 +98,14 @@
('other', lltype.Ptr(NODE)))
node = lltype.malloc(NODE)
node.parent.typeptr = node_vtable
+ nodeaddr = lltype.cast_opaque_ptr(llmemory.GCREF, node)
+ #nodebox = InputArgRef(lltype.cast_opaque_ptr(llmemory.GCREF, node))
node2 = lltype.malloc(NODE2)
node2.parent.parent.typeptr = node_vtable2
myptr = lltype.cast_opaque_ptr(llmemory.GCREF, node)
myptr2 = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(NODE))
nullptr = lltype.nullptr(llmemory.GCREF.TO)
- #nodebox2 = BoxPtr(lltype.cast_opaque_ptr(llmemory.GCREF, node2))
+ #nodebox2 = InputArgRef(lltype.cast_opaque_ptr(llmemory.GCREF, node2))
nodesize = cpu.sizeof(NODE)
nodesize2 = cpu.sizeof(NODE2)
valuedescr = cpu.fielddescrof(NODE, 'value')
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
@@ -255,7 +255,7 @@
else:
box = None
itemboxes.append(box)
- visitor.register_virtual_fields(self.keybox, itemboxes)
+ visitor.register_virtual_fields(self.source_op, itemboxes)
for i in range(self.getlength()):
itemvalue = self.get_item_value(i)
if itemvalue is not None:
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -194,6 +194,13 @@
def is_call(self):
return rop._CALL_FIRST <= self.getopnum() <= rop._CALL_LAST
+ def is_real_call(self):
+ opnum = self.opnum
+ return (opnum == rop.CALL_I or
+ opnum == rop.CALL_R or
+ opnum == rop.CALL_F or
+ opnum == rop.CALL_N)
+
def is_call_assembler(self):
opnum = self.opnum
return (opnum == rop.CALL_ASSEMBLER_I or
@@ -935,6 +942,14 @@
return rop.GETARRAYITEM_GC_PURE_I
@staticmethod
+ def getarrayitem_for_descr(descr):
+ if descr.is_array_of_pointers():
+ return rop.GETARRAYITEM_GC_R
+ elif descr.is_array_of_floats():
+ return rop.GETARRAYITEM_GC_F
+ return rop.GETARRAYITEM_GC_I
+
+ @staticmethod
def same_as_for_type(tp):
if tp == 'i':
return rop.SAME_AS_I
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -348,8 +348,9 @@
self._register_boxes(fieldboxes)
def register_box(self, box):
- if (not isinstance(box, Const) and box not in self.liveboxes_from_env
- and box not in self.liveboxes):
+ if (box is not None and not isinstance(box, Const)
+ and box not in self.liveboxes_from_env
+ and box not in self.liveboxes):
self.liveboxes[box] = UNASSIGNED
def _register_boxes(self, boxes):
More information about the pypy-commit
mailing list