[pypy-commit] pypy default: use optimizer.getvalue instead of accessing values directly (should fix issue 1048)
hakanardo
noreply at buildbot.pypy.org
Sat Feb 18 09:54:43 CET 2012
Author: Hakan Ardo <hakan at debian.org>
Branch:
Changeset: r52600:a6294c0d0f47
Date: 2012-02-18 09:16 +0100
http://bitbucket.org/pypy/pypy/changeset/a6294c0d0f47/
Log: use optimizer.getvalue instead of accessing values directly (should
fix issue 1048)
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
@@ -567,7 +567,7 @@
assert isinstance(descr, compile.ResumeGuardDescr)
modifier = resume.ResumeDataVirtualAdder(descr, self.resumedata_memo)
try:
- newboxes = modifier.finish(self.values, self.pendingfields)
+ newboxes = modifier.finish(self, self.pendingfields)
if len(newboxes) > self.metainterp_sd.options.failargs_limit:
raise resume.TagOverflow
except resume.TagOverflow:
diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py
--- a/pypy/jit/metainterp/resume.py
+++ b/pypy/jit/metainterp/resume.py
@@ -182,23 +182,22 @@
# env numbering
- def number(self, values, snapshot):
+ def number(self, optimizer, snapshot):
if snapshot is None:
return lltype.nullptr(NUMBERING), {}, 0
if snapshot in self.numberings:
numb, liveboxes, v = self.numberings[snapshot]
return numb, liveboxes.copy(), v
- numb1, liveboxes, v = self.number(values, snapshot.prev)
+ numb1, liveboxes, v = self.number(optimizer, snapshot.prev)
n = len(liveboxes)-v
boxes = snapshot.boxes
length = len(boxes)
numb = lltype.malloc(NUMBERING, length)
for i in range(length):
box = boxes[i]
- value = values.get(box, None)
- if value is not None:
- box = value.get_key_box()
+ value = optimizer.getvalue(box)
+ box = value.get_key_box()
if isinstance(box, Const):
tagged = self.getconst(box)
@@ -318,14 +317,14 @@
_, tagbits = untag(tagged)
return tagbits == TAGVIRTUAL
- def finish(self, values, pending_setfields=[]):
+ def finish(self, optimizer, pending_setfields=[]):
# compute the numbering
storage = self.storage
# make sure that nobody attached resume data to this guard yet
assert not storage.rd_numb
snapshot = storage.rd_snapshot
assert snapshot is not None # is that true?
- numb, liveboxes_from_env, v = self.memo.number(values, snapshot)
+ numb, liveboxes_from_env, v = self.memo.number(optimizer, snapshot)
self.liveboxes_from_env = liveboxes_from_env
self.liveboxes = {}
storage.rd_numb = numb
@@ -341,23 +340,23 @@
liveboxes[i] = box
else:
assert tagbits == TAGVIRTUAL
- value = values[box]
+ value = optimizer.getvalue(box)
value.get_args_for_fail(self)
for _, box, fieldbox, _ in pending_setfields:
self.register_box(box)
self.register_box(fieldbox)
- value = values[fieldbox]
+ value = optimizer.getvalue(fieldbox)
value.get_args_for_fail(self)
- self._number_virtuals(liveboxes, values, v)
+ self._number_virtuals(liveboxes, optimizer, v)
self._add_pending_fields(pending_setfields)
storage.rd_consts = self.memo.consts
dump_storage(storage, liveboxes)
return liveboxes[:]
- def _number_virtuals(self, liveboxes, values, num_env_virtuals):
+ def _number_virtuals(self, liveboxes, optimizer, num_env_virtuals):
# !! 'liveboxes' is a list that is extend()ed in-place !!
memo = self.memo
new_liveboxes = [None] * memo.num_cached_boxes()
@@ -397,7 +396,7 @@
memo.nvholes += length - len(vfieldboxes)
for virtualbox, fieldboxes in vfieldboxes.iteritems():
num, _ = untag(self.liveboxes[virtualbox])
- value = values[virtualbox]
+ value = optimizer.getvalue(virtualbox)
fieldnums = [self._gettagged(box)
for box in fieldboxes]
vinfo = value.make_virtual_info(self, fieldnums)
More information about the pypy-commit
mailing list