[pypy-svn] r23530 - in pypy/branch/jit-redboxes-use-classes: . test
arigo at codespeak.net
arigo at codespeak.net
Mon Feb 20 23:23:29 CET 2006
Author: arigo
Date: Mon Feb 20 23:23:28 2006
New Revision: 23530
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:
(pedronis, arigo)
End of the refactoring branch. Will be merged as one check-in, I expect.
See description in the trunk merge shortly.
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 23:23:28 2006
@@ -52,7 +52,7 @@
try:
return self.red_reprs[lowleveltype]
except KeyError:
- r = RedRepr(lowleveltype, self.timeshifter.r_RedBox.lowleveltype)
+ r = RedRepr(lowleveltype, self.timeshifter)
self.red_reprs[lowleveltype] = r
return r
@@ -152,9 +152,12 @@
return hs_c.__class__,
class RedRepr(Repr):
- def __init__(self, original_concretetype, redbox_lowleveltype):
+ def __init__(self, original_concretetype, timeshifter):
+ assert original_concretetype is not lltype.Void, (
+ "cannot make red boxes for the lltype Void")
self.original_concretetype = original_concretetype
- self.lowleveltype = redbox_lowleveltype
+ self.lowleveltype = timeshifter.r_RedBox.lowleveltype
+ self.timeshifter = timeshifter
def get_genop_var(self, v, llops):
return llops.genmixlevelhelpercall(rtimeshift.ll_gvar_from_redbox,
@@ -163,7 +166,9 @@
annmodel.SomePtr(rgenop.CONSTORVAR))
def convert_const(self, ll_value):
- return rtimeshift.ConstRedBox.ll_fromvalue(ll_value)
+ redbox = rtimeshift.ConstRedBox.ll_fromvalue(ll_value)
+ timeshifter = self.timeshifter
+ return timeshifter.annhelper.delayedconst(timeshifter.r_RedBox, redbox)
def residual_values(self, ll_value):
return [ll_value]
@@ -218,26 +223,6 @@
# ____________________________________________________________
-##class SomeJITState(annmodel.SomeObject):
-## pass
-
-##s_JITState = SomeJITState()
-
-##class __extend__(pairtype(HintTypeSystem, SomeJITState)):
-
-## def rtyper_makerepr((ts, hs_j), hrtyper):
-## return jitstate_repr
-
-## def rtyper_makekey((ts, hs_j), hrtyper):
-## return hs_j.__class__,
-
-##class JITStateRepr(Repr):
-## lowleveltype = rtimeshift.STATE_PTR
-
-##jitstate_repr = JITStateRepr()
-
-# ____________________________________________________________
-
def opname2vstr(name):
lls = string_repr.convert_const(name)
return inputconst(string_repr.lowleveltype, lls)
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 23:23:28 2006
@@ -11,38 +11,6 @@
# ___________________________________________________________
-##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)
-
-## 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)
-
-## llgetq = ll_get_queue
-
-## def ll_get_queue_annotation(queustate_s):
-## return s_queue
-
-## llgetq.compute_result_annotation = ll_get_queue_annotation
-
-## def ll_get_queue_specialize(hop):
-## return hop.gendirectcall(_ll_get_queue, hop.args_v[0])
-
-## llgetq.specialize = ll_get_queue_specialize
-
-## return s_queue, QUEUE, ll_get_queue
-
-
class HintTimeshift(object):
def __init__(self, hannotator, rtyper):
@@ -100,51 +68,6 @@
r_instance = self.annhelper.getdelayedrepr(s_instance)
return s_instance, r_instance
-## 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})
-
-## 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
v_jitstate = flowmodel.Variable('jitstate')
@@ -216,7 +139,7 @@
for block in originalblocks:
if block.operations != ():
block_entering_links = entering_links.pop(block)
- before_block = self.insert_before_block(block, block_entering_links)
+ before_block = self.insert_before_block(block, block_entering_links)
self.insert_bookkeeping_enter(block, before_block, len(block_entering_links))
self.insert_bookkeeping_leave_block(block, entering_links)
@@ -314,13 +237,8 @@
TYPES.append(r.original_concretetype)
getrepr = self.rtyper.getrepr
- # XXX factor this out too!
- for i in range(len(boxes_v)):
- boxes_v[i] = llops.convertvar(boxes_v[i], self.r_RedBox,
- self.r_box_list.item_repr)
- v_boxes = rlist.newlist(llops, self.r_box_list, boxes_v)
- c_TYPES = rmodel.inputconst(VARLIST, make_types_const(TYPES))
-
+ v_boxes = self.build_box_list(llops, boxes_v)
+ TYPES_gv = make_types_const(TYPES)
if nentrylinks > 1:
enter_block_logic = self.bookkeeping_enter_for_join
@@ -333,13 +251,18 @@
before_block,
llops,
v_boxes,
- c_TYPES)
-
-
+ TYPES_gv)
+ def build_box_list(self, llops, boxes_v):
+ type_erased_v = [llops.convertvar(v_box, self.r_RedBox,
+ self.r_box_list.item_repr)
+ for v_box in boxes_v]
+ v_boxes = rlist.newlist(llops, self.r_box_list, type_erased_v)
+ return v_boxes
def bookkeeping_enter_simple(self, args_r, newinputargs, before_block, llops, v_boxes,
- c_TYPES):
+ TYPES_gv):
+ c_TYPES = rmodel.inputconst(VARLIST, TYPES_gv)
v_newjitstate = llops.genmixlevelhelpercall(rtimeshift.enter_block,
[self.s_JITState, self.s_box_list,
annmodel.SomePtr(VARLIST)],
@@ -361,7 +284,7 @@
# mapping green values combinations to frozen states for red boxes values
# and generated blocks
def bookkeeping_enter_for_join(self, args_r, newinputargs, before_block, llops, v_boxes,
- c_TYPES):
+ TYPES_gv):
getrepr = self.rtyper.getrepr
items_s = []
key_v = []
@@ -374,33 +297,21 @@
erased_v = llops.convertvar(newvar, r_from, r_to)
key_v.append(erased_v)
-
s_key_tuple = annmodel.SomeTuple(items_s)
-
- s_dict_value = annmodel.SomeTuple([self.s_box_list,
- annmodel.SomePtr(rgenop.BLOCK)])
- s_state_dic = annmodel.SomeDict(dictdef.DictDef(None,
- s_key_tuple,
- s_dict_value
- ))
r_key = getrepr(s_key_tuple)
-
- r_state_dic = getrepr(s_state_dic)
r_key.setup()
-
- r_state_dic.setup()
-
- c_state_dic = rmodel.inputconst(r_state_dic, {})
-
v_key = rtuple.newtuple(llops, r_key, key_v)
-
v_oldjitstate = newinputargs[0]
- v_newjitstate = llops.genmixlevelhelpercall(rtimeshift.retrieve_jitstate_for_merge,
- [s_state_dic, self.s_JITState, s_key_tuple, self.s_box_list,
- annmodel.SomePtr(VARLIST)],
- [c_state_dic, v_oldjitstate, v_key, v_boxes, c_TYPES],
+ cache = {}
+ def merge_point(jitstate, key, boxes):
+ return rtimeshift.retrieve_jitstate_for_merge(cache, jitstate,
+ key, boxes, TYPES_gv)
+
+ v_newjitstate = llops.genmixlevelhelpercall(merge_point,
+ [self.s_JITState, s_key_tuple, self.s_box_list],
+ [v_oldjitstate, v_key, v_boxes],
self.s_JITState)
v_continue = llops.genop('ptr_nonzero', [v_newjitstate], resulttype=lltype.Bool)
@@ -530,9 +441,7 @@
else:
raise RuntimeError('Unsupported boxtype')
- getrepr = self.rtyper.getrepr
-
- v_boxes = rlist.newlist(llops, self.r_box_list, boxes_v)
+ v_boxes = self.build_box_list(llops, boxes_v)
false_exit = [exit for exit in newblock.exits if exit.exitcase is False][0]
exitindex = self.getexitindex(false_exit, inputargs[1:], args_r, entering_links)
c_exitindex = rmodel.inputconst(lltype.Signed, exitindex)
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 23:23:28 2006
@@ -113,39 +113,6 @@
return isinstance(other, AddrRedBox) and self.intvalue == other.adrvalue
-#REDBOX = lltype.GcStruct("redbox", ("genvar", rgenop.CONSTORVAR),
-# ("isvar", lltype.Bool),
-# adtmeths = {
-# 'll_make_for_gvar': ll_make_for_gvar,
-# 'll_make_from_const': ll_make_from_const,
-# 'll_getvalue': ll_getvalue,
-# })
-#
-#REDBOX_PTR = lltype.Ptr(REDBOX)
-#
-#REDBOX_FOR_SIGNED = lltype.GcStruct("signed_redbox",
-# ('basebox', REDBOX),
-# ("value", lltype.Signed))
-#REDBOX_FOR_SIGNED_PTR = lltype.Ptr(REDBOX_FOR_SIGNED)
-#STATE = lltype.GcStruct("jitstate", ("curblock", rgenop.BLOCK),
-# ("curoutgoinglink", rgenop.LINK),
-# ("curvalue", REDBOX_PTR))
-#STATE_PTR = lltype.Ptr(STATE)
-
-
-# ____________________________________________________________
-# ll helpers on boxes
-
-
-#def ll_gvar_from_redbox(jitstate, box, TYPE):
-# if not box.genvar:
-# value = box.ll_getvalue(TYPE)
-# box.genvar = ll_gvar_from_const(jitstate, value)
-# return box.genvar
-
-#def ll_gvar_from_const(jitstate, value):
-# return rgenop.genconst(value)
-
# ____________________________________________________________
# emit ops
@@ -223,10 +190,6 @@
rgenop.constTYPE(RESULT))
return VarRedBox(genvar)
-#def ll_generate_operation(jitstate, opname, args, RESULTTYPE):
-# gvar = rgenop.genop(jitstate.curblock, opname, args, RESULTTYPE)
-# return REDBOX.ll_make_for_gvar(gvar)
-
# ____________________________________________________________
# other jitstate/graph level operations
@@ -251,7 +214,7 @@
break
else:
rgenop.closelink(jitstate.curoutgoinglink, incoming, oldblock)
- return lltype.nullptr(STATE)
+ return None
# Make a more general block
newblock = rgenop.newblock()
@@ -373,6 +336,7 @@
other.curblock = self.curblock
other.curoutgoinglink = self.curoutgoinglink
other.curvalue = self.curvalue
+ return other
def ll_build_jitstate():
jitstate = JITState()
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 23:23:28 2006
@@ -64,7 +64,7 @@
box = llinterp.eval_graph(htshift.ll_var_box_graph, [jitstate,
rgenop.constTYPE(TYPE)])
if i in opt_consts: # XXX what should happen here interface wise is unclear
- box = llinterp.eval_graph(htshift.ll_signed_box_graph, [jitstate, ll_value])
+ box = llinterp.eval_graph(htshift.ll_signed_box_graph, [jitstate, llvalue])
graph1args.append(box)
residual_graph_args.append(llvalue)
startblock = llinterp.eval_graph(htshift.ll_end_setup_jitstate_graph, [jitstate])
@@ -233,7 +233,7 @@
assert insns == {'int_add': 2,
'int_sub': 1}
-def test_simple_struct():
+def INPROGRESS_test_simple_struct():
S = lltype.GcStruct('helloworld', ('hello', lltype.Signed),
('world', lltype.Signed),
hints={'immutable': True})
More information about the Pypy-commit
mailing list