[pypy-svn] r68021 - in pypy/branch/kill-jumptarget/pypy/jit/backend: . llsupport llsupport/test test

arigo at codespeak.net arigo at codespeak.net
Wed Sep 30 14:18:23 CEST 2009


Author: arigo
Date: Wed Sep 30 14:18:23 2009
New Revision: 68021

Modified:
   pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/descr.py
   pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/llmodel.py
   pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/test/test_runner.py
   pypy/branch/kill-jumptarget/pypy/jit/backend/model.py
   pypy/branch/kill-jumptarget/pypy/jit/backend/test/test_random.py
Log:
Fixes to the interface.


Modified: pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/descr.py
==============================================================================
--- pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/descr.py	(original)
+++ pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/descr.py	Wed Sep 30 14:18:23 2009
@@ -1,7 +1,7 @@
 from pypy.rpython.lltypesystem import lltype
 from pypy.jit.backend.llsupport import symbolic
 from pypy.jit.metainterp.history import AbstractDescr, getkind, BoxInt, BoxPtr
-from pypy.jit.metainterp.history import BasicFailDescr
+from pypy.jit.metainterp.history import BasicFailDescr, LoopToken
 from pypy.jit.metainterp.resoperation import ResOperation, rop
 
 # The point of the class organization in this file is to make instances
@@ -165,7 +165,7 @@
 
 class BaseCallDescr(AbstractDescr):
     _clsname = ''
-    executable_token = None
+    loop_token = None
     arg_classes = ''     # <-- annotation hack
 
     def __init__(self, arg_classes):
@@ -186,8 +186,8 @@
         raise NotImplementedError
 
     def get_token_for_call(self, cpu):
-        if self.executable_token is not None:
-            return self.executable_token
+        if self.loop_token is not None:
+            return self.loop_token
         args = [BoxInt()] + self.instantiate_arg_classes()
         if self.get_result_size(cpu.translate_support_code) == 0:
             result = None
@@ -205,9 +205,10 @@
             ResOperation(rop.FINISH, result_list, None,
                          descr=BasicFailDescr())]
         operations[1].fail_args = []
-        executable_token = cpu.compile_loop(args, operations)
-        self.executable_token = executable_token
-        return executable_token
+        loop_token = LoopToken()
+        cpu.compile_loop(args, operations, loop_token)
+        self.loop_token = loop_token
+        return loop_token
 
     def repr_of_descr(self):
         return '<%s>' % self._clsname

Modified: pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/llmodel.py	(original)
+++ pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/llmodel.py	Wed Sep 30 14:18:23 2009
@@ -409,9 +409,9 @@
         if not we_are_translated():
             assert (list(calldescr.arg_classes) ==
                     [arg.type for arg in args[1:]])
-        executable_token = calldescr.get_token_for_call(self)
+        loop_token = calldescr.get_token_for_call(self)
         set_future_values(self, args)
-        self.execute_token(executable_token)
+        self.execute_token(loop_token)
         # Note: if an exception is set, the rest of the code does a bit of
         # nonsense but nothing wrong (the return value should be ignored)
         if calldescr.returns_a_pointer():

Modified: pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/test/test_runner.py
==============================================================================
--- pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/test/test_runner.py	(original)
+++ pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/test/test_runner.py	Wed Sep 30 14:18:23 2009
@@ -7,7 +7,7 @@
     pass
 
 class MyLLCPU(AbstractLLCPU):
-    def compile_loop(self, inputargs, operations):
+    def compile_loop(self, inputargs, operations, looptoken):
         py.test.skip("llsupport test: cannot compile operations")
 
 

Modified: pypy/branch/kill-jumptarget/pypy/jit/backend/model.py
==============================================================================
--- pypy/branch/kill-jumptarget/pypy/jit/backend/model.py	(original)
+++ pypy/branch/kill-jumptarget/pypy/jit/backend/model.py	Wed Sep 30 14:18:23 2009
@@ -8,17 +8,21 @@
         """Called once by the front-end when the program starts."""
         pass
 
-    def compile_loop(self, inputargs, operations):
+    def compile_loop(self, inputargs, operations, looptoken):
         """Assemble the given loop.
-           Return an opaque token to be consumed by execute_token"""
+        Extra attributes should be put in the LoopToken to
+        point to the compiled loop in assembler.
+        """
         raise NotImplementedError
 
     def compile_bridge(self, faildescr, inputargs, operations):
-        """Assemble the bridge"""
+        """Assemble the bridge.
+        The FailDescr is the descr of the original guard that failed.
+        """
         raise NotImplementedError    
 
-    def execute_token(self, executable_token):
-        """Execute the generated code referenced by the executable_token
+    def execute_token(self, looptoken):
+        """Execute the generated code referenced by the looptoken.
         Returns the ResOperation that failed, of type rop.FAIL.
         Use set_future_value_xxx() before, and get_latest_value_xxx() after.
         """

Modified: pypy/branch/kill-jumptarget/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/branch/kill-jumptarget/pypy/jit/backend/test/test_random.py	(original)
+++ pypy/branch/kill-jumptarget/pypy/jit/backend/test/test_random.py	Wed Sep 30 14:18:23 2009
@@ -159,12 +159,13 @@
                 #print >>s, '    operations[%d].suboperations = [' % i
                 #print >>s, '        ResOperation(rop.FAIL, [%s], None)]' % (
                 #    ', '.join([names[v] for v in op.args]))
-        print >>s, '    executable_token = cpu.compile_loop(inputargs, operations)'
+        print >>s, '    looptoken = LoopToken()'
+        print >>s, '    cpu.compile_loop(inputargs, operations, looptoken)'
         if hasattr(self.loop, 'inputargs'):
             for i, v in enumerate(self.loop.inputargs):
                 print >>s, '    cpu.set_future_value_int(%d, %d)' % (i,
                                                                      v.value)
-        print >>s, '    op = cpu.execute_token(executable_token)'
+        print >>s, '    op = cpu.execute_token(looptoken)'
         if self.should_fail_by is None:
             for i, v in enumerate(self.loop.operations[-1].args):
                 print >>s, '    assert cpu.get_latest_value_int(%d) == %d' % (
@@ -401,13 +402,13 @@
         loop = TreeLoop('test_random_function')
         loop.inputargs = startvars[:]
         loop.operations = []
+        loop.token = LoopToken()
 
         builder = builder_factory(cpu, loop, startvars[:])
         self.generate_ops(builder, r, loop, startvars)
         self.builder = builder
         self.loop = loop
-        self.executable_token = cpu.compile_loop(loop.inputargs,
-                                                 loop.operations)
+        cpu.compile_loop(loop.inputargs, loop.operations, loop.token)
 
     def generate_ops(self, builder, r, loop, startvars):
         block_length = demo_conftest.option.block_length
@@ -469,7 +470,7 @@
 
         for i, v in enumerate(self.values):
             cpu.set_future_value_int(i, v)
-        fail = cpu.execute_token(self.executable_token)
+        fail = cpu.execute_token(self.loop.token)
         assert fail is self.should_fail_by.descr
         for i, v in enumerate(self.get_fail_args()):
             value = cpu.get_latest_value_int(i)
@@ -536,17 +537,15 @@
             args = [x.clonebox() for x in subset]
             rl = RandomLoop(self.builder.cpu, self.builder.fork,
                                      r, args)
-            executable_token = self.cpu.compile_loop(rl.loop.inputargs,
-                                                     rl.loop.operations)
+            self.cpu.compile_loop(rl.loop.inputargs, rl.loop.operations,
+                                  rl.loop.token)
             # done
-            jump_op = ResOperation(rop.JUMP, subset, None)
-            jump_op.jump_target = LoopToken()
-            jump_op.jump_target.executable_token = executable_token
             self.should_fail_by = rl.should_fail_by
             self.expected = rl.expected
             assert len(rl.loop.inputargs) == len(args)
             # The new bridge's execution will end normally at its FINISH.
             # Just replace the FINISH with the JUMP to the new loop.
+            jump_op = ResOperation(rop.JUMP, subset, None, descr=rl.loop.token)
             subloop.operations[-1] = jump_op
             self.guard_op = rl.guard_op
             self.prebuilt_ptr_consts += rl.prebuilt_ptr_consts



More information about the Pypy-commit mailing list