aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2017-12-16 05:32:30 +0100
committerBjörn Gustavsson <[email protected]>2017-12-18 14:25:01 +0100
commitacbe937e041f78557fddd73d1189817163e2a8ad (patch)
tree2a7257e6c4eea95205f23da782bf1955a1f7f8d1 /erts
parent41f397d27f574c50dd917942ed2b481f2ff3bae7 (diff)
downloadotp-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 'erts')
0 files changed, 0 insertions, 0 deletions