[pypy-svn] r74630 - in pypy/branch/blackhole-improvement/pypy/jit: codewriter codewriter/test metainterp metainterp/test

arigo at codespeak.net arigo at codespeak.net
Fri May 21 16:01:52 CEST 2010


Author: arigo
Date: Fri May 21 16:01:50 2010
New Revision: 74630

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py
Log:
Progress.


Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py	Fri May 21 16:01:50 2010
@@ -298,8 +298,8 @@
             jitcode = self.callcontrol.get_jitcode(targetgraph,
                                                    called_from=self.graph)
             lst.append(jitcode)
-        op0 = SpaceOperation('int_guard_value', [op.args[0]], None)
-        op1 = SpaceOperation('-live-', [op.args[0]], None)
+        op0 = SpaceOperation('-live-', [], None)
+        op1 = SpaceOperation('int_guard_value', [op.args[0]], None)
         op2 = self.handle_residual_call(op, [IndirectCallTargets(lst)])
         result = [op0, op1]
         if isinstance(op2, list):
@@ -345,8 +345,8 @@
         if hints.get('promote') and op.args[0].concretetype is not lltype.Void:
             assert op.args[0].concretetype != lltype.Ptr(rstr.STR)
             kind = getkind(op.args[0].concretetype)
-            op0 = SpaceOperation('%s_guard_value' % kind, [op.args[0]], None)
-            op1 = SpaceOperation('-live-', [op.args[0]], None)
+            op0 = SpaceOperation('-live-', [], None)
+            op1 = SpaceOperation('%s_guard_value' % kind, [op.args[0]], None)
             # the special return value None forces op.result to be considered
             # equal to op.args[0]
             return [op0, op1, None]
@@ -463,8 +463,8 @@
                 op.args[0].concretetype.TO._hints.get('typeptr'))
 
     def handle_getfield_typeptr(self, op):
-        op0 = SpaceOperation('guard_class', [op.args[0]], op.result)
-        op1 = SpaceOperation('-live-', [op.args[0]], None)
+        op0 = SpaceOperation('-live-', [], None)
+        op1 = SpaceOperation('guard_class', [op.args[0]], op.result)
         return [op0, op1]
 
     def rewrite_op_malloc(self, op):
@@ -657,9 +657,9 @@
         for v in op.args[2:2+num_green_args]:
             if isinstance(v, Variable) and v.concretetype is not lltype.Void:
                 kind = getkind(v.concretetype)
+                ops.append(SpaceOperation('-live-', [], None))
                 ops.append(SpaceOperation('%s_guard_value' % kind,
                                           [v], None))
-                ops.append(SpaceOperation('-live-', [v], None))
         args = (self.make_three_lists(op.args[2:2+num_green_args]) +
                 self.make_three_lists(op.args[2+num_green_args:]))
         ops.append(SpaceOperation('jit_merge_point', args, None))

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py	Fri May 21 16:01:50 2010
@@ -506,8 +506,8 @@
             myjitdriver.jit_merge_point(x=x, y=y)
             myjitdriver.can_enter_jit(x=y, y=x)
         self.encoding_test(f, [4, 5], """
-            int_guard_value %i0
             -live- %i0, %i1
+            int_guard_value %i0
             jit_merge_point I[%i0], R[], F[], I[%i1], R[], F[]
             can_enter_jit
             void_return

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jtransform.py	Fri May 21 16:01:50 2010
@@ -303,11 +303,11 @@
     tr.graph = 'someinitialgraph'
     oplist = tr.rewrite_operation(op)
     op0gv, op1gv, op0, op1 = oplist
-    assert op0gv.opname == 'int_guard_value'
-    assert op0gv.args == [op.args[0]]
-    assert op0gv.result is None
-    assert op1gv.opname == '-live-'
+    assert op0gv.opname == '-live-'
+    assert op0gv.args == []
+    assert op1gv.opname == 'int_guard_value'
     assert op1gv.args == [op.args[0]]
+    assert op1gv.result is None
     #
     reskind = getkind(restype)[0]
     assert op0.opname == 'residual_call_%s_%s' % (expectedkind, reskind)
@@ -364,11 +364,11 @@
     op = SpaceOperation('getfield', [v_parent, c_name], v_result)
     oplist = Transformer(FakeCPU()).rewrite_operation(op)
     op0, op1 = oplist
-    assert op0.opname == 'guard_class'
-    assert op0.args == [v_parent]
-    assert op0.result == v_result
-    assert op1.opname == '-live-'
+    assert op0.opname == '-live-'
+    assert op0.args == []
+    assert op1.opname == 'guard_class'
     assert op1.args == [v_parent]
+    assert op1.result == v_result
 
 def test_setfield():
     # XXX a more compact encoding would be possible; see test_getfield()
@@ -615,11 +615,11 @@
                         v2)
     oplist = Transformer().rewrite_operation(op)
     op0, op1, op2 = oplist
-    assert op0.opname == 'int_guard_value'
-    assert op0.args == [v1]
-    assert op0.result is None
-    assert op1.opname == '-live-'
+    assert op0.opname == '-live-'
+    assert op0.args == []
+    assert op1.opname == 'int_guard_value'
     assert op1.args == [v1]
+    assert op1.result is None
     assert op2 is None
 
 def test_promote_2():
@@ -635,9 +635,9 @@
     block.closeblock(Link([v2], returnblock))
     Transformer().optimize_block(block)
     assert len(block.operations) == 2
-    assert block.operations[0].opname == 'int_guard_value'
-    assert block.operations[0].args == [v1]
-    assert block.operations[0].result is None
-    assert block.operations[1].opname == '-live-'
+    assert block.operations[0].opname == '-live-'
+    assert block.operations[0].args == []
+    assert block.operations[1].opname == 'int_guard_value'
     assert block.operations[1].args == [v1]
+    assert block.operations[1].result is None
     assert block.exits[0].args == [v1]

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py	Fri May 21 16:01:50 2010
@@ -196,7 +196,7 @@
             if resulttype == 'i':
                 # argcode should be 'i' too
                 assert argcodes[next_argcode] == '>'
-                assert argcodes[next_argcode+1] == 'i'
+                assert argcodes[next_argcode + 1] == 'i'
                 next_argcode = next_argcode + 2
                 if lltype.typeOf(result) is lltype.Bool:
                     result = int(result)
@@ -206,7 +206,7 @@
             elif resulttype == 'r':
                 # argcode should be 'r' too
                 assert argcodes[next_argcode] == '>'
-                assert argcodes[next_argcode+1] == 'r'
+                assert argcodes[next_argcode + 1] == 'r'
                 next_argcode = next_argcode + 2
                 assert lltype.typeOf(result) == llmemory.GCREF
                 self.registers_r[ord(code[position])] = result
@@ -214,7 +214,7 @@
             elif resulttype == 'f':
                 # argcode should be 'f' too
                 assert argcodes[next_argcode] == '>'
-                assert argcodes[next_argcode+1] == 'f'
+                assert argcodes[next_argcode + 1] == 'f'
                 next_argcode = next_argcode + 2
                 assert lltype.typeOf(result) is lltype.Float
                 self.registers_f[ord(code[position])] = result
@@ -307,12 +307,10 @@
                 e = get_llexception(self.cpu, e)
                 self.handle_exception_in_frame(e)
 
-    def get_result_i(self):
-        assert self._return_type == 'i'
+    def get_tmpreg_i(self):
         return self.tmpreg_i
 
-    def get_result_r(self):
-        assert self._return_type == 'r'
+    def get_tmpreg_r(self):
         result = self.tmpreg_r
         if we_are_translated():
             self.tmpreg_r = NULL
@@ -320,19 +318,30 @@
             del self.tmpreg_r
         return result
 
-    def get_result_f(self):
-        assert self._return_type == 'f'
+    def get_tmpreg_f(self):
         return self.tmpreg_f
 
-    def get_result_v(self):
+    def final_result_i(self):
+        assert self._return_type == 'i'
+        return self.get_tmpreg_i()
+
+    def final_result_r(self):
+        assert self._return_type == 'r'
+        return self.get_tmpreg_r()
+
+    def final_result_f(self):
+        assert self._return_type == 'f'
+        return self.get_tmpreg_f()
+
+    def final_result_v(self):
         assert self._return_type == 'v'
 
-    def _get_result_anytype(self):
+    def _final_result_anytype(self):
         "NOT_RPYTHON"
-        if self._return_type == 'i': return self.get_result_i()
-        if self._return_type == 'r': return self.get_result_r()
-        if self._return_type == 'f': return self.get_result_f()
-        if self._return_type == 'v': return None
+        if self._return_type == 'i': return self.final_result_i()
+        if self._return_type == 'r': return self.final_result_r()
+        if self._return_type == 'f': return self.final_result_f()
+        if self._return_type == 'v': return self.final_result_v()
         raise ValueError(self._return_type)
 
     def cleanup_registers(self):
@@ -531,13 +540,13 @@
 
     @arguments("self", returns="i")
     def bhimpl_int_pop(self):
-        return self.get_result_i()
+        return self.get_tmpreg_i()
     @arguments("self", returns="r")
     def bhimpl_ref_pop(self):
-        return self.get_result_r()
+        return self.get_tmpreg_r()
     @arguments("self", returns="f")
     def bhimpl_float_pop(self):
-        return self.get_result_f()
+        return self.get_tmpreg_f()
 
     # ----------
     # float operations
@@ -669,6 +678,8 @@
         else:
             return target
 
+    bhimpl_goto_if_not_int_is_true = bhimpl_goto_if_not
+
     @arguments("i", "L", "pc", returns="L")
     def bhimpl_goto_if_not_int_is_zero(a, target, pc):
         if not a:
@@ -971,11 +982,11 @@
             self._done_with_this_frame()
         kind = self._return_type
         if kind == 'i':
-            caller._setup_return_value_i(self.get_result_i())
+            caller._setup_return_value_i(self.final_result_i())
         elif kind == 'r':
-            caller._setup_return_value_r(self.get_result_r())
+            caller._setup_return_value_r(self.final_result_r())
         elif kind == 'f':
-            caller._setup_return_value_f(self.get_result_f())
+            caller._setup_return_value_f(self.final_result_f())
         else:
             assert kind == 'v'
         return NULL
@@ -1028,14 +1039,14 @@
         # normally (in general we get a ContinueRunningNormally exception).
         sd = self.builder.metainterp_sd
         if sd.result_type == 'void':
-            self.get_result_v()
+            self.final_result_v()
             raise sd.DoneWithThisFrameVoid()
         elif sd.result_type == 'int':
-            raise sd.DoneWithThisFrameInt(self.get_result_i())
+            raise sd.DoneWithThisFrameInt(self.final_result_i())
         elif sd.result_type == 'ref':
-            raise sd.DoneWithThisFrameRef(self.get_result_r())
+            raise sd.DoneWithThisFrameRef(self.final_result_r())
         elif sd.result_type == 'float':
-            raise sd.DoneWithThisFrameFloat(self.get_result_f())
+            raise sd.DoneWithThisFrameFloat(self.final_result_f())
         else:
             assert False
 

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	Fri May 21 16:01:50 2010
@@ -894,11 +894,12 @@
         virtualizable_boxes = None
         if metainterp.staticdata.virtualizable_info is not None:
             virtualizable_boxes = metainterp.virtualizable_boxes
-        if resumepc < 0:
-            resumepc = self.pc
+        saved_pc = self.pc
+        if resumepc >= 0:
+            self.pc = resumepc
         resume.capture_resumedata(metainterp.framestack, virtualizable_boxes,
-                                  metainterp.virtualref_boxes, resumedescr,
-                                  resumepc)
+                                  metainterp.virtualref_boxes, resumedescr)
+        self.pc = saved_pc
         self.metainterp.staticdata.profiler.count_ops(opnum, GUARDS)
         # count
         metainterp.attach_debug_info(guard_op)
@@ -2030,8 +2031,10 @@
             args += (value,)
         #
         num_return_args = len(argcodes) - next_argcode
-        assert num_return_args == 0 or num_return_args == 1
-        self.pc = position + num_return_args
+        assert num_return_args == 0 or num_return_args == 2
+        if num_return_args:
+            position += 1
+        self.pc = position
         #
         if not we_are_translated():
             print '\tpyjitpl: %s(%s)' % (name, ', '.join(map(repr, args))),
@@ -2045,7 +2048,8 @@
                 assert resultbox is None
             else:
                 print '-> %r' % (resultbox,)
-                result_argcode = argcodes[next_argcode]
+                assert argcodes[next_argcode] == '>'
+                result_argcode = argcodes[next_argcode + 1]
                 assert resultbox.type == {'i': history.INT,
                                           'r': history.REF,
                                           'f': history.FLOAT}[result_argcode]

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py	Fri May 21 16:01:50 2010
@@ -45,12 +45,12 @@
                                          back.get_list_of_active_boxes())
 
 def capture_resumedata(framestack, virtualizable_boxes, virtualref_boxes,
-                       storage, pc):
+                       storage):
     n = len(framestack)-1
     top = framestack[n]
     _ensure_parent_resumedata(framestack, n)
     frame_info_list = FrameInfo(top.parent_resumedata_frame_info_list,
-                                top.jitcode, pc)
+                                top.jitcode, top.pc)
     storage.rd_frame_info_list = frame_info_list
     snapshot = Snapshot(top.parent_resumedata_snapshot,
                         top.get_list_of_active_boxes())

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py	Fri May 21 16:01:50 2010
@@ -45,7 +45,7 @@
             raise TypeError(T)
     blackholeinterp.setposition(cw.mainjitcode, 0)
     blackholeinterp.run()
-    return blackholeinterp._get_result_anytype()
+    return blackholeinterp._final_result_anytype()
 
 def _run_with_pyjitpl(cw, args, testself):
     from pypy.jit.metainterp import simple_optimize



More information about the Pypy-commit mailing list