Skip to content

Conversation

@gvanrossum
Copy link
Member

@gvanrossumgvanrossum 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
MemberAuthor

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:

deftest_long_context_chain(self): deff(): try: 1/0except: f() try: f() exceptRecursionErrorase: exc_obj=eelse: 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.

@gvanrossumgvanrossum deleted the project-uops-forever branch August 17, 2023 00:18
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@gvanrossum