[pypy-svn] r37705 - in pypy/branch/jit-virtual-world/pypy/jit/timeshifter: . test
arigo at codespeak.net
arigo at codespeak.net
Thu Feb 1 00:09:25 CET 2007
Author: arigo
Date: Thu Feb 1 00:09:20 2007
New Revision: 37705
Modified:
pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rtimeshift.py
pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rvalue.py
pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_exception.py
pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_portal.py
pypy/branch/jit-virtual-world/pypy/jit/timeshifter/vlist.py
Log:
(arre, pedronis, arigo)
Don't merge jit states with exceptions and jit states without.
Some related minor fixes done while looking at it.
Modified: pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rtimeshift.py (original)
+++ pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rtimeshift.py Thu Feb 1 00:09:20 2007
@@ -761,6 +761,14 @@
#fz_virtualizables = ... set by freeze()
def exactmatch(self, jitstate, outgoingvarboxes, memo):
+ if not memo.force_merge:
+ null1 = self.fz_exc_type_box.is_constant_nullptr()
+ box = jitstate.exc_type_box
+ null2 = (box.is_constant() and
+ not rvalue.ll_getvalue(box, llmemory.Address))
+ if null1 != null2:
+ raise rvalue.DontMerge # a jit-with-exc. and a jit-without-exc.
+
fullmatch = True
if not self.fz_frame.exactmatch(jitstate.frame,
outgoingvarboxes,
Modified: pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rvalue.py
==============================================================================
--- pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rvalue.py (original)
+++ pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rvalue.py Thu Feb 1 00:09:20 2007
@@ -309,6 +309,9 @@
def is_constant_equal(self, box):
return False
+ def is_constant_nullptr(self):
+ return False
+
class FrozenConst(FrozenValue):
@@ -403,6 +406,9 @@
self.gv_const.revealconst(llmemory.Address) ==
box.genvar.revealconst(llmemory.Address))
+ def is_constant_nullptr(self):
+ return not self.gv_const.revealconst(llmemory.Address)
+
def exactmatch(self, box, outgoingvarboxes, memo):
assert isinstance(box, PtrRedBox)
memo.partialdatamatch[box] = None # could do better
@@ -410,7 +416,7 @@
if not memo.force_merge and not match:
from pypy.jit.timeshifter.rcontainer import VirtualContainer
if isinstance(box.content, VirtualContainer):
- raise DontMerge
+ raise DontMerge # XXX recursive data structures?
return match
def unfreeze(self, incomingvarboxes, memo):
@@ -426,7 +432,7 @@
if not memo.force_merge and not match:
from pypy.jit.timeshifter.rcontainer import VirtualContainer
if isinstance(box.content, VirtualContainer):
- raise DontMerge
+ raise DontMerge # XXX recursive data structures?
return match
def unfreeze(self, incomingvarboxes, memo):
@@ -454,7 +460,7 @@
if not memo.force_merge and not match:
from pypy.jit.timeshifter.rcontainer import VirtualContainer
if isinstance(box.content, VirtualContainer):
- raise DontMerge
+ raise DontMerge # XXX recursive data structures?
return match
Modified: pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_exception.py
==============================================================================
--- pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_exception.py (original)
+++ pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_exception.py Thu Feb 1 00:09:20 2007
@@ -122,3 +122,19 @@
self.timeshift_raises(ValueError,
ll_function, [-3], [0], policy=P_OOPSPEC)
+
+ def test_raise_or_return_virtual(self):
+ class A:
+ def __init__(self, n):
+ self.n = n
+ def g(x):
+ if x < 3:
+ raise ValueError
+ return A(x)
+ def ll_function(n):
+ a = g(n)
+ return a.n
+
+ res = self.timeshift(ll_function, [5], [], policy=P_NOVIRTUAL)
+ assert res == 5
+ self.check_insns(malloc=0)
Modified: pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_portal.py
==============================================================================
--- pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_portal.py (original)
+++ pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_portal.py Thu Feb 1 00:09:20 2007
@@ -2,7 +2,7 @@
from pypy.translator.translator import graphof
from pypy.jit.timeshifter.test.test_timeshift import hannotate, getargtypes
from pypy.jit.timeshifter.hrtyper import HintRTyper
-from pypy.jit.timeshifter.test.test_timeshift import P_NOVIRTUAL
+from pypy.jit.timeshifter.test.test_timeshift import P_NOVIRTUAL, StopAtXPolicy
from pypy.jit.timeshifter.test.test_vlist import P_OOPSPEC
from pypy.rpython.llinterp import LLInterpreter
from pypy.objspace.flow.model import checkgraph, summary
@@ -338,11 +338,13 @@
hint(o.__class__, promote=True)
return o.double().get()
- res = self.timeshift_from_portal(ll_function, ll_function, [5], policy=P_NOVIRTUAL)
+ res = self.timeshift_from_portal(ll_function, ll_function, [5],
+ policy=StopAtXPolicy(ll_make))
assert res == 10
self.check_insns(indirect_call=0, malloc=0)
- res = self.timeshift_from_portal(ll_function, ll_function, [0], policy=P_NOVIRTUAL)
+ res = self.timeshift_from_portal(ll_function, ll_function, [0],
+ policy=StopAtXPolicy(ll_make))
assert res == ord('2')
self.check_insns(indirect_call=0, malloc=0)
Modified: pypy/branch/jit-virtual-world/pypy/jit/timeshifter/vlist.py
==============================================================================
--- pypy/branch/jit-virtual-world/pypy/jit/timeshifter/vlist.py (original)
+++ pypy/branch/jit-virtual-world/pypy/jit/timeshifter/vlist.py Thu Feb 1 00:09:20 2007
@@ -3,6 +3,9 @@
from pypy.jit.timeshifter.rcontainer import cachedtype
from pypy.jit.timeshifter import rvalue, rvirtualizable
+from pypy.rpython.lltypesystem import lloperation
+debug_print = lloperation.llop.debug_print
+
class ItemDesc(object):
__metaclass__ = cachedtype
@@ -160,6 +163,7 @@
boxes = self.item_boxes
self.item_boxes = None
+ debug_print(lltype.Void, "FORCE LIST (%d items)" % (len(boxes),))
args_gv = [builder.rgenop.genconst(len(boxes))]
gv_list = builder.genop_call(typedesc.tok_ll_newlist,
typedesc.gv_ll_newlist,
More information about the Pypy-commit
mailing list