[pypy-svn] r52934 - in pypy/branch/jit-hotpath/pypy/jit: rainbow timeshifter
cfbolz at codespeak.net
cfbolz at codespeak.net
Tue Mar 25 18:34:07 CET 2008
Author: cfbolz
Date: Tue Mar 25 18:34:07 2008
New Revision: 52934
Modified:
pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py
pypy/branch/jit-hotpath/pypy/jit/timeshifter/rtimeshift.py
pypy/branch/jit-hotpath/pypy/jit/timeshifter/rvalue.py
Log:
backing out revision 52933. there are failing tests that I overlooked
Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/interpreter.py Tue Mar 25 18:34:07 2008
@@ -341,7 +341,8 @@
self.newjitstate(newjitstate)
if self.frame is not None:
newjitstate = rtimeshift.collect_split(
- self.jitstate, self.frame.pc)
+ self.jitstate, self.frame.pc,
+ self.frame.local_green)
assert newjitstate.frame.bytecode is self.frame.bytecode
assert newjitstate.frame.pc == self.frame.pc
self.newjitstate(newjitstate)
@@ -500,6 +501,7 @@
@arguments("red", "jumptarget")
def opimpl_red_goto_iftrue(self, switchbox, target):
+ # XXX not sure about passing no green vars
decision = rtimeshift.split(self.jitstate, switchbox, self.frame.pc)
if decision:
self.frame.pc = target
@@ -511,6 +513,7 @@
@arguments("exception")
def opimpl_split_raisingop(self, ll_evalue):
+ # XXX not sure about passing no green vars
rtimeshift.split_raisingop(self.jitstate, self.frame.pc, ll_evalue)
@@ -554,7 +557,8 @@
@arguments()
def opimpl_yellow_return(self):
- self.jitstate.save_green_return_value(self.frame.local_green[0])
+ # save the greens to make the return value findable by collect_split
+ rtimeshift.save_greens(self.jitstate, self.frame.local_green)
rtimeshift.save_return(self.jitstate)
return self.dispatch()
@@ -611,7 +615,8 @@
def opimpl_portal_call(self, greenargs, redargs):
self.portalstate.portal_reentry(greenargs, redargs)
newjitstate = rtimeshift.collect_split(
- self.jitstate, self.frame.pc)
+ self.jitstate, self.frame.pc,
+ self.frame.local_green)
assert newjitstate.frame.bytecode is self.frame.bytecode
assert newjitstate.frame.pc == self.frame.pc
self.newjitstate(newjitstate)
@@ -636,13 +641,15 @@
@arguments(returns="green")
def opimpl_yellow_retrieve_result(self):
- return self.jitstate.get_gv_return_value()
+ # XXX all this jitstate.greens business is a bit messy
+ return self.jitstate.greens[0]
@arguments("2byte", returns="red")
def opimpl_yellow_retrieve_result_as_red(self, typeid):
+ # XXX all this jitstate.greens business is a bit messy
redboxcls = self.frame.bytecode.redboxclasses[typeid]
kind = self.frame.bytecode.typekinds[typeid]
- return redboxcls(kind, self.jitstate.get_gv_return_value())
+ return redboxcls(kind, self.jitstate.greens[0])
@arguments("oopspec", "bool", returns="red")
def opimpl_red_oopspec_call_0(self, oopspec, deepfrozen):
Modified: pypy/branch/jit-hotpath/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/timeshifter/rtimeshift.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/timeshifter/rtimeshift.py Tue Mar 25 18:34:07 2008
@@ -407,7 +407,6 @@
jitstate.resumepoint = resumepoint
def split(jitstate, switchredbox, resumepoint, *greens_gv):
- assert not greens_gv
exitgvar = switchredbox.getgenvar(jitstate)
if exitgvar.is_const:
return exitgvar.revealconst(lltype.Bool)
@@ -417,7 +416,6 @@
def split_nonconstantcase(jitstate, exitgvar, resumepoint,
condbox, reverse, greens_gv, ll_evalue=NULL_OBJECT):
- assert not greens_gv
resuming = jitstate.get_resuming()
if resuming is not None and resuming.mergesleft == 0:
node = resuming.path.pop()
@@ -452,7 +450,6 @@
return True
def split_raisingop(jitstate, resumepoint, ll_evalue, *greens_gv):
- assert not greens_gv
exitgvar = jitstate.get_gv_op_raised()
if exitgvar.is_const:
gotexc = exitgvar.revealconst(lltype.Bool)
@@ -463,7 +460,7 @@
if gotexc:
jitstate.residual_ll_exception(ll_evalue)
-def collect_split(jitstate_chain, resumepoint):
+def collect_split(jitstate_chain, resumepoint, greens_gv):
# YYY split to avoid over-specialization
# assumes that the head of the jitstate_chain is ready for writing,
# and all the other jitstates in the chain are paused
@@ -474,7 +471,7 @@
assert isinstance(node, PromotionPathCollectSplit)
for i in range(node.n):
pending = pending.next
- #pending.greens.extend(greens_gv)
+ pending.greens.extend(greens_gv)
if pending.returnbox is not None:
pending.frame.local_boxes.append(getreturnbox(pending))
pending.next = None
@@ -485,7 +482,7 @@
while True:
jitstate = pending
pending = pending.next
- #jitstate.greens.extend(greens_gv) # item 0 is the return value
+ jitstate.greens.extend(greens_gv) # item 0 is the return value
if jitstate.returnbox is not None:
jitstate.frame.local_boxes.append(getreturnbox(jitstate))
jitstate.resumepoint = resumepoint
@@ -538,12 +535,14 @@
jitstate.frame.local_boxes = redboxes
def save_greens(jitstate, greens_gv):
- assert not greens_gv
jitstate.greens = list(greens_gv)
def getlocalbox(jitstate, i):
return jitstate.frame.local_boxes[i]
+def ll_getgreenbox(jitstate, i, T):
+ return jitstate.greens[i].revealconst(T)
+
def getreturnbox(jitstate):
retbox = jitstate.returnbox
jitstate.returnbox = None
@@ -1041,7 +1040,7 @@
class JITState(object):
_attrs_ = """curbuilder frame
exc_type_box exc_value_box
- gv_return_value
+ greens
gv_op_raised
returnbox
promotion_path
@@ -1070,7 +1069,6 @@
if newgreens is None:
newgreens = []
self.greens = newgreens
- self.gv_return_value = None
self.gv_op_raised = None
# XXX can not be a dictionary
@@ -1290,13 +1288,6 @@
self.gv_op_raised = None
return result
- def save_green_return_value(self, gv_result):
- self.gv_return_value = gv_result
-
- def get_gv_return_value(self):
- result = self.gv_return_value
- self.gv_return_value = None
- return result
def start_writing(jitstate=None, prevopen=None):
if jitstate is not prevopen:
Modified: pypy/branch/jit-hotpath/pypy/jit/timeshifter/rvalue.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/timeshifter/rvalue.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/timeshifter/rvalue.py Tue Mar 25 18:34:07 2008
@@ -239,6 +239,8 @@
self.setgenvar_hint(gv_null, known_nonzero=False)
return ok
+ learn_boolvalue = learn_nonzeroness
+
def __repr__(self):
if not self.genvar and self.content is not None:
return '<virtual %s>' % (self.content,)
More information about the Pypy-commit
mailing list