[pypy-svn] pypy jit-short_from_state: force unsupported vrituals and convert them into NotVirtual's when producing the VirtualState

hakanardo commits-noreply at bitbucket.org
Mon Apr 25 10:37:21 CEST 2011


Author: Hakan Ardo <hakan at debian.org>
Branch: jit-short_from_state
Changeset: r43547:a933cd00f4b7
Date: 2011-04-24 20:51 +0200
http://bitbucket.org/pypy/pypy/changeset/a933cd00f4b7/

Log:	force unsupported vrituals and convert them into NotVirtual's when
	producing the VirtualState

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
@@ -158,8 +158,6 @@
 
             loop.preamble.operations = self.optimizer.newoperations
 
-            self.optimizer.force_at_end_of_preamble(jump_args)
-
             modifier = VirtualStateAdder(self.optimizer)
             virtual_state = modifier.get_virtual_state(jump_args)
             values = [self.getvalue(arg) for arg in jump_args]
@@ -631,6 +629,7 @@
                 args = op.getarglist()
                 modifier = VirtualStateAdder(self.optimizer)
                 virtual_state = modifier.get_virtual_state(args)
+
                 for sh in short:
                     ok = False
                     extra_guards = []

diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -81,7 +81,7 @@
         return self.box
 
     def force_at_end_of_preamble(self):
-        pass
+        return None
 
     def get_cloned(self, optimizer, valuemap, force_if_needed=True):
         if self in valuemap:
@@ -330,10 +330,6 @@
 
         self.optimizations  = optimizations
 
-    def force_at_end_of_preamble(self, jumpargs):
-        for a in jumpargs:
-            self.getvalue(a).force_at_end_of_preamble()
-
     def reconstruct_for_next_iteration(self, short_boxes, surviving_boxes=None,
                                        optimizer=None, valuemap=None):
         assert optimizer is None

diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py b/pypy/jit/metainterp/optimizeopt/virtualstate.py
--- a/pypy/jit/metainterp/optimizeopt/virtualstate.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py
@@ -4,7 +4,7 @@
                                                       LEVEL_KNOWNCLASS, \
                                                       LEVEL_NONNULL, \
                                                       LEVEL_UNKNOWN, \
-                                                      MININT, MAXINT
+                                                      MININT, MAXINT, OptValue
 from pypy.jit.metainterp.history import BoxInt, ConstInt, BoxPtr, Const
 from pypy.jit.metainterp.optimizeutil import InvalidLoop
 from pypy.jit.metainterp.optimizeopt.intutils import IntBound
@@ -271,7 +271,11 @@
     def get_virtual_state(self, jump_args):
         for box in jump_args:
             value = self.getvalue(box)
-            value.get_args_for_fail(self)
+            box = value.force_at_end_of_preamble()
+            if box:
+                self.make_not_virtual(OptValue(box))
+            else:
+                value.get_args_for_fail(self)
         return VirtualState([self.state(box) for box in jump_args])
 
 

diff --git a/pypy/jit/metainterp/optimizeopt/virtualize.py b/pypy/jit/metainterp/optimizeopt/virtualize.py
--- a/pypy/jit/metainterp/optimizeopt/virtualize.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualize.py
@@ -32,7 +32,7 @@
         return self.box
 
     def force_at_end_of_preamble(self):
-        self.force_box()
+        return self.force_box()
 
     def make_virtual_info(self, modifier, fieldnums):
         if fieldnums is None:
@@ -91,7 +91,7 @@
         return True
 
     def force_at_end_of_preamble(self):
-        pass
+        return None
 
     def _really_force(self):
         op = self.source_op
@@ -244,7 +244,7 @@
         self._items[index] = itemvalue
 
     def force_at_end_of_preamble(self):
-        pass
+        return None
     
     def _really_force(self):
         assert self.source_op is not None


More information about the Pypy-commit mailing list