[pypy-svn] r46006 - in pypy/branch/pypy-more-rtti-inprogress/translator/backendopt: . test
fijal at codespeak.net
fijal at codespeak.net
Mon Aug 27 10:27:13 CEST 2007
Author: fijal
Date: Mon Aug 27 10:27:13 2007
New Revision: 46006
Modified:
pypy/branch/pypy-more-rtti-inprogress/translator/backendopt/inline.py
pypy/branch/pypy-more-rtti-inprogress/translator/backendopt/test/test_inline.py
Log:
Have _always_inline_ attribute, useful for externals
Modified: pypy/branch/pypy-more-rtti-inprogress/translator/backendopt/inline.py
==============================================================================
--- pypy/branch/pypy-more-rtti-inprogress/translator/backendopt/inline.py (original)
+++ pypy/branch/pypy-more-rtti-inprogress/translator/backendopt/inline.py Mon Aug 27 10:27:13 2007
@@ -694,7 +694,10 @@
while heap:
weight, _, graph = heap[0]
if not valid_weight.get(graph):
- weight, fixed = heuristic(graph)
+ if getattr(graph.func, '_always_inline_', None):
+ weight, fixed = 0.0, True
+ else:
+ weight, fixed = heuristic(graph)
#print ' + cost %7.2f %50s' % (weight, graph.name)
heapreplace(heap, (weight, -len(callers[graph]), graph))
valid_weight[graph] = True
Modified: pypy/branch/pypy-more-rtti-inprogress/translator/backendopt/test/test_inline.py
==============================================================================
--- pypy/branch/pypy-more-rtti-inprogress/translator/backendopt/test/test_inline.py (original)
+++ pypy/branch/pypy-more-rtti-inprogress/translator/backendopt/test/test_inline.py Mon Aug 27 10:27:13 2007
@@ -18,6 +18,7 @@
from pypy.translator.backendopt.all import INLINE_THRESHOLD_FOR_TEST
from pypy.conftest import option
from pypy.translator.backendopt import removenoops
+from pypy.objspace.flow.model import summary
def no_missing_concretetype(node):
if isinstance(node, Block):
@@ -194,6 +195,20 @@
result = eval_func([42])
assert result == g(42)
+ def test_always_inline(self):
+ def f(x, y, z, k):
+ p = (((x, y), z), k)
+ return p[0][0][0] + p[-1]
+ f._always_inline_ = True
+
+ def g(x, y, z, k):
+ a = f(x, y, z, k)
+ return a
+ eval_func, t = self.check_auto_inlining(g, [int, int, int, int], multiplier=0.1)
+ graph = graphof(t, g)
+ s = summary(graph)
+ assert len(s) > 3
+
def test_inline_exceptions(self):
def f(x):
if x == 0:
More information about the Pypy-commit
mailing list