rust/compiler/rustc_mir_transform/src
Nicholas Nethercote 5ce3797073 Introduce MirDumper and MirWriter.
MIR dumping is a mess. There are lots of functions and entry points,
e.g. `dump_mir`, `dump_mir_with_options`, `dump_polonius_mir`,
`dump_mir_to_writer`. Also, it's crucial that `create_dump_file` is
never called without `dump_enabled` first being checked, but there is no
mechanism for ensuring this and it's hard to tell if it is satisfied on
all paths. (`dump_enabled` is checked twice on some paths, however!)

This commit introduces `MirWriter`, which controls the MIR writing, and
encapsulates the `extra_data` closure and `options`. Two existing
functions are now methods of this type. It sets reasonable defaults,
allowing the removal of many `|_, _| Ok(())` closures.

The commit also introduces `MirDumper`, which is layered on top of
`MirWriter`, and which manages the creation of the dump files,
encapsulating pass names, disambiguators, etc. Four existing functions
are now methods of this type.
- `MirDumper::new` will only succeed if dumps are enabled, and will
  return `None` otherwise, which makes it impossible to dump when you
  shouldn't.
- It also sets reasonable defaults for various things like
  disambiguators, which means you no longer need to specify them in many
  cases. When they do need to be specified, it's now done via setter
  methods.
- It avoids some repetition. E.g. `dump_nll_mir` previously specifed the
  pass name `"nll"` four times and the disambiguator `&0` three times;
  now it specifies them just once, to put them in the `MirDumper`.
- For Polonius, the `extra_data` closure can now be specified earlier,
  which avoids having to pass some arguments through some functions.
