[pypy-commit] pypy jit-duplicated_short_boxes: kill obsolete code for duplicating short boxes
hakanardo
noreply at buildbot.pypy.org
Sun Sep 4 10:59:53 CEST 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-duplicated_short_boxes
Changeset: r47055:66b3de0272ad
Date: 2011-09-04 10:12 +0200
http://bitbucket.org/pypy/pypy/changeset/66b3de0272ad/
Log: kill obsolete code for duplicating short boxes
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
@@ -555,54 +555,6 @@
if synthetic:
self.synthetic[op] = True
- def duplicate(self, destination, op):
- newop = op.clone()
- newop.result = op.result.clonebox()
- destination[newop.result] = newop
- if op.result in self.duplicates:
- self.duplicates[op.result].append(newop.result)
- else:
- self.duplicates[op.result] = [newop.result]
- self.optimizer.make_equal_to(newop.result, self.optimizer.getvalue(op.result))
- return newop
-
- def duplicate_short_boxes_if_needed(self):
- if os.environ.get('DONT_DUPLICATE'):
- return
- may_need_duplication = {}
- for op in self.short_boxes.values():
- if op:
- may_need_duplication[op] = True
- while may_need_duplication:
- op, _ = may_need_duplication.popitem()
- self.maybe_duplicate_op(op, may_need_duplication)
-
- def maybe_duplicate_op(self, op, may_need_duplication):
- for arg in op.getarglist():
- if arg in self.short_boxes:
- producer = self.producer(arg)
- if producer in may_need_duplication:
- del may_need_duplication[producer]
- self.maybe_duplicate_op(producer, may_need_duplication)
-
- allops = None
- for i in range(len(op.getarglist())):
- arg = op.getarg(i)
- if arg in self.duplicates:
- if len(self.duplicates[arg]) > 5:
- debug_print("Refusing to duplicate short box %d times." % len(self.duplicates))
- continue
- if not allops:
- allops = [op]
- previous_ops = len(allops)
- for o in range(previous_ops):
- for box in self.duplicates[arg]:
- if box in self.short_boxes:
- newop = self.duplicate(self.short_boxes, allops[0])
- newop.initarglist(allops[o].getarglist()[:])
- newop.setarg(i, box)
- allops.append(newop)
-
def debug_print(self, logops):
debug_start('jit-short-boxes')
for box, op in self.short_boxes.items():
diff --git a/pypy/jit/metainterp/test/test_virtualstate.py b/pypy/jit/metainterp/test/test_virtualstate.py
--- a/pypy/jit/metainterp/test/test_virtualstate.py
+++ b/pypy/jit/metainterp/test/test_virtualstate.py
@@ -938,58 +938,6 @@
assert self.i1 in sb.short_boxes
assert sum([op.result is self.i1 for op in sb.short_boxes.values() if op]) == 1
- def test_short_box_duplication_indirect1(self):
- class Optimizer(FakeOptimizer):
- def produce_potential_short_preamble_ops(_self, sb):
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p1], self.i1))
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p2], self.i1))
- sb.add_potential(ResOperation(rop.INT_NEG, [self.i1], self.i2))
- sb = ShortBoxes(Optimizer(), [self.p1, self.p2])
- assert len(sb.short_boxes) == 6
- for i in (self.i1, self.i2):
- assert i in sb.short_boxes
- assert sum([op.result is i for op in sb.short_boxes.values() if op]) == 1
- op1, op2 = [op for op in sb.short_boxes.values()
- if op and op.getopnum() == rop.INT_NEG]
- assert op1.result is not op2.result
- pr1, pr2 = sb.producer(op1.getarg(0)), sb.producer(op2.getarg(0))
- assert pr1 is not pr2
- assert pr1.getopnum() == rop.GETFIELD_GC
- assert pr2.getopnum() == rop.GETFIELD_GC
- assert set([pr1.getarg(0), pr2.getarg(0)]) == set([self.p1, self.p2])
-
- def test_short_box_duplication_indirect2(self):
- class Optimizer(FakeOptimizer):
- def produce_potential_short_preamble_ops(_self, sb):
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p1], self.i1))
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p2], self.i1))
- sb.add_potential(ResOperation(rop.INT_NEG, [self.i1], self.i2))
- sb.add_potential(ResOperation(rop.INT_ADD, [ConstInt(7), self.i2],
- self.i3))
- sb = ShortBoxes(Optimizer(), [self.p1, self.p2])
- assert len(sb.short_boxes) == 8
- for i in (self.i1, self.i2):
- assert i in sb.short_boxes
- assert sum([op.result is i for op in sb.short_boxes.values() if op]) == 1
- op1, op2 = [op for op in sb.short_boxes.values()
- if op and op.getopnum() == rop.INT_NEG]
- assert op1.result is not op2.result
- pr1, pr2 = sb.producer(op1.getarg(0)), sb.producer(op2.getarg(0))
- assert pr1 is not pr2
- assert pr1.getopnum() == rop.GETFIELD_GC
- assert pr2.getopnum() == rop.GETFIELD_GC
- assert set([pr1.getarg(0), pr2.getarg(0)]) == set([self.p1, self.p2])
- op1, op2 = [op for op in sb.short_boxes.values()
- if op and op.getopnum() == rop.INT_ADD]
- assert op1.result is not op2.result
- pr1, pr2 = sb.producer(op1.getarg(1)), sb.producer(op2.getarg(1))
- assert pr1 is not pr2
- assert pr1.getopnum() == rop.INT_NEG
- assert pr2.getopnum() == rop.INT_NEG
- negargs = set([pr1.getarg(0), pr2.getarg(0)])
- assert len(negargs) == 2
- assert self.i1 in negargs
-
def test_dont_duplicate_potential_boxes(self):
class Optimizer(FakeOptimizer):
def produce_potential_short_preamble_ops(_self, sb):
@@ -1001,63 +949,6 @@
sb = ShortBoxes(Optimizer(), [self.p1, self.p2])
assert len(sb.short_boxes) == 5
- def test_duplicate_duplicaded_box(self):
- class Optimizer(FakeOptimizer):
- def produce_potential_short_preamble_ops(_self, sb):
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p1], self.p3))
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p2], self.p3))
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p3], self.i2))
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p4], self.i2))
- sb = ShortBoxes(Optimizer(), [self.p1, self.p2, self.p4])
- assert len(sb.short_boxes) == 8
- getfields = {}
- for op in sb.short_boxes.values():
- if op and op.getopnum() == rop.GETFIELD_GC:
- getfields[op.getarg(0)] = op
- i1 = getfields[getfields[self.p1].result].result
- i2 = getfields[getfields[self.p2].result].result
- i3 = getfields[self.p4].result
- ii = set([i1, i2, i3])
- assert len(ii) == 3
- for i in ii:
- assert isinstance(i, BoxInt)
- assert self.i2 in ii
-
- def test_duplucate_on_both_arguments(self):
- class Optimizer(FakeOptimizer):
- def produce_potential_short_preamble_ops(_self, sb):
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p1], self.i1))
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p2], self.i1))
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p3], self.i2))
- sb.add_potential(ResOperation(rop.GETFIELD_GC, [self.p4], self.i2))
- sb.add_potential(ResOperation(rop.INT_ADD, [self.i1, self.i2],
- self.i3))
- sb.add_potential(ResOperation(rop.INT_NEG, [self.i3], self.i4))
-
- sb = ShortBoxes(Optimizer(), [self.p1, self.p2, self.p3, self.p4])
- assert len(sb.short_boxes) == 16
- getfield, int_add, int_neg = {}, {},{}
- for op in sb.short_boxes.values():
- if op:
- if op.getopnum() == rop.GETFIELD_GC:
- getfield[op.getarg(0)] = op
- if op.getopnum() == rop.INT_ADD:
- int_add[tuple(op.getarglist())] = op
- if op.getopnum() == rop.INT_NEG:
- int_neg[op.getarg(0)] = op
- assert len(getfield) == 4
- assert len(int_add) == 4
- assert len(int_neg) == 4
- arg0 = [getfield[self.p1].result, getfield[self.p2].result]
- arg1 = [getfield[self.p3].result, getfield[self.p4].result]
- for a0 in arg0:
- for a1 in arg1:
- assert (a0, a1) in int_add
- for op in int_add.values():
- assert op.result in int_neg
- int_ops = int_add.values() + int_neg.values()
- assert len(set([op.result for op in int_ops])) == 8
-
def test_prioritize1(self):
class Optimizer(FakeOptimizer):
def produce_potential_short_preamble_ops(_self, sb):
More information about the pypy-commit
mailing list