[pypy-commit] pypy result-in-resops: hack until the first test of virtuals passes

fijal noreply at buildbot.pypy.org
Sun Sep 23 18:44:15 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r57486:57256c603a57
Date: 2012-09-23 18:43 +0200
http://bitbucket.org/pypy/pypy/changeset/57256c603a57/

Log:	hack until the first test of virtuals passes

diff --git a/pypy/jit/metainterp/optimizeopt/earlyforce.py b/pypy/jit/metainterp/optimizeopt/earlyforce.py
--- a/pypy/jit/metainterp/optimizeopt/earlyforce.py
+++ b/pypy/jit/metainterp/optimizeopt/earlyforce.py
@@ -24,7 +24,7 @@
 
     def new(self):
         return OptEarlyForce()
-
+    
     def setup(self):
         self.optimizer.optearlyforce = self
 
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
@@ -277,6 +277,9 @@
     def getvalue(self, box):
         return self.optimizer.getvalue(box)
 
+    def setvalue(self, box, value):
+        self.optimizer.setvalue(box, value)
+
     def make_constant(self, box, constbox):
         return self.optimizer.make_constant(box, constbox)
 
@@ -424,7 +427,6 @@
         #    value = constbox.getint()
         #    return self.interned_ints.setdefault(value, box)
 
-    @specialize.argtype(0)
     def getvalue(self, box):
         if box.is_constant():
             return ConstantValue(box)
@@ -437,6 +439,11 @@
         self.ensure_imported(value)
         return value
 
+    def setvalue(self, box, value):
+        assert not box.is_constant()
+        assert  not box.has_extra("optimize_value")
+        box.set_extra("optimize_value", value)
+
     def copy_op_if_modified_by_optimization(self, op):
         new_op = op.copy_if_modified_by_optimization(self)
         if new_op is not op:
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -70,7 +70,7 @@
     class FakeVirtualValue(virtualize.AbstractVirtualValue):
         def _make_virtual(self, *args):
             return FakeVInfo()
-    v1 = FakeVirtualValue(None, None)
+    v1 = FakeVirtualValue(None)
     vinfo1 = v1.make_virtual_info(None, [1, 2, 4])
     vinfo2 = v1.make_virtual_info(None, [1, 2, 4])
     assert vinfo1 is vinfo2
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
@@ -10,14 +10,12 @@
 
 class AbstractVirtualValue(optimizer.OptValue):
     _attrs_ = ('keybox', 'source_op', '_cached_vinfo')
-    box = None
     level = optimizer.LEVEL_NONNULL
     _cached_vinfo = None
 
-    def __init__(self, keybox, source_op=None):
-        self.keybox = keybox   # only used as a key in dictionaries
-        self.source_op = source_op  # the NEW_WITH_VTABLE/NEW_ARRAY operation
-                                    # that builds this box
+    def __init__(self, op):
+        self.op = op
+        self.forced = False
 
     def is_forced_virtual(self):
         return self.box is not None
@@ -28,10 +26,10 @@
         return self.box
 
     def force_box(self, optforce):
-        if self.box is None:
-            optforce.forget_numberings(self.keybox)
+        if not self.forced:
+            optforce.forget_numberings(self.op)
             self._really_force(optforce)
-        return self.box
+        return self.op
 
     def force_at_end_of_preamble(self, already_forced, optforce):
         value = already_forced.get(self, None)
@@ -70,8 +68,8 @@
 class AbstractVirtualStructValue(AbstractVirtualValue):
     _attrs_ = ('_fields', 'cpu', '_cached_sorted_fields')
 
-    def __init__(self, cpu, keybox, source_op=None):
-        AbstractVirtualValue.__init__(self, keybox, source_op)
+    def __init__(self, cpu, op):
+        AbstractVirtualValue.__init__(self, op)
         self.cpu = cpu
         self._fields = {}
         self._cached_sorted_fields = None
@@ -128,12 +126,9 @@
         return self
 
     def _really_force(self, optforce):
-        op = self.source_op
-        assert op is not None
-        # ^^^ This case should not occur any more (see test_bug_3).
-        #
+        op = self.op
         if not we_are_translated():
-            op.name = 'FORCE ' + self.source_op.name
+            op.name = 'FORCE ' + op.name
 
         if self._is_immutable_and_filled_with_constants():
             box = optforce.optimizer.constant_fold(op)
