Author: Armin Rigo <[email protected]>
Branch: continulet-jit-3
Changeset: r58094:a1337ae1db6d
Date: 2012-10-13 11:24 +0200
http://bitbucket.org/pypy/pypy/changeset/a1337ae1db6d/

Log:    (fijal, arigo)

        Simplify things by storing jit_frame as a GCREF.

diff --git a/pypy/jit/backend/llgraph/runner.py 
b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -287,41 +287,34 @@
                     assert 0
             #
             jit_frame = self._execute_token(loop_token)
-            jit_frame = lltype.cast_opaque_ptr(JITFRAMEPTR, jit_frame)
             return jit_frame
         #
         return execute_token
 
     def get_latest_descr(self, jitframe):
-        assert lltype.typeOf(jitframe) == JITFRAMEPTR
-        opaqueframe = lltype.cast_opaque_ptr(llmemory.GCREF, jitframe)
-        fail_index = llimpl.frame_descr_index(opaqueframe)
+        assert lltype.typeOf(jitframe) == llmemory.GCREF
+        fail_index = llimpl.frame_descr_index(jitframe)
         return self.get_fail_descr_from_number(fail_index)
 
     def get_latest_value_int(self, jitframe, index):
-        assert lltype.typeOf(jitframe) == JITFRAMEPTR
-        opaqueframe = lltype.cast_opaque_ptr(llmemory.GCREF, jitframe)
-        return llimpl.frame_int_getvalue(opaqueframe, index)
+        assert lltype.typeOf(jitframe) == llmemory.GCREF
+        return llimpl.frame_int_getvalue(jitframe, index)
 
     def get_latest_value_ref(self, jitframe, index):
-        assert lltype.typeOf(jitframe) == JITFRAMEPTR
-        opaqueframe = lltype.cast_opaque_ptr(llmemory.GCREF, jitframe)
-        return llimpl.frame_ptr_getvalue(opaqueframe, index)
+        assert lltype.typeOf(jitframe) == llmemory.GCREF
+        return llimpl.frame_ptr_getvalue(jitframe, index)
 
     def get_latest_value_float(self, jitframe, index):
-        assert lltype.typeOf(jitframe) == JITFRAMEPTR
-        opaqueframe = lltype.cast_opaque_ptr(llmemory.GCREF, jitframe)
-        return llimpl.frame_float_getvalue(opaqueframe, index)
+        assert lltype.typeOf(jitframe) == llmemory.GCREF
+        return llimpl.frame_float_getvalue(jitframe, index)
 
     def get_latest_value_count(self, jitframe):
-        assert lltype.typeOf(jitframe) == JITFRAMEPTR
-        opaqueframe = lltype.cast_opaque_ptr(llmemory.GCREF, jitframe)
-        return llimpl.frame_get_value_count(opaqueframe)
+        assert lltype.typeOf(jitframe) == llmemory.GCREF
+        return llimpl.frame_get_value_count(jitframe)
 
     def grab_exc_value(self, jitframe):
-        assert lltype.typeOf(jitframe) == JITFRAMEPTR
-        opaqueframe = lltype.cast_opaque_ptr(llmemory.GCREF, jitframe)
-        return llimpl.grab_exc_value(opaqueframe)
+        assert lltype.typeOf(jitframe) == llmemory.GCREF
+        return llimpl.grab_exc_value(jitframe)
 
     def redirect_call_assembler(self, oldlooptoken, newlooptoken):
         if we_are_translated():
@@ -600,9 +593,8 @@
         return lltype.malloc(LOOP_RUN_CONTAINER, 0)
 
     def force(self, jitframe):
-        assert lltype.typeOf(jitframe) == JITFRAMEPTR
-        opaqueframe = lltype.cast_opaque_ptr(llmemory.GCREF, jitframe)
-        fail_index = llimpl.force(opaqueframe)
+        assert lltype.typeOf(jitframe) == llmemory.GCREF
+        fail_index = llimpl.force(jitframe)
         return self.get_fail_descr_from_number(fail_index)
 
 
