Skip to content

perf: Avoid freshening the same predicate twice per selection - #78

Draft
xmakro wants to merge 1 commit into
perf/base-0713from
perf/selection-single-freshen
Draft

perf: Avoid freshening the same predicate twice per selection#78
xmakro wants to merge 1 commit into
perf/base-0713from
perf/selection-single-freshen

Conversation

@xmakro

@xmakro xmakro commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Selection freshens the obligation predicate once when pushing it onto the stack, then freshens the same predicate again in candidate_from_obligation to build the cache key. Both happen before the cache is probed, so the second fold is paid even on hits.

When the predicate contains no type or const inference variables the two results are identical: the freshener's only state-dependent paths are its inference variable arms, and its region handling is stateless erasure. The gate is therefore on non-region inference variables rather than on inference variables generally, since region variables cannot reach the stateful paths and are pervasive in selection obligations.

The freshened predicate is a cache key, so a debug assertion recomputes the fold and compares. A future change to the freshener that breaks the equivalence fails loudly under debug assertions instead of silently corrupting the selection cache.

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