rust/tests/mir-opt/pre-codegen
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
..
chained_comparison.bitand.PreCodegen.after.mir Remove comments from mir-opt MIR dumps 2023-06-15 15:19:11 -04:00
chained_comparison.naive.PreCodegen.after.mir update tests that are ignored by debug 2023-09-01 04:01:54 +08:00
chained_comparison.returning.PreCodegen.after.mir update tests that are ignored by debug 2023-09-01 04:01:54 +08:00
chained_comparison.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
checked_ops.checked_shl.PreCodegen.after.panic-abort.mir Make checked ops emit *unchecked* LLVM operations where feasible 2024-04-18 18:11:21 -07:00
checked_ops.checked_shl.PreCodegen.after.panic-unwind.mir Make checked ops emit *unchecked* LLVM operations where feasible 2024-04-18 18:11:21 -07:00
checked_ops.rs Make checked ops emit *unchecked* LLVM operations where feasible 2024-04-18 18:11:21 -07:00
checked_ops.step_forward.PreCodegen.after.panic-abort.mir Ensure [rust] debuginfo-level-std doesn't change core's MIR 2024-04-18 09:35:36 -07:00
checked_ops.step_forward.PreCodegen.after.panic-unwind.mir Ensure [rust] debuginfo-level-std doesn't change core's MIR 2024-04-18 09:35:36 -07:00
derived_ord.{impl#0}-partial_cmp.PreCodegen.after.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
derived_ord.rs Add a MIR pre-codegen test for derived PartialOrd 2024-03-23 23:06:44 -07:00
duplicate_switch_targets.rs Enable more mir-opt tests in debug builds 2024-03-22 20:14:39 -04:00
duplicate_switch_targets.ub_if_b.PreCodegen.after.mir Remove MIR unsafe check 2024-04-03 08:50:12 +00:00
intrinsics.f_u64.PreCodegen.after.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
intrinsics.f_unit.PreCodegen.after.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
intrinsics.rs Remove some only- clauses from mir-opt tests 2024-03-18 10:07:43 -04:00
issue_117368_print_invalid_constant.main.GVN.32bit.panic-abort.diff At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
issue_117368_print_invalid_constant.main.GVN.32bit.panic-unwind.diff At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
issue_117368_print_invalid_constant.main.GVN.64bit.panic-abort.diff At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
issue_117368_print_invalid_constant.main.GVN.64bit.panic-unwind.diff At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
issue_117368_print_invalid_constant.rs Make ui into mir-opt test. 2023-11-01 16:49:18 +00:00
loops.filter_mapped.PreCodegen.after.mir Sandwich MIR optimizations between DSE. 2024-01-11 09:58:19 +00:00
loops.int_range.PreCodegen.after.mir Remove MIR unsafe check 2024-04-03 08:50:12 +00:00
loops.mapped.PreCodegen.after.mir Sandwich MIR optimizations between DSE. 2024-01-11 09:58:19 +00:00
loops.rs Remove some only- clauses from mir-opt tests 2024-03-18 10:07:43 -04:00
loops.vec_move.PreCodegen.after.mir make MIR less verbose 2023-08-24 14:26:26 +02:00
matches_macro.issue_77355_opt.PreCodegen.after.mir Remove ConstGoto and SeparateConstSwitch. 2024-02-09 21:13:53 +00:00
matches_macro.rs Remove ConstGoto and SeparateConstSwitch. 2024-02-09 21:13:53 +00:00
mem_replace.manual_replace.PreCodegen.after.panic-abort.mir Bless/fix tests 2024-02-08 19:56:30 -05:00
mem_replace.manual_replace.PreCodegen.after.panic-unwind.mir Bless/fix tests 2024-02-08 19:56:30 -05:00
mem_replace.mem_replace.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
mem_replace.mem_replace.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
mem_replace.rs Enable more mir-opt tests in debug builds 2024-03-22 20:14:39 -04:00
optimizes_into_variable.main.GVN.32bit.panic-abort.diff Sandwich MIR optimizations between DSE. 2024-01-11 09:58:19 +00:00
optimizes_into_variable.main.GVN.32bit.panic-unwind.diff Sandwich MIR optimizations between DSE. 2024-01-11 09:58:19 +00:00
optimizes_into_variable.main.GVN.64bit.panic-abort.diff Sandwich MIR optimizations between DSE. 2024-01-11 09:58:19 +00:00
optimizes_into_variable.main.GVN.64bit.panic-unwind.diff Sandwich MIR optimizations between DSE. 2024-01-11 09:58:19 +00:00
optimizes_into_variable.main.PreCodegen.after.32bit.panic-abort.mir Remove comments from mir-opt MIR dumps 2023-06-15 15:19:11 -04:00
optimizes_into_variable.main.PreCodegen.after.32bit.panic-unwind.mir Remove comments from mir-opt MIR dumps 2023-06-15 15:19:11 -04:00
optimizes_into_variable.main.PreCodegen.after.64bit.panic-abort.mir Remove comments from mir-opt MIR dumps 2023-06-15 15:19:11 -04:00
optimizes_into_variable.main.PreCodegen.after.64bit.panic-unwind.mir Remove comments from mir-opt MIR dumps 2023-06-15 15:19:11 -04:00
optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-abort.diff Reorder early post-inlining passes. 2024-01-07 01:42:57 +00:00
optimizes_into_variable.main.ScalarReplacementOfAggregates.32bit.panic-unwind.diff Reorder early post-inlining passes. 2024-01-07 01:42:57 +00:00
optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-abort.diff Reorder early post-inlining passes. 2024-01-07 01:42:57 +00:00
optimizes_into_variable.main.ScalarReplacementOfAggregates.64bit.panic-unwind.diff Reorder early post-inlining passes. 2024-01-07 01:42:57 +00:00
optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-abort.mir Remove comments from mir-opt MIR dumps 2023-06-15 15:19:11 -04:00
optimizes_into_variable.main.SimplifyLocals-final.after.32bit.panic-unwind.mir Remove comments from mir-opt MIR dumps 2023-06-15 15:19:11 -04:00
optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-abort.mir Remove comments from mir-opt MIR dumps 2023-06-15 15:19:11 -04:00
optimizes_into_variable.main.SimplifyLocals-final.after.64bit.panic-unwind.mir Remove comments from mir-opt MIR dumps 2023-06-15 15:19:11 -04:00
optimizes_into_variable.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-abort.mir Update tests after 123949 2024-04-21 11:24:54 -07:00
ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-unwind.mir Update tests after 123949 2024-04-21 11:24:54 -07:00
ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-abort.mir Update tests after 123949 2024-04-21 11:24:54 -07:00
ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-unwind.mir Update tests after 123949 2024-04-21 11:24:54 -07:00
ptr_offset.rs Add a mir-opt test for byte_add on pointers 2024-04-21 11:08:36 -07:00
range_iter.forward_loop.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
range_iter.forward_loop.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
range_iter.inclusive_loop.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
range_iter.inclusive_loop.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
range_iter.range_inclusive_iter_next.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
range_iter.range_inclusive_iter_next.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
range_iter.range_iter_next.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
range_iter.rs Remove some only- clauses from mir-opt tests 2024-03-18 10:07:43 -04:00
README.md Add mir-opt tests to track MIR quality. 2023-04-23 17:10:53 +00:00
simple_option_map.ezmap.PreCodegen.after.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
simple_option_map.rs Remove some only- clauses from mir-opt tests 2024-03-18 10:07:43 -04:00
slice_filter.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
slice_filter.variant_a-{closure#0}.PreCodegen.after.mir Merge borrowed locals too. 2024-04-20 19:20:38 +00:00
slice_filter.variant_b-{closure#0}.PreCodegen.after.mir Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
slice_index.rs New slice indexing pre-codegen MIR test 2024-04-21 11:08:36 -07:00
slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_index.slice_get_unchecked_mut_range.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_index.slice_index_range.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_index.slice_index_range.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_index.slice_index_usize.PreCodegen.after.panic-abort.mir Remove comments from mir-opt MIR dumps 2023-06-15 15:19:11 -04:00
slice_index.slice_index_usize.PreCodegen.after.panic-unwind.mir Bless tests 2023-06-23 18:36:25 +01:00
slice_index.slice_ptr_get_unchecked_range.PreCodegen.after.panic-abort.mir Update tests after 123949 2024-04-21 11:24:54 -07:00
slice_index.slice_ptr_get_unchecked_range.PreCodegen.after.panic-unwind.mir Update tests after 123949 2024-04-21 11:24:54 -07:00
slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_iter.forward_loop.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_iter.range_loop.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_iter.range_loop.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
slice_iter.rs Enable more mir-opt tests in debug builds 2024-03-22 20:14:39 -04:00
slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-abort.mir Turn copy into moves during DSE. 2023-07-19 09:59:12 +00:00
slice_iter.slice_iter_mut_next_back.PreCodegen.after.panic-unwind.mir Turn copy into moves during DSE. 2023-07-19 09:59:12 +00:00
slice_iter.slice_iter_next.PreCodegen.after.panic-abort.mir Turn copy into moves during DSE. 2023-07-19 09:59:12 +00:00
slice_iter.slice_iter_next.PreCodegen.after.panic-unwind.mir Turn copy into moves during DSE. 2023-07-19 09:59:12 +00:00
spans.outer.PreCodegen.after.panic-abort.mir Allow to run filecheck in mir-opt tests. 2023-10-19 15:51:52 +00:00
spans.outer.PreCodegen.after.panic-unwind.mir Allow to run filecheck in mir-opt tests. 2023-10-19 15:51:52 +00:00
spans.rs At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
try_identity.new.PreCodegen.after.mir Enable by default. 2024-02-09 21:13:51 +00:00
try_identity.old.PreCodegen.after.mir Sandwich MIR optimizations between DSE. 2024-01-11 09:58:19 +00:00
try_identity.rs Remove some only- clauses from mir-opt tests 2024-03-18 10:07:43 -04:00
vec_deref.rs Add a MIR pre-codegen test for Vec::deref 2024-04-21 11:08:36 -07:00
vec_deref.vec_deref_to_slice.PreCodegen.after.panic-abort.mir Use it in the library, and InstSimplify it away in the easy places 2024-04-21 11:08:37 -07:00
vec_deref.vec_deref_to_slice.PreCodegen.after.panic-unwind.mir Use it in the library, and InstSimplify it away in the easy places 2024-04-21 11:08:37 -07:00

The goal of this directory is to track the quality of MIR that is given to codegen in a standard -O condiguration.

As such, feel free to --bless whatever changes you get here, so long as doing so doesn't add substantially more MIR.