diff options
author | Magnus Lång <[email protected]> | 2016-03-18 14:04:36 +0100 |
---|---|---|
committer | Magnus Lång <[email protected]> | 2016-07-11 17:38:18 +0200 |
commit | ad73c37d4af90834c62f961264dce00118309b0f (patch) | |
tree | 2e240ed6b39e20cff1519604f646d5424a7db172 /lib/parsetools/info | |
parent | e74636ef2489d436b38726ae19bca2d8e7455cec (diff) | |
download | otp-ad73c37d4af90834c62f961264dce00118309b0f.tar.gz otp-ad73c37d4af90834c62f961264dce00118309b0f.tar.bz2 otp-ad73c37d4af90834c62f961264dce00118309b0f.zip |
hipe: segment tree delete operation
Profiling showed that hipe_sdi spent most of its time in updateParents,
discarding nodes that were already deleted. By introducing a delete
operation to the segment trees, we can pay this cost only once, when
deleting the node from the graph.
Instead of keeping the ranges around, we recompute the range of the node
when we delete it, since this can be done in constant time, without any
memory allocation.
Although segment trees are not designed to be modified once built,
implementing a delete operation turned out to be a simple matter of
repeating insertion, but deleting the index from, instead of consing it
on, the appropriate nodes' values (segment lists).
This optimisation drastically sped up hipe_sdi to the point of no longer
being the bottleneck in the Assembly stage.
Diffstat (limited to 'lib/parsetools/info')
0 files changed, 0 insertions, 0 deletions