[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