Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r79100:a94e875aab50
Date: 2015-08-21 12:39 +0200
http://bitbucket.org/pypy/pypy/changeset/a94e875aab50/

Log:    hack at another test

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
@@ -199,6 +199,39 @@
 # ____________________________________________________________
 
 
+def compile_simple_loop(metainterp, greenkey, start, inputargs, ops, jumpargs,
+                        enable_opts):
+    from rpython.jit.metainterp.optimizeopt import optimize_trace
+
+    jitdriver_sd = metainterp.jitdriver_sd
+    metainterp_sd = metainterp.staticdata
+    jitcell_token = make_jitcell_token(jitdriver_sd)
+    label = ResOperation(rop.LABEL, inputargs[:], descr=jitcell_token)
+    jump_op = ResOperation(rop.JUMP, jumpargs[:], descr=jitcell_token)
+    call_pure_results = metainterp.call_pure_results
+    data = SimpleCompileData(label, ops + [jump_op],
+                                 call_pure_results=call_pure_results,
+                                 enable_opts=enable_opts)
+    try:
+        loop_info, ops = optimize_trace(metainterp_sd, jitdriver_sd,
+                                        data)
+    except InvalidLoop:
+        return None
+    loop = create_empty_loop(metainterp)
+    loop.original_jitcell_token = jitcell_token
+    loop.inputargs = loop_info.inputargs
+    jump_op = ops[-1]
+    target_token = TargetToken(jitcell_token)
+    target_token.original_jitcell_token = jitcell_token
+    label.setdescr(target_token)
+    jump_op.setdescr(target_token)
+    loop.operations = [label] + ops
+    loop.check_consistency()
+    jitcell_token.target_tokens = [target_token]
+    send_loop_to_backend(greenkey, jitdriver_sd, metainterp_sd, loop, "loop")
+    record_loop_or_bridge(metainterp_sd, loop)
+    return target_token
+
 def compile_loop(metainterp, greenkey, start, inputargs, jumpargs,
                  full_preamble_needed=True, try_disabling_unroll=False):
     """Try to compile a new procedure by closing the current history back
@@ -217,12 +250,14 @@
         enable_opts = enable_opts.copy()
         del enable_opts['unroll']
 
+    ops = history.operations[start:]
+    if 'unroll' not in enable_opts:
+        return compile_simple_loop(metainterp, greenkey, start, inputargs, ops,
+                                   jumpargs, enable_opts)
     jitcell_token = make_jitcell_token(jitdriver_sd)
-    h_ops = history.operations
     label = ResOperation(rop.LABEL, inputargs,
                          descr=TargetToken(jitcell_token))
     end_label = ResOperation(rop.LABEL, jumpargs, descr=jitcell_token)
-    ops = h_ops[start:]
     call_pure_results = metainterp.call_pure_results
     preamble_data = LoopCompileData(label, end_label, ops,
                                     call_pure_results=call_pure_results,
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to