diff options
author | Björn Gustavsson <[email protected]> | 2017-12-01 10:38:20 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2017-12-06 10:05:47 +0100 |
commit | 2e5d6201bb044508eb8523da208caac459c8a124 (patch) | |
tree | 75b423df86dced30a80c70ec89226e904cafc08d /lib/compiler/src/beam_disasm.erl | |
parent | 68b7cd0820362667fe77f0065a2ac06989580eb5 (diff) | |
download | otp-2e5d6201bb044508eb8523da208caac459c8a124.tar.gz otp-2e5d6201bb044508eb8523da208caac459c8a124.tar.bz2 otp-2e5d6201bb044508eb8523da208caac459c8a124.zip |
v3_codegen: Avoid excessive stack frame allocation
A 'case' or 'if' that does not occur last in a function clause will
always force a stack frame. The reasoning behind this is that in most
uses of 'case' there will be a function call from within the
'case'. When there is a function call, the stack frame is needed both
to save the continuation pointer and to save any X registers that will
need to survive the call.
When there is no function call from a 'case', the resulting stack
frame is annoying. There will be register shuffling, and the existence
of the stack frame may thwart many optimizations (for example, in
beam_dead).
Therefore, add an extra pass to v3_codegen to avoid creating a
stack frame when not needed.
https://bugs.erlang.org/browse/ERL-514
Diffstat (limited to 'lib/compiler/src/beam_disasm.erl')
0 files changed, 0 insertions, 0 deletions