Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78483:6080a2b3e0bf
Date: 2015-07-07 11:37 +0200
http://bitbucket.org/pypy/pypy/changeset/6080a2b3e0bf/

Log:    add an option to rename inputargs

diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py 
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -433,12 +433,16 @@
         else:
             return CONST_0
 
-    def propagate_all_forward(self, inputargs, ops, call_pure_results=None):
-        newargs = []
-        for inparg in inputargs:
-            new_arg = OpHelpers.inputarg_from_tp(inparg.type)
-            inparg.set_forwarded(new_arg)
-            newargs.append(new_arg)
+    def propagate_all_forward(self, inputargs, ops, call_pure_results=None,
+                              rename_inputargs=True):
+        if rename_inputargs:
+            newargs = []
+            for inparg in inputargs:
+                new_arg = OpHelpers.inputarg_from_tp(inparg.type)
+                inparg.set_forwarded(new_arg)
+                newargs.append(new_arg)
+        else:
+            newargs = inputargs
         self.init_inparg_dict_from(newargs)
         self.call_pure_results = call_pure_results
         for op in ops:
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py 
b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
@@ -30,7 +30,6 @@
         operations = operations[:-1]
 
         preamble = TreeLoop('preamble')
-        preamble.inputargs = inputargs
 
         token = JitCellToken()
         start_label = ResOperation(rop.LABEL, inputargs, 
descr=TargetToken(token))
@@ -38,6 +37,7 @@
         compile_data = LoopCompileData(start_label, stop_label, operations)
         start_state, newops = self._do_optimize_loop(compile_data)
         preamble.operations = newops
+        preamble.inputargs = start_state.renamed_inputargs
         return start_state, loop, preamble
 
 class TestUnroll(BaseTestUnroll):
@@ -80,7 +80,7 @@
         jump(p0)
         """
         es, loop, preamble = self.optimize(loop)
-        p0 = loop.inputargs[0]
+        p0 = preamble.inputargs[0]
         assert (heaptracker.adr2int(self.node_vtable_adr) ==
                 es.exported_infos[p0]._known_class.getint())
 
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py 
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -447,7 +447,8 @@
                                              ops, start_state)
         loop_info, ops = self._do_optimize_loop(loop_data, call_pure_results)
         preamble = TreeLoop('preamble')
-        preamble.inputargs = start_label.getarglist()
+        preamble.inputargs = start_state.renamed_inputargs
+        start_label = ResOperation(rop.LABEL, start_state.renamed_inputargs)
         preamble.operations = [start_label] + preamble_ops
         emit_end_label = ResOperation(rop.LABEL, start_state.end_args)
         loop.inputargs = start_state.end_args
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py 
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -70,15 +70,18 @@
     
     def optimize_preamble(self, start_label, end_label, ops):
         self._check_no_forwarding([[start_label, end_label], ops])
-        self.optimizer.propagate_all_forward(start_label.getarglist()[:], ops)
-        exported_state = self.export_state(start_label, end_label)
+        info, newops = self.optimizer.propagate_all_forward(
+            start_label.getarglist()[:], ops)
+        exported_state = self.export_state(start_label, end_label,
+                                           info.inputargs)
         return exported_state, self.optimizer._newoperations
 
     def optimize_peeled_loop(self, start_label, end_jump, ops, state):
         self.short = []
         self._check_no_forwarding([[start_label, end_jump], ops])
         self.import_state(start_label, state)
-        self.optimizer.propagate_all_forward(start_label.getarglist()[:], ops)
+        self.optimizer.propagate_all_forward(start_label.getarglist()[:], ops,
+                                             rename_inputargs=False)
         jump_args = [self.get_box_replacement(op)
                      for op in end_jump.getarglist()]
         jump_args = state.virtual_state.make_inputargs(jump_args,
@@ -186,7 +189,7 @@
         return stop_target.targeting_jitcell_token is 
start_target.targeting_jitcell_token
 
 
-    def export_state(self, start_label, end_label):
+    def export_state(self, start_label, end_label, renamed_inputargs):
         original_label_args = end_label.getarglist()
         end_args = [self.get_box_replacement(a) for a in original_label_args]
         virtual_state = self.get_virtual_state(end_args)
@@ -200,7 +203,7 @@
             infos[arg] = self.optimizer.getinfo(arg)
         label_args = virtual_state.make_inputargs(end_args, self.optimizer)
         return ExportedState(label_args, inparg_mapping, virtual_state, infos,
-                             sb.short_boxes)
+                             sb.short_boxes, renamed_inputargs)
 
 
         inputargs = virtual_state.make_inputargs(jump_args, self.optimizer)
@@ -716,12 +719,14 @@
     * virtual_state - instance of VirtualState representing current state
                       of virtuals at this label
     * short boxes - a mapping op -> preamble_op
+    * renamed_inputargs - the start label arguments in optimized version
     """
     
     def __init__(self, end_args, inputarg_mapping, virtual_state,
-                 exported_infos, short_boxes):
+                 exported_infos, short_boxes, renamed_inputargs):
         self.end_args = end_args
         self.inputarg_mapping = inputarg_mapping
         self.virtual_state = virtual_state
         self.exported_infos = exported_infos
         self.short_boxes = short_boxes
+        self.renamed_inputargs = renamed_inputargs
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to