cpython icon indicating copy to clipboard operation
cpython copied to clipboard

Case where LOAD_CONST and RETURN_VALUE are not combined into RETURN_CONST

Open FranklinLiang opened this issue 1 year ago • 0 comments

Bug report

Bug description:

It is my understanding that a little while ago RETURN_CONST was added as a new instruction https://github.com/python/cpython/issues/101632 It is to replace cases where LOAD_CONST and RETURN_VALUE appear sequentially.

I was playing around with the bytecode and found that a case:

def func(x):
    return True if x else False

That has the following bytecode:

 2 LOAD_FAST                0 (x)
 4 POP_JUMP_IF_FALSE        2 (to 10)
 6 LOAD_CONST               1 (True)
 8 RETURN_VALUE
10 LOAD_CONST               2 (False)
12 RETURN_VALUE

While a similar function:

def func(x):
    if x:
        return True
    else:
        return False

Produces this bytecode:

 2 LOAD_FAST                0 (x)
 4 POP_JUMP_IF_FALSE        1 (to 8) 

 6 RETURN_CONST             1 (True)

 8 RETURN_CONST             2 (False)

It seems like the instructions LOAD_CONST and RETURN_VALUE are not being combined properly in the first case.

I have confirmed with some members of the python team that this is a small bug/optimization opportunity and I would like to take a swing at fixing it.

CPython versions tested on:

3.12

Operating systems tested on:

No response

Linked PRs

  • gh-121305

FranklinLiang avatar Jul 01 '24 21:07 FranklinLiang