[pypy-commit] pypy optresult-unroll: cleanup a bit

fijal noreply at buildbot.pypy.org
Mon Aug 31 18:58:26 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79323:256f5d6b85c3
Date: 2015-08-31 18:43 +0200
http://bitbucket.org/pypy/pypy/changeset/256f5d6b85c3/

Log:	cleanup a bit

diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
--- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
+++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
@@ -418,4 +418,5 @@
         return [label_op] + self.short + [jump_op]
 
 class ExtendedShortPreambleBuilder(AbstractShortPreambleBuilder):
-    pass
+    def __init__(self, sb):
+        self.sb = sb
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
@@ -1,5 +1,4 @@
 
-import sys
 from rpython.jit.metainterp.history import Const, TargetToken, JitCellToken
 from rpython.jit.metainterp.optimizeopt.shortpreamble import ShortBoxes,\
      ShortPreambleBuilder, ExtendedShortPreambleBuilder, PreambleOp
@@ -199,7 +198,7 @@
         target_token.virtual_state = virtual_state
         target_token.short_preamble = short_preamble
         jitcelltoken.target_tokens.append(target_token)
-        self.short_preamble_producer = None # ExtendedShortPreambleBuilder()
+        self.short_preamble_producer = ExtendedShortPreambleBuilder(sb)
         label_op.initarglist(label_op.getarglist() + sb.used_boxes)
         return target_token
 
@@ -232,25 +231,24 @@
                     self.send_extra_operation(guard)
             except VirtualStatesCantMatch:
                 continue
-            pass_to_short = target_virtual_state.make_inputargs(args,
-                self.optimizer, append_virtuals=True)
-            args = target_virtual_state.make_inputargs(args,
-                self.optimizer)
+            args, virtuals = target_virtual_state.make_inputargs_and_virtuals(
+                args, self.optimizer)
             short_preamble = target_token.short_preamble
-            lgt = len(short_preamble) - 1
-            assert lgt >= 0
-            extra = self.inline_short_preamble(pass_to_short, args,
-                short_preamble[0].getarglist(), short_preamble[1:lgt],
-                short_preamble[-1].getarglist(), self.optimizer.patchguardop)
+            extra = self.inline_short_preamble(args + virtuals, args,
+                                short_preamble, self.optimizer.patchguardop)
             self.send_extra_operation(jump_op.copy_and_change(rop.JUMP,
                                       args=args + extra,
                                       descr=target_token))
             return None # explicit because the return can be non-None
         return virtual_state
 
-    def inline_short_preamble(self, jump_args, args_no_virtuals,
-                              short_inputargs, short_ops,
-                              short_jump_op, patchguardop):
+    def inline_short_preamble(self, jump_args, args_no_virtuals, short,
+                              patchguardop):
+        short_inputargs = short[0].getarglist()
+        short_jump_op = short[-1].getarglist()
+        lgt = len(short) - 1
+        assert lgt >= 0
+        short_ops = short[1:lgt]        
         try:
             self._check_no_forwarding([short_inputargs, short_ops], False)
             assert len(short_inputargs) == len(jump_args)
@@ -284,15 +282,14 @@
         infos = {}
         for arg in end_args:
             infos[arg] = self.optimizer.getinfo(arg)
-        label_args = virtual_state.make_inputargs(end_args, self.optimizer)
+        label_args, virtuals = virtual_state.make_inputargs_and_virtuals(
+            end_args, self.optimizer)
         for arg in label_args:
             infos[arg] = self.optimizer.getinfo(arg)            
         sb = ShortBoxes()
-        label_args_plus_virtuals = virtual_state.make_inputargs(end_args,
-                                        self.optimizer, append_virtuals=True)
         short_boxes = sb.create_short_boxes(self.optimizer, renamed_inputargs,
-                                            label_args_plus_virtuals)
-        short_inputargs = sb.create_short_inputargs(label_args_plus_virtuals)
+                                            label_args + virtuals)
+        short_inputargs = sb.create_short_inputargs(label_args + virtuals)
         for produced_op in short_boxes:
             op = produced_op.short_op.res
             if not isinstance(op, Const):
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
@@ -572,8 +572,7 @@
                                           runtime_boxes[i], state)
         return state
 
-    def make_inputargs(self, inputargs, optimizer, force_boxes=False,
-                       append_virtuals=False):
+    def make_inputargs(self, inputargs, optimizer, force_boxes=False):
         if optimizer.optearlyforce:
             optimizer = optimizer.optearlyforce
         assert len(inputargs) == len(self.state)
@@ -589,15 +588,19 @@
         for i in range(len(inputargs)):
             self.state[i].enum_forced_boxes(boxes, inputargs[i], optimizer)
 
-        if append_virtuals:
-            # we append the virtuals here in case some stuff is proven
-            # to be not a virtual and there are getfields in the short preamble
-            # that will read items out of there
-            for i in range(len(inputargs)):
-                if not isinstance(self.state[i], NotVirtualStateInfo):
-                    boxes.append(inputargs[i])
+        return boxes
+
+    def make_inputargs_and_virtuals(self, inputargs, optimizer):
+        inpargs = self.make_inputargs(inputargs, optimizer)
+        # we append the virtuals here in case some stuff is proven
+        # to be not a virtual and there are getfields in the short preamble
+        # that will read items out of there
+        virtuals = []
+        for i in range(len(inputargs)):
+            if not isinstance(self.state[i], NotVirtualStateInfo):
+                virtuals.append(inputargs[i])
             
-        return boxes
+        return inpargs, virtuals
 
     def debug_print(self, hdr='', bad=None, metainterp_sd=None):
         if bad 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
@@ -325,7 +325,7 @@
 
     def parse_op_no_result(self, line):
         opnum, args, descr, fail_args = self.parse_op(line)
-        res = self.create_op_no_result(opnum, args, descr, fail_args)
+        res = self.create_op(opnum, args, None, descr, fail_args)
         return res
 
     def parse_next_op(self, line):


More information about the pypy-commit mailing list