[pypy-commit] pypy default: Memory saving on 'rd_locs', which turns out to be often exactly equal to
arigo
noreply at buildbot.pypy.org
Sun Oct 4 11:38:18 CEST 2015
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r79968:dfaa5710b535
Date: 2015-10-04 11:38 +0200
http://bitbucket.org/pypy/pypy/changeset/dfaa5710b535/
Log: Memory saving on 'rd_locs', which turns out to be often exactly
equal to the previously generated rd_locs
diff --git a/rpython/jit/backend/llsupport/assembler.py b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -173,6 +173,8 @@
input_i += 1
return locs
+ _previous_rd_locs = []
+
def store_info_on_descr(self, startspos, guardtok):
withfloats = False
for box in guardtok.failargs:
@@ -184,7 +186,17 @@
fail_descr = cast_instance_to_gcref(guardtok.faildescr)
fail_descr = rffi.cast(lltype.Signed, fail_descr)
base_ofs = self.cpu.get_baseofs_of_frame_field()
- positions = [rffi.cast(rffi.USHORT, 0)] * len(guardtok.fail_locs)
+ #
+ # in practice, about 2/3rd of 'positions' lists that we build are
+ # exactly the same as the previous one, so share the lists to
+ # conserve memory
+ if len(self._previous_rd_locs) == len(guardtok.fail_locs):
+ positions = self._previous_rd_locs # tentatively
+ shared = True
+ else:
+ positions = [rffi.cast(rffi.USHORT, 0)] * len(guardtok.fail_locs)
+ shared = False
+ #
for i, loc in enumerate(guardtok.fail_locs):
if loc is None:
position = 0xFFFF
@@ -203,7 +215,15 @@
position = len(self.cpu.gen_regs) + loc.value * coeff
else:
position = self.cpu.all_reg_indexes[loc.value]
+
+ if shared:
+ if (rffi.cast(lltype.Signed, self._previous_rd_locs[i]) ==
+ rffi.cast(lltype.Signed, position)):
+ continue # still equal
+ positions = positions[:]
+ shared = False
positions[i] = rffi.cast(rffi.USHORT, position)
+ self._previous_rd_locs = positions
# write down the positions of locs
guardtok.faildescr.rd_locs = positions
return fail_descr, target
More information about the pypy-commit
mailing list