[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