Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r80329:6d8880c45110
Date: 2015-10-19 09:28 +0200
http://bitbucket.org/pypy/pypy/changeset/6d8880c45110/

Log:    fix in the llgraph backend: multiple redirections of compiled loops
        didn't work

diff --git a/rpython/jit/backend/llgraph/runner.py 
b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -371,16 +371,16 @@
             trace.invalid = True
 
     def redirect_call_assembler(self, oldlooptoken, newlooptoken):
-        oldtrace = oldlooptoken.compiled_loop_token._llgraph_loop
-        newtrace = newlooptoken.compiled_loop_token._llgraph_loop
+        oldc = oldlooptoken.compiled_loop_token
+        newc = newlooptoken.compiled_loop_token
+        oldtrace = oldc._llgraph_loop
+        newtrace = newc._llgraph_loop
         OLD = [box.type for box in oldtrace.inputargs]
         NEW = [box.type for box in newtrace.inputargs]
         assert OLD == NEW
-        assert not hasattr(oldlooptoken, '_llgraph_redirected')
-        oldlooptoken.compiled_loop_token._llgraph_redirected = True
-        oldlooptoken.compiled_loop_token._llgraph_loop = newtrace
-        alltraces = newlooptoken.compiled_loop_token._llgraph_alltraces
-        oldlooptoken.compiled_loop_token._llgraph_alltraces = alltraces
+        assert not hasattr(oldc, '_llgraph_redirected')
+        oldc._llgraph_redirected = newc
+        oldc._llgraph_alltraces = newc._llgraph_alltraces
 
     def free_loop_and_bridges(self, compiled_loop_token):
         for c in compiled_loop_token._llgraph_alltraces:
@@ -393,7 +393,10 @@
         return self._execute_token
 
     def _execute_token(self, loop_token, *args):
-        lltrace = loop_token.compiled_loop_token._llgraph_loop
+        loopc = loop_token.compiled_loop_token
+        while hasattr(loopc, '_llgraph_redirected'):
+            loopc = loopc._llgraph_redirected
+        lltrace = loopc._llgraph_loop
         frame = LLFrame(self, lltrace.inputargs, args)
         try:
             frame.execute(lltrace)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to