[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