2025-09-01 09:19:03 +10:00
..
coroutine Introduce MirDumper and MirWriter. 2025-09-01 09:19:03 +10:00
coverage Uplift rustc_mir_transform::coverage::counters::union_find to rustc_data_structures. 2025-08-22 02:22:51 +00:00
inline Be a bit more careful around exotic cycles in in the inliner 2025-07-18 16:35:55 +00:00
shim mir: Use the new method for BasicBlockData 2025-06-29 20:39:13 +08:00
abort_unwinding_calls.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
add_call_guards.rs mir: Use the new method for BasicBlockData 2025-06-29 20:39:13 +08:00
add_moves_for_packed_drops.rs mir: Use the new method for BasicBlockData 2025-06-29 20:39:13 +08:00
add_retag.rs Remove Retag for Unique 2025-07-21 08:08:41 +00:00
add_subtyping_projections.rs Remove some unnecessary erases 2025-05-08 16:20:57 +00:00
check_alignment.rs mir: Add a new method to statement 2025-06-29 20:13:36 +08:00
check_call_recursion.rs Cleanup assoc parent utils 2025-08-13 09:33:09 -05:00
check_const_item_mutation.rs Only look at trait impls in the current crate when looking for Drop impls 2025-04-02 07:30:11 +00:00
check_enums.rs Fix ICE when validating transmuting ZST to inhabited enum 2025-08-23 19:25:58 +02:00
check_inline.rs coverage: Remove all unstable support for MC/DC instrumentation 2025-08-06 22:38:52 +10:00
check_null.rs mir: Add a new method to statement 2025-06-29 20:13:36 +08:00
check_packed_ref.rs Cleanup assoc parent utils 2025-08-13 09:33:09 -05:00
check_pointers.rs mir: Use the new method for BasicBlockData 2025-06-29 20:39:13 +08:00
cleanup_post_borrowck.rs Visit place in BackwardIncompatibleDropHint statement 2025-04-13 22:01:54 +00:00
copy_prop.rs Leave from CopyProp early when there are no replacements 2025-06-22 14:30:23 +02:00
coroutine.rs Introduce MirDumper and MirWriter. 2025-09-01 09:19:03 +10:00
cost_checker.rs Allow more top-down inlining for single-BB callees 2025-03-12 22:39:43 -07:00
cross_crate_inline.rs add a flag to codegen fn attrs for foreign items 2025-08-26 13:05:51 +02:00
ctfe_limit.rs detect infinite recursion with tail calls in ctfe 2025-07-31 23:59:55 +02:00
dataflow_const_prop.rs Add InterpCx::layout_of with tracing, shadowing LayoutOf 2025-06-27 11:49:22 +02:00
dead_store_elimination.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
deduce_param_attrs.rs Remove obsolete comment from DeduceReadOnly 2025-03-04 12:26:01 +01:00
deref_separator.rs Move MirPatch from rustc_middle to rustc_mir_transform. 2025-02-14 16:15:57 +11:00
dest_prop.rs Introduce MirDumper and MirWriter. 2025-09-01 09:19:03 +10:00
dump_mir.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
early_otherwise_branch.rs mir-opt: Do not create storage marks for temporary locals 2025-05-24 15:36:06 +08:00
elaborate_box_derefs.rs Move MirPatch from rustc_middle to rustc_mir_transform. 2025-02-14 16:15:57 +11:00
elaborate_drop.rs Rollup merge of #132748 - lolbinarycat:rustdoc-intra-doc-link-warn-more-54191, r=GuillaumeGomez 2025-08-02 11:24:20 +02:00
elaborate_drops.rs debug impls for drop elaborators 2025-07-18 17:31:48 -07:00
errors.rs coverage: Remove all unstable support for MC/DC instrumentation 2025-08-06 22:38:52 +10:00
ffi_unwind_calls.rs compiler: use is_rustic_abi in mir_transform 2025-03-04 18:21:56 -08:00
function_item_references.rs Rename ClearCrossCrate::assert_crate_local. 2025-02-21 07:12:13 +11:00
gvn.rs Correct comments. 2025-08-21 23:59:20 +00:00
impossible_predicates.rs Keep elaborating predicates. 2025-07-22 01:51:11 +00:00
inline.rs remove rustc_attr_data_structures 2025-07-31 14:19:27 +02:00
instsimplify.rs Simplify align_of_val::<[T]>(…)align_of::<T>() 2025-07-28 23:19:06 -07:00
jump_threading.rs Add InterpCx::layout_of with tracing, shadowing LayoutOf 2025-06-27 11:49:22 +02:00
known_panics_lint.rs AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
large_enums.rs extend allocbytes with associated type 2025-05-26 00:15:16 +02:00
lib.rs mir: Add a new method to statement 2025-06-29 20:13:36 +08:00
lint.rs rename BitSet to DenseBitSet 2025-01-11 11:34:01 +00:00
lint_tail_expr_drop_order.rs Introduce MirDumper and MirWriter. 2025-09-01 09:19:03 +10:00
lower_intrinsics.rs mir: Add a new method to statement 2025-06-29 20:13:36 +08:00
lower_slice_len.rs mir: Add a new method to statement 2025-06-29 20:13:36 +08:00
match_branches.rs mir-opt: Do not transform non-int type in match_branches 2025-05-26 18:15:54 +08:00
mentioned_items.rs Remove support for dyn* 2025-07-01 19:00:21 +00:00
multiple_return_terminators.rs In rustc_mir_tranform, iterate over index newtypes instead of ints 2025-04-12 11:53:07 +00:00
nrvo.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
pass_manager.rs Introduce MirDumper and MirWriter. 2025-09-01 09:19:03 +10:00
patch.rs mir: Use the new method for BasicBlockData 2025-06-29 20:39:13 +08:00
post_analysis_normalize.rs do not emit OpaqueCast projections with -Znext-solver 2025-04-17 12:15:04 +02:00
post_drop_elaboration.rs Make check_live_drops into a MirLint. 2024-09-10 09:11:17 +10:00
prettify.rs Use a closure instead of three chained iterators 2025-04-29 14:58:21 +00:00
promote_consts.rs use let chains in mir, resolve, target 2025-07-28 06:10:36 +05:00
ref_prop.rs Convert moves of references to copies in RefProp 2025-08-11 23:10:56 -04:00
remove_noop_landing_pads.rs use let chains in mir, resolve, target 2025-07-28 06:10:36 +05:00
remove_place_mention.rs Do not optimize out SwitchInt before borrowck, or if Zmir-preserve-ub 2025-04-08 21:05:20 +00:00
remove_storage_markers.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
remove_uninit_drops.rs Apply effects to otherwise edge in dataflow analysis 2025-07-08 18:15:05 -05:00
remove_unneeded_drops.rs Let RemoveUnneededDrops also remove drop_in_place 2025-08-04 23:54:39 -07:00
remove_zsts.rs AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
required_consts.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
sanity_check.rs Move MirPass to rustc_mir_transform. 2024-09-03 16:03:46 +10:00
shim.rs Introduce MirDumper and MirWriter. 2025-09-01 09:19:03 +10:00
simplify.rs simplifycfg: Mark as changed when start is modified in collapse goto chain 2025-08-06 20:26:10 +08:00
simplify_branches.rs Fix binding mode problems 2025-02-22 00:13:19 +00:00
simplify_comparison_integral.rs mir: Add a new method to statement 2025-06-29 20:13:36 +08:00
single_use_consts.rs Inline and replace Statement::replace_nop. 2025-02-18 13:43:43 +11:00
sroa.rs Re-block SRoA on SIMD types 2025-07-29 20:41:34 -07:00
ssa.rs Propagate from borrowed locals in CopyProp 2025-07-10 09:36:20 +02:00
strip_debuginfo.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
unreachable_enum_branching.rs Move MirPatch from rustc_middle to rustc_mir_transform. 2025-02-14 16:15:57 +11:00
unreachable_prop.rs Rename tests/codegen into tests/codegen-llvm 2025-07-22 14:28:48 +02:00
validate.rs remove rustc_attr_data_structures 2025-07-31 14:19:27 +02:00