Skip to content
  • Damien George's avatar
    py/compile: Add COMP_RETURN_IF_EXPR option to enable return-if-else opt. · ae54fbf1
    Damien George authored
    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.
    ae54fbf1