diff options
author | Björn Gustavsson <[email protected]> | 2019-02-05 02:46:45 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2019-02-06 10:34:23 +0100 |
commit | 077cfc59f1dca89aa1231ce291100aa4b33c50e0 (patch) | |
tree | 3f0eb95adda9f0432b18a7021a3d97599a34fb00 /erts/emulator/beam/big.h | |
parent | e82637d6f078409db27449383df5342294df0b63 (diff) | |
download | otp-077cfc59f1dca89aa1231ce291100aa4b33c50e0.tar.gz otp-077cfc59f1dca89aa1231ce291100aa4b33c50e0.tar.bz2 otp-077cfc59f1dca89aa1231ce291100aa4b33c50e0.zip |
Optimize ssa_opt_sink for huge functions
The ssa_opt_sink optimization of beam_ssa_opt could get very slow
for certain huge functions. 9a190cae9bd7 partly addressed this issue
by terminating the optimization early if there happened to be no
get_tuple_element instructions at all in the function.
This commit addresses the issue more directly by making the dominator
calculation in beam_ssa:dominators/1 more efficient. The same
algorithm as before is used, but it is implemented in a more efficient
way based on the ideas in "A Simple, Fast Dominance Algorithm"
(http://www.hipersoft.rice.edu/grads/publications/dom14.pdf).
As well as being more efficient, the new implementation also gives
an explicit representation of the dominator tree, which makes it
possible to simplify and optimize the ssa_opt_sink optimization.
Diffstat (limited to 'erts/emulator/beam/big.h')
0 files changed, 0 insertions, 0 deletions