tree: d9d1deb3f00780db6c5a4072b73fb5e8a7aa2aa3 [path history] [tgz]
  1. building/
  2. const_prop/
  3. copy-prop/
  4. dataflow-const-prop/
  5. dead-store-elimination/
  6. deref-patterns/
  7. dest-prop/
  8. inline/
  9. issues/
  10. nll/
  11. address_of.address_of_reborrow.SimplifyCfg-initial.after.mir
  12. address_of.borrow_and_cast.SimplifyCfg-initial.after.mir
  13. address_of.rs
  14. array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.mir
  15. array_index_is_temporary.rs
  16. asm_unwind_panic_abort.main.AbortUnwindingCalls.after.mir
  17. asm_unwind_panic_abort.rs
  18. basic_assignment.main.SimplifyCfg-initial.after.mir
  19. basic_assignment.rs
  20. bool_compare.opt1.InstCombine.diff
  21. bool_compare.opt2.InstCombine.diff
  22. bool_compare.opt3.InstCombine.diff
  23. bool_compare.opt4.InstCombine.diff
  24. bool_compare.rs
  25. box_expr.main.ElaborateDrops.before.mir
  26. box_expr.rs
  27. byte_slice.main.SimplifyCfg-elaborate-drops.after.mir
  28. byte_slice.rs
  29. casts.redundant.InstCombine.diff
  30. casts.redundant.PreCodegen.after.mir
  31. casts.roundtrip.PreCodegen.after.mir
  32. casts.rs
  33. combine_array_len.norm2.InstCombine.diff
  34. combine_array_len.rs
  35. combine_clone_of_primitives.rs
  36. combine_clone_of_primitives.{impl#0}-clone.InstCombine.diff
  37. const_allocation.main.ConstProp.after.32bit.mir
  38. const_allocation.main.ConstProp.after.64bit.mir
  39. const_allocation.rs
  40. const_allocation2.main.ConstProp.after.32bit.mir
  41. const_allocation2.main.ConstProp.after.64bit.mir
  42. const_allocation2.rs
  43. const_allocation3.main.ConstProp.after.32bit.mir
  44. const_allocation3.main.ConstProp.after.64bit.mir
  45. const_allocation3.rs
  46. const_debuginfo.main.ConstDebugInfo.diff
  47. const_debuginfo.rs
  48. const_goto.issue_77355_opt.ConstGoto.diff
  49. const_goto.rs
  50. const_goto_const_eval_fail.f.ConstGoto.diff
  51. const_goto_const_eval_fail.rs
  52. const_goto_storage.match_nested_if.ConstGoto.diff
  53. const_goto_storage.rs
  54. const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-elaborate-drops.after.mir
  55. const_promotion_extern_static.BAR.PromoteTemps.diff
  56. const_promotion_extern_static.BOP.built.after.mir
  57. const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-elaborate-drops.after.mir
  58. const_promotion_extern_static.FOO.PromoteTemps.diff
  59. const_promotion_extern_static.rs
  60. const_prop_miscompile.bar.ConstProp.diff
  61. const_prop_miscompile.foo.ConstProp.diff
  62. const_prop_miscompile.rs
  63. coverage_graphviz.bar.InstrumentCoverage.0.dot
  64. coverage_graphviz.main.InstrumentCoverage.0.dot
  65. coverage_graphviz.rs
  66. deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.diff
  67. deduplicate_blocks.rs
  68. derefer_complex_case.main.Derefer.diff
  69. derefer_complex_case.rs
  70. derefer_inline_test.main.Derefer.diff
  71. derefer_inline_test.rs
  72. derefer_terminator_test.main.Derefer.diff
  73. derefer_terminator_test.rs
  74. derefer_test.main.Derefer.diff
  75. derefer_test.rs
  76. derefer_test_multiple.main.Derefer.diff
  77. derefer_test_multiple.rs
  78. div_overflow.const_dividend.PreCodegen.after.mir
  79. div_overflow.const_divisor.PreCodegen.after.mir
  80. div_overflow.rs
  81. dont_yeet_assert.generic.InstCombine.diff
  82. dont_yeet_assert.rs
  83. early_otherwise_branch.opt1.EarlyOtherwiseBranch.diff
  84. early_otherwise_branch.opt2.EarlyOtherwiseBranch.diff
  85. early_otherwise_branch.opt3.EarlyOtherwiseBranch.diff
  86. early_otherwise_branch.rs
  87. early_otherwise_branch_3_element_tuple.opt1.EarlyOtherwiseBranch.diff
  88. early_otherwise_branch_3_element_tuple.rs
  89. early_otherwise_branch_68867.rs
  90. early_otherwise_branch_68867.try_sum.EarlyOtherwiseBranch.diff
  91. early_otherwise_branch_noopt.noopt1.EarlyOtherwiseBranch.diff
  92. early_otherwise_branch_noopt.rs
  93. early_otherwise_branch_soundness.no_deref_ptr.EarlyOtherwiseBranch.diff
  94. early_otherwise_branch_soundness.no_downcast.EarlyOtherwiseBranch.diff
  95. early_otherwise_branch_soundness.rs
  96. enum_opt.cand.EnumSizeOpt.32bit.diff
  97. enum_opt.cand.EnumSizeOpt.64bit.diff
  98. enum_opt.invalid.EnumSizeOpt.32bit.diff
  99. enum_opt.invalid.EnumSizeOpt.64bit.diff
  100. enum_opt.rs
  101. enum_opt.trunc.EnumSizeOpt.32bit.diff
  102. enum_opt.trunc.EnumSizeOpt.64bit.diff
  103. enum_opt.unin.EnumSizeOpt.32bit.diff
  104. enum_opt.unin.EnumSizeOpt.64bit.diff
  105. equal_true.opt.InstCombine.diff
  106. equal_true.rs
  107. exponential_or.match_tuple.SimplifyCfg-initial.after.mir
  108. exponential_or.rs
  109. fn_ptr_shim.core.ops-function-Fn-call.AddMovesForPackedDrops.before.mir
  110. fn_ptr_shim.rs
  111. funky_arms.float_to_exponential_common.ConstProp.diff
  112. funky_arms.rs
  113. generator_drop_cleanup.main-{closure#0}.generator_drop.0.mir
  114. generator_drop_cleanup.rs
  115. generator_storage_dead_unwind.main-{closure#0}.StateTransform.before.mir
  116. generator_storage_dead_unwind.rs
  117. generator_tiny.main-{closure#0}.generator_resume.0.mir
  118. generator_tiny.rs
  119. graphviz.main.built.after.dot
  120. graphviz.rs
  121. if_condition_int.dont_opt_bool.SimplifyComparisonIntegral.diff
  122. if_condition_int.dont_opt_floats.SimplifyComparisonIntegral.diff
  123. if_condition_int.dont_remove_comparison.SimplifyComparisonIntegral.diff
  124. if_condition_int.opt_char.SimplifyComparisonIntegral.diff
  125. if_condition_int.opt_i8.SimplifyComparisonIntegral.diff
  126. if_condition_int.opt_multiple_ifs.SimplifyComparisonIntegral.diff
  127. if_condition_int.opt_negative.SimplifyComparisonIntegral.diff
  128. if_condition_int.opt_u32.SimplifyComparisonIntegral.diff
  129. if_condition_int.rs
  130. instrument_coverage.bar.InstrumentCoverage.diff
  131. instrument_coverage.main.InstrumentCoverage.diff
  132. instrument_coverage.rs
  133. intrinsic_asserts.generic.InstCombine.diff
  134. intrinsic_asserts.panics.InstCombine.diff
  135. intrinsic_asserts.removable.InstCombine.diff
  136. intrinsic_asserts.rs
  137. issue_101973.inner.ConstProp.diff
  138. issue_101973.rs
  139. issue_38669.main.SimplifyCfg-initial.after.mir
  140. issue_38669.rs
  141. issue_41110.main.ElaborateDrops.diff
  142. issue_41110.rs
  143. issue_41110.test.ElaborateDrops.diff
  144. issue_41697.rs
  145. issue_41697.{impl#0}-{constant#0}.SimplifyCfg-promote-consts.after.mir
  146. issue_41888.main.ElaborateDrops.diff
  147. issue_41888.rs
  148. issue_62289.rs
  149. issue_62289.test.ElaborateDrops.before.mir
  150. issue_72181.bar.built.after.mir
  151. issue_72181.foo.built.after.mir
  152. issue_72181.main.built.after.mir
  153. issue_72181.rs
  154. issue_72181_1.f.built.after.mir
  155. issue_72181_1.main.built.after.mir
  156. issue_72181_1.rs
  157. issue_76432.rs
  158. issue_76432.test.SimplifyComparisonIntegral.diff
  159. issue_78192.f.InstCombine.diff
  160. issue_78192.rs
  161. issue_91633.bar.built.after.mir
  162. issue_91633.foo.built.after.mir
  163. issue_91633.fun.built.after.mir
  164. issue_91633.hey.built.after.mir
  165. issue_91633.rs
  166. issue_99325.main.built.after.mir
  167. issue_99325.rs
  168. loop_test.main.SimplifyCfg-promote-consts.after.mir
  169. loop_test.rs
  170. lower_array_len.array_bound.NormalizeArrayLen.diff
  171. lower_array_len.array_bound_mut.NormalizeArrayLen.diff
  172. lower_array_len.array_len.NormalizeArrayLen.diff
  173. lower_array_len.array_len_by_value.NormalizeArrayLen.diff
  174. lower_array_len.array_len_raw.NormalizeArrayLen.diff
  175. lower_array_len.array_len_reborrow.NormalizeArrayLen.diff
  176. lower_array_len.rs
  177. lower_intrinsics.align_of.LowerIntrinsics.diff
  178. lower_intrinsics.assume.LowerIntrinsics.diff
  179. lower_intrinsics.discriminant.LowerIntrinsics.diff
  180. lower_intrinsics.f_copy_nonoverlapping.LowerIntrinsics.diff
  181. lower_intrinsics.forget.LowerIntrinsics.diff
  182. lower_intrinsics.non_const.LowerIntrinsics.diff
  183. lower_intrinsics.rs
  184. lower_intrinsics.size_of.LowerIntrinsics.diff
  185. lower_intrinsics.unreachable.LowerIntrinsics.diff
  186. lower_intrinsics.with_overflow.LowerIntrinsics.diff
  187. lower_intrinsics.wrapping.LowerIntrinsics.diff
  188. lower_intrinsics_e2e.f_u64.PreCodegen.after.mir
  189. lower_intrinsics_e2e.f_unit.PreCodegen.after.mir
  190. lower_intrinsics_e2e.rs
  191. lower_slice_len.bound.LowerSliceLenCalls.diff
  192. lower_slice_len.rs
  193. match_arm_scopes.complicated_match.SimplifyCfg-initial.after-ElaborateDrops.after.diff
  194. match_arm_scopes.rs
  195. match_test.main.SimplifyCfg-initial.after.mir
  196. match_test.rs
  197. matches_reduce_branches.bar.MatchBranchSimplification.diff
  198. matches_reduce_branches.foo.MatchBranchSimplification.diff
  199. matches_reduce_branches.match_nested_if.MatchBranchSimplification.diff
  200. matches_reduce_branches.rs
  201. matches_u8.exhaustive_match.MatchBranchSimplification.diff
  202. matches_u8.exhaustive_match_i8.MatchBranchSimplification.diff
  203. matches_u8.rs
  204. multiple_return_terminators.rs
  205. multiple_return_terminators.test.MultipleReturnTerminators.diff
  206. no_drop_for_inactive_variant.rs
  207. no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.mir
  208. no_spurious_drop_after_call.main.ElaborateDrops.before.mir
  209. no_spurious_drop_after_call.rs
  210. not_equal_false.opt.InstCombine.diff
  211. not_equal_false.rs
  212. nrvo_simple.nrvo.RenameReturnPlace.diff
  213. nrvo_simple.rs
  214. packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.mir
  215. packed_struct_drop_aligned.rs
  216. README.md
  217. remove_fake_borrows.match_guard.CleanupPostBorrowck.diff
  218. remove_fake_borrows.rs
  219. remove_never_const.no_codegen.PreCodegen.after.mir
  220. remove_never_const.rs
  221. remove_storage_markers.main.RemoveStorageMarkers.diff
  222. remove_storage_markers.rs
  223. remove_unneeded_drops.cannot_opt_generic.RemoveUnneededDrops.diff
  224. remove_unneeded_drops.dont_opt.RemoveUnneededDrops.diff
  225. remove_unneeded_drops.opt.RemoveUnneededDrops.diff
  226. remove_unneeded_drops.opt_generic_copy.RemoveUnneededDrops.diff
  227. remove_unneeded_drops.rs
  228. remove_zsts.get_union.PreCodegen.after.mir
  229. remove_zsts.get_union.RemoveZsts.diff
  230. remove_zsts.rs
  231. retag.array_casts.SimplifyCfg-elaborate-drops.after.mir
  232. retag.core.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir
  233. retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.mir
  234. retag.main.SimplifyCfg-elaborate-drops.after.mir
  235. retag.rs
  236. retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.mir
  237. retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.mir
  238. return_an_array.rs
  239. separate_const_switch.identity.SeparateConstSwitch.diff
  240. separate_const_switch.rs
  241. separate_const_switch.too_complex.SeparateConstSwitch.diff
  242. simple_option_map_e2e.ezmap.PreCodegen.after.mir
  243. simple_option_map_e2e.rs
  244. simplify_arm.id_try.SimplifyArmIdentity.diff
  245. simplify_arm.id_try.SimplifyBranchSame.diff
  246. simplify_arm.rs
  247. simplify_arm_identity.rs
  248. simplify_cfg.main.SimplifyCfg-early-opt.diff
  249. simplify_cfg.main.SimplifyCfg-initial.diff
  250. simplify_cfg.rs
  251. simplify_if.main.SimplifyConstCondition-after-const-prop.diff
  252. simplify_if.rs
  253. simplify_locals.c.SimplifyLocals-before-const-prop.diff
  254. simplify_locals.d1.SimplifyLocals-before-const-prop.diff
  255. simplify_locals.d2.SimplifyLocals-before-const-prop.diff
  256. simplify_locals.expose_addr.SimplifyLocals-before-const-prop.diff
  257. simplify_locals.r.SimplifyLocals-before-const-prop.diff
  258. simplify_locals.rs
  259. simplify_locals.t1.SimplifyLocals-before-const-prop.diff
  260. simplify_locals.t2.SimplifyLocals-before-const-prop.diff
  261. simplify_locals.t3.SimplifyLocals-before-const-prop.diff
  262. simplify_locals.t4.SimplifyLocals-before-const-prop.diff
  263. simplify_locals_fixedpoint.foo.SimplifyLocals-final.diff
  264. simplify_locals_fixedpoint.rs
  265. simplify_locals_removes_unused_consts.main.SimplifyLocals-before-const-prop.diff
  266. simplify_locals_removes_unused_consts.rs
  267. simplify_locals_removes_unused_discriminant_reads.map.SimplifyLocals-before-const-prop.diff
  268. simplify_locals_removes_unused_discriminant_reads.rs
  269. simplify_match.main.ConstProp.diff
  270. simplify_match.rs
  271. simplify_try_if_let.rs
  272. simplify_try_if_let.{impl#0}-append.SimplifyArmIdentity.diff
  273. slice_drop_shim.core.ptr-drop_in_place.[String].AddMovesForPackedDrops.before.mir
  274. slice_drop_shim.rs
  275. slice_filter.rs
  276. slice_filter.variant_a-{closure#0}.CopyProp.diff
  277. slice_filter.variant_a-{closure#0}.DestinationPropagation.diff
  278. slice_filter.variant_b-{closure#0}.CopyProp.diff
  279. slice_filter.variant_b-{closure#0}.DestinationPropagation.diff
  280. spanview_block.main.built.after.html
  281. spanview_block.rs
  282. spanview_statement.main.built.after.html
  283. spanview_statement.rs
  284. spanview_terminator.main.built.after.html
  285. spanview_terminator.rs
  286. sroa.constant.ScalarReplacementOfAggregates.diff
  287. sroa.copies.ScalarReplacementOfAggregates.diff
  288. sroa.dropping.ScalarReplacementOfAggregates.diff
  289. sroa.enums.ScalarReplacementOfAggregates.diff
  290. sroa.escaping.ScalarReplacementOfAggregates.diff
  291. sroa.flat.ScalarReplacementOfAggregates.diff
  292. sroa.ref_copies.ScalarReplacementOfAggregates.diff
  293. sroa.rs
  294. sroa.structs.ScalarReplacementOfAggregates.diff
  295. sroa.unions.ScalarReplacementOfAggregates.diff
  296. storage_ranges.main.nll.0.mir
  297. storage_ranges.rs
  298. tls_access.main.PreCodegen.after.mir
  299. tls_access.rs
  300. try_identity_e2e.new.PreCodegen.after.mir
  301. try_identity_e2e.old.PreCodegen.after.mir
  302. try_identity_e2e.rs
  303. uninhabited_enum.process_never.SimplifyLocals-final.after.mir
  304. uninhabited_enum.process_void.SimplifyLocals-final.after.mir
  305. uninhabited_enum.rs
  306. uninhabited_enum_branching.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
  307. uninhabited_enum_branching.main.UninhabitedEnumBranching.diff
  308. uninhabited_enum_branching.rs
  309. uninhabited_enum_branching2.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
  310. uninhabited_enum_branching2.main.UninhabitedEnumBranching.diff
  311. uninhabited_enum_branching2.rs
  312. uninhabited_fallthrough_elimination.eliminate_fallthrough.UninhabitedEnumBranching.diff
  313. uninhabited_fallthrough_elimination.keep_fallthrough.UninhabitedEnumBranching.diff
  314. uninhabited_fallthrough_elimination.rs
  315. unreachable.main.UnreachablePropagation.diff
  316. unreachable.rs
  317. unreachable_diverging.main.UnreachablePropagation.diff
  318. unreachable_diverging.rs
  319. unusual_item_types.core.ptr-drop_in_place.Vec_i32_.AddMovesForPackedDrops.before.mir
  320. unusual_item_types.E-V-{constant#0}.built.after.mir
  321. unusual_item_types.rs
  322. unusual_item_types.Test-X-{constructor#0}.built.after.mir
  323. unusual_item_types.{impl#0}-ASSOCIATED_CONSTANT.built.after.mir
  324. while_let_loops.change_loop_body.ConstProp.diff
  325. while_let_loops.change_loop_body.PreCodegen.after.mir
  326. while_let_loops.rs
  327. while_storage.rs
  328. while_storage.while_loop.PreCodegen.after.mir
tests/mir-opt/README.md

This folder contains tests for MIR optimizations.

The mir-opt test format emits MIR to extra files that you can automatically update by specifying --bless on the command line (just like ui tests updating .stderr files).

--blessable test format

By default 32 bit and 64 bit targets use the same dump files, which can be problematic in the presence of pointers in constants or other bit width dependent things. In that case you can add

// EMIT_MIR_FOR_EACH_BIT_WIDTH

to your test, causing separate files to be generated for 32bit and 64bit systems.

Unit testing

If you are only testing the behavior of a particular mir-opt pass on some specific input (as is usually the case), you should add

// unit-test: PassName

to the top of the file. This makes sure that other passes don‘t run which means you’ll get the input you expected and your test won't break when other code changes.

Emit a diff of the mir for a specific optimization

This is what you want most often when you want to see how an optimization changes the MIR.

// EMIT_MIR $file_name_of_some_mir_dump.diff

Emit mir after a specific optimization

Use this if you are just interested in the final state after an optimization.

// EMIT_MIR $file_name_of_some_mir_dump.after.mir

Emit mir before a specific optimization

This exists mainly for completeness and is rarely useful.

// EMIT_MIR $file_name_of_some_mir_dump.before.mir