rust/compiler
bors e7c502d930 Auto merge of #109597 - cjgillot:gvn, r=oli-obk
Implement a global value numbering MIR optimization

The aim of this pass is to avoid repeated computations by reusing past assignments. It is based on an analysis of SSA locals, in order to perform a restricted form of common subexpression elimination.

By opportunity, this pass allows for some simplifications by combining assignments. For instance, this pass could be able to see through projections of aggregates to directly reuse the aggregate field (not in this PR).

We handle references by assigning a different "provenance" index to each `Ref`/`AddressOf` rvalue. This ensure that we do not spuriously merge borrows that should not be merged. Meanwhile, we consider all the derefs of an immutable reference to a freeze type to give the same value:
```rust
_a = *_b // _b is &Freeze
_c = *_b // replaced by _c = _a
```
2023-09-27 21:06:30 +00:00
..
rustc Split out the stable part of smir into its own crate to prevent accidental usage of forever unstable things 2023-09-25 14:38:27 +00:00
rustc_abi turns out Layout has some more things to worry about -- move ABI comparison into helper function 2023-09-08 09:14:07 +02:00
rustc_arena Rename cold_path to outline 2023-09-25 22:54:07 +02:00
rustc_ast Auto merge of #114452 - weiznich:feature/diagnostic_on_unimplemented, r=compiler-errors 2023-09-17 10:00:15 +00:00
rustc_ast_lowering subst -> instantiate 2023-09-26 09:37:55 +02:00
rustc_ast_passes Add comment about RTN feature gating 2023-09-24 10:47:57 +02:00
rustc_ast_pretty Move let expression checking to parsing 2023-09-11 15:51:18 +00:00
rustc_attr Auto merge of #114201 - Centri3:explicit-repr-rust, r=WaffleLapkin 2023-08-25 00:02:54 +00:00
rustc_baked_icu_data
rustc_borrowck Auto merge of #116163 - compiler-errors:lazyness, r=oli-obk 2023-09-27 01:48:53 +00:00
rustc_builtin_macros ConstParamTy: require Eq 2023-09-24 23:38:07 +02:00
rustc_codegen_cranelift subst -> instantiate 2023-09-26 09:37:55 +02:00
rustc_codegen_gcc Have a single struct for queries and hook 2023-09-22 16:26:20 +00:00
rustc_codegen_llvm Auto merge of #116144 - lcnr:subst-less, r=oli-obk 2023-09-26 21:32:44 +00:00
rustc_codegen_ssa Auto merge of #116144 - lcnr:subst-less, r=oli-obk 2023-09-26 21:32:44 +00:00
rustc_const_eval subst -> instantiate 2023-09-26 09:37:55 +02:00
rustc_data_structures Rename cold_path to outline 2023-09-25 22:54:07 +02:00
rustc_driver
rustc_driver_impl Auto merge of #115627 - compiler-errors:icedump-no-std, r=m-ou-se 2023-09-19 16:56:25 +00:00
rustc_error_codes Auto merge of #116144 - lcnr:subst-less, r=oli-obk 2023-09-26 21:32:44 +00:00
rustc_error_messages Bump cfg(bootstrap) 2023-08-23 20:05:14 -04:00
rustc_errors Auto merge of #115690 - ShE3py:Z-treat-err-as-bug, r=petrochenkov 2023-09-22 13:01:30 +00:00
rustc_expand Enable incremental-relative-spans by default. 2023-09-07 20:21:13 +00:00
rustc_feature Auto merge of #116093 - RalfJung:link_llvm_intrinsics, r=oli-obk 2023-09-27 11:28:36 +00:00
rustc_fluent_macro
rustc_fs_util
rustc_graphviz
rustc_hir Don't store lazyness in DefKind 2023-09-26 02:53:59 +00:00
rustc_hir_analysis Rollup merge of #116149 - compiler-errors:anonymize, r=lcnr 2023-09-27 10:42:34 +02:00
rustc_hir_pretty Record asyncness span in HIR 2023-09-21 19:18:14 +00:00
rustc_hir_typeck Rollup merge of #116187 - estebank:small-tweak, r=compiler-errors 2023-09-27 10:42:35 +02:00
rustc_incremental Don't use a thread to load the dep graph 2023-09-24 00:30:43 +02:00
rustc_index Auto merge of #115094 - Mark-Simulacrum:bootstrap-update, r=ozkanonur 2023-08-24 11:10:52 +00:00
rustc_infer Don't store lazyness in DefKind 2023-09-26 02:53:59 +00:00
rustc_interface Don't use a thread to load the dep graph 2023-09-24 00:30:43 +02:00
rustc_lexer Update lexer emoji diagnostics to Unicode 15.0 2023-07-29 08:47:21 +08:00
rustc_lint Don't store lazyness in DefKind 2023-09-26 02:53:59 +00:00
rustc_lint_defs Auto merge of #115893 - RalfJung:match-require-partial-eq, r=oli-obk 2023-09-26 13:38:28 +00:00
rustc_llvm Pass name of object file to LLVM so it can correctly emit S_OBJNAME 2023-09-25 19:31:58 +02:00
rustc_log inline format!() args up to and including rustc_middle 2023-07-30 13:18:33 +02:00
rustc_macros Bump cfg(bootstrap) 2023-08-23 20:05:14 -04:00
rustc_metadata Don't store lazyness in DefKind 2023-09-26 02:53:59 +00:00
rustc_middle Auto merge of #109597 - cjgillot:gvn, r=oli-obk 2023-09-27 21:06:30 +00:00
rustc_mir_build Auto merge of #115887 - RalfJung:pat, r=oli-obk 2023-09-27 13:20:53 +00:00
rustc_mir_dataflow Auto merge of #115794 - cjgillot:aggregate-no-box, r=davidtwco 2023-09-24 06:13:17 +00:00
rustc_mir_transform Auto merge of #109597 - cjgillot:gvn, r=oli-obk 2023-09-27 21:06:30 +00:00
rustc_monomorphize Auto merge of #116163 - compiler-errors:lazyness, r=oli-obk 2023-09-27 01:48:53 +00:00
rustc_parse Auto merge of #115677 - matthewjasper:let-expr-recovery, r=b-naber 2023-09-14 19:56:55 +00:00
rustc_parse_format Rollup merge of #115611 - lukas-code:format!("{r#ident}"), r=compiler-errors 2023-09-17 11:23:25 +00:00
rustc_passes Auto merge of #116163 - compiler-errors:lazyness, r=oli-obk 2023-09-27 01:48:53 +00:00
rustc_plugin_impl
rustc_privacy Don't store lazyness in DefKind 2023-09-26 02:53:59 +00:00
rustc_query_impl Move DepKind to rustc_query_system and define it as u16 2023-09-21 17:06:14 +02:00
rustc_query_system Auto merge of #116163 - compiler-errors:lazyness, r=oli-obk 2023-09-27 01:48:53 +00:00
rustc_resolve Auto merge of #116163 - compiler-errors:lazyness, r=oli-obk 2023-09-27 01:48:53 +00:00
rustc_serialize Open the FileEncoder file for reading and writing 2023-09-22 16:13:25 -04:00
rustc_session Enable drop_tracking_mir by default. 2023-09-23 13:34:09 +00:00
rustc_smir Rebase fallout 2023-09-25 15:02:10 +00:00
rustc_span Rename cold_path to outline 2023-09-25 22:54:07 +02:00
rustc_symbol_mangling Remove span from BrAnon. 2023-09-24 09:46:55 +00:00
rustc_target Auto merge of #116076 - chriswailes:android-riscv-extension-update, r=cjgillot 2023-09-24 11:40:45 +00:00
rustc_trait_selection Don't store lazyness in DefKind 2023-09-26 02:53:59 +00:00
rustc_traits Detect cycle errors hidden by opaques during monomorphization 2023-09-13 17:35:44 +00:00
rustc_transmute make the eval() functions on our const types return the resulting value 2023-09-13 07:29:34 +02:00
rustc_ty_utils Don't store lazyness in DefKind 2023-09-26 02:53:59 +00:00
rustc_type_ir Auto merge of #116069 - compiler-errors:debug-tuple, r=Nilstrieb 2023-09-24 15:16:18 +00:00
stable_mir Split out the stable part of smir into its own crate to prevent accidental usage of forever unstable things 2023-09-25 14:38:27 +00:00