Author: Hakan Ardo <ha...@debian.org>
Branch: jit-targets
Changeset: r48773:096da5690e5d
Date: 2011-11-05 09:30 +0100
http://bitbucket.org/pypy/pypy/changeset/096da5690e5d/

Log:    store the short preamble on the TargetToken instead

diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py 
b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -133,9 +133,8 @@
         print
         if expected_short:
             print "Short Preamble:"
-            short = loop.token.short_preamble[0]
-            print short.inputargs
-            print '\n'.join([str(o) for o in short.operations])
+            short = loop.operations[0].getdescr().short_preamble
+            print '\n'.join([str(o) for o in short])
             print
 
         assert expected != "crash!", "should have raised an exception"
@@ -146,9 +145,11 @@
                               text_right='expected preamble')
             assert preamble.operations[-1].getdescr() == 
loop.operations[0].getdescr()
         if expected_short:
-            self.assert_equal(short, 
convert_old_style_to_targets(expected_short, jump=True),
+            short_preamble = TreeLoop('short preamble')
+            short_preamble.operations = short
+            self.assert_equal(short_preamble, 
convert_old_style_to_targets(expected_short, jump=True),
                               text_right='expected short preamble')
-            assert short.operations[-1].getdescr() == 
loop.operations[0].getdescr()
+            assert short[-1].getdescr() == loop.operations[0].getdescr()
 
         return loop
 
diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py 
b/pypy/jit/metainterp/optimizeopt/unroll.py
--- a/pypy/jit/metainterp/optimizeopt/unroll.py
+++ b/pypy/jit/metainterp/optimizeopt/unroll.py
@@ -145,13 +145,10 @@
         else:
             assert lastop.getdescr().merge_point is 
start_targetop.getdescr().merge_point
             jumpop = ResOperation(rop.JUMP, lastop.getarglist(), None, 
descr=start_targetop.getdescr())
+
             self.close_loop(jumpop)
-            short_preamble_loop = self.produce_short_preamble(lastop)
-            assert isinstance(loop.token, LoopToken)
-            if loop.token.short_preamble:
-                loop.token.short_preamble.append(short_preamble_loop) # FIXME: 
??
-            else:
-                loop.token.short_preamble = [short_preamble_loop]
+            self.finilize_short_preamble(lastop)
+            start_targetop.getdescr().short_preamble = self.short
         #else:
         #    loop.operations = self.optimizer.get_newoperations()
 
@@ -192,8 +189,8 @@
         assert isinstance(target_token, TargetToken)
         targetop.initarglist(inputargs)
         target_token.virtual_state = virtual_state
-        target_token.exported_state = ExportedState(short_inputargs,
-                                                    constant_inputargs, 
short_boxes,
+        target_token.short_preamble = [ResOperation(rop.TARGET, 
short_inputargs, None)]
+        target_token.exported_state = ExportedState(constant_inputargs, 
short_boxes,
                                                     inputarg_setup_ops, 
self.optimizer,
                                                     start_resumedescr)
 
@@ -207,7 +204,7 @@
             return
         self.did_peel_one = True
         
-        self.short = []
+        self.short = target_token.short_preamble
         self.short_seen = {}
         self.short_boxes = exported_state.short_boxes
         for box, const in exported_state.constant_inputargs.items():
@@ -255,7 +252,7 @@
 
     def close_loop(self, jumpop):        
         virtual_state = self.initial_virtual_state
-        short_inputargs = self.imported_state.short_inputargs
+        short_inputargs = self.short[0].getarglist()
         constant_inputargs = self.imported_state.constant_inputargs
         inputargs = self.inputargs
         short_jumpargs = inputargs[:]
@@ -271,7 +268,7 @@
         self.short_inliner = Inliner(short_inputargs, jmp_to_short_args)
         for box, const in constant_inputargs.items():
             self.short_inliner.argmap[box] = const
-        for op in self.short:
+        for op in self.short[1:]:
             newop = self.short_inliner.inline_op(op)
             self.optimizer.send_extra_operation(newop)
 
@@ -329,7 +326,7 @@
             raise InvalidLoop
         debug_stop('jit-log-virtualstate')
 
-    def produce_short_preamble(self, lastop):
+    def finilize_short_preamble(self, lastop):
         short = self.short
         assert short[-1].getopnum() == rop.JUMP
 
@@ -343,12 +340,8 @@
                 op.setdescr(descr)
                 short[i] = op
 
-        short_loop = TreeLoop('short preamble')
-        short_inputargs = self.imported_state.short_inputargs
-        short_loop.operations = [ResOperation(rop.TARGET, short_inputargs, 
None)] + \
-                                short
-
         # Clone ops and boxes to get private versions and
+        short_inputargs = short[0].getarglist()
         boxmap = {}
         newargs = [None] * len(short_inputargs)
         for i in range(len(short_inputargs)):
@@ -361,20 +354,20 @@
         inliner = Inliner(short_inputargs, newargs)
         for box, const in self.imported_state.constant_inputargs.items():
             inliner.argmap[box] = const
-        ops = [inliner.inline_op(op) for op in short_loop.operations]
-        short_loop.operations = ops
-        descr = self.start_resumedescr.clone_if_mutable()
-        inliner.inline_descr_inplace(descr)
-        short_loop.start_resumedescr = descr
+        for i in range(len(short)):
+            short[i] = inliner.inline_op(short[i])
+
+        self.start_resumedescr = self.start_resumedescr.clone_if_mutable()
+        inliner.inline_descr_inplace(self.start_resumedescr)
+        #short_loop.start_resumedescr = descr
+        # FIXME: move this to targettoken
 
         # Forget the values to allow them to be freed
-        for box in short_loop.inputargs:
+        for box in short[0].getarglist():
             box.forget_value()
-        for op in short_loop.operations:
+        for op in short:
             if op.result:
                 op.result.forget_value()
-
-        return short_loop
         
     def FIXME_old_stuff():
             preamble_optimizer = self.optimizer
@@ -573,10 +566,9 @@
         self.unroll.add_op_to_short(self.op, False, True)        
 
 class ExportedState(object):
-    def __init__(self, short_inputargs, constant_inputargs,
+    def __init__(self, constant_inputargs,
                  short_boxes, inputarg_setup_ops, optimizer,
                  start_resumedescr):
-        self.short_inputargs = short_inputargs
         self.constant_inputargs = constant_inputargs
         self.short_boxes = short_boxes
         self.inputarg_setup_ops = inputarg_setup_ops
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to