[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