Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78983:31806f1065f3
Date: 2015-08-14 13:12 +0200
http://bitbucket.org/pypy/pypy/changeset/31806f1065f3/
Log: first version of compile_trace
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
@@ -61,19 +61,20 @@
""" This represents label() ops jump with no extra info associated with
the label
"""
- def __init__(self, start_label, operations, call_pure_results=None):
+ def __init__(self, start_label, operations, call_pure_results=None,
+ enable_opts=None):
self.start_label = start_label
self.operations = operations
self.call_pure_results = call_pure_results
+ self.enable_opts = enable_opts
def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer
- assert not unroll
+ #assert not unroll
opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
return opt.propagate_all_forward(self.start_label.getarglist(),
- self.operations,
- self.call_pure_results)
+ self.operations, self.call_pure_results, self.enable_opts)
class UnrolledLoopData(CompileData):
""" This represents label() ops jump with extra info that's from the
@@ -973,7 +974,7 @@
metainterp_sd = metainterp.staticdata
jitdriver_sd = metainterp.jitdriver_sd
new_loop.original_jitcell_token = jitcell_token =
make_jitcell_token(jitdriver_sd)
- propagate_original_jitcell_token(new_loop)
+ #propagate_original_jitcell_token(new_loop)
send_loop_to_backend(self.original_greenkey, metainterp.jitdriver_sd,
metainterp_sd, new_loop, "entry bridge")
# send the new_loop to warmspot.py, to be called directly the next time
@@ -994,30 +995,48 @@
#
# Attempt to use optimize_bridge(). This may return None in case
# it does not work -- i.e. none of the existing old_loop_tokens match.
- new_trace = create_empty_loop(metainterp)
- new_trace.inputargs = metainterp.history.inputargs[:]
+ #new_trace = create_empty_loop(metainterp)
+ #new_trace.inputargs = metainterp.history.inputargs[:]
- new_trace.operations = metainterp.history.operations[:]
+ #new_trace.operations = metainterp.history.operations[:]
metainterp_sd = metainterp.staticdata
jitdriver_sd = metainterp.jitdriver_sd
state = jitdriver_sd.warmstate
- if isinstance(resumekey, ResumeAtPositionDescr):
- inline_short_preamble = False
- else:
- inline_short_preamble = True
+ #if isinstance(resumekey, ResumeAtPositionDescr):
+ # inline_short_preamble = False
+ #else:
+ # xxx
+ # inline_short_preamble = True
+ inputargs = metainterp.history.inputargs[:]
+ operations = metainterp.history.operations
+ label = ResOperation(rop.LABEL, inputargs)
+ jitdriver_sd = metainterp.jitdriver_sd
+ enable_opts = jitdriver_sd.warmstate.enable_opts
+
+ call_pure_results = metainterp.call_pure_results
+
+ data = SimpleCompileData(label, operations,
+ call_pure_results=call_pure_results,
+ enable_opts=enable_opts)
try:
- state = optimize_trace(metainterp_sd, jitdriver_sd, new_trace,
- state.enable_opts,
- inline_short_preamble, export_state=True)
+ info, newops = optimize_trace(metainterp_sd, jitdriver_sd, data)
except InvalidLoop:
- forget_optimization_info(new_trace.operations)
- forget_optimization_info(new_trace.inputargs)
+ forget_optimization_info(inputargs)
+ forget_optimization_info(operations)
debug_print("compile_new_bridge: got an InvalidLoop")
# XXX I am fairly convinced that optimize_bridge cannot actually raise
# InvalidLoop
debug_print('InvalidLoop in compile_new_bridge')
return None
+ new_trace = create_empty_loop(metainterp)
+ new_trace.inputargs = info.inputargs
+ new_trace.operations = newops
+ resumekey.compile_and_attach(metainterp, new_trace)
+ record_loop_or_bridge(metainterp_sd, new_trace)
+ target_token = new_trace.operations[-1].getdescr()
+ return target_token
+ xxxx
if new_trace.operations[-1].getopnum() != rop.LABEL:
# We managed to create a bridge. Dispatch to resumekey to
# know exactly what we must do (ResumeGuardDescr/ResumeFromInterpDescr)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -7994,19 +7994,19 @@
ops = """
[p5, p6]
i10 = getfield_gc_i(p5, descr=valuedescr)
- i11 = getfield_gc_i(p6, descr=nextdescr)
+ i11 = getfield_gc_i(p6, descr=chardescr)
i12 = int_add(i10, 7)
i13 = int_add(i11, 7)
call_n(i12, i13, descr=nonwritedescr)
- setfield_gc(p6, i10, descr=nextdescr)
+ setfield_gc(p6, i10, descr=chardescr)
jump(p5, p6)
"""
expected = """
- [p5, p6, i14, i12, i10]
+ [p5, p6, i14, i12]
i13 = int_add(i14, 7)
call_n(i12, i13, descr=nonwritedescr)
- setfield_gc(p6, i10, descr=nextdescr)
- jump(p5, p6, i10, i12, i10)
+ setfield_gc(p6, i14, descr=chardescr)
+ jump(p5, p6, i14, i12)
"""
self.optimize_loop(ops, expected)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit