[pypy-svn] r17171 - in pypy/dist/pypy/translator: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Fri Sep 2 22:23:04 CEST 2005
Author: cfbolz
Date: Fri Sep 2 22:23:03 2005
New Revision: 17171
Modified:
pypy/dist/pypy/translator/backendoptimization.py
pypy/dist/pypy/translator/test/test_backendoptimization.py
Log:
oops, inlining could fail if the function to be inlined is called several times
Modified: pypy/dist/pypy/translator/backendoptimization.py
==============================================================================
--- pypy/dist/pypy/translator/backendoptimization.py (original)
+++ pypy/dist/pypy/translator/backendoptimization.py Fri Sep 2 22:23:03 2005
@@ -159,8 +159,11 @@
if op.args[0].value._obj._callable is inline_func:
callsites.append((block, i))
traverse(find_callsites, graph)
- for block, index_operation in callsites:
+ while callsites != []:
+ block, index_operation = callsites.pop()
_inline_function(translator, graph, block, index_operation)
+ callsites = []
+ traverse(find_callsites, graph)
checkgraph(graph)
def _inline_function(translator, graph, block, index_operation):
Modified: pypy/dist/pypy/translator/test/test_backendoptimization.py
==============================================================================
--- pypy/dist/pypy/translator/test/test_backendoptimization.py (original)
+++ pypy/dist/pypy/translator/test/test_backendoptimization.py Fri Sep 2 22:23:03 2005
@@ -107,6 +107,21 @@
result = interp.eval_function(h, [2])
assert result == 2
+def test_inline_several_times():
+ def f(x):
+ return (x + 1) * 2
+ def g(x):
+ if x:
+ a = f(x) + f(x)
+ else:
+ a = f(x) + 1
+ return a + f(x)
+ t = Translator(g)
+ a = t.annotate([int])
+ a.simplify()
+ t.specialize()
+ inline_function(t, f, t.flowgraphs[g])
+
def DONOTtest_inline_exceptions():
def f(x):
if x:
@@ -124,4 +139,3 @@
t.view()
inline_function(t, f, t.flowgraphs[g])
t.view()
-
More information about the Pypy-commit
mailing list