aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/bif.c
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2019-03-13 15:15:06 +0100
committerGitHub <[email protected]>2019-03-13 15:15:06 +0100
commitffa252a6e6a353acffb95130b44a89d6e286a7c6 (patch)
tree3add4f7a028980401df640e5d51b2506e83c96bf /erts/emulator/beam/bif.c
parentbb522c71838f8b46425f4156ee2ed58d155e13b5 (diff)
parent2d2e78ad6e667655560a67e848153dbb218914f7 (diff)
downloadotp-ffa252a6e6a353acffb95130b44a89d6e286a7c6.tar.gz
otp-ffa252a6e6a353acffb95130b44a89d6e286a7c6.tar.bz2
otp-ffa252a6e6a353acffb95130b44a89d6e286a7c6.zip
Merge pull request #2177 from bjorng/bjorn/erts/tail-recursive-bifs
Optimize tail-recursive calls of BIFs OTP-15674
Diffstat (limited to 'erts/emulator/beam/bif.c')
-rw-r--r--erts/emulator/beam/bif.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c
index 7faba35e1c..c102ddbee6 100644
--- a/erts/emulator/beam/bif.c
+++ b/erts/emulator/beam/bif.c
@@ -5165,6 +5165,12 @@ erts_schedule_bif(Process *proc,
pc = i;
mfa = &exp->info.mfa;
}
+ else if (BeamIsOpCode(*i, op_call_bif_only_e)) {
+ /* Pointer to bif export in i+1 */
+ exp = (Export *) i[1];
+ pc = i;
+ mfa = &exp->info.mfa;
+ }
else if (BeamIsOpCode(*i, op_apply_bif)) {
/* Pointer to bif in i+1, and mfa in i-3 */
pc = c_p->cp;