Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r79356:ff9c92e75aa6
Date: 2015-09-01 17:28 +0200
http://bitbucket.org/pypy/pypy/changeset/ff9c92e75aa6/

Log:    replace raise Exception with also invalid code, but slightly better

diff --git a/rpython/jit/metainterp/compile.py 
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -326,9 +326,9 @@
     loop_jitcell_token = metainterp.get_procedure_token(greenkey)
     assert loop_jitcell_token
 
-    end_label = ResOperation(rop.LABEL, inputargs,
+    end_label = ResOperation(rop.LABEL, inputargs[:],
                              descr=loop_jitcell_token)
-    jump_op = ResOperation(rop.JUMP, jumpargs, descr=loop_jitcell_token)
+    jump_op = ResOperation(rop.JUMP, jumpargs[:], descr=loop_jitcell_token)
     enable_opts = jitdriver_sd.warmstate.enable_opts
     ops = history.operations[start:]
     call_pure_results = metainterp.call_pure_results
@@ -339,23 +339,37 @@
         loop_info, loop_ops = optimize_trace(metainterp_sd, jitdriver_sd,
                                              loop_data)
     except InvalidLoop:
-        # Fall back on jumping to preamble
-        raise Exception("think about it")
-        return None
+        xxx
+        # Fall back on jumping directly to preamble
+        jump_op = ResOperation(rop.JUMP, inputargs[:],
+                               descr=loop_jitcell_token.target_tokens[0])
+        loop_data = SimpleCompileData(end_label, [jump_op], call_pure_results,
+                                      enable_opts)
+        try:
+            loop_info, loop_ops = optimize_trace(metainterp_sd, jitdriver_sd,
+                                                 loop_data)
+        except InvalidLoop:
+            return None
+        loop = partial_trace
+        loop.original_jitcell_token = loop_jitcell_token
+        loop.operations = loop_ops[:]
+        loop.inputargs = loop_info.inputargs[:]
+        loop.check_consistency()
+    else:
 
-    loop = partial_trace
-    loop.original_jitcell_token = loop_jitcell_token
-    loop.operations = (loop.operations + loop_info.extra_same_as +
-                       [loop_info.label_op]
-                       + loop_ops)
+        loop = partial_trace
+        loop.original_jitcell_token = loop_jitcell_token
+        loop.operations = (loop.operations + loop_info.extra_same_as +
+                           [loop_info.label_op]
+                           + loop_ops)
 
-    quasi_immutable_deps = {}
-    if loop_info.quasi_immutable_deps:
-        quasi_immutable_deps.update(loop_info.quasi_immutable_deps)
-    if start_state.quasi_immutable_deps:
-        quasi_immutable_deps.update(start_state.quasi_immutable_deps)
-    if quasi_immutable_deps:
-        loop.quasi_immutable_deps = quasi_immutable_deps
+        quasi_immutable_deps = {}
+        if loop_info.quasi_immutable_deps:
+            quasi_immutable_deps.update(loop_info.quasi_immutable_deps)
+        if start_state.quasi_immutable_deps:
+            quasi_immutable_deps.update(start_state.quasi_immutable_deps)
+        if quasi_immutable_deps:
+            loop.quasi_immutable_deps = quasi_immutable_deps
 
     target_token = loop.operations[-1].getdescr()
     resumekey.compile_and_attach(metainterp, loop, inputargs)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to