diff options
author | Björn Gustavsson <[email protected]> | 2017-12-16 05:32:30 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2017-12-18 14:25:01 +0100 |
commit | acbe937e041f78557fddd73d1189817163e2a8ad (patch) | |
tree | 2a7257e6c4eea95205f23da782bf1955a1f7f8d1 /system/doc | |
parent | 41f397d27f574c50dd917942ed2b481f2ff3bae7 (diff) | |
download | otp-acbe937e041f78557fddd73d1189817163e2a8ad.tar.gz otp-acbe937e041f78557fddd73d1189817163e2a8ad.tar.bz2 otp-acbe937e041f78557fddd73d1189817163e2a8ad.zip |
v3_codegen: Don't let exit BIFs force a stack frame
This is an enhancement of the optimization added in 2e5d6201bb044,
where we tried to avoid forcing a stack frame for functions
that don't really need them.
That optimization would not suppress the stack frame for this
function:
f(A) ->
Res = case A of
a -> x;
b -> y
end,
{ok,Res}.
The reason is that internally the compiler would rewrite
the code to something like this:
f(A) ->
Res = case A of
a -> x;
b -> y;
Other -> error({case_clause,Other})
end,
{ok,Res}.
The call to error/1 would force creation of a stack frame,
even though it is not really needed because error/1 causes
an exception.
Handle calls to exit BIFs specially to allow suppressing the
stack frame.
Diffstat (limited to 'system/doc')
0 files changed, 0 insertions, 0 deletions