[pypy-svn] r74716 - in pypy/branch/blackhole-improvement/pypy/jit: backend/llgraph metainterp metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Mon May 24 19:09:57 CEST 2010
Author: arigo
Date: Mon May 24 19:09:55 2010
New Revision: 74716
Modified:
pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/llimpl.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/optimizefindnode.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/optimizeopt.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_optimizefindnode.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_optimizeopt.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_resume.py
Log:
General progress.
Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/llimpl.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/llimpl.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/llimpl.py Mon May 24 19:09:55 2010
@@ -74,12 +74,12 @@
'int_eq' : (('int', 'int'), 'bool'),
'int_ne' : (('int', 'int'), 'bool'),
'int_is_true' : (('int',), 'bool'),
+ 'int_is_zero' : (('int',), 'bool'),
'int_neg' : (('int',), 'int'),
'int_invert' : (('int',), 'int'),
'int_add_ovf' : (('int', 'int'), 'int'),
'int_sub_ovf' : (('int', 'int'), 'int'),
'int_mul_ovf' : (('int', 'int'), 'int'),
- 'bool_not' : (('bool',), 'bool'),
'uint_add' : (('int', 'int'), 'int'),
'uint_sub' : (('int', 'int'), 'int'),
'uint_mul' : (('int', 'int'), 'int'),
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py Mon May 24 19:09:55 2010
@@ -217,15 +217,13 @@
# to get the other behavior (i.e. using this __eq__).
if self.__class__ is not other.__class__:
return False
- if isinstance(self.value, Symbolic):
- v1 = "symbolic", id(self.value)
- else:
- v1 = self.value
- if isinstance(other.value, Symbolic):
- v2 = "symbolic", id(other.value)
- else:
- v2 = other.value
- return v1 == v2
+ try:
+ return self.value == other.value
+ except TypeError:
+ if (isinstance(self.value, Symbolic) and
+ isinstance(other.value, Symbolic)):
+ return self.value is other.value
+ raise
def __ne__(self, other):
return not (self == other)
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/optimizefindnode.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/optimizefindnode.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/optimizefindnode.py Mon May 24 19:09:55 2010
@@ -169,8 +169,8 @@
def find_nodes_no_escape(self, op):
pass # for operations that don't escape their arguments
- find_nodes_OOIS = find_nodes_no_escape
- find_nodes_OOISNOT = find_nodes_no_escape
+ find_nodes_PTR_EQ = find_nodes_no_escape
+ find_nodes_PTR_NE = find_nodes_no_escape
find_nodes_INSTANCEOF = find_nodes_no_escape
find_nodes_GUARD_NONNULL = find_nodes_no_escape
find_nodes_GUARD_ISNULL = find_nodes_no_escape
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/optimizeopt.py Mon May 24 19:09:55 2010
@@ -89,7 +89,7 @@
if level == LEVEL_KNOWNCLASS:
return self.known_class
elif level == LEVEL_CONSTANT:
- return cpu.ts.cls_of_box(cpu, self.box)
+ return cpu.ts.cls_of_box(self.box)
else:
return None
@@ -785,10 +785,10 @@
return
self.optimize_default(op)
- def optimize_OOISNOT(self, op):
+ def optimize_PTR_NE(self, op):
self._optimize_oois_ooisnot(op, True)
- def optimize_OOIS(self, op):
+ def optimize_PTR_EQ(self, op):
self._optimize_oois_ooisnot(op, False)
def optimize_VIRTUAL_REF(self, op):
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py Mon May 24 19:09:55 2010
@@ -547,7 +547,7 @@
standard_box = self.metainterp.virtualizable_boxes[-1]
if standard_box is box:
return False
- eqbox = self.metainterp.execute_and_record(rop.OOIS, None,
+ eqbox = self.metainterp.execute_and_record(rop.PTR_EQ, None,
box, standard_box)
eqbox = self.implement_guard_value(pc, eqbox)
isstandard = eqbox.getint()
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py Mon May 24 19:09:55 2010
@@ -19,6 +19,7 @@
__slots__ = ('prev', 'boxes')
def __init__(self, prev, boxes):
+ _assert_order(boxes)
self.prev = prev
self.boxes = boxes
@@ -170,14 +171,7 @@
numb1, liveboxes, v = self.number(values, snapshot.prev)
n = len(liveboxes)-v
boxes = snapshot.boxes
- #
- if not we_are_translated():
- # verifies that 'boxes' are in order: all INTs, then all REFs,
- # and finally all FLOATs.
- _kind2count = {INT: 1, REF: 2, FLOAT: 3}
- kinds = [_kind2count[box.type] for box in boxes]
- assert kinds == sorted(kinds)
- #
+ _assert_order(boxes)
length = len(boxes)
numslength = length + 1 + (length > 0 and boxes[-1].type == FLOAT)
nums = [UNASSIGNED] * numslength
@@ -422,6 +416,14 @@
return self.liveboxes_from_env[box]
return self.liveboxes[box]
+def _assert_order(boxes):
+ if not we_are_translated():
+ # verifies that 'boxes' are in order: all INTs, then all REFs,
+ # and finally all FLOATs.
+ _kind2count = {INT: 1, REF: 2, FLOAT: 3}
+ kinds = [_kind2count[box.type] for box in boxes]
+ assert kinds == sorted(kinds)
+
class AbstractVirtualInfo(object):
#def allocate(self, metainterp):
@@ -497,7 +499,7 @@
# NB. the check for the kind of array elements is moved out of the loop
if arraydescr.is_array_of_pointers():
for i in range(length):
- decoder.setarrayitem_ptr(arraydescr, array, i,
+ decoder.setarrayitem_ref(arraydescr, array, i,
self.fieldnums[i])
elif arraydescr.is_array_of_floats():
for i in range(length):
@@ -632,7 +634,8 @@
return self.metainterp.execute_and_record(rop.NEW, typedescr)
def allocate_array(self, arraydescr, length):
- return metainterp.execute_and_record(rop.NEW_ARRAY, arraydescr, length)
+ return self.metainterp.execute_and_record(rop.NEW_ARRAY,
+ arraydescr, ConstInt(length))
def setfield(self, descr, structbox, fieldnum):
if descr.is_pointer_field():
@@ -656,9 +659,9 @@
def setarrayitem(self, arraydescr, arraybox, index, fieldnum, kind):
itembox = self.decode_box(fieldnum, kind)
- metainterp.execute_and_record(rop.SETARRAYITEM_GC,
- arraydescr, arraybox,
- ConstInt(index), itembox)
+ self.metainterp.execute_and_record(rop.SETARRAYITEM_GC,
+ arraydescr, arraybox,
+ ConstInt(index), itembox)
def decode_int(self, tagged):
return self.decode_box(tagged, INT)
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_optimizefindnode.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_optimizefindnode.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_optimizefindnode.py Mon May 24 19:09:55 2010
@@ -17,6 +17,7 @@
from pypy.jit.metainterp.specnode import VirtualStructSpecNode
from pypy.jit.metainterp.specnode import ConstantSpecNode
from pypy.jit.codewriter.effectinfo import EffectInfo
+from pypy.jit.codewriter.heaptracker import register_known_gctype
from pypy.jit.metainterp.test.oparser import parse
def test_sort_descrs():
@@ -129,13 +130,11 @@
jit_virtual_ref_vtable = vrefinfo.jit_virtual_ref_vtable
jvr_vtable_adr = llmemory.cast_ptr_to_adr(jit_virtual_ref_vtable)
-## cpu.class_sizes = {
-## llmemory.cast_adr_to_int(node_vtable_adr): cpu.sizeof(NODE),
-## llmemory.cast_adr_to_int(node_vtable_adr2): cpu.sizeof(NODE2),
-## llmemory.cast_adr_to_int(u_vtable_adr): cpu.sizeof(U),
-## llmemory.cast_adr_to_int(jvr_vtable_adr): cpu.sizeof(
-## vrefinfo.JIT_VIRTUAL_REF),
-## }
+ register_known_gctype(cpu, node_vtable, NODE)
+ register_known_gctype(cpu, node_vtable2, NODE2)
+ register_known_gctype(cpu, u_vtable, U)
+ register_known_gctype(cpu, jit_virtual_ref_vtable,vrefinfo.JIT_VIRTUAL_REF)
+
namespace = locals()
class OOtypeMixin_xxx_disabled(object):
@@ -220,9 +219,9 @@
#
def constclass(cls_vtable):
if self.type_system == 'lltype':
- XXX
- return ConstAddr(llmemory.cast_ptr_to_adr(cls_vtable),
- self.cpu)
+ return ConstInt(
+ llmemory.cast_adr_to_int(
+ llmemory.cast_ptr_to_adr(cls_vtable)))
else:
return ConstObj(ootype.cast_to_object(cls_vtable))
def constant(value):
@@ -358,7 +357,7 @@
assert not boxp2.fromstart
assert boxp1.knownclsbox is None
- assert boxp2.knownclsbox.value == self.node_vtable_adr
+ assert boxp2.knownclsbox.getaddr() == self.node_vtable_adr
def test_find_nodes_new_2(self):
ops = """
@@ -414,8 +413,8 @@
assert not boxp2.fromstart
assert not boxp3.fromstart
- assert boxp2.knownclsbox.value == self.node_vtable_adr
- assert boxp3.knownclsbox.value == self.node_vtable_adr2
+ assert boxp2.knownclsbox.getaddr() == self.node_vtable_adr
+ assert boxp3.knownclsbox.getaddr() == self.node_vtable_adr2
def test_find_nodes_new_aliasing_0(self):
ops = """
@@ -504,31 +503,31 @@
nextdescr=Virtual(node_vtable,
nextdescr=Virtual(node_vtable)))''')
- def test_find_nodes_oois(self):
+ def test_find_nodes_ptr_eq(self):
ops = """
[p3, p4, p2]
p0 = new_with_vtable(ConstClass(node_vtable))
p1 = new_with_vtable(ConstClass(node_vtable))
guard_nonnull(p0) []
- i3 = ooisnot(p0, NULL)
+ i3 = ptr_ne(p0, NULL)
guard_true(i3) []
- i4 = oois(p0, NULL)
+ i4 = ptr_eq(p0, NULL)
guard_false(i4) []
- i5 = ooisnot(NULL, p0)
+ i5 = ptr_ne(NULL, p0)
guard_true(i5) []
- i6 = oois(NULL, p0)
+ i6 = ptr_eq(NULL, p0)
guard_false(i6) []
- i7 = ooisnot(p0, p1)
+ i7 = ptr_ne(p0, p1)
guard_true(i7) []
- i8 = oois(p0, p1)
+ i8 = ptr_eq(p0, p1)
guard_false(i8) []
- i9 = ooisnot(p0, p2)
+ i9 = ptr_ne(p0, p2)
guard_true(i9) []
- i10 = oois(p0, p2)
+ i10 = ptr_eq(p0, p2)
guard_false(i10) []
- i11 = ooisnot(p2, p1)
+ i11 = ptr_ne(p2, p1)
guard_true(i11) []
- i12 = oois(p2, p1)
+ i12 = ptr_eq(p2, p1)
guard_false(i12) []
jump(p0, p1, p2)
"""
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_optimizeopt.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_optimizeopt.py Mon May 24 19:09:55 2010
@@ -1,8 +1,7 @@
import py
from pypy.rlib.objectmodel import instantiate
-from pypy.jit.metainterp.test.test_resume import MyMetaInterp
from pypy.jit.metainterp.test.test_optimizefindnode import (LLtypeMixin,
- OOtypeMixin,
+ #OOtypeMixin,
BaseTest)
from pypy.jit.metainterp.optimizefindnode import PerfectSpecializationFinder
from pypy.jit.metainterp import optimizeopt
@@ -10,18 +9,17 @@
from pypy.jit.metainterp.optimizeutil import InvalidLoop
from pypy.jit.metainterp.history import AbstractDescr, ConstInt, BoxInt
from pypy.jit.metainterp.jitprof import EmptyProfiler
-from pypy.jit.metainterp import executor, compile, resume
+from pypy.jit.metainterp import executor, compile, resume, history
from pypy.jit.metainterp.resoperation import rop, opname, ResOperation
from pypy.jit.metainterp.test.oparser import pure_parse
-class FakeFrame(object):
- parent_resumedata_snapshot = None
- parent_resumedata_frame_info_list = None
-
- def __init__(self, code="", pc=0, exc_target=-1):
- self.jitcode = code
- self.pc = pc
- self.exception_target = exc_target
+##class FakeFrame(object):
+## parent_resumedata_snapshot = None
+## parent_resumedata_frame_info_list = None
+
+## def __init__(self, code="", pc=0):
+## self.jitcode = code
+## self.pc = pc
class Fake(object):
failargs_limit = 1000
@@ -37,7 +35,7 @@
def test_store_final_boxes_in_guard():
from pypy.jit.metainterp.compile import ResumeGuardDescr
- from pypy.jit.metainterp.resume import tag, TAGBOX
+ from pypy.jit.metainterp.resume import tag, TAGBOX, TYPEBARRIER
b0 = BoxInt()
b1 = BoxInt()
opt = optimizeopt.Optimizer(FakeMetaInterpStaticData(LLtypeMixin.cpu),
@@ -45,20 +43,19 @@
fdescr = ResumeGuardDescr(None, None)
op = ResOperation(rop.GUARD_TRUE, [], None, descr=fdescr)
# setup rd data
- fi0 = resume.FrameInfo(None, FakeFrame("code0", 1, 2))
- fdescr.rd_frame_info_list = resume.FrameInfo(fi0,
- FakeFrame("code1", 3, -1))
+ fi0 = resume.FrameInfo(None, "code0", 11)
+ fdescr.rd_frame_info_list = resume.FrameInfo(fi0, "code1", 33)
snapshot0 = resume.Snapshot(None, [b0])
fdescr.rd_snapshot = resume.Snapshot(snapshot0, [b1])
#
opt.store_final_boxes_in_guard(op)
if op.fail_args == [b0, b1]:
- assert fdescr.rd_numb.nums == [tag(1, TAGBOX)]
- assert fdescr.rd_numb.prev.nums == [tag(0, TAGBOX)]
+ assert fdescr.rd_numb.nums == [tag(1, TAGBOX), TYPEBARRIER]
+ assert fdescr.rd_numb.prev.nums == [tag(0, TAGBOX), TYPEBARRIER]
else:
assert op.fail_args == [b1, b0]
- assert fdescr.rd_numb.nums == [tag(0, TAGBOX)]
- assert fdescr.rd_numb.prev.nums == [tag(1, TAGBOX)]
+ assert fdescr.rd_numb.nums == [tag(0, TAGBOX), TYPEBARRIER]
+ assert fdescr.rd_numb.prev.nums == [tag(1, TAGBOX), TYPEBARRIER]
assert fdescr.rd_virtuals is None
assert fdescr.rd_consts == []
@@ -215,14 +212,18 @@
def __eq__(self, other):
return type(self) is type(other) # xxx obscure
+def _sortboxes(boxes):
+ _kind2count = {history.INT: 1, history.REF: 2, history.FLOAT: 3}
+ return sorted(boxes, key=lambda box: _kind2count[box.type])
+
class BaseTestOptimizeOpt(BaseTest):
def invent_fail_descr(self, fail_args):
if fail_args is None:
return None
descr = Storage()
- descr.rd_frame_info_list = resume.FrameInfo(None, FakeFrame())
- descr.rd_snapshot = resume.Snapshot(None, fail_args)
+ descr.rd_frame_info_list = resume.FrameInfo(None, "code", 11)
+ descr.rd_snapshot = resume.Snapshot(None, _sortboxes(fail_args))
return descr
def assert_equal(self, optimized, expected):
@@ -273,7 +274,7 @@
i0 = int_add(2, 3)
i1 = int_is_true(i0)
guard_true(i1) []
- i2 = bool_not(i1)
+ i2 = int_is_zero(i1)
guard_false(i2) []
guard_value(i0, 5) []
jump()
@@ -289,7 +290,7 @@
from pypy.jit.metainterp.executor import execute_nonspec
from pypy.jit.metainterp.history import BoxInt
import random
- for opnum in range(rop.INT_ADD, rop.BOOL_NOT+1):
+ for opnum in range(rop.INT_ADD, rop.SAME_AS+1):
try:
op = opname[opnum]
except KeyError:
@@ -309,7 +310,7 @@
jump()
""" % (op.lower(), ', '.join(map(str, args)))
argboxes = [BoxInt(a) for a in args]
- expected_value = execute_nonspec(self.cpu, opnum,
+ expected_value = execute_nonspec(self.cpu, None, opnum,
argboxes).getint()
expected = """
[]
@@ -478,13 +479,13 @@
ops = """
[p0]
guard_class(p0, ConstClass(node_vtable)) []
- i0 = ooisnot(p0, NULL)
+ i0 = ptr_ne(p0, NULL)
guard_true(i0) []
- i1 = oois(p0, NULL)
+ i1 = ptr_eq(p0, NULL)
guard_false(i1) []
- i2 = ooisnot(NULL, p0)
+ i2 = ptr_ne(NULL, p0)
guard_true(i0) []
- i3 = oois(NULL, p0)
+ i3 = ptr_eq(NULL, p0)
guard_false(i1) []
jump(p0)
"""
@@ -499,13 +500,13 @@
ops = """
[p0]
setfield_gc(p0, 5, descr=valuedescr) # forces p0 != NULL
- i0 = ooisnot(p0, NULL)
+ i0 = ptr_ne(p0, NULL)
guard_true(i0) []
- i1 = oois(p0, NULL)
+ i1 = ptr_eq(p0, NULL)
guard_false(i1) []
- i2 = ooisnot(NULL, p0)
+ i2 = ptr_ne(NULL, p0)
guard_true(i0) []
- i3 = oois(NULL, p0)
+ i3 = ptr_eq(NULL, p0)
guard_false(i1) []
guard_nonnull(p0) []
jump(p0)
@@ -728,25 +729,25 @@
ops = """
[p0, p1, p2]
guard_nonnull(p0) []
- i3 = ooisnot(p0, NULL)
+ i3 = ptr_ne(p0, NULL)
guard_true(i3) []
- i4 = oois(p0, NULL)
+ i4 = ptr_eq(p0, NULL)
guard_false(i4) []
- i5 = ooisnot(NULL, p0)
+ i5 = ptr_ne(NULL, p0)
guard_true(i5) []
- i6 = oois(NULL, p0)
+ i6 = ptr_eq(NULL, p0)
guard_false(i6) []
- i7 = ooisnot(p0, p1)
+ i7 = ptr_ne(p0, p1)
guard_true(i7) []
- i8 = oois(p0, p1)
+ i8 = ptr_eq(p0, p1)
guard_false(i8) []
- i9 = ooisnot(p0, p2)
+ i9 = ptr_ne(p0, p2)
guard_true(i9) []
- i10 = oois(p0, p2)
+ i10 = ptr_eq(p0, p2)
guard_false(i10) []
- i11 = ooisnot(p2, p1)
+ i11 = ptr_ne(p2, p1)
guard_true(i11) []
- i12 = oois(p2, p1)
+ i12 = ptr_eq(p2, p1)
guard_false(i12) []
jump(p0, p1, p2)
"""
@@ -766,17 +767,17 @@
expected2 = """
[p0, p1, p2]
guard_nonnull(p0) []
- i7 = ooisnot(p0, p1)
+ i7 = ptr_ne(p0, p1)
guard_true(i7) []
- i8 = oois(p0, p1)
+ i8 = ptr_eq(p0, p1)
guard_false(i8) []
- i9 = ooisnot(p0, p2)
+ i9 = ptr_ne(p0, p2)
guard_true(i9) []
- i10 = oois(p0, p2)
+ i10 = ptr_eq(p0, p2)
guard_false(i10) []
- i11 = ooisnot(p2, p1)
+ i11 = ptr_ne(p2, p1)
guard_true(i11) []
- i12 = oois(p2, p1)
+ i12 = ptr_eq(p2, p1)
guard_false(i12) []
jump(p0, p1, p2)
"""
@@ -870,7 +871,7 @@
p0 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p0, NULL, descr=nextdescr)
p2 = getfield_gc(p0, descr=nextdescr)
- i1 = oois(p2, NULL)
+ i1 = ptr_eq(p2, NULL)
jump(i1)
"""
expected = """
@@ -886,7 +887,7 @@
p0 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p0, ConstPtr(myptr), descr=nextdescr)
p2 = getfield_gc(p0, descr=nextdescr)
- i1 = oois(p2, NULL)
+ i1 = ptr_eq(p2, NULL)
jump(i1)
"""
expected = """
@@ -1514,7 +1515,7 @@
"""
expected = """
[p1, i2, i3]
- guard_true(i3) [p1, i2]
+ guard_true(i3) [i2, p1]
i4 = int_neg(i2)
setfield_gc(p1, NULL, descr=nextdescr)
jump(p1, i2, i4)
@@ -1879,7 +1880,7 @@
ops = """
[p1]
guard_class(p1, ConstClass(node_vtable2)) []
- i = ooisnot(ConstPtr(myptr), p1)
+ i = ptr_ne(ConstPtr(myptr), p1)
guard_true(i) []
jump(p1)
"""
@@ -1895,9 +1896,9 @@
[p0]
p1 = getfield_gc(p0, descr=nextdescr)
p2 = getfield_gc(p0, descr=nextdescr)
- i1 = oois(p1, p2)
+ i1 = ptr_eq(p1, p2)
guard_true(i1) []
- i2 = ooisnot(p1, p2)
+ i2 = ptr_ne(p1, p2)
guard_false(i2) []
jump(p0)
"""
@@ -1911,8 +1912,8 @@
def test_remove_duplicate_pure_op(self):
ops = """
[p1, p2]
- i1 = oois(p1, p2)
- i2 = oois(p1, p2)
+ i1 = ptr_eq(p1, p2)
+ i2 = ptr_eq(p1, p2)
i3 = int_add(i1, 1)
i3b = int_is_true(i3)
guard_true(i3b) []
@@ -1927,7 +1928,7 @@
"""
expected = """
[p1, p2]
- i1 = oois(p1, p2)
+ i1 = ptr_eq(p1, p2)
i3 = int_add(i1, 1)
i3b = int_is_true(i3)
guard_true(i3b) []
@@ -1967,7 +1968,7 @@
# typically called twice, before and after optimization
if self.oparse is None:
fdescr.rd_frame_info_list = resume.FrameInfo(None,
- FakeFrame())
+ "code", 11)
fdescr.rd_snapshot = resume.Snapshot(None, fail_args)
self.oparse = oparse
#
@@ -2039,7 +2040,7 @@
for pvar, pfieldname, pfieldvar in pendingfields:
box = oparse.getvar(pvar)
fielddescr = self.namespace[pfieldname.strip()]
- fieldbox = executor.execute(self.cpu,
+ fieldbox = executor.execute(self.cpu, None,
rop.GETFIELD_GC,
fielddescr,
box)
@@ -2057,13 +2058,13 @@
if tag[0] in ('virtual', 'vstruct'):
fieldname, fieldvalue = fieldtext.split('=')
fielddescr = self.namespace[fieldname.strip()]
- fieldbox = executor.execute(self.cpu,
+ fieldbox = executor.execute(self.cpu, None,
rop.GETFIELD_GC,
fielddescr,
resolved)
elif tag[0] == 'varray':
fieldvalue = fieldtext
- fieldbox = executor.execute(self.cpu,
+ fieldbox = executor.execute(self.cpu, None,
rop.GETARRAYITEM_GC,
tag[1],
resolved, ConstInt(index))
@@ -2073,12 +2074,14 @@
index += 1
def check_expanded_fail_descr(self, expectedtext, guard_opnum):
+ from pypy.jit.metainterp.test.test_resume import ResumeDataFakeReader
+ from pypy.jit.metainterp.test.test_resume import MyMetaInterp
guard_op, = [op for op in self.loop.operations if op.is_guard()]
fail_args = guard_op.fail_args
fdescr = guard_op.descr
assert fdescr.guard_opnum == guard_opnum
- reader = resume.ResumeDataReader(fdescr, fail_args,
- MyMetaInterp(self.cpu))
+ reader = ResumeDataFakeReader(fdescr, fail_args,
+ MyMetaInterp(self.cpu))
boxes = reader.consume_boxes()
self._verify_fail_args(boxes, fdescr.oparse, expectedtext)
@@ -2133,7 +2136,7 @@
setfield_gc(p1, p2, descr=nextdescr)
setfield_gc(p2, i2, descr=valuedescr)
setfield_gc(p2, p3, descr=nextdescr)
- guard_true(i1, descr=fdescr) [p1, i3]
+ guard_true(i1, descr=fdescr) [i3, p1]
jump(i2, i1, i3, p3)
"""
expected = """
@@ -2142,15 +2145,14 @@
jump(i2, 1, i3, p3)
"""
self.optimize_loop(ops, 'Not, Not, Not, Not', expected)
- self.check_expanded_fail_descr('''p1, i3
+ self.check_expanded_fail_descr('''i3, p1
where p1 is a node_vtable, valuedescr=1, nextdescr=p2
where p2 is a node_vtable, valuedescr=i2, nextdescr=p3
''', rop.GUARD_TRUE)
def test_expand_fail_4(self):
- for arg in ['p1', 'p1,i2', 'i2,p1', 'p1,p2', 'p2,p1',
- 'p1,p2,i2', 'p1,i2,p2', 'p2,p1,i2',
- 'p2,i2,p1', 'i2,p1,p2', 'i2,p2,p1']:
+ for arg in ['p1', 'i2,p1', 'p1,p2', 'p2,p1',
+ 'i2,p1,p2', 'i2,p2,p1']:
self.make_fail_descr()
ops = """
[i1, i2, i3]
@@ -2161,7 +2163,7 @@
setfield_gc(p1, i2, descr=valuedescr)
setfield_gc(p1, p2, descr=nextdescr)
setfield_gc(p2, i2, descr=valuedescr)
- guard_true(i1, descr=fdescr) [i4, %s, i3]
+ guard_true(i1, descr=fdescr) [i4, i3, %s]
jump(i1, i2, i3)
"""
expected = """
@@ -2170,7 +2172,7 @@
jump(1, i2, i3)
"""
self.optimize_loop(ops % arg, 'Not, Not, Not', expected)
- self.check_expanded_fail_descr('''i3, %s, i3
+ self.check_expanded_fail_descr('''i3, i3, %s
where p1 is a node_vtable, valuedescr=i2, nextdescr=p2
where p2 is a node_vtable, valuedescr=i2''' % arg,
rop.GUARD_TRUE)
@@ -2185,7 +2187,7 @@
setfield_gc(p1, p2, descr=nextdescr)
setfield_gc(p2, i2, descr=valuedescr)
setfield_gc(p2, p1, descr=nextdescr) # a cycle
- guard_true(i1, descr=fdescr) [p1, i3, p2, i4]
+ guard_true(i1, descr=fdescr) [i3, i4, p1, p2]
jump(i2, i1, i3, i4)
"""
expected = """
@@ -2194,7 +2196,7 @@
jump(i2, 1, i3, i4)
"""
self.optimize_loop(ops, 'Not, Not, Not, Not', expected)
- self.check_expanded_fail_descr('''p1, i3, p2, i4
+ self.check_expanded_fail_descr('''i3, i4, p1, p2
where p1 is a node_vtable, valuedescr=i4, nextdescr=p2
where p2 is a node_vtable, valuedescr=i2, nextdescr=p1
''', rop.GUARD_TRUE)
@@ -2813,31 +2815,31 @@
'''
self.optimize_loop(ops, 'Not', expected)
-class TestOOtype(BaseTestOptimizeOpt, OOtypeMixin):
+##class TestOOtype(BaseTestOptimizeOpt, OOtypeMixin):
- def test_instanceof(self):
- ops = """
- [i0]
- p0 = new_with_vtable(ConstClass(node_vtable))
- i1 = instanceof(p0, descr=nodesize)
- jump(i1)
- """
- expected = """
- [i0]
- jump(1)
- """
- self.optimize_loop(ops, 'Not', expected)
+## def test_instanceof(self):
+## ops = """
+## [i0]
+## p0 = new_with_vtable(ConstClass(node_vtable))
+## i1 = instanceof(p0, descr=nodesize)
+## jump(i1)
+## """
+## expected = """
+## [i0]
+## jump(1)
+## """
+## self.optimize_loop(ops, 'Not', expected)
- def test_instanceof_guard_class(self):
- ops = """
- [i0, p0]
- guard_class(p0, ConstClass(node_vtable)) []
- i1 = instanceof(p0, descr=nodesize)
- jump(i1, p0)
- """
- expected = """
- [i0, p0]
- guard_class(p0, ConstClass(node_vtable)) []
- jump(1, p0)
- """
- self.optimize_loop(ops, 'Not, Not', expected)
+## def test_instanceof_guard_class(self):
+## ops = """
+## [i0, p0]
+## guard_class(p0, ConstClass(node_vtable)) []
+## i1 = instanceof(p0, descr=nodesize)
+## jump(i1, p0)
+## """
+## expected = """
+## [i0, p0]
+## guard_class(p0, ConstClass(node_vtable)) []
+## jump(1, p0)
+## """
+## self.optimize_loop(ops, 'Not, Not', expected)
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_resume.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_resume.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_resume.py Mon May 24 19:09:55 2010
@@ -51,7 +51,9 @@
class MyMetaInterp:
_already_allocated_resume_virtuals = None
- def __init__(self, cpu):
+ def __init__(self, cpu=None):
+ if cpu is None:
+ cpu = LLtypeMixin.cpu
self.cpu = cpu
self.trace = []
self.framestack = []
@@ -63,7 +65,7 @@
return frame
def execute_and_record(self, opnum, descr, *argboxes):
- resbox = executor.execute(self.cpu, opnum, descr, *argboxes)
+ resbox = executor.execute(self.cpu, None, opnum, descr, *argboxes)
self.trace.append((opnum,
list(argboxes),
resbox,
@@ -214,12 +216,12 @@
return "<FF %s %s %s>" % (self.jitcode, self.pc, self._env)
def test_Snapshot_create():
- l = ['b0', 'b1']
+ l = [BoxInt(), BoxPtr()]
snap = Snapshot(None, l)
assert snap.prev is None
assert snap.boxes is l
- l1 = ['b3']
+ l1 = [BoxInt()]
snap1 = Snapshot(snap, l1)
assert snap1.prev is snap
assert snap1.boxes is l1
@@ -296,7 +298,7 @@
assert snapshot.prev is None
assert snapshot.boxes == fs[0]._env
- fs[2]._env = [b2, b3]
+ fs[2]._env = [b3, b2]
fs[2].pc = 15
vbs = [b1, b2]
vrs = [b3]
@@ -765,7 +767,7 @@
storage = Storage()
snapshot = Snapshot(None, [b1, ConstInt(1), b1, b2])
snapshot = Snapshot(snapshot, [ConstInt(2), ConstInt(3)])
- snapshot = Snapshot(snapshot, [b1, b2, b3])
+ snapshot = Snapshot(snapshot, [b1, b3, b2])
storage.rd_snapshot = snapshot
storage.rd_frame_info_list = None
return storage
@@ -779,7 +781,7 @@
assert storage.rd_snapshot is None
cpu = MyCPU([])
reader = ResumeDataDirectReader(cpu, storage)
- _next_section(reader, sys.maxint, 2**16, -65)
+ _next_section(reader, sys.maxint, -65, 2**16)
_next_section(reader, 2, 3)
_next_section(reader, sys.maxint, 1, sys.maxint, 2**16)
@@ -801,8 +803,30 @@
assert storage2.rd_consts is memo.consts
+class ResumeDataFakeReader(ResumeDataBoxReader):
+ """Another subclass of AbstractResumeDataReader meant for tests."""
+ def __init__(self, storage, newboxes, metainterp):
+ self.liveboxes = newboxes
+ self.metainterp = metainterp
+ self._prepare(metainterp.cpu, storage)
+
+ def consume_boxes(self):
+ self.lst = []
+ self._prepare_next_section()
+ return self.lst
+
+ def write_an_int(self, count_i, box):
+ assert box.type == INT
+ self.lst.append(box)
+ def write_a_ref(self, count_r, box):
+ assert box.type == REF
+ self.lst.append(box)
+ def write_a_float(self, count_f, box):
+ assert box.type == FLOAT
+ self.lst.append(box)
+
+
def test_virtual_adder_no_op_renaming():
- py.test.skip("XXX rewrite")
b1s, b2s, b3s = [BoxInt(1), BoxInt(2), BoxInt(3)]
storage = make_storage(b1s, b2s, b3s)
memo = ResumeDataLoopMemo(FakeMetaInterpStaticData())
@@ -823,9 +847,9 @@
b1t, b3t = [BoxInt(11), BoxInt(33)]
newboxes = _resume_remap(liveboxes, [b1_2, b3s], b1t, b3t)
metainterp = MyMetaInterp()
- reader = ResumeDataReader(storage, newboxes, metainterp)
+ reader = ResumeDataFakeReader(storage, newboxes, metainterp)
lst = reader.consume_boxes()
- assert lst == [b1t, b1t, b3t]
+ assert lst == [b1t, b3t, b1t]
lst = reader.consume_boxes()
assert lst == [ConstInt(2), ConstInt(3)]
lst = reader.consume_boxes()
@@ -834,7 +858,6 @@
def test_virtual_adder_make_constant():
- py.test.skip("XXX rewrite")
b1s, b2s, b3s = [BoxInt(1), BoxPtr(), BoxInt(3)]
b1s = ConstInt(111)
storage = make_storage(b1s, b2s, b3s)
@@ -844,10 +867,10 @@
b2t, b3t = [BoxPtr(demo55o), BoxInt(33)]
newboxes = _resume_remap(liveboxes, [b2s, b3s], b2t, b3t)
metainterp = MyMetaInterp()
- reader = ResumeDataReader(storage, newboxes, metainterp)
+ reader = ResumeDataFakeReader(storage, newboxes, metainterp)
lst = reader.consume_boxes()
c1t = ConstInt(111)
- assert lst == [c1t, b2t, b3t]
+ assert lst == [c1t, b3t, b2t]
lst = reader.consume_boxes()
assert lst == [ConstInt(2), ConstInt(3)]
lst = reader.consume_boxes()
@@ -856,7 +879,6 @@
def test_virtual_adder_make_virtual():
- py.test.skip("XXX rewrite")
b2s, b3s, b4s, b5s = [BoxPtr(), BoxInt(3), BoxPtr(), BoxPtr()]
c1s = ConstInt(111)
storage = Storage()
@@ -897,10 +919,10 @@
b5s], b3t, b5t)
metainterp = MyMetaInterp()
- reader = ResumeDataReader(storage, newboxes, metainterp)
+ reader = ResumeDataFakeReader(storage, newboxes, metainterp)
assert len(reader.virtuals) == 2
- b2t = reader._decode_box(modifier._gettagged(b2s))
- b4t = reader._decode_box(modifier._gettagged(b4s))
+ b2t = reader.decode_ref(modifier._gettagged(b2s))
+ b4t = reader.decode_ref(modifier._gettagged(b4s))
trace = metainterp.trace
b2new = (rop.NEW_WITH_VTABLE, [ConstAddr(LLtypeMixin.node_vtable_adr,
LLtypeMixin.cpu)],
@@ -930,7 +952,6 @@
assert ptr2.parent.next == ptr
def test_virtual_adder_make_varray():
- py.test.skip("XXX rewrite")
b2s, b4s = [BoxPtr(), BoxInt(4)]
c1s = ConstInt(111)
storage = Storage()
@@ -961,9 +982,9 @@
b4t)
# resume
metainterp = MyMetaInterp()
- reader = ResumeDataReader(storage, newboxes, metainterp)
+ reader = ResumeDataFakeReader(storage, newboxes, metainterp)
assert len(reader.virtuals) == 1
- b2t = reader._decode_box(tag(0, TAGVIRTUAL))
+ b2t = reader.decode_ref(tag(0, TAGVIRTUAL))
trace = metainterp.trace
expected = [
(rop.NEW_ARRAY, [ConstInt(2)], b2t, LLtypeMixin.arraydescr),
@@ -983,7 +1004,6 @@
def test_virtual_adder_make_vstruct():
- py.test.skip("XXX rewrite")
b2s, b4s = [BoxPtr(), BoxPtr()]
c1s = ConstInt(111)
storage = Storage()
@@ -1007,9 +1027,9 @@
#
NULL = ConstPtr.value
metainterp = MyMetaInterp()
- reader = ResumeDataReader(storage, newboxes, metainterp)
+ reader = ResumeDataFakeReader(storage, newboxes, metainterp)
assert len(reader.virtuals) == 1
- b2t = reader._decode_box(tag(0, TAGVIRTUAL))
+ b2t = reader.decode_ref(tag(0, TAGVIRTUAL))
trace = metainterp.trace
expected = [
@@ -1027,7 +1047,6 @@
def test_virtual_adder_pending_fields():
- py.test.skip("XXX rewrite")
b2s, b4s = [BoxPtr(), BoxPtr()]
storage = Storage()
memo = ResumeDataLoopMemo(FakeMetaInterpStaticData())
@@ -1055,7 +1074,7 @@
newboxes = _resume_remap(liveboxes, [b2s, b4s], b2t, b4t)
metainterp = MyMetaInterp()
- reader = ResumeDataReader(storage, newboxes, metainterp)
+ reader = ResumeDataFakeReader(storage, newboxes, metainterp)
assert reader.virtuals is None
trace = metainterp.trace
b2set = (rop.SETFIELD_GC, [b2t, b4t], None, LLtypeMixin.nextdescr)
More information about the Pypy-commit
mailing list