[pypy-svn] r76139 - in pypy/branch/kill-caninline/pypy/jit/metainterp: . test

arigo at codespeak.net arigo at codespeak.net
Mon Jul 12 14:59:41 CEST 2010


Author: arigo
Date: Mon Jul 12 14:59:40 2010
New Revision: 76139

Modified:
   pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_virtualizable.py
   pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_warmstate.py
   pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_ztranslation.py
   pypy/branch/kill-caninline/pypy/jit/metainterp/warmstate.py
Log:
Fix tests.


Modified: pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_virtualizable.py
==============================================================================
--- pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_virtualizable.py	(original)
+++ pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_virtualizable.py	Mon Jul 12 14:59:40 2010
@@ -1330,11 +1330,9 @@
         def p(pc, code):
             code = hlstr(code)
             return "%s %d %s" % (code, pc, code[pc])
-        def c(pc, code):
-            return "l" not in hlstr(code)
         myjitdriver = JitDriver(greens=['pc', 'code'], reds=['frame'],
                                 virtualizables=["frame"],
-                                get_printable_location=p, can_inline=c)
+                                get_printable_location=p)
         def f(code, frame):
             pc = 0
             while pc < len(code):

Modified: pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_warmstate.py
==============================================================================
--- pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_warmstate.py	(original)
+++ pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_warmstate.py	Mon Jul 12 14:59:40 2010
@@ -61,12 +61,14 @@
         _green_args_spec = [lltype.Signed, lltype.Float]
     state = WarmEnterState(None, FakeJitDriverSD())
     get_jitcell = state._make_jitcell_getter_default()
-    cell1 = get_jitcell(42, 42.5)
+    cell1 = get_jitcell(True, 42, 42.5)
     assert isinstance(cell1, JitCell)
-    cell2 = get_jitcell(42, 42.5)
+    cell2 = get_jitcell(True, 42, 42.5)
     assert cell1 is cell2
-    cell3 = get_jitcell(41, 42.5)
-    cell4 = get_jitcell(42, 0.25)
+    cell3 = get_jitcell(True, 41, 42.5)
+    assert get_jitcell(False, 42, 0.25) is None
+    cell4 = get_jitcell(True, 42, 0.25)
+    assert get_jitcell(False, 42, 0.25) is cell4
     assert cell1 is not cell3 is not cell4 is not cell1
 
 def test_make_jitcell_getter():
@@ -75,8 +77,8 @@
         _get_jitcell_at_ptr = None
     state = WarmEnterState(None, FakeJitDriverSD())
     get_jitcell = state.make_jitcell_getter()
-    cell1 = get_jitcell(1.75)
-    cell2 = get_jitcell(1.75)
+    cell1 = get_jitcell(True, 1.75)
+    cell2 = get_jitcell(True, 1.75)
     assert cell1 is cell2
     assert get_jitcell is state.make_jitcell_getter()
 
@@ -103,14 +105,16 @@
     #
     state = WarmEnterState(FakeWarmRunnerDesc(), FakeJitDriverSD())
     get_jitcell = state._make_jitcell_getter_custom()
-    cell1 = get_jitcell(5, 42.5)
+    cell1 = get_jitcell(True, 5, 42.5)
     assert isinstance(cell1, JitCell)
     assert cell1.x == 5
     assert cell1.y == 42.5
-    cell2 = get_jitcell(5, 42.5)
+    cell2 = get_jitcell(True, 5, 42.5)
     assert cell2 is cell1
-    cell3 = get_jitcell(41, 42.5)
-    cell4 = get_jitcell(42, 0.25)
+    cell3 = get_jitcell(True, 41, 42.5)
+    assert get_jitcell(False, 42, 0.25) is None
+    cell4 = get_jitcell(True, 42, 0.25)
+    assert get_jitcell(False, 42, 0.25) is cell4
     assert cell1 is not cell3 is not cell4 is not cell1
 
 def test_make_set_future_values():
@@ -153,52 +157,25 @@
     state.attach_unoptimized_bridge_from_interp([ConstInt(5),
                                                  ConstFloat(2.25)],
                                                 "entry loop token")
-    cell1 = get_jitcell(5, 2.25)
+    cell1 = get_jitcell(True, 5, 2.25)
     assert cell1.counter < 0
     assert cell1.entry_loop_token == "entry loop token"
 
 def test_make_jitdriver_callbacks_1():
     class FakeJitDriverSD:
         _green_args_spec = [lltype.Signed, lltype.Float]
-        _can_inline_ptr = None
         _get_printable_location_ptr = None
         _confirm_enter_jit_ptr = None
     class FakeCell:
         dont_trace_here = False
     state = WarmEnterState(None, FakeJitDriverSD())
-    def jit_getter(*args):
+    def jit_getter(build, *args):
         return FakeCell()
     state.jit_getter = jit_getter
     state.make_jitdriver_callbacks()
-    res = state.can_inline_callable([ConstInt(5), ConstFloat(42.5)])
-    assert res is True
     res = state.get_location_str([ConstInt(5), ConstFloat(42.5)])
     assert res == '(no jitdriver.get_printable_location!)'
 
-def test_make_jitdriver_callbacks_2():
-    def can_inline(x, y):
-        assert x == 5
-        assert y == 42.5
-        return False
-    CAN_INLINE = lltype.Ptr(lltype.FuncType([lltype.Signed, lltype.Float],
-                                            lltype.Bool))
-    class FakeCell:
-        dont_trace_here = False
-    class FakeWarmRunnerDesc:
-        rtyper = None
-    class FakeJitDriverSD:
-        _green_args_spec = [lltype.Signed, lltype.Float]
-        _can_inline_ptr = llhelper(CAN_INLINE, can_inline)
-        _get_printable_location_ptr = None
-        _confirm_enter_jit_ptr = None
-    state = WarmEnterState(FakeWarmRunnerDesc(), FakeJitDriverSD())
-    def jit_getter(*args):
-        return FakeCell()
-    state.jit_getter = jit_getter
-    state.make_jitdriver_callbacks()
-    res = state.can_inline_callable([ConstInt(5), ConstFloat(42.5)])
-    assert res is False
-
 def test_make_jitdriver_callbacks_3():
     def get_location(x, y):
         assert x == 5
@@ -210,7 +187,6 @@
         rtyper = None
     class FakeJitDriverSD:
         _green_args_spec = [lltype.Signed, lltype.Float]
-        _can_inline_ptr = None
         _get_printable_location_ptr = llhelper(GET_LOCATION, get_location)
         _confirm_enter_jit_ptr = None
         _get_jitcell_at_ptr = None
@@ -231,7 +207,6 @@
         rtyper = None
     class FakeJitDriverSD:
         _green_args_spec = [lltype.Signed, lltype.Float]
-        _can_inline_ptr = None
         _get_printable_location_ptr = None
         _confirm_enter_jit_ptr = llhelper(ENTER_JIT, confirm_enter_jit)
         _get_jitcell_at_ptr = None

Modified: pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_ztranslation.py
==============================================================================
--- pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_ztranslation.py	(original)
+++ pypy/branch/kill-caninline/pypy/jit/metainterp/test/test_ztranslation.py	Mon Jul 12 14:59:40 2010
@@ -37,15 +37,12 @@
             return jitcellcache.entry
         def get_printable_location():
             return '(hello world)'
-        def can_inline():
-            return False
 
         jitdriver = JitDriver(greens = [], reds = ['total', 'frame'],
                               virtualizables = ['frame'],
                               get_jitcell_at=get_jitcell_at,
                               set_jitcell_at=set_jitcell_at,
-                              get_printable_location=get_printable_location,
-                              can_inline=can_inline)
+                              get_printable_location=get_printable_location)
         def f(i):
             for param in unroll_parameters:
                 defl = PARAMETERS[param]
@@ -63,8 +60,7 @@
                 frame.i -= 1
             return total * 10
         #
-        myjitdriver2 = JitDriver(greens = ['g'], reds = ['m', 'x'],
-                                 can_inline = lambda *args: False)
+        myjitdriver2 = JitDriver(greens = ['g'], reds = ['m', 'x'])
         def f2(g, m, x):
             while m > 0:
                 myjitdriver2.can_enter_jit(g=g, m=m, x=x)

Modified: pypy/branch/kill-caninline/pypy/jit/metainterp/warmstate.py
==============================================================================
--- pypy/branch/kill-caninline/pypy/jit/metainterp/warmstate.py	(original)
+++ pypy/branch/kill-caninline/pypy/jit/metainterp/warmstate.py	Mon Jul 12 14:59:40 2010
@@ -232,7 +232,7 @@
 
             # look for the cell corresponding to the current greenargs
             greenargs = args[:num_green_args]
-            cell = get_jitcell(*greenargs)
+            cell = get_jitcell(True, *greenargs)
 
             if cell.counter >= 0:
                 # update the profiling counter
@@ -316,17 +316,16 @@
             return self.jit_getter
         #
         if self.jitdriver_sd._get_jitcell_at_ptr is None:
-            jit_getter_maybe, jit_getter = self._make_jitcell_getter_default()
+            jit_getter = self._make_jitcell_getter_default()
         else:
-            jit_getter_maybe, jit_getter = self._make_jitcell_getter_custom()
+            jit_getter = self._make_jitcell_getter_custom()
         #
         unwrap_greenkey = self.make_unwrap_greenkey()
         #
         def jit_cell_at_key(greenkey):
             greenargs = unwrap_greenkey(greenkey)
-            return jit_getter(*greenargs)
+            return jit_getter(True, *greenargs)
         self.jit_cell_at_key = jit_cell_at_key
-        self.jit_getter_maybe = jit_getter_maybe
         self.jit_getter = jit_getter
         #
         return jit_getter
@@ -356,16 +355,16 @@
         #
         jitcell_dict = r_dict(comparekey, hashkey)
         #
-        def get_jitcell(*greenargs):
-            return jitcell_dict.get(greenargs, None)
-        def get_or_build_jitcell(*greenargs):
+        def get_jitcell(build, *greenargs):
             try:
                 cell = jitcell_dict[greenargs]
             except KeyError:
+                if not build:
+                    return None
                 cell = JitCell()
                 jitcell_dict[greenargs] = cell
             return cell
-        return get_jitcell, get_or_build_jitcell
+        return get_jitcell
 
     def _make_jitcell_getter_custom(self):
         "NOT_RPYTHON"
@@ -374,47 +373,47 @@
         set_jitcell_at_ptr = self.jitdriver_sd._set_jitcell_at_ptr
         lltohlhack = {}
         #
-        def get_jitcell(*greenargs):
+        def get_jitcell(build, *greenargs):
             fn = support.maybe_on_top_of_llinterp(rtyper, get_jitcell_at_ptr)
             cellref = fn(*greenargs)
             # <hacks>
             if we_are_translated():
                 BASEJITCELL = lltype.typeOf(cellref)
                 cell = cast_base_ptr_to_instance(JitCell, cellref)
-            elif isinstance(cellref, (BaseJitCell, type(None))):
-                BASEJITCELL = None
-                cell = cellref
             else:
-                BASEJITCELL = lltype.typeOf(cellref)
-                if cellref:
-                    cell = lltohlhack[rtyper.type_system.deref(cellref)]
+                if isinstance(cellref, (BaseJitCell, type(None))):
+                    BASEJITCELL = None
+                    cell = cellref
                 else:
-                    cell = None
-            # </hacks>
-            return cell
-        def get_or_build_jitcell(*greenargs):
-            cell = get_jitcell_or_none(greenargs)
+                    BASEJITCELL = lltype.typeOf(cellref)
+                    if cellref:
+                        cell = lltohlhack[rtyper.type_system.deref(cellref)]
+                    else:
+                        cell = None
+            if not build:
+                return cell
             if cell is None:
                 cell = JitCell()
                 # <hacks>
                 if we_are_translated():
                     cellref = cast_object_to_ptr(BASEJITCELL, cell)
-                elif BASEJITCELL is None:
-                    cellref = cell
                 else:
-                    if isinstance(BASEJITCELL, lltype.Ptr):
-                        cellref = lltype.malloc(BASEJITCELL.TO)
-                    elif isinstance(BASEJITCELL, ootype.Instance):
-                        cellref = ootype.new(BASEJITCELL)
+                    if BASEJITCELL is None:
+                        cellref = cell
                     else:
-                        assert False, "no clue"
-                    lltohlhack[rtyper.type_system.deref(cellref)] = cell
+                        if isinstance(BASEJITCELL, lltype.Ptr):
+                            cellref = lltype.malloc(BASEJITCELL.TO)
+                        elif isinstance(BASEJITCELL, ootype.Instance):
+                            cellref = ootype.new(BASEJITCELL)
+                        else:
+                            assert False, "no clue"
+                        lltohlhack[rtyper.type_system.deref(cellref)] = cell
                 # </hacks>
                 fn = support.maybe_on_top_of_llinterp(rtyper,
                                                       set_jitcell_at_ptr)
                 fn(cellref, *greenargs)
             return cell
-        return get_jitcell, get_or_build_jitcell
+        return get_jitcell
 
     # ----------
 
@@ -475,11 +474,10 @@
             return
         #
         unwrap_greenkey = self.make_unwrap_greenkey()
-        self.make_jitcell_getter()
-        jit_getter_maybe = self.jit_getter_maybe
+        jit_getter = self.make_jitcell_getter()
 
         def can_inline_greenargs(*greenargs):
-            cell = jit_getter_maybe(*greenargs)
+            cell = jit_getter(False, *greenargs)
             if cell is not None and cell.dont_trace_here:
                 return False
             return True
@@ -491,7 +489,7 @@
 
         def get_assembler_token(greenkey):
             greenargs = unwrap_greenkey(greenkey)
-            cell = jit_getter_maybe(*greenargs)
+            cell = jit_getter(False, *greenargs)
             if cell is None or cell.counter >= 0:
                 return None
             return cell.entry_loop_token



More information about the Pypy-commit mailing list