[pypy-svn] r34807 - in pypy/dist/pypy/jit/hintannotator: . test

arigo at codespeak.net arigo at codespeak.net
Mon Nov 20 20:05:59 CET 2006


Author: arigo
Date: Mon Nov 20 20:05:55 2006
New Revision: 34807

Modified:
   pypy/dist/pypy/jit/hintannotator/model.py
   pypy/dist/pypy/jit/hintannotator/test/test_annotator.py
Log:
(pedronis, arigo)

deepfreezing variables too, so that the timeshifted graphs can constant-fold
accesses if the redboxes turn out to be compile-time constants.


Modified: pypy/dist/pypy/jit/hintannotator/model.py
==============================================================================
--- pypy/dist/pypy/jit/hintannotator/model.py	(original)
+++ pypy/dist/pypy/jit/hintannotator/model.py	Mon Nov 20 20:05:55 2006
@@ -125,9 +125,10 @@
 
 class SomeLLAbstractValue(annmodel.SomeObject):
 
-    def __init__(self, T):
+    def __init__(self, T, deepfrozen=False):
         self.concretetype = T
         assert self.__class__ != SomeLLAbstractValue
+        self.deepfrozen = deepfrozen
 
     def is_green(self, frame=None):
         return False
@@ -138,11 +139,10 @@
 
     def __init__(self, T, origins, eager_concrete=False, myorigin=None,
                  deepfrozen=False):
-        SomeLLAbstractValue.__init__(self, T)
+        SomeLLAbstractValue.__init__(self, T, deepfrozen)
         self.origins = origins
         self.eager_concrete = eager_concrete
         self.myorigin = myorigin
-        self.deepfrozen = deepfrozen
         assert myorigin is None or myorigin.spaceop is not None
 
     def fmt_origins(self, origins):
@@ -281,7 +281,7 @@
     def getfield(hs_v1, hs_fieldname):
         S = hs_v1.concretetype.TO
         FIELD_TYPE = getattr(S, hs_fieldname.const)
-        return SomeLLAbstractVariable(FIELD_TYPE)
+        return SomeLLAbstractVariable(FIELD_TYPE, hs_v1.deepfrozen)
 
     def setfield(hs_v1, hs_fieldname, hs_value):
         pass
@@ -289,7 +289,7 @@
     def getsubstruct(hs_v1, hs_fieldname):
         S = hs_v1.concretetype.TO
         FIELD_TYPE = getattr(S, hs_fieldname.const)
-        return SomeLLAbstractVariable(lltype.Ptr(FIELD_TYPE))
+        return SomeLLAbstractVariable(lltype.Ptr(FIELD_TYPE), hs_v1.deepfrozen)
 
 ##    def getarrayitem(hs_v1, hs_index):
 ##        ARRAY = hs_v1.concretetype.TO
@@ -437,11 +437,16 @@
 class __extend__(pairtype(SomeLLAbstractValue, SomeLLAbstractValue)):
 
     def getarrayitem((hs_v1, hs_v2)):
-        return SomeLLAbstractVariable(hs_v1.concretetype.TO.OF)
+        return SomeLLAbstractVariable(hs_v1.concretetype.TO.OF,
+                                      hs_v1.deepfrozen)
 
     def setarrayitem((hs_v1, hs_v2), hs_v3):
         pass
 
+    def getarraysubstruct((hs_v1, hs_v2)):
+        return SomeLLAbstractVariable(lltype.Ptr(hs_v1.concretetype.TO.OF),
+                                      hs_v1.deepfrozen)
+
     def union((hs_v1, hs_v2)):
         raise annmodel.UnionError("%s %s don't mix" % (hs_v1, hs_v2))
 

Modified: pypy/dist/pypy/jit/hintannotator/test/test_annotator.py
==============================================================================
--- pypy/dist/pypy/jit/hintannotator/test/test_annotator.py	(original)
+++ pypy/dist/pypy/jit/hintannotator/test/test_annotator.py	Mon Nov 20 20:05:55 2006
@@ -525,6 +525,17 @@
     assert isinstance(ha.binding(v2), SomeLLAbstractConstant)
     assert ha.binding(v1).deepfrozen
 
+def test_deepfreeze_variables():
+    l1 = [[1], [2, 3], [4], []]
+    def ll_function(i):
+        i = hint(i, variable=True)
+        l = hint(l1, deepfreeze=True)
+        return l[i]
+
+    hs, ha = hannotate(ll_function, [int], annotator=True, policy=P_NOVIRTUAL)
+    assert isinstance(hs, SomeLLAbstractVariable)
+    assert hs.deepfrozen
+
 def test_propagate_fixing_across_func_arguments():
     def ll_func2(z):
         z = hint(z, concrete=True)



More information about the Pypy-commit mailing list