[pypy-commit] pypy call-loopinvariant-into-bridges: Backed out changeset 89f271b2dd38
cfbolz
pypy.commits at gmail.com
Wed Mar 7 10:27:54 EST 2018
Author: Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>
Branch: call-loopinvariant-into-bridges
Changeset: r93960:1d03f9c2353f
Date: 2018-03-07 13:34 +0100
http://bitbucket.org/pypy/pypy/changeset/1d03f9c2353f/
Log: Backed out changeset 89f271b2dd38
back out this change for now. it leads to weird crashes and isn't
the main point of this branch anyway.
diff --git a/rpython/jit/metainterp/optimizeopt/bridgeopt.py b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
--- a/rpython/jit/metainterp/optimizeopt/bridgeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
@@ -33,6 +33,13 @@
# maybe should be delegated to the optimization classes?
+def tag_box(box, liveboxes_from_env, memo):
+ from rpython.jit.metainterp.history import Const
+ if isinstance(box, Const):
+ return memo.getconst(box)
+ else:
+ return liveboxes_from_env[box] # has to exist
+
def decode_box(resumestorage, tagged, liveboxes, cpu):
from rpython.jit.metainterp.resume import untag, TAGCONST, TAGINT, TAGBOX
from rpython.jit.metainterp.resume import NULLREF, TAG_CONST_OFFSET, tagged_eq
@@ -53,12 +60,11 @@
raise AssertionError("unreachable")
return box
-def serialize_optimizer_knowledge(optimizer, numb_state, liveboxes, adder):
+def serialize_optimizer_knowledge(optimizer, numb_state, liveboxes, liveboxes_from_env, memo):
from rpython.jit.metainterp.history import ConstInt
-
available_boxes = {}
for box in liveboxes:
- if box is not None:
+ if box is not None and box in liveboxes_from_env:
available_boxes[box] = None
# class knowledge is stored as bits, true meaning the class is known, false
@@ -92,16 +98,16 @@
numb_state.append_int(len(triples_struct))
for box1, descr, box2 in triples_struct:
descr_index = descr.descr_index
- numb_state.append_short(adder._gettagged(box1))
+ numb_state.append_short(tag_box(box1, liveboxes_from_env, memo))
numb_state.append_int(descr_index)
- numb_state.append_short(adder._gettagged(box2))
+ numb_state.append_short(tag_box(box2, liveboxes_from_env, memo))
numb_state.append_int(len(triples_array))
for box1, index, descr, box2 in triples_array:
descr_index = descr.descr_index
- numb_state.append_short(adder._gettagged(box1))
+ numb_state.append_short(tag_box(box1, liveboxes_from_env, memo))
numb_state.append_int(index)
numb_state.append_int(descr_index)
- numb_state.append_short(adder._gettagged(box2))
+ numb_state.append_short(tag_box(box2, liveboxes_from_env, memo))
else:
numb_state.append_int(0)
numb_state.append_int(0)
@@ -112,8 +118,8 @@
numb_state.append_int(len(tuples_loopinvariant))
for constarg0, box in tuples_loopinvariant:
numb_state.append_short(
- adder._gettagged(ConstInt(constarg0)))
- numb_state.append_short(adder._gettagged(box))
+ tag_box(ConstInt(constarg0), liveboxes_from_env, memo))
+ numb_state.append_short(tag_box(box, liveboxes_from_env, memo))
else:
numb_state.append_int(0)
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -464,7 +464,7 @@
numb_state.patch(1, len(liveboxes))
- self._add_optimizer_sections(numb_state, liveboxes)
+ self._add_optimizer_sections(numb_state, liveboxes, liveboxes_from_env)
storage.rd_numb = numb_state.create_numbering()
storage.rd_consts = self.memo.consts
return liveboxes[:]
@@ -584,11 +584,11 @@
return self.liveboxes_from_env[box]
return self.liveboxes[box]
- def _add_optimizer_sections(self, numb_state, liveboxes):
+ def _add_optimizer_sections(self, numb_state, liveboxes, liveboxes_from_env):
# add extra information about things the optimizer learned
from rpython.jit.metainterp.optimizeopt.bridgeopt import serialize_optimizer_knowledge
serialize_optimizer_knowledge(
- self.optimizer, numb_state, liveboxes, self)
+ self.optimizer, numb_state, liveboxes, liveboxes_from_env, self.memo)
class AbstractVirtualInfo(object):
kind = REF
diff --git a/rpython/jit/metainterp/test/test_bridgeopt.py b/rpython/jit/metainterp/test/test_bridgeopt.py
--- a/rpython/jit/metainterp/test/test_bridgeopt.py
+++ b/rpython/jit/metainterp/test/test_bridgeopt.py
@@ -60,7 +60,7 @@
numb_state.append_int(1) # size of resume block
liveboxes = [InputArgInt(), box2, box1, box3]
- serialize_optimizer_knowledge(optimizer, numb_state, liveboxes, None)
+ serialize_optimizer_knowledge(optimizer, numb_state, liveboxes, {}, None)
assert unpack_numbering(numb_state.create_numbering()) == [
1, 0b010000, 0, 0, 0]
@@ -100,7 +100,7 @@
numb_state.append_int(1) # size of resume block
liveboxes = [box for (box, _) in boxes_known_classes]
- serialize_optimizer_knowledge(optimizer, numb_state, liveboxes, None)
+ serialize_optimizer_knowledge(optimizer, numb_state, liveboxes, {}, None)
assert len(numb_state.create_numbering().code) == 4 + math.ceil(len(refboxes) / 6.0)
@@ -221,31 +221,6 @@
self.check_resops(getfield_gc_i=4) # 3x a.x, 1x a.n
self.check_resops(getfield_gc_r=1) # in main loop
- def test_bridge_field_read_virtual(self):
- myjitdriver = jit.JitDriver(greens=[], reds=['y', 'res', 'n', 'a'])
- class A(object):
- pass
- class Virt(object):
- def __init__(self, n1):
- self.n1 = n1
-
- def f(y, n):
- a = A()
- a.n = n
- res = 0
- while y > 0:
- myjitdriver.jit_merge_point(y=y, n=n, res=res, a=a)
- v = Virt(a.n)
- if y > n:
- res += 1
- res += v.n1 + a.n
- y -= 1
- return res
- res = self.meta_interp(f, [32, 16])
- assert res == f(32, 16)
- self.check_trace_count(3)
- self.check_resops(getfield_gc_i=1) # 1x a.x
-
def test_bridge_field_read_constants(self):
myjitdriver = jit.JitDriver(greens=[], reds=['y', 'res', 'n'])
class A(object):
More information about the pypy-commit
mailing list