diff --git a/pypy/jit/metainterp/jitframe.py b/pypy/jit/metainterp/jitframe.py
--- a/pypy/jit/metainterp/jitframe.py
+++ b/pypy/jit/metainterp/jitframe.py
@@ -1,6 +1,5 @@
 from pypy.rpython.lltypesystem import lltype, llmemory, rffi
 from pypy.rpython.annlowlevel import llhelper
-from pypy.rpython.lltypesystem.rvirtualizable2 import JITFRAMEPTR
 
 
 _LONGLONGARRAY = lltype.GcArray(lltype.SignedLongLong)
@@ -10,7 +9,7 @@
                ('jf_excvalue', llmemory.GCREF),
                ('jf_nongcvalues', lltype.Ptr(_LONGLONGARRAY)),
                ('jf_gcvalues', lltype.Array(llmemory.GCREF)))
-JITFRAMEPTR.TO.become(JITFRAME)
+JITFRAMEPTR = lltype.Ptr(JITFRAME)
 
 # Constants used for the 'jit_frame' field of virtualizables/virtualrefs:
 #
@@ -27,5 +26,8 @@
 #      to the actual CPU frame allocated by the generated assembler,
 #      as fetched with the 'JIT_FRAME' resoperation.
 #
-TOKEN_NONE            = lltype.nullptr(JITFRAME)
-TOKEN_TRACING_RESCALL = lltype.malloc(JITFRAME, 0, immortal=True, zero=True)
+TOKEN_NONE = lltype.nullptr(llmemory.GCREF.TO)
+
+_JITFRAME_TRACING = lltype.GcStruct('JITFRAME_TRACING')
+TOKEN_TRACING_RESCALL = lltype.cast_opaque_ptr(
+    llmemory.GCREF, lltype.malloc(_JITFRAME_TRACING, immortal=True))
diff --git a/pypy/jit/metainterp/test/test_virtualizable.py 
b/pypy/jit/metainterp/test/test_virtualizable.py
--- a/pypy/jit/metainterp/test/test_virtualizable.py
+++ b/pypy/jit/metainterp/test/test_virtualizable.py
@@ -42,7 +42,7 @@
     XY = lltype.GcStruct(
         'XY',
         ('parent', rclass.OBJECT),
-        ('jit_frame', JITFRAMEPTR),
+        ('jit_frame', llmemory.GCREF),
         ('inst_x', lltype.Signed),
         ('inst_node', lltype.Ptr(LLtypeMixin.NODE)),
         hints = {'virtualizable2_accessor': FieldListAccessor()})
@@ -57,7 +57,7 @@
 
     def setup(self):
         xy = lltype.malloc(self.XY)
-        xy.jit_frame = lltype.nullptr(JITFRAMEPTR.TO)
+        xy.jit_frame = lltype.nullptr(llmemory.GCREF.TO)
         xy.parent.typeptr = self.xy_vtable
         return xy
 
