[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