rust/compiler/rustc_mir_transform/src
bors d2d24e395a Auto merge of #123602 - cjgillot:gvn-borrowed, r=oli-obk
Account for immutably borrowed locals in MIR copy-prop and GVN

For the most part, we consider that immutably borrowed `Freeze` locals still fulfill SSA conditions. As the borrow is immutable, any use of the local will have the value given by the single assignment, and there can be no surprise.

This allows copy-prop to merge a non-borrowed local with a borrowed local. We chose to keep copy-classes heads unborrowed, as those may be easier to optimize in later passes.

This also allows to GVN the value behind an immutable borrow. If a SSA local is borrowed, dereferencing that borrow is equivalent to copying the local's value: re-executing the assignment between the borrow and the dereference would be UB.

r? `@ghost` for perf
2024-05-03 21:50:13 +00:00
..
coroutine Use a helper to zip together parent and child captures for coroutine-closures 2024-04-10 13:39:52 -04:00
coverage coverage: Replace max_decision_depth with num_condition_bitmaps 2024-05-01 09:55:22 +10:00
inline Add simple async drop glue generation 2024-04-16 20:45:07 +03:00
shim Fix disabling the export of noop async_drop_in_place_raw 2024-04-18 15:19:05 +03:00
abort_unwinding_calls.rs Fix mir pass ICE in the presence of other errors 2024-02-08 14:49:27 +00:00
add_call_guards.rs remove redundant imports 2023-12-10 10:56:22 +08:00
add_moves_for_packed_drops.rs remove redundant imports 2023-12-10 10:56:22 +08:00
add_retag.rs add_retag: ensure box-to-raw-ptr casts are preserved for Miri 2024-03-18 10:32:25 +01:00
add_subtyping_projections.rs remove redundant imports 2023-12-10 10:56:22 +08:00
check_alignment.rs Put checks that detect UB under their own flag below debug_assertions 2024-04-06 11:21:47 -04:00
check_const_item_mutation.rs Rename TyCtxt::emit_spanned_lint as TyCtxt::emit_node_span_lint. 2024-01-23 08:09:05 +11:00
check_packed_ref.rs Remove Session methods that duplicate DiagCtxt methods. 2023-12-24 08:05:28 +11:00
cleanup_post_borrowck.rs Add a non-shallow fake borrow 2024-04-20 16:01:35 +02:00
const_debuginfo.rs Format all the let chains in compiler 2023-10-13 08:59:36 +00:00
copy_prop.rs Merge borrowed locals too. 2024-04-20 19:20:38 +00:00
coroutine.rs Inline & delete Ty::new_unit, since it's just a field access 2024-05-02 17:49:23 +02:00
cost_checker.rs Make is_intrinsic query return the intrinsic name 2024-02-12 09:33:52 +00:00
cross_crate_inline.rs Remove all checks of IntrinsicDef::must_be_overridden except for the actual overrides in codegen 2024-03-19 09:19:58 +00:00
ctfe_limit.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
dataflow_const_prop.rs Actually create ranged int types in the type system. 2024-04-08 12:02:19 +00:00
dead_store_elimination.rs Auto merge of #116520 - Enselic:large-copy-into-fn, r=oli-obk 2024-01-16 19:33:14 +00:00
deduce_param_attrs.rs consistency rename: language item -> lang item 2024-04-17 13:00:43 +02:00
deduplicate_blocks.rs Merge dead bb pruning and unreachable bb deduplication. 2024-01-07 15:12:10 +00:00
deref_separator.rs remove redundant imports 2023-12-10 10:56:22 +08:00
dest_prop.rs Implement asm goto in MIR and MIR lowering 2024-02-24 18:50:09 +00:00
dump_mir.rs Write to stdout if - is given as output file 2023-06-06 17:53:29 -04:00
early_otherwise_branch.rs Don't change the otherwise of the switch 2024-04-08 19:20:07 +08:00
elaborate_box_derefs.rs rustc_index: Add a ZERO constant to index types 2024-04-03 19:06:22 +03:00
elaborate_drops.rs Convert delayed_bugs to bugs. 2024-02-21 10:20:05 +11:00
errors.rs Remove MIR unsafe check 2024-04-03 08:50:12 +00:00
ffi_unwind_calls.rs Rename mir_const query to mir_built 2024-03-20 09:05:22 +00:00
function_item_references.rs Make RawPtr take Ty and Mutbl separately 2024-03-22 11:13:29 -04:00
gvn.rs Auto merge of #123602 - cjgillot:gvn-borrowed, r=oli-obk 2024-05-03 21:50:13 +00:00
inline.rs filter required_consts during inlining 2024-04-23 23:02:54 +02:00
instsimplify.rs Address more PR feedback 2024-04-21 11:08:38 -07:00
jump_threading.rs Rollup merge of #122784 - jswrenn:tag_for_variant, r=compiler-errors 2024-03-22 20:31:29 +01:00
known_panics_lint.rs Remove redundant union check in `KnownPanicsLint const prop 2024-04-30 15:17:47 +05:30
large_enums.rs Fix some comments 2023-12-28 12:23:14 +08:00
lib.rs Step bootstrap cfgs 2024-05-01 22:19:11 -04:00
lint.rs compiler: Lower fn call arg spans down to MIR 2024-01-15 19:07:11 +01:00
lower_intrinsics.rs Add an intrinsic that lowers to AggregateKind::RawPtr 2024-04-21 11:08:37 -07:00
lower_slice_len.rs consistency rename: language item -> lang item 2024-04-17 13:00:43 +02:00
match_branches.rs Auto merge of #124156 - DianQK:disable-match_branches, r=RalfJung 2024-04-20 08:47:07 +00:00
mentioned_items.rs mentioned_items: avoid adding str/slice unsizing casts 2024-03-20 11:16:11 +01:00
multiple_return_terminators.rs remove redundant imports 2023-12-10 10:56:22 +08:00
normalize_array_len.rs GVN borrowed locals too. 2024-04-20 19:19:06 +00:00
nrvo.rs and more 2024-03-28 17:19:15 +03:00
pass_manager.rs Only split by-ref/by-move futures for async closures 2024-03-19 16:59:23 -04:00
prettify.rs remove redundant imports 2023-12-10 10:56:22 +08:00
promote_consts.rs properly fill a promoted's required_consts 2024-04-23 23:02:54 +02:00
ref_prop.rs GVN borrowed locals too. 2024-04-20 19:19:06 +00:00
remove_noop_landing_pads.rs Avoid debug logging entire MIR body 2024-02-15 15:54:28 +01:00
remove_place_mention.rs remove redundant imports 2023-12-10 10:56:22 +08:00
remove_storage_markers.rs Move condition enabling the pass to is_enabled 2024-01-23 20:58:44 +01:00
remove_uninit_drops.rs remove redundant imports 2023-12-10 10:56:22 +08:00
remove_unneeded_drops.rs Merge dead bb pruning and unreachable bb deduplication. 2024-01-07 15:12:10 +00:00
remove_zsts.rs Add CoroutineClosure to TyKind, AggregateKind, UpvarArgs 2024-02-06 02:22:58 +00:00
required_consts.rs properly fill a promoted's required_consts 2024-04-23 23:02:54 +02:00
reveal_all.rs remove redundant imports 2023-12-10 10:56:22 +08:00
shim.rs Add simple async drop glue generation 2024-04-16 20:45:07 +03:00
simplify_branches.rs simplify_branches: add comment 2024-03-24 12:53:03 +01:00
simplify_comparison_integral.rs rename mir::Constant -> mir::ConstOperand, mir::ConstKind -> mir::Const 2023-09-21 08:12:30 +02:00
simplify.rs rustc_index: Add a ZERO constant to index types 2024-04-03 19:06:22 +03:00
sroa.rs remove redundant imports 2023-12-10 10:56:22 +08:00
ssa.rs Pacify tidy. 2024-04-20 19:23:49 +00:00
unreachable_enum_branching.rs Remove restrictions on small enum statements such as Order, Option or Result 2024-03-13 22:35:11 +08:00
unreachable_prop.rs coverage: Re-enable UnreachablePropagation for coverage builds 2024-03-26 11:46:04 +11:00