Skip to content

IGNORE: Project uops forever #107945

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 26 commits into from

Conversation

gvanrossum
Copy link
Member

@gvanrossum gvanrossum commented Aug 14, 2023

(This is a variant of #107793 with -Xuops always enabled, to see if that would pass all tests. We should not merge this, as -Xuops is currently slower than the default interpreter.)

This is only the first step for doing `CALL` in Tier 2.
The next step involves tracing into the called code object.
After that we'll have to do the remaining `CALL` specialization.
Finally we'll have to tweak various things like `KW_NAMES`,
and possibly move the `NULL` (for method calls) *above* the callable.
But those are things for future PRs.

Note: this moves setting `frame->return_offset` directly in front of
`DISPATCH_INLINED()`, to make it easier to move it into `_PUSH_FRAME`.
Instead, the special case is an opcode using SAVE_FRAME_STATE().
Introducing #if TIER_ONE and #if TIER_TWO so we can implement
_PUSH_FRAME differently for both tiers.
Instead, we special-case SAVE_IP:
- Its Tier 2 expansion sets oparg to the instruction offset
- In Tier 1 it is a no-op (and skipped if present in a macro)
- This uses the function-by-version cache I just added
- There's not yet a way to trace back via `RETURN_VALUE`
This should fix leaks and hopefully most failing tests.
@gvanrossum
Copy link
Member Author

gvanrossum commented Aug 14, 2023

At least one of the test failures (there aren't very many), in test_traceback.py, could be due to the missing _Py_EnterRecursivePy call:

    def test_long_context_chain(self):
        def f():
            try:
                1/0
            except:
                f()

        try:
            f()
        except RecursionError as e:
            exc_obj = e
        else:
            self.fail("Exception not raised")

Although there's probably more going on, since the bug is rather shy: I can repro it only by running the entire test_traceback.py file, not by selectively only running this one test. (Possibly because the other tests contribute to the stack overflow.) Anyway, this is enough to keep gh-107793 and gh-107925 in draft mode until I've figured out how to add the recursion checks back.

@gvanrossum gvanrossum closed this Aug 16, 2023
@gvanrossum gvanrossum deleted the project-uops-forever branch August 17, 2023 00:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant