[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