[pypy-commit] pypy jit-leaner-frontend: use a much more lightweight approach (We don't care about the order of iterations of snapshots here)
fijal
pypy.commits at gmail.com
Fri Mar 25 06:15:20 EDT 2016
Author: fijal
Branch: jit-leaner-frontend
Changeset: r83337:2e1402dc3f14
Date: 2016-03-25 12:14 +0200
http://bitbucket.org/pypy/pypy/changeset/2e1402dc3f14/
Log: use a much more lightweight approach (We don't care about the order
of iterations of snapshots here)
diff --git a/rpython/jit/metainterp/opencoder.py b/rpython/jit/metainterp/opencoder.py
--- a/rpython/jit/metainterp/opencoder.py
+++ b/rpython/jit/metainterp/opencoder.py
@@ -50,20 +50,6 @@
def get(self, index):
return self.main_iter._untag(index)
- def _update_liverange(self, item, index, liveranges):
- tag, v = untag(item)
- if tag == TAGBOX:
- liveranges[v] = index
-
- def update_liveranges(self, index, liveranges):
- for item in self.vable_array:
- self._update_liverange(item, index, liveranges)
- for item in self.vref_array:
- self._update_liverange(item, index, liveranges)
- for frame in self.framestack:
- for item in frame.box_array:
- self._update_liverange(item, index, liveranges)
-
def unpack_jitcode_pc(self, snapshot):
return unpack_uint(snapshot.packed_jitcode_pc)
@@ -71,6 +57,22 @@
# NOT_RPYTHON
return [self.get(i) for i in arr]
+def _update_liverange(item, index, liveranges):
+ tag, v = untag(item)
+ if tag == TAGBOX:
+ liveranges[v] = index
+
+def update_liveranges(snapshot, index, liveranges):
+ assert isinstance(snapshot, TopSnapshot)
+ for item in snapshot.vable_array:
+ _update_liverange(item, index, liveranges)
+ for item in snapshot.vref_array:
+ _update_liverange(item, index, liveranges)
+ while snapshot:
+ for item in snapshot.box_array:
+ _update_liverange(item, index, liveranges)
+ snapshot = snapshot.prev
+
class TraceIterator(BaseTrace):
def __init__(self, trace, start, end, force_inputargs=None,
metainterp_sd=None):
@@ -151,8 +153,8 @@
if opwithdescr[opnum]:
descr_index = self._next()
if rop.is_guard(opnum):
- self.get_snapshot_iter(descr_index).update_liveranges(
- index, liveranges)
+ update_liveranges(self.trace._snapshots[descr_index], index,
+ liveranges)
if opclasses[opnum].type != 'v':
return index + 1
return index
More information about the pypy-commit
mailing list