[pypy-svn] r24969 - in pypy/dist/pypy/jit: . test
arigo at codespeak.net
arigo at codespeak.net
Fri Mar 24 16:38:46 CET 2006
Author: arigo
Date: Fri Mar 24 16:38:38 2006
New Revision: 24969
Modified:
pypy/dist/pypy/jit/hintannotator.py
pypy/dist/pypy/jit/hintmodel.py
pypy/dist/pypy/jit/hintrtyper.py
pypy/dist/pypy/jit/test/test_hint_timeshift.py
Log:
A (disabled) test about the next possible thing to do: virtual containers
in red variables.
Modified: pypy/dist/pypy/jit/hintannotator.py
==============================================================================
--- pypy/dist/pypy/jit/hintannotator.py (original)
+++ pypy/dist/pypy/jit/hintannotator.py Fri Mar 24 16:38:38 2006
@@ -1,6 +1,7 @@
from pypy.annotation.annrpython import RPythonAnnotator, _registeroperations
from pypy.jit import hintmodel
from pypy.jit.hintbookkeeper import HintBookkeeper
+from pypy.rpython.lltypesystem import lltype
class HintAnnotator(RPythonAnnotator):
@@ -20,13 +21,19 @@
def consider_op_malloc(self, hs_TYPE):
TYPE = hs_TYPE.const
- vstructdef = self.bookkeeper.getvirtualcontainerdef(TYPE)
- return hintmodel.SomeLLAbstractContainer(vstructdef)
+ if getattr(self.policy, 'novirtualcontainer', False):
+ return hintmodel.SomeLLAbstractVariable(lltype.Ptr(TYPE))
+ else:
+ vstructdef = self.bookkeeper.getvirtualcontainerdef(TYPE)
+ return hintmodel.SomeLLAbstractContainer(vstructdef)
def consider_op_malloc_varsize(self, hs_TYPE, hs_length):
TYPE = hs_TYPE.const
- vcontainerdef = self.bookkeeper.getvirtualcontainerdef(TYPE)
- return hintmodel.SomeLLAbstractContainer(vcontainerdef)
+ if getattr(self.policy, 'novirtualcontainer', False):
+ return hintmodel.SomeLLAbstractVariable(lltype.Ptr(TYPE))
+ else:
+ vcontainerdef = self.bookkeeper.getvirtualcontainerdef(TYPE)
+ return hintmodel.SomeLLAbstractContainer(vcontainerdef)
def consider_op_keepalive(self, hs_v):
pass
Modified: pypy/dist/pypy/jit/hintmodel.py
==============================================================================
--- pypy/dist/pypy/jit/hintmodel.py (original)
+++ pypy/dist/pypy/jit/hintmodel.py Fri Mar 24 16:38:38 2006
@@ -90,9 +90,9 @@
for the pygame viewer
"""
if self.eager_concrete:
- return (0,100,0)
+ return (0,100,0) # green
elif self.is_fixed():
- return (50,140,0)
+ return (50,140,0) # green-dark-cyan
else:
return None
annotationcolor = property(annotationcolor)
@@ -101,7 +101,7 @@
pass
class SomeLLAbstractContainer(SomeLLAbstractValue):
- annotationcolor = (0,60,160)
+ annotationcolor = (0,60,160) # blue
def __init__(self, contentdef):
self.contentdef = contentdef
Modified: pypy/dist/pypy/jit/hintrtyper.py
==============================================================================
--- pypy/dist/pypy/jit/hintrtyper.py (original)
+++ pypy/dist/pypy/jit/hintrtyper.py Fri Mar 24 16:38:38 2006
@@ -256,6 +256,14 @@
else:
return hs_c.__class__, "red", hs_c.concretetype
+class __extend__(pairtype(HintTypeSystem, hintmodel.SomeLLAbstractVariable)):
+
+ def rtyper_makerepr((ts, hs_v), hrtyper):
+ return hrtyper.getredrepr(hs_v.concretetype)
+
+ def rtyper_makekey((ts, hs_v), hrtyper):
+ return hs_v.__class__, "red", hs_v.concretetype
+
class __extend__(pairtype(HintTypeSystem, hintmodel.SomeLLAbstractContainer)):
def rtyper_makerepr((ts, hs_container), hrtyper):
Modified: pypy/dist/pypy/jit/test/test_hint_timeshift.py
==============================================================================
--- pypy/dist/pypy/jit/test/test_hint_timeshift.py (original)
+++ pypy/dist/pypy/jit/test/test_hint_timeshift.py Fri Mar 24 16:38:38 2006
@@ -12,9 +12,12 @@
from pypy.annotation import model as annmodel
from pypy.rpython.llinterp import LLInterpreter
from pypy.objspace.flow.model import checkgraph
+from pypy.annotation.policy import AnnotatorPolicy
from pypy.translator.backendopt.inline import auto_inlining
from pypy import conftest
+P_NOVIRTUAL = AnnotatorPolicy()
+P_NOVIRTUAL.novirtualcontainer = True
def hannotate(func, values, policy=None, inline=None):
# build the normal ll graphs for ll_function
@@ -37,8 +40,9 @@
hannotator.translator.view()
return hs, hannotator, rtyper
-def timeshift(ll_function, values, opt_consts=[], inline=None):
- hs, ha, rtyper = hannotate(ll_function, values, inline=inline)
+def timeshift(ll_function, values, opt_consts=[], inline=None, policy=None):
+ hs, ha, rtyper = hannotate(ll_function, values,
+ inline=inline, policy=policy)
htshift = HintTimeshift(ha, rtyper)
htshift.timeshift()
t = rtyper.annotator.translator
@@ -354,3 +358,17 @@
insns, res = timeshift(ll_plus_minus, [s, 0, 2], [0], inline=999)
assert res == ll_plus_minus("+-+", 0, 2)
assert insns == {'int_add': 2, 'int_sub': 1}
+
+def test_red_virtual_container():
+ # this checks that red boxes are able to be virtualized dynamically by
+ # the compiler (the P_NOVIRTUAL policy prevents the hint-annotator from
+ # marking variables in blue)
+ py.test.skip("in-progress")
+ S = lltype.GcStruct('S', ('n', lltype.Signed))
+ def ll_function(n):
+ s = lltype.malloc(S)
+ s.n = n
+ return s.n
+ insns, res = timeshift(ll_function, [42], [], policy=P_NOVIRTUAL)
+ assert res == 42
+ assert insns == {}
More information about the Pypy-commit
mailing list