Skip to content

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

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

Activity

  1. Eclips4 commented on Oct 29, 2024

    @Eclips4
    Member

    Hi!
    Since there's no longer a RETURN_CONST instruction (see #125837), I'm going to close this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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