@@ -207,7 +207,7 @@
     XY2 = lltype.GcStruct(
         'XY2',
         ('parent', rclass.OBJECT),
-        ('jit_frame', JITFRAMEPTR),
+        ('jit_frame', llmemory.GCREF),
         ('inst_x', lltype.Signed),
         ('inst_l1', lltype.Ptr(lltype.GcArray(lltype.Signed))),
         ('inst_l2', lltype.Ptr(lltype.GcArray(lltype.Signed))),
@@ -221,7 +221,7 @@
 
     def setup2(self):
         xy2 = lltype.malloc(self.XY2)
-        xy2.jit_frame = lltype.nullptr(JITFRAMEPTR.TO)
+        xy2.jit_frame = lltype.nullptr(llmemory.GCREF.TO)
         xy2.parent.typeptr = self.xy2_vtable
         return xy2
 
@@ -394,7 +394,7 @@
 
     def setup2sub(self):
         xy2 = lltype.malloc(self.XY2SUB)
-        xy2.parent.jit_frame = lltype.nullptr(JITFRAMEPTR.TO)
+        xy2.parent.jit_frame = lltype.nullptr(llmemory.GCREF.TO)
         xy2.parent.parent.typeptr = self.xy2_vtable
         return xy2
 
diff --git a/pypy/jit/metainterp/virtualizable.py 
b/pypy/jit/metainterp/virtualizable.py
--- a/pypy/jit/metainterp/virtualizable.py
+++ b/pypy/jit/metainterp/virtualizable.py
@@ -221,20 +221,20 @@
 
         def clear_jit_frame(virtualizable):
             virtualizable = cast_gcref_to_vtype(virtualizable)
-            if virtualizable.jit_frame:
+            if virtualizable.jit_frame != jitframe.TOKEN_NONE:
                 force_now(virtualizable)
-                assert not virtualizable.jit_frame
+                assert virtualizable.jit_frame == jitframe.TOKEN_NONE
         self.clear_jit_frame = clear_jit_frame
 
         def tracing_before_residual_call(virtualizable):
             virtualizable = cast_gcref_to_vtype(virtualizable)
-            assert not virtualizable.jit_frame
+            assert virtualizable.jit_frame == jitframe.TOKEN_NONE
             virtualizable.jit_frame = jitframe.TOKEN_TRACING_RESCALL
         self.tracing_before_residual_call = tracing_before_residual_call
 
         def tracing_after_residual_call(virtualizable):
             virtualizable = cast_gcref_to_vtype(virtualizable)
-            if virtualizable.jit_frame:
+            if virtualizable.jit_frame != jitframe.TOKEN_NONE:
                 # not modified by the residual call; assert that it is still
                 # set to TOKEN_TRACING_RESCALL and clear it.
                 assert virtualizable.jit_frame == 
jitframe.TOKEN_TRACING_RESCALL
@@ -262,7 +262,7 @@
 
         def is_token_nonnull_gcref(virtualizable):
             virtualizable = cast_gcref_to_vtype(virtualizable)
-            return bool(virtualizable.jit_frame)
+            return virtualizable.jit_frame != jitframe.TOKEN_NONE
         self.is_token_nonnull_gcref = is_token_nonnull_gcref
 
         def reset_token_gcref(virtualizable):
@@ -276,7 +276,7 @@
     def finish(self):
         #
         def force_virtualizable_if_necessary(virtualizable):
-            if virtualizable.jit_frame:
+            if virtualizable.jit_frame != jitframe.TOKEN_NONE:
                 self.force_now(virtualizable)
         force_virtualizable_if_necessary._always_inline_ = True
         #
diff --git a/pypy/rpython/lltypesystem/rvirtualizable2.py 
b/pypy/rpython/lltypesystem/rvirtualizable2.py
--- a/pypy/rpython/lltypesystem/rvirtualizable2.py
+++ b/pypy/rpython/lltypesystem/rvirtualizable2.py
@@ -1,10 +1,9 @@
-from pypy.rpython.rmodel import inputconst
-from pypy.rpython.lltypesystem import lltype, llmemory
-from pypy.rpython.lltypesystem.rclass import InstanceRepr, OBJECTPTR
+from pypy.rpython.lltypesystem import llmemory
+from pypy.rpython.lltypesystem.rclass import InstanceRepr
 from pypy.rpython.rvirtualizable2 import AbstractVirtualizable2InstanceRepr
 
 
-JITFRAMEPTR = lltype.Ptr(lltype.GcForwardReference())
+JITFRAMEPTR = llmemory.GCREF
 
 
 class Virtualizable2InstanceRepr(AbstractVirtualizable2InstanceRepr, 
InstanceRepr):
@@ -14,14 +13,3 @@
         if self.top_of_virtualizable_hierarchy:
             llfields.append(('jit_frame', JITFRAMEPTR))
         return llfields
-
-    #def set_vable(self, llops, vinst, force_cast=False):
-    #    if self.top_of_virtualizable_hierarchy:
-    #        if force_cast:
-    #            vinst = llops.genop('cast_pointer', [vinst], resulttype=self)
-    #        cname = inputconst(lltype.Void, 'vable_token')
-    #        cvalue = inputconst(llmemory.GCREF,
-    #                            lltype.nullptr(llmemory.GCREF.TO))
-    #        llops.genop('setfield', [vinst, cname, cvalue])
-    #    else:
-    #        self.rbase.set_vable(llops, vinst, force_cast=True)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to