[pypy-svn] r23510 - in pypy/branch/jit-redboxes-use-classes: . test
arigo at codespeak.net
arigo at codespeak.net
Mon Feb 20 13:08:44 CET 2006
Author: arigo
Date: Mon Feb 20 13:08:43 2006
New Revision: 23510
Modified:
pypy/branch/jit-redboxes-use-classes/hintrtyper.py
pypy/branch/jit-redboxes-use-classes/hinttimeshift.py
pypy/branch/jit-redboxes-use-classes/rtimeshift.py
pypy/branch/jit-redboxes-use-classes/test/test_hint_timeshift.py
Log:
Intermediate check-in.
Modified: pypy/branch/jit-redboxes-use-classes/hintrtyper.py
==============================================================================
--- pypy/branch/jit-redboxes-use-classes/hintrtyper.py (original)
+++ pypy/branch/jit-redboxes-use-classes/hintrtyper.py Mon Feb 20 13:08:43 2006
@@ -215,23 +215,23 @@
# ____________________________________________________________
-class SomeJITState(annmodel.SomeObject):
- pass
+##class SomeJITState(annmodel.SomeObject):
+## pass
-s_JITState = SomeJITState()
+##s_JITState = SomeJITState()
-class __extend__(pairtype(HintTypeSystem, SomeJITState)):
+##class __extend__(pairtype(HintTypeSystem, SomeJITState)):
- def rtyper_makerepr((ts, hs_j), hrtyper):
- return jitstate_repr
+## def rtyper_makerepr((ts, hs_j), hrtyper):
+## return jitstate_repr
- def rtyper_makekey((ts, hs_j), hrtyper):
- return hs_j.__class__,
+## def rtyper_makekey((ts, hs_j), hrtyper):
+## return hs_j.__class__,
-class JITStateRepr(Repr):
- lowleveltype = rtimeshift.STATE_PTR
+##class JITStateRepr(Repr):
+## lowleveltype = rtimeshift.STATE_PTR
-jitstate_repr = JITStateRepr()
+##jitstate_repr = JITStateRepr()
# ____________________________________________________________
Modified: pypy/branch/jit-redboxes-use-classes/hinttimeshift.py
==============================================================================
--- pypy/branch/jit-redboxes-use-classes/hinttimeshift.py (original)
+++ pypy/branch/jit-redboxes-use-classes/hinttimeshift.py Mon Feb 20 13:08:43 2006
@@ -2,45 +2,45 @@
from pypy.objspace.flow import model as flowmodel
from pypy.annotation import model as annmodel
from pypy.annotation import listdef, dictdef
-from pypy.jit.rtimeshift import STATE, STATE_PTR, REDBOX_PTR, VARLIST
+from pypy.jit.rtimeshift import VARLIST, RedBox, VarRedBox, ConstRedBox, JITState
from pypy.jit.rtimeshift import make_types_const
from pypy.rpython import rmodel, rtuple, rlist, rdict, rgenop
from pypy.jit import rtimeshift
-from pypy.jit.hintrtyper import HintRTyper, s_JITState, originalconcretetype
+from pypy.jit.hintrtyper import HintRTyper, originalconcretetype
from pypy.jit.hintrtyper import GreenRepr, RedRepr, HintLowLevelOpList
# ___________________________________________________________
-def define_queue_in_state(rtyper, s_item, fieldname):
- queue_def = listdef.ListDef(None,
- s_item)
- queue_def.resize()
- queue_def.mutate()
+##def define_queue_in_state(rtyper, s_item, fieldname):
+## queue_def = listdef.ListDef(None,
+## s_item)
+## queue_def.resize()
+## queue_def.mutate()
- s_queue = annmodel.SomeList(queue_def)
+## s_queue = annmodel.SomeList(queue_def)
- r_queue = rtyper.getrepr(s_queue)
- r_queue.setup()
- QUEUE = r_queue.lowleveltype
+## r_queue = rtyper.getrepr(s_queue)
+## r_queue.setup()
+## QUEUE = r_queue.lowleveltype
- def ll_get_queue(questate):
- pass
- def _ll_get_queue(questate):
- return getattr(questate, fieldname)
+## def ll_get_queue(questate):
+## pass
+## def _ll_get_queue(questate):
+## return getattr(questate, fieldname)
- llgetq = ll_get_queue
+## llgetq = ll_get_queue
- def ll_get_queue_annotation(queustate_s):
- return s_queue
+## def ll_get_queue_annotation(queustate_s):
+## return s_queue
- llgetq.compute_result_annotation = ll_get_queue_annotation
+## llgetq.compute_result_annotation = ll_get_queue_annotation
- def ll_get_queue_specialize(hop):
- return hop.gendirectcall(_ll_get_queue, hop.args_v[0])
+## def ll_get_queue_specialize(hop):
+## return hop.gendirectcall(_ll_get_queue, hop.args_v[0])
- llgetq.specialize = ll_get_queue_specialize
+## llgetq.specialize = ll_get_queue_specialize
- return s_queue, QUEUE, ll_get_queue
+## return s_queue, QUEUE, ll_get_queue
class HintTimeshift(object):
@@ -51,65 +51,76 @@
self.hrtyper = HintRTyper(hannotator, self)
self.latestexitindex = -1
- getrepr = self.rtyper.getrepr
+ self.s_JITState, self.r_JITState = self.s_r_instanceof(JITState)
+ self.s_RedBox, self.r_RedBox = self.s_r_instanceof(RedBox)
- box_list_def = listdef.ListDef(None, annmodel.SomePtr(REDBOX_PTR))
- box_list_def.mutate()
- self.s_box_list = annmodel.SomeList(box_list_def)
- self.r_box_list = getrepr(self.s_box_list)
- self.r_box_list.setup()
-
- box_accum_def = listdef.ListDef(None, annmodel.SomePtr(REDBOX_PTR))
- box_accum_def.mutate()
- box_accum_def.resize()
- self.s_box_accum = annmodel.SomeList(box_accum_def)
- self.r_box_accum = getrepr(self.s_box_accum)
- self.r_box_accum.setup()
-
- s_return_info = annmodel.SomeTuple([annmodel.SomePtr(rgenop.LINK),
- annmodel.SomePtr(REDBOX_PTR)])
-
- defs = define_queue_in_state(rtyper, s_return_info, 'return_queue')
- s_return_queue, RETURN_QUEUE, ll_get_return_queue = defs
-
- s_split_info = annmodel.SomeTuple([annmodel.SomeInteger(),
- annmodel.SomePtr(STATE_PTR),
- self.s_box_list])
-
- defs = define_queue_in_state(rtyper, s_split_info, 'split_queue')
- s_split_queue, SPLIT_QUEUE, ll_get_split_queue = defs
-
-
- def ll_newstate():
- questate = lltype.malloc(QUESTATE)
- questate.return_queue = RETURN_QUEUE.TO.ll_newlist(0)
- questate.split_queue = SPLIT_QUEUE.TO.ll_newlist(0)
- return questate
-
- def ll_copystate(questate):
- newquestate = lltype.malloc(QUESTATE)
- newquestate.return_queue = questate.return_queue
- newquestate.split_queue = questate.split_queue
- basestate = questate.basestate
- newbasestate = newquestate.basestate
- newbasestate.curblock = basestate.curblock
- newbasestate.curoutgoinglink = basestate.curoutgoinglink
- newbasestate.curvalue = basestate.curvalue
- return newquestate
+ def s_r_instanceof(self, cls, can_be_None=True):
+ classdesc = self.rtyper.annotation.bookkeeper.getdesc(cls)
+ classdef = classdesc.getuniqueclassdef()
+ s_instance = annmodel.SomeInstance(classdef, can_be_None)
+ r_instance = self.rtyper.getrepr(s_instance)
+ # WARNING: don't call rtyper.setup() !!!!
+ return s_instance, r_instance
+
+## getrepr = self.rtyper.getrepr
+
+## box_list_def = listdef.ListDef(None, annmodel.SomePtr(REDBOX_PTR))
+## box_list_def.mutate()
+## self.s_box_list = annmodel.SomeList(box_list_def)
+## self.r_box_list = getrepr(self.s_box_list)
+## self.r_box_list.setup()
+
+## box_accum_def = listdef.ListDef(None, annmodel.SomePtr(REDBOX_PTR))
+## box_accum_def.mutate()
+## box_accum_def.resize()
+## self.s_box_accum = annmodel.SomeList(box_accum_def)
+## self.r_box_accum = getrepr(self.s_box_accum)
+## self.r_box_accum.setup()
+
+## s_return_info = annmodel.SomeTuple([annmodel.SomePtr(rgenop.LINK),
+## annmodel.SomePtr(REDBOX_PTR)])
+
+## defs = define_queue_in_state(rtyper, s_return_info, 'return_queue')
+## s_return_queue, RETURN_QUEUE, ll_get_return_queue = defs
+
+## s_split_info = annmodel.SomeTuple([annmodel.SomeInteger(),
+## annmodel.SomePtr(STATE_PTR),
+## self.s_box_list])
+
+## defs = define_queue_in_state(rtyper, s_split_info, 'split_queue')
+## s_split_queue, SPLIT_QUEUE, ll_get_split_queue = defs
+
+
+## def ll_newstate():
+## questate = lltype.malloc(QUESTATE)
+## questate.return_queue = RETURN_QUEUE.TO.ll_newlist(0)
+## questate.split_queue = SPLIT_QUEUE.TO.ll_newlist(0)
+## return questate
+
+## def ll_copystate(questate):
+## newquestate = lltype.malloc(QUESTATE)
+## newquestate.return_queue = questate.return_queue
+## newquestate.split_queue = questate.split_queue
+## basestate = questate.basestate
+## newbasestate = newquestate.basestate
+## newbasestate.curblock = basestate.curblock
+## newbasestate.curoutgoinglink = basestate.curoutgoinglink
+## newbasestate.curvalue = basestate.curvalue
+## return newquestate
- QUESTATE = lltype.GcStruct("quejitstate",
- ('basestate', STATE),
- ("return_queue", RETURN_QUEUE),
- ("split_queue", SPLIT_QUEUE),
- adtmeths = {
- 'll_get_return_queue': ll_get_return_queue,
- 'll_get_split_queue': ll_get_split_queue,
- 'll_newstate': ll_newstate,
- 'll_copystate': ll_copystate,
- 'll_basestate': lambda questate: questate.basestate})
+## QUESTATE = lltype.GcStruct("quejitstate",
+## ('basestate', STATE),
+## ("return_queue", RETURN_QUEUE),
+## ("split_queue", SPLIT_QUEUE),
+## adtmeths = {
+## 'll_get_return_queue': ll_get_return_queue,
+## 'll_get_split_queue': ll_get_split_queue,
+## 'll_newstate': ll_newstate,
+## 'll_copystate': ll_copystate,
+## 'll_basestate': lambda questate: questate.basestate})
- self.s_return_queue = s_return_queue # for the test
- self.QUESTATE_PTR = lltype.Ptr(QUESTATE)
+## self.s_return_queue = s_return_queue # for the test
+## self.QUESTATE_PTR = lltype.Ptr(QUESTATE)
def getexitindex(self, link, inputargs, args_r, entering_links):
self.latestexitindex += 1
@@ -526,10 +537,14 @@
v_quejitstate = llops.genop('cast_pointer', [v_jitstate],
resulttype=self.QUESTATE_PTR)
-
+
+ RETURN_TYPE = returnblock.inputargs[0].concretetype
+ c_TYPE = rmodel.inputconst(rgenop.CONSTORVAR, rgenop.constTYPE(RETURN_TYPE))
v_next = llops.genmixlevelhelpercall(rtimeshift.dispatch_next,
- [annmodel.SomePtr(self.QUESTATE_PTR), self.s_box_accum],
- [v_quejitstate, v_boxes])
+ [annmodel.SomePtr(self.QUESTATE_PTR),
+ self.s_box_accum,
+ annmodel.SomePtr(rgenop.CONSTORVAR)],
+ [v_quejitstate, v_boxes, c_TYPE])
dispatchblock.operations[:] = llops
Modified: pypy/branch/jit-redboxes-use-classes/rtimeshift.py
==============================================================================
--- pypy/branch/jit-redboxes-use-classes/rtimeshift.py (original)
+++ pypy/branch/jit-redboxes-use-classes/rtimeshift.py Mon Feb 20 13:08:43 2006
@@ -130,10 +130,6 @@
#STATE_PTR = lltype.Ptr(STATE)
-class JITState(object):
- pass
-
-
# ____________________________________________________________
# ll helpers on boxes
@@ -309,7 +305,7 @@
novars = lltype.malloc(VARLIST.TO, 0)
-def dispatch_next(jitstate, outredboxes):
+def dispatch_next(jitstate, outredboxes, RETURN_TYPE):
split_queue = jitstate.split_queue
if split_queue:
exitindex, later_jitstate, redboxes = split_queue.pop()
@@ -319,7 +315,7 @@
for box in redboxes:
outredboxes.append(box)
return exitindex
- return_queue = jitstate.return_queue()
+ return_queue = jitstate.return_queue
first_redbox = return_queue[0][1]
finalblock = rgenop.newblock()
jitstate.curblock = finalblock
@@ -335,8 +331,7 @@
jitstate.curvalue = first_redbox
return -1
- finalvar = rgenop.geninputarg(finalblock,
- rgenop.constTYPE(lltype.Signed)) # XXX we need this as argument
+ finalvar = rgenop.geninputarg(finalblock, RETURN_TYPE)
for link, redbox in return_queue:
genvar = redbox.getgenvar()
rgenop.closelink(link, [genvar], finalblock)
@@ -345,20 +340,31 @@
jitstate.curvalue = VarRedBox(finalvar)
return -1
+# ____________________________________________________________
-def ll_setup_jitstate(EXT_STATE_PTR):
- jitstate = EXT_STATE_PTR.TO.ll_newstate()
- jitstate = lltype.cast_pointer(STATE_PTR, jitstate)
- jitstate.curblock = rgenop.newblock()
- return jitstate
-
-def ll_end_setup_jitstate(jitstate):
- jitstate.curoutgoinglink = rgenop.closeblock1(jitstate.curblock)
-
-def ll_close_jitstate(final_jitstate, return_gvar):
- rgenop.closereturnlink(final_jitstate.curoutgoinglink, return_gvar)
+class JITState(object):
+ # XXX obscure interface
-def ll_input_redbox(jitstate, TYPE):
- genvar = rgenop.geninputarg(jitstate.curblock,
- rgenop.constTYPE(TYPE))
- return REDBOX.ll_make_for_gvar(genvar)
+ def setup(self):
+ self.return_queue = []
+ self.split_queue = []
+ self.curblock = rgenop.newblock()
+ self.curvalue = None
+
+ def end_setup(self):
+ self.curoutgoinglink = rgenop.closeblock1(self.curblock)
+
+ def close(self, return_gvar):
+ rgenop.closereturnlink(self.curoutgoinglink, return_gvar)
+
+ def input_redbox(self, TYPE):
+ genvar = rgenop.geninputarg(self.curblock, rgenop.constTYPE(TYPE))
+ return VarRedBox(genvar)
+
+ def copystate(self):
+ other = JITState()
+ other.return_queue = self.return_queue
+ other.split_queue = self.split_queue
+ other.curblock = self.curblock
+ other.curoutgoinglink = self.curoutgoinglink
+ other.curvalue = self.curvalue
Modified: pypy/branch/jit-redboxes-use-classes/test/test_hint_timeshift.py
==============================================================================
--- pypy/branch/jit-redboxes-use-classes/test/test_hint_timeshift.py (original)
+++ pypy/branch/jit-redboxes-use-classes/test/test_hint_timeshift.py Mon Feb 20 13:08:43 2006
@@ -80,33 +80,33 @@
viewbefore = conftest.option.view)
return insns, res
-def test_ll_get_return_queue():
- t = TranslationContext()
- a = t.buildannotator()
- rtyper = t.buildrtyper()
- rtyper.specialize() # XXX
+##def test_ll_get_return_queue():
+## t = TranslationContext()
+## a = t.buildannotator()
+## rtyper = t.buildrtyper()
+## rtyper.specialize() # XXX
- htshift = HintTimeshift(None, rtyper)
+## htshift = HintTimeshift(None, rtyper)
- questate = htshift.QUESTATE_PTR.TO.ll_newstate()
+## questate = htshift.QUESTATE_PTR.TO.ll_newstate()
- def llf(questate):
- return questate.ll_get_return_queue()
+## def llf(questate):
+## return questate.ll_get_return_queue()
- from pypy.rpython import annlowlevel
+## from pypy.rpython import annlowlevel
- graph = annlowlevel.annotate_mixlevel_helper(rtyper, llf, [
- annmodel.SomePtr(htshift.QUESTATE_PTR)])
+## graph = annlowlevel.annotate_mixlevel_helper(rtyper, llf, [
+## annmodel.SomePtr(htshift.QUESTATE_PTR)])
- s = a.binding(graph.getreturnvar())
+## s = a.binding(graph.getreturnvar())
- assert s == htshift.s_return_queue
+## assert s == htshift.s_return_queue
- rtyper.specialize_more_blocks()
+## rtyper.specialize_more_blocks()
- llinterp = LLInterpreter(rtyper)
- rq = llinterp.eval_graph(graph, [questate])
- assert lltype.typeOf(rq) == rtyper.getrepr(s).lowleveltype
+## llinterp = LLInterpreter(rtyper)
+## rq = llinterp.eval_graph(graph, [questate])
+## assert lltype.typeOf(rq) == rtyper.getrepr(s).lowleveltype
def test_simple_fixed():
More information about the Pypy-commit
mailing list