FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

GH-130415: Optimize JIT path for _TO_BOOL_INT branching by Klaus117 · Pull Request #130477 · python/cpython · GitHub

Repository navigation

GH-130415: Optimize JIT path for _TO_BOOL_INT branching - #130477

Closed
Klaus117 wants to merge 5 commits into
python:mainfrom
Klaus117:hack-night
Closed

Klaus117 wants to merge 5 commits into
python:mainfrom
Klaus117:hack-night

Conversation

Klaus117 commented Feb 22, 2025 •
edited by bedevere-app Bot
Loading

Copy link
Copy Markdown
Contributor

ghost commented Feb 22, 2025 •
edited by ghost
Loading

Copy link
Copy Markdown

All commit authors signed the Contributor License Agreement.

bedevere-app Bot commented Feb 22, 2025

Copy link
Copy Markdown

Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply the skip news label instead.

brandtbucher added performance Performance or resource usage interpreter-core (Objects, Python, Grammar, and Parser dirs) topic-JIT labels Feb 22, 2025
Comment thread Lib/test/test_capi/test_opt.py Outdated
trace = []
for i in range(n):
# f is always (int) 0, but we can only prove that it's a integer:
f = i - i # at this point python knows f is an int, but doesnt know that it is 0 (we know it is 0 though)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Can you rename f in this function to zero?

Comment thread Lib/test/test_capi/test_opt.py Outdated
Comment on lines +1471 to +1500
# def test_narrow_type_to_constant_bool_true(self):
# def f(n):
# trace = []
# for i in range(n):
# # f is always True, but we can only prove that it's a bool:
# f = i != TIER2_THRESHOLD
# trace.append("A")
# if f: # Kept.
# trace.append("B")
# if not f: # Removed!
# trace.append("X")
# trace.append("C")
# if f: # Removed!
# trace.append("D")
# trace.append("E")
# trace.append("F")
# if not f: # Removed!
# trace.append("X")
# trace.append("G")
# return trace

# trace, ex = self._run_with_optimizer(f, TIER2_THRESHOLD)
# self.assertEqual(trace, list("ABCDEFG") * TIER2_THRESHOLD)
# self.assertIsNotNone(ex)
# uops = get_opnames(ex)
# # Only one guard remains:
# self.assertEqual(uops.count("_GUARD_IS_FALSE_POP"), 0)
# self.assertEqual(uops.count("_GUARD_IS_TRUE_POP"), 1)
# # But all of the appends we care about are still there:
# self.assertEqual(uops.count("_CALL_LIST_APPEND"), len("ABCDEFG"))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Can you remove this commented test?

Comment thread Python/optimizer_bytecodes.c Outdated
Comment on lines +422 to +425
// else if (next_opcode == _GUARD_IS_TRUE_POP) {
// sym_set_const(value, Py_True);
// res = sym_new_type(ctx, &PyBool_Type);
// }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality
Suggested change
// else if (next_opcode == _GUARD_IS_TRUE_POP) {
// sym_set_const(value, Py_True);
// res = sym_new_type(ctx, &PyBool_Type);
// }

Comment thread Python/optimizer_bytecodes.c Outdated
// removed and the narrowed value to be invalid:
if (next_opcode == _GUARD_IS_FALSE_POP) {
sym_set_const(value, Py_GetConstant(Py_CONSTANT_ZERO));
res = sym_new_type(ctx, &PyLong_Type);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

This is always a boolean, since it's the output of the _TO_BOOL op.

Suggested change
res = sym_new_type(ctx, &PyLong_Type);
res = sym_new_type(ctx, &PyBool_Type);

bedevere-app Bot commented Feb 22, 2025

Copy link
Copy Markdown

A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated.

Once you have made the requested changes, please leave a comment on this pull request containing the phrase I have made the requested changes; please review again. I will then notify any core developers who have left a review that you're ready for them to take another look at this pull request.

brandtbucher changed the title GH-130415 optimize JIT path for _TO_BOOL_INT int=0 branching. GH-130415: Optimize JIT path for _TO_BOOL_INT branching Feb 22, 2025
Comment thread Lib/test/test_capi/test_opt.py Outdated

Copy link
Copy Markdown
Member

Thanks for the contribution. Unfortunately this has a critical flaw.
See #130476 (comment) for the same problem with that PR.

Copy link
Copy Markdown
Member

Closing in favor of #130477.

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting merge interpreter-core (Objects, Python, Grammar, and Parser dirs) performance Performance or resource usage topic-JIT

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants


Back | FazBrowse Home | New Git URL