Skip to content

Commit

Permalink
Auto merge of #116012 - cjgillot:gvn-const, r=oli-obk
Browse files Browse the repository at this point in the history
Implement constant propagation on top of MIR SSA analysis

This implements the idea I proposed in rust-lang/rust#110719 (comment)

Based on rust-lang/rust#109597

The value numbering "GVN" pass formulates each rvalue that appears in MIR with an abstract form (the `Value` enum), and assigns an integer `VnIndex` to each. This abstract form can be used to deduplicate values, reusing an earlier local that holds the same value instead of recomputing. This part is proposed in #109597.

From this abstract representation, we can perform more involved simplifications, for example in rust-lang/rust#111344.

With the abstract representation `Value`, we can also attempt to evaluate each to a constant using the interpreter. This builds a `VnIndex -> OpTy` map. From this map, we can opportunistically replace an operand or a rvalue with a constant if their value has an associated `OpTy`.

The most relevant commit is [Evaluated computed values to constants.](rust-lang/rust@2767c49)"

r? `@oli-obk`
  • Loading branch information
bors committed Dec 30, 2023
2 parents b05723b + 241fab4 commit b6c37c4
Showing 0 changed files with 0 additions and 0 deletions.

0 comments on commit b6c37c4

Please sign in to comment.