dillon1000/react

Commit

[rust] Port constant propagation

Ports constant propagation to Rust. The algorithm is broadly similar to the TS 
version, and most of the differences come from the slightly different HIR data 
model (operands are instruction indices not identifier ids). What this means is 
that the Constants map that we build up is really only used for variables that 
existed in the original program, and only comes into play with instructions like 
LoadLocal and StoreLocal. Other instructions such as Binary just look up their 
operands directly, ie they load the referenced instruction to check if both 
left/right are primitives. 

Note that with SSA form and the index-based operands we could actually get rid 
of StoreLocal/LoadLocal completely, which would further simplify constant 
propagation. However: 

* we'd need to add a Phi instruction kind, not a big deal but it diverges even 
more 

* more importantly, it makes it super hard to implement LeaveSSA 

That second point is a deal-breaker so unless someone has a great idea for how 
to exit SSA form without having Load/Stores, let's keep them.
Browse files
Changed paths19 files
First-parent comparison
M compiler/forget/Cargo.lock ModifiedM compiler/forget/Cargo.toml ModifiedM compiler/forget/crates/build-hir/src/builder.rs ModifiedM compiler/forget/crates/build-hir/src/lib.rs ModifiedM compiler/forget/crates/estree-swc/src/lib.rs ModifiedM compiler/forget/crates/fixtures/Cargo.toml ModifiedA compiler/forget/crates/fixtures/tests/fixtures/constant-propagation-constant-if-condition.js AddedA compiler/forget/crates/fixtures/tests/fixtures/constant-propagation.js AddedM compiler/forget/crates/fixtures/tests/fixtures_test.rs ModifiedA compiler/forget/crates/fixtures/tests/snapshots/fixtures_test__fixtures@constant-propagation-constant-if-condition.js.snap AddedA compiler/forget/crates/fixtures/tests/snapshots/[email protected] AddedM compiler/forget/crates/fixtures/tests/snapshots/[email protected] ModifiedM compiler/forget/crates/fixtures/tests/snapshots/[email protected] ModifiedA compiler/forget/crates/hir-optimization/Cargo.toml AddedA compiler/forget/crates/hir-optimization/src/constant_propagation.rs AddedA compiler/forget/crates/hir-optimization/src/lib.rs AddedM compiler/forget/crates/hir-ssa/src/eliminate_redundant_phis.rs ModifiedM compiler/forget/crates/hir/src/instruction.rs ModifiedM compiler/forget/crates/hir/src/print.rs Modified
Patch

Files changed

Rendering syntax-highlighted changes…