Skip to content

Separate InterpCx usage by ConstAnalysis phases#159586

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:ConstAnalysis-ecx
Jul 20, 2026
Merged

Separate InterpCx usage by ConstAnalysis phases#159586
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:ConstAnalysis-ecx

Conversation

@nnethercote

Copy link
Copy Markdown
Contributor

ConstAnalysis has a RefCell<InterpCx>. During the analysis phase the accesses are read-only, but the visiting phase (performed by Collector) requires mutation, because of calls to try_make_constant.

This commit removes the RefCell by having two InterpCx instances: a read-only one for the ConstAnalysis and a mutable one for the visiting phase, stored in Collector. This removes the need for the OperandCollector::ecx field, and for many borrow/borrow_mut calls.

r? @cjgillot

`ConstAnalysis` has a `RefCell<InterpCx>`. During the analysis phase the
accesses are read-only, but the visiting phase (performed by
`Collector`) requires mutation, because of calls to `try_make_constant`.

This commit removes the `RefCell` by having two `InterpCx` instances: a
read-only one for the `ConstAnalysis` and a mutable one for the visiting
phase, stored in `Collector`. This removes the need for the
`OperandCollector::ecx` field, and for many `borrow`/`borrow_mut` calls.
@rustbot

rustbot commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Some changes occurred to MIR optimizations

cc @rust-lang/wg-mir-opt

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jul 20, 2026

@oli-obk oli-obk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@rust-bors

rust-bors Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 9072e4a has been approved by oli-obk

It is now in the queue for this repository.

@rust-bors rust-bors Bot added the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label Jul 20, 2026
@rust-bors rust-bors Bot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 20, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jul 20, 2026
…li-obk

Separate `InterpCx` usage by `ConstAnalysis` phases

`ConstAnalysis` has a `RefCell<InterpCx>`. During the analysis phase the accesses are read-only, but the visiting phase (performed by `Collector`) requires mutation, because of calls to `try_make_constant`.

This commit removes the `RefCell` by having two `InterpCx` instances: a read-only one for the `ConstAnalysis` and a mutable one for the visiting phase, stored in `Collector`. This removes the need for the `OperandCollector::ecx` field, and for many `borrow`/`borrow_mut` calls.

r? @cjgillot
rust-bors Bot pushed a commit that referenced this pull request Jul 20, 2026
…uwer

Rollup of 10 pull requests

Successful merges:

 - #159600 (`rust-analyzer` subtree update)
 - #158046 (proc_macro: preserve file module spans for inner attrs)
 - #159000 (Small cleanups to the incr comp session code)
 - #159449 (Enable single Location to issue multiple borrows)
 - #159587 (Improve `AttrItem::span`)
 - #159460 (Do not mark unnormalized const aliases as rigid when normalizing param env)
 - #159529 (Add regression test for nested replacement ranges in `collect_tokens`)
 - #159585 (Minor `TokenStream` improvements)
 - #159586 (Separate `InterpCx` usage by `ConstAnalysis` phases)
 - #159603 (Clarify `push_stream`/`push_tree`)

Failed merges:

 - #159590 (Remove some dead code)
rust-bors Bot pushed a commit that referenced this pull request Jul 20, 2026
…uwer

Rollup of 18 pull requests

Successful merges:

 - #159600 (`rust-analyzer` subtree update)
 - #158046 (proc_macro: preserve file module spans for inner attrs)
 - #159000 (Small cleanups to the incr comp session code)
 - #159189 (Account for type alias projections in E0308 "expected/found" shortening logic)
 - #159449 (Enable single Location to issue multiple borrows)
 - #159544 (Suggest valid command-line crate names)
 - #159587 (Improve `AttrItem::span`)
 - #159594 (feat(rustc_hir_typeck): suggest `impl Fn` return for capturing closures)
 - #159597 (std: use `arc4random_buf` from libc)
 - #159599 (Resolver: Record at least 1 ambiguous trait if main decl is not a trait.)
 - #158061 (Make `pin!()` more foolproof.)
 - #159460 (Do not mark unnormalized const aliases as rigid when normalizing param env)
 - #159529 (Add regression test for nested replacement ranges in `collect_tokens`)
 - #159571 (Remove unused bundled library lookup for the local crate)
 - #159585 (Minor `TokenStream` improvements)
 - #159586 (Separate `InterpCx` usage by `ConstAnalysis` phases)
 - #159602 (Remove `ItemLike`)
 - #159603 (Clarify `push_stream`/`push_tree`)

Failed merges:

 - #159590 (Remove some dead code)
@rust-bors
rust-bors Bot merged commit cff03a3 into rust-lang:main Jul 20, 2026
13 checks passed
@rustbot rustbot added this to the 1.99.0 milestone Jul 20, 2026
rust-timer added a commit that referenced this pull request Jul 20, 2026
Rollup merge of #159586 - nnethercote:ConstAnalysis-ecx, r=oli-obk

Separate `InterpCx` usage by `ConstAnalysis` phases

`ConstAnalysis` has a `RefCell<InterpCx>`. During the analysis phase the accesses are read-only, but the visiting phase (performed by `Collector`) requires mutation, because of calls to `try_make_constant`.

This commit removes the `RefCell` by having two `InterpCx` instances: a read-only one for the `ConstAnalysis` and a mutable one for the visiting phase, stored in `Collector`. This removes the need for the `OperandCollector::ecx` field, and for many `borrow`/`borrow_mut` calls.

r? @cjgillot
@nnethercote
nnethercote deleted the ConstAnalysis-ecx branch July 20, 2026 23:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants