diff options
author | Björn Gustavsson <[email protected]> | 2019-01-21 07:04:46 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2019-01-21 12:57:54 +0100 |
commit | 990976907841dd3122c82992ba9965ee313e988c (patch) | |
tree | 8ccc4c8a103c6ed5a206912ff2eb3df707ccf674 /erts/emulator/beam/ops.tab | |
parent | a11ddd5862fa06a3242e548fbd232a4c294ca7a8 (diff) | |
download | otp-990976907841dd3122c82992ba9965ee313e988c.tar.gz otp-990976907841dd3122c82992ba9965ee313e988c.tar.bz2 otp-990976907841dd3122c82992ba9965ee313e988c.zip |
Optimize the is_function/2 guard test
The is_function2 instruction is executed surprisingly
frequently when running dialyzer or the compiler. It
cannot hurt to optimize it a little.
Diffstat (limited to 'erts/emulator/beam/ops.tab')
-rw-r--r-- | erts/emulator/beam/ops.tab | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab index ee99c9e563..8e730e42d6 100644 --- a/erts/emulator/beam/ops.tab +++ b/erts/emulator/beam/ops.tab @@ -719,11 +719,12 @@ is_boolean Fail=f ac => jump Fail is_boolean f? xy %hot -is_function2 Fail=f Literal=q Arity | literal_is_export(Literal) => -is_function2 Fail=f c Arity => jump Fail -is_function2 Fail=f Fun a => jump Fail +is_function2 Fail=f Fun Arity => gen_is_function2(Fail, Fun, Arity) -is_function2 f? S s +%cold +cold_is_function2 f? x x +%hot +hot_is_function2 f? S t # Allocating & initializing. allocate Need Regs | init Y => allocate_init Need Regs Y |