Author: Maciej Fijalkowski <fij...@gmail.com>
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
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to