Skip to content

Case where LOAD_CONST and RETURN_VALUE are not combined into RETURN_CONST #121246

Closed
@FranklinLiang

Description

@FranklinLiang

Bug report

Bug description:

It is my understanding that a little while ago RETURN_CONST was added as a new instruction #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

Metadata

Metadata

Assignees

No one assigned

    Labels

    interpreter-core(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions