Skip to content

Conversation

@ShaharNaveh
Copy link
Collaborator

@ShaharNaveh ShaharNaveh commented Jan 23, 2026

See: https://github.com/python/cpython/blob/1fa166888bd33538aab3f501174d512d6df22408/Include/internal/pycore_opcode_utils.h#L39-L44

and https://github.com/python/cpython/blob/1fa166888bd33538aab3f501174d512d6df22408/Include/internal/pycore_opcode_utils.h#L52-L55

Summary by CodeRabbit

  • Refactor
    • Updated compiler control flow analysis for improved accuracy in dead-code elimination and stack-depth tracking.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 23, 2026

📝 Walkthrough

Walkthrough

The PR refactors instruction classification semantics by splitting the unconditional_branch() predicate into two separate methods: is_unconditional_jump() for jump-specific instructions and is_scope_exit() for return/raise-related instructions. Callers in dead-code elimination and stack-depth analysis are updated accordingly.

Changes

Cohort / File(s) Summary
Instruction classification API redesign
crates/compiler-core/src/bytecode/instruction.rs
Replaces unconditional_branch() trait method with is_unconditional_jump() and is_scope_exit(). Splits predicate logic: jumps (JumpForward, JumpBackward, JumpBackwardNoInterrupt) map to is_unconditional_jump(); returns and raises map to is_scope_exit(). Updates implementations for Instruction, PseudoInstruction, and AnyInstruction via inst_either macro.
Codegen DCE and stack-depth analysis
crates/codegen/src/ir.rs
Updates two callsites in CodeInfo::dce and CodeInfo::max_stackdepth to use is_scope_exit() || is_unconditional_jump() instead of unconditional_branch() for detecting block termination points.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • youknowone

Poem

🐰 A hop through control flow so bright,
Jumps and exits, now split just right!
One path for leaps, one for the end,
Stack depths and dead code, old friends.
🌿 ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 12.50% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title directly and clearly summarizes the main change: separating scope-exit opcodes from unconditional-jump opcodes, which aligns with both file changes and PR objectives.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant