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