@@ -146,7 +141,7 @@
             # keep self._fields, because it's all immutable anyway
         else:
             optforce.emit_operation(op)
-            self.box = box = op.result
+            self.forced = True
             #
             iteritems = self._fields.iteritems()
             if not we_are_translated(): #random order is fine, except for tests
@@ -201,8 +196,8 @@
 class VirtualValue(AbstractVirtualStructValue):
     level = optimizer.LEVEL_KNOWNCLASS
 
-    def __init__(self, cpu, known_class, keybox, source_op=None):
-        AbstractVirtualStructValue.__init__(self, cpu, keybox, source_op)
+    def __init__(self, cpu, known_class, op):
+        AbstractVirtualStructValue.__init__(self, cpu, op)
         assert isinstance(known_class, Const)
         self.known_class = known_class
 
@@ -222,8 +217,8 @@
 
 class VStructValue(AbstractVirtualStructValue):
 
-    def __init__(self, cpu, structdescr, keybox, source_op=None):
-        AbstractVirtualStructValue.__init__(self, cpu, keybox, source_op)
+    def __init__(self, cpu, structdescr, op):
+        AbstractVirtualStructValue.__init__(self, cpu, op)
         self.structdescr = structdescr
 
     def _make_virtual(self, modifier):
@@ -236,8 +231,8 @@
 
 class VArrayValue(AbstractVirtualValue):
 
-    def __init__(self, arraydescr, constvalue, size, keybox, source_op=None):
-        AbstractVirtualValue.__init__(self, keybox, source_op)
+    def __init__(self, arraydescr, constvalue, size, op):
+        AbstractVirtualValue.__init__(self, op)
         self.arraydescr = arraydescr
         self.constvalue = constvalue
         self._items = [self.constvalue] * size
@@ -293,8 +288,8 @@
         return modifier.make_varray(self.arraydescr)
 
 class VArrayStructValue(AbstractVirtualValue):
-    def __init__(self, arraydescr, size, keybox, source_op=None):
-        AbstractVirtualValue.__init__(self, keybox, source_op)
+    def __init__(self, arraydescr, size, op):
+        AbstractVirtualValue.__init__(self, op)
         self.arraydescr = arraydescr
         self._items = [{} for _ in xrange(size)]
 
@@ -366,9 +361,9 @@
     def new(self):
         return OptVirtualize()
 
-    def make_virtual(self, known_class, box, source_op=None):
-        vvalue = VirtualValue(self.optimizer.cpu, known_class, box, source_op)
-        self.make_equal_to(box, vvalue)
+    def make_virtual(self, known_class, op):
+        vvalue = VirtualValue(self.optimizer.cpu, known_class, op)
+        self.setvalue(op, vvalue)
         return vvalue
 
     def make_varray(self, arraydescr, size, box, source_op=None):
@@ -475,10 +470,10 @@
             self.emit_operation(op)
 
     def optimize_NEW_WITH_VTABLE(self, op):
-        self.make_virtual(op.getarg(0), op.result, op)
+        self.make_virtual(op.getarg(0), op)
 
     def optimize_NEW(self, op):
-        self.make_vstruct(op.getdescr(), op.result, op)
+        self.make_vstruct(op.getdescr(), op)
 
     def optimize_NEW_ARRAY(self, op):
         sizebox = self.get_constant_box(op.getarg(0))
diff --git a/pypy/jit/metainterp/resoperation.py b/pypy/jit/metainterp/resoperation.py
--- a/pypy/jit/metainterp/resoperation.py
+++ b/pypy/jit/metainterp/resoperation.py
@@ -199,7 +199,8 @@
     @specialize.arg(1)
     def del_extra(self, key):
         if key == 'optimize_value':
-            del self._optimize_value
+            if hasattr(self, '_optimize_value'):
+                del self._optimize_value
 
 def getkind(TYPE, supports_floats=True,
                   supports_longlong=True,
@@ -1208,9 +1209,9 @@
         return self._args[i]
 
     @specialize.arg(1)
-    def foreach_arg(self, func, arg):
+    def foreach_arg(self, func, func_arg):
         for i, arg in enumerate(self._args):
-            func(arg, self.getopnum(), i, arg)
+            func(func_arg, self.getopnum(), i, arg)
 
     @specialize.argtype(1)
     def copy_if_modified_by_optimization(self, opt):


More information about the pypy-commit mailing list