Closed
Description
I got excited by and went to try out SimplifyArmIdentity
+SimplifyBranchSame
from #66282, but was surprised that the first thing I attempted didn't actually get optimized away as I'd expected.
pub fn demo(x: Result<u32, i32>) -> Result<u32, i32> {
match x {
Ok(v) => Ok(v),
Err(e) => Err(e),
}
}
Repro: https://rust.godbolt.org/z/bxFAsP
It does, however, optimize away in MIR with -Z mir-opt-level=2
.
(Note that this is the simple case without ?
, where there are no function calls involved so inlining should be irrelevant.)
Seems like there's a gap here? cc @Centril @oli-obk @wesleywiser
Some guesses from the discord conversation where centril asked me to open this issue: the Storage{Live|Dead}
presence, extra copies because [ui]32
, const prop hiding something, ...
Metadata
Metadata
Assignees
Labels
Area: Mid-level IR (MIR) - https://blog.rust-lang.org/2016/04/19/MIR.htmlArea: MIR optimizationsCategory: An issue proposing an enhancement or a PR with one.Issue: Problems and improvements with respect to compile times.Relevant to the compiler team, which will review and decide on the PR/issue.This issue requires a nightly compiler in some way.
Activity
oli-obk commentedon Nov 29, 2019
You can run with -Zdump-mir locally with each -Zmir-opt-level and diff the resulting directories full of mir dumps. Then you'll see where stuff starts to diverge, which should pinpoint where we need to change something
matthewjasper commentedon Nov 29, 2019
I'm surprised that this was merged without explicitly requiring
-Zmir-opt-level=2
.Visitor
#65572oli-obk commentedon Dec 1, 2019
@matthewjasper well... we don't have any policy about this afaik. Should we establish one? I like level 1 because it gives us good testing (as the issues have shown), but I also see that exposing new optimizations directly will likely cause problems again in the future
Centril commentedon Dec 1, 2019
Rather than using
mir-opt-level=2
, we could limit new optimizations to nightly compilers instead?bjorn3 commentedon Dec 1, 2019
Or maybe use
-Zmir-opt-level=2
as default for nightly.matthewjasper commentedon Dec 1, 2019
Given that bugs were found in this pass even with it requiring a Z-flag, I'm not really concerned about testing, at least for a few weeks. Having nightly not mirror stable in something with such a poor track record as newly added mir optimisations sounds terrible.
Auto merge of #69756 - wesleywiser:simplify_try, r=<try>
Auto merge of #69756 - wesleywiser:simplify_try, r=<try>