Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r77877:06323de370d7
Date: 2015-06-05 09:18 +0200
http://bitbucket.org/pypy/pypy/changeset/06323de370d7/

Log:    start fighting with unrolling

diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py 
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -144,7 +144,7 @@
         self.optimize_loop(ops, expected)
 
     def test_constfold_all(self):
-        from rpython.jit.metainterp.executor import _execute_nonspec
+        from rpython.jit.metainterp.executor import _execute_arglist
         import random
         for opnum in range(rop.INT_ADD, rop.SAME_AS_I+1):
             try:
@@ -168,7 +168,7 @@
             jump()
             """ % (op.lower(), ', '.join(map(str, args)))
             argboxes = [InputArgInt(a) for a in args]
-            expected_value = _execute_nonspec(self.cpu, None, opnum, argboxes)
+            expected_value = _execute_arglist(self.cpu, None, opnum, argboxes)
             expected = """
             []
             escape_n(%d)
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
@@ -395,6 +395,8 @@
         from rpython.jit.metainterp.optimizeopt.util import args_dict
 
         self.loop = loop
+        operations = loop.operations
+        inputargs = loop.inputargs
         loop.call_pure_results = args_dict()
         if call_pure_results is not None:
             for k, v in call_pure_results.items():
@@ -405,10 +407,13 @@
         if hasattr(self, 'callinfocollection'):
             metainterp_sd.callinfocollection = self.callinfocollection
         #
-        return optimize_trace(metainterp_sd, None, loop,
+        state = optimize_trace(metainterp_sd, None, loop,
                               self.enable_opts,
                               start_state=start_state,
                               export_state=export_state)
+        compile.forget_optimization_info(operations)
+        compile.forget_optimization_info(inputargs)
+        return state
 
     def unroll_and_optimize(self, loop, call_pure_results=None):
         metainterp_sd = FakeMetaInterpStaticData(self.cpu)
@@ -421,7 +426,6 @@
 
         jump_args = jumpop.getarglist()[:]
         operations = operations[:-1]
-        xxx
 
         preamble = TreeLoop('preamble')
         preamble.inputargs = inputargs
@@ -436,10 +440,9 @@
         assert preamble.operations[-1].getopnum() == rop.LABEL
 
         loop.operations = [preamble.operations[-1]] + \
-                          cloned_operations + \
-                          [ResOperation(rop.JUMP, [memo.get(a, a) for a in 
jump_args],
+                          operations + \
+                          [ResOperation(rop.JUMP, jump_args[:],
                                         descr=token)]
-                          #[inliner.inline_op(jumpop)]
         
         assert loop.operations[-1].getopnum() == rop.JUMP
         assert loop.operations[0].getopnum() == rop.LABEL
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
@@ -175,11 +175,11 @@
 
     def export_state(self, targetop):
         original_jump_args = targetop.getarglist()
-        jump_args = [self.getvalue(a).get_key_box() for a in 
original_jump_args]
+        jump_args = [self.get_box_replacement(a) for a in original_jump_args]
 
         virtual_state = self.get_virtual_state(jump_args)
 
-        values = [self.getvalue(arg) for arg in jump_args]
+        values = [self.getinfo(arg) for arg in jump_args]
         inputargs = virtual_state.make_inputargs(values, self.optimizer)
         short_inputargs = virtual_state.make_inputargs(values, self.optimizer, 
keyboxes=True)
 
@@ -401,6 +401,7 @@
         #        short[i] = op
 
         # Clone ops and boxes to get private versions and
+        return
         short_inputargs = short[0].getarglist()
         boxmap = {}
         newargs = [None] * len(short_inputargs)
@@ -411,8 +412,8 @@
             else:
                 newargs[i] = a.clone_input_arg()
                 boxmap[a] = newargs[i]
-        memo = Memo(short_inputargs, newargs)
-        target_token.assumed_classes = {}
+        #memo = Memo(short_inputargs, newargs)
+        #target_token.assumed_classes = {}
         for i in range(len(short)):
             op = short[i]
             newop = op.clone(memo)
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py 
b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -457,7 +457,8 @@
         self.info_counter = -1
         self.numnotvirtuals = 0
         for s in state:
-            s.enum(self)
+            if s:
+                s.enum(self)
 
     def generalization_of(self, other, bad=None, cpu=None):
         state = GenerateGuardState(cpu=cpu, bad=bad)
@@ -528,6 +529,9 @@
         return self.optimizer.getvalue(box)
 
     def state(self, box):
+        if box.type == 'r':
+            xxxx
+        return None
         value = self.getvalue(box)
         box = value.get_key_box()
         try:
@@ -551,12 +555,15 @@
             opt = self.optimizer.optearlyforce
         else:
             opt = self.optimizer
-        values = [self.getvalue(box).force_at_end_of_preamble(already_forced,
-                                                              opt)
-                  for box in jump_args]
+        for box in jump_args:
+            if box.type == 'r':
+                zxsadsadsa
+        #values = [self.getvalue(box).force_at_end_of_preamble(already_forced,
+        #                                                      opt)
+        #          for box in jump_args]
 
-        for value in values:
-            value.visitor_walk_recursive(self)
+        #for value in values:
+        #    value.visitor_walk_recursive(self)
         return VirtualState([self.state(box) for box in jump_args])
 
     def visit_not_virtual(self, value):
diff --git a/rpython/jit/metainterp/resoperation.py 
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -122,6 +122,7 @@
 
     def copy_and_change(self, opnum, args=None, descr=None):
         "shallow copy: the returned operation is meant to be used in place of 
self"
+        # XXX specialize
         from rpython.jit.metainterp.history import DONT_CHANGE
         
         if args is None:
diff --git a/rpython/jit/tool/oparser.py b/rpython/jit/tool/oparser.py
--- a/rpython/jit/tool/oparser.py
+++ b/rpython/jit/tool/oparser.py
@@ -28,19 +28,10 @@
         if args is not None:
             op.initarglist(args)
         else:
-            op.initarglist(self._args)
+            op.initarglist(self._args[:])
         assert descr is None
         return op
 
-    def clone(self, memo):
-        op = self.__class__()
-        op.initarglist([memo.get(arg, arg) for arg in self.getarglist()])
-        memo.set(self, op)
-        return op
-
-    def clone_input_arg(self):
-        assert self.type == 'r'
-        return InputArgRef()
 
 class ESCAPE_OP_I(ESCAPE_OP):
     type = 'i'
@@ -76,11 +67,6 @@
     def getopname(self):
         return 'force_spill'
 
-    def clone(self):
-        op = FORCE_SPILL()
-        op.initarglist(self.getarglist()[:])
-        return op
-
     def copy_and_change(self, opnum, args=None, descr=None):
         assert opnum == self.OPNUM
         newop = FORCE_SPILL()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to