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