diff options
author | Damien George <damien.p.george@gmail.com> | 2017-04-22 14:58:01 +1000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2017-04-22 14:58:01 +1000 |
commit | ae54fbf1668959e50632034495631b0c5952ae9d (patch) | |
tree | 93af5ef82e9b2562bd96fbee26182d0d14f73cd4 /py/nativeglue.c | |
parent | 40b40ffc98627b32adf83f3d657d237a9c59acca (diff) | |
download | micropython-ae54fbf1668959e50632034495631b0c5952ae9d.tar.gz micropython-ae54fbf1668959e50632034495631b0c5952ae9d.zip |
py/compile: Add COMP_RETURN_IF_EXPR option to enable return-if-else opt.
With this optimisation enabled the compiler optimises the if-else
expression within a return statement. The optimisation reduces bytecode
size by 2 bytes for each use of such a return-if-else statement. Since
such a statement is not often used, and costs bytes for the code, the
feature is disabled by default.
For example the following code:
def f(x):
return 1 if x else 2
compiles to this bytecode with the optimisation disabled (left column is
bytecode offset in bytes):
00 LOAD_FAST 0
01 POP_JUMP_IF_FALSE 8
04 LOAD_CONST_SMALL_INT 1
05 JUMP 9
08 LOAD_CONST_SMALL_INT 2
09 RETURN_VALUE
and to this bytecode with the optimisation enabled:
00 LOAD_FAST 0
01 POP_JUMP_IF_FALSE 6
04 LOAD_CONST_SMALL_INT 1
05 RETURN_VALUE
06 LOAD_CONST_SMALL_INT 2
07 RETURN_VALUE
So the JUMP to RETURN_VALUE is optimised and replaced by RETURN_VALUE,
saving 2 bytes and making the code a bit faster.
Diffstat (limited to 'py/nativeglue.c')
0 files changed, 0 insertions, 0 deletions