Author: Maciej Fijalkowski <[email protected]>
Branch: resume-refactor
Changeset: r68667:1f547589daea
Date: 2014-01-14 14:11 +0100
http://bitbucket.org/pypy/pypy/changeset/1f547589daea/
Log: (fijal, rguillebert) fix enough to pass the first test of test_loop
(again)
diff --git a/rpython/jit/metainterp/optimizeopt/util.py
b/rpython/jit/metainterp/optimizeopt/util.py
--- a/rpython/jit/metainterp/optimizeopt/util.py
+++ b/rpython/jit/metainterp/optimizeopt/util.py
@@ -3,6 +3,7 @@
from rpython.rlib.rarithmetic import intmask
from rpython.rlib.unroll import unrolling_iterable
from rpython.jit.metainterp import resoperation
+from rpython.jit.metainterp.history import Box
from rpython.rlib.debug import make_sure_not_resized
from rpython.jit.metainterp.resoperation import rop
from rpython.rlib.objectmodel import we_are_translated
@@ -150,7 +151,7 @@
for i in range(op1.numargs()):
x = op1.getarg(i)
y = op2.getarg(i)
- if cache and y not in remap:
+ if cache and isinstance(y, Box) and y not in remap:
remap[y] = x
assert x.same_box(remap.get(y, y))
if op2.result in remap:
diff --git a/rpython/jit/metainterp/pyjitpl.py
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1428,34 +1428,6 @@
# but we should not follow calls to that graph
return self.do_residual_call(funcbox, argboxes, calldescr, pc)
- def emit_resume_data(self, pos, in_call):
- i = 0
- history = self.metainterp.history
- boxes = self.get_list_of_active_boxes(in_call)
- #xxx
- #xxx
- for i in range(self.jitcode.num_regs_i()):
- box = self.registers_i[i]
- if box is not None and (box, pos, i) not in self.resume_cache:
- history.record(rop.RESUME_PUT,
- [box, ConstInt(pos), ConstInt(i)], None)
- self.resume_cache[(box, pos, i)] = None
- start = self.jitcode.num_regs_i()
- for i in range(self.jitcode.num_regs_r()):
- box = self.registers_r[i]
- if box is not None and (box, pos, i) not in self.resume_cache:
- history.record(rop.RESUME_PUT,
- [box, ConstInt(pos), ConstInt(i + start)], None)
- self.resume_cache[(box, pos, i)] = None
- start = self.jitcode.num_regs_i() + self.jitcode.num_regs_r()
- for i in range(self.jitcode.num_regs_f()):
- box = self.registers_f[i]
- if box is not None and (box, pos, i) not in self.resume_cache:
- history.record(rop.RESUME_PUT,
- [box, ConstInt(pos), ConstInt(i + start)], None)
- self.resume_cache[(box, pos, i)] = None
- history.record(rop.RESUME_SET_PC, [ConstInt(self.pc)], None)
-
# ____________________________________________________________
class MetaInterpStaticData(object):
diff --git a/rpython/jit/metainterp/resume2.py
b/rpython/jit/metainterp/resume2.py
--- a/rpython/jit/metainterp/resume2.py
+++ b/rpython/jit/metainterp/resume2.py
@@ -295,12 +295,14 @@
self.process_box(index + start_f, frame_pos,
frame.registers_i[index])
- history = self.metainterp.history
+ mi_history = self.metainterp.history
cache = self.cachestack[frame_pos]
for i in range(len(self.marked)):
if self.marked[i] is None and cache[i] is not None:
cache[i] = None
- history.record(rop.RESUME_CLEAR, [ConstInt(frame_pos),
+ mi_history.record(rop.RESUME_CLEAR, [ConstInt(frame_pos),
ConstInt(i)], None)
- history.record(rop.RESUME_SET_PC, [ConstInt(resume_pc)], None)
+ if resume_pc == -1:
+ resume_pc = self.metainterp.framestack[-1].pc
+ mi_history.record(rop.RESUME_SET_PC, [ConstInt(resume_pc)], None)
self.marked = None
diff --git a/rpython/jit/metainterp/test/test_resume2.py
b/rpython/jit/metainterp/test/test_resume2.py
--- a/rpython/jit/metainterp/test/test_resume2.py
+++ b/rpython/jit/metainterp/test/test_resume2.py
@@ -261,9 +261,9 @@
expected = parse("""
[i0, i1, i2]
enter_frame(-1, descr=jitcode)
- resume_put(i0, 0, 0)
+ resume_put(i0, 0, 2)
resume_put(i1, 0, 1)
- resume_put(i2, 0, 2)
+ resume_put(i2, 0, 0)
resume_set_pc(24)
""", namespace={'jitcode': jitcode})
equaloplists(resume_ops, expected.operations, cache=True)
@@ -292,8 +292,8 @@
expected = parse("""
[i0, i1, i2]
enter_frame(-1, descr=jitcode)
- resume_put(i0, 0, 0)
- resume_put(i1, 0, 1)
+ resume_put(i0, 0, 1)
+ resume_put(i1, 0, 0)
resume_set_pc(16)
leave_frame()
""", namespace={'jitcode': jitcode})
@@ -325,12 +325,12 @@
expected = parse("""
[i0, i1, i2]
enter_frame(-1, descr=jitcode)
- resume_put(i0, 0, 0)
+ resume_put(i0, 0, 2)
resume_put(i1, 0, 1)
- resume_put(i2, 0, 2)
- resume_set_pc(-1)
+ resume_put(i2, 0, 0)
+ resume_set_pc(16)
resume_clear(0, 1)
- resume_set_pc(-1)
+ resume_set_pc(21)
leave_frame()
""", namespace={'jitcode': jitcode})
equaloplists(resume_ops, expected.operations, cache=True)
diff --git a/rpython/jit/metainterp/warmspot.py
b/rpython/jit/metainterp/warmspot.py
--- a/rpython/jit/metainterp/warmspot.py
+++ b/rpython/jit/metainterp/warmspot.py
@@ -348,11 +348,11 @@
len(self.jitdrivers_sd)), \
"there are multiple jit_merge_points with the same jitdriver"
- def split_graph_and_record_jitdriver(self, graph, block, pos):
+ def split_graph_and_record_jitdriver(self, orig_graph, block, pos):
op = block.operations[pos]
args = op.args[2:]
s_binding = self.translator.annotator.binding
- graph = copygraph(graph)
+ graph = copygraph(orig_graph)
[jmpp] = find_jit_merge_points([graph])
graph.startblock = support.split_before_jit_merge_point(*jmpp)
# XXX this is incredibly obscure, but this is sometiems necessary
@@ -371,11 +371,11 @@
assert hasattr(graph, "func")
graph.func._dont_inline_ = True
graph.func._jit_unroll_safe_ = True
- result_type = history.getkind(graph.getreturnvar().concretetype)[0]
+ result_type =
history.getkind(orig_graph.getreturnvar().concretetype)[0]
jd = JitDriverStaticData(block.operations[pos].args[1].value, graph,
result_type)
jd._portal_args_s = [s_binding(v) for v in args]
- jd._jit_merge_point_in = graph
+ jd._jit_merge_point_in = orig_graph
jd.portal_runner_ptr = "<not set so far>"
self.jitdrivers_sd.append(jd)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit