diff options
author | bors <bors@rust-lang.org> | 2023-04-21 15:08:02 +0000 |
---|---|---|
committer | bors <bors@rust-lang.org> | 2023-04-21 15:08:02 +0000 |
commit | 4a03f14b099bf19f0124872b3f6d99ef00db7902 (patch) | |
tree | 5e5f9756b3a03c11ac6a62506bfcea66349a904e /tests/rustdoc-js-std/parser-errors.js | |
parent | 409661936f929b254ffc8adb644cf35d1f9765c4 (diff) | |
parent | 8ec49ad19a0c77c438c9d3092a6ecf52d6f2cab6 (diff) | |
download | rust-4a03f14b099bf19f0124872b3f6d99ef00db7902.tar.gz |
Auto merge of #110569 - saethlin:mir-pass-cooperation, r=cjgillot
Deduplicate unreachable blocks, for real this time
In https://github.com/rust-lang/rust/pull/106428 (in particular https://github.com/rust-lang/rust/pull/106428/commits/41eda69516dd3ee217ae07c0efa369d31f630405) we noticed that inlining `unreachable_unchecked` can produce duplicate unreachable blocks. So we improved two MIR optimizations: `SimplifyCfg` was given a simplify to deduplicate unreachable blocks, then `InstCombine` was given a combiner to deduplicate switch targets that point at the same block. The problem is that change doesn't actually work.
Our current pass order is
```
SimplifyCfg (does nothing relevant to this situation)
Inline (produces multiple unreachable blocks)
InstCombine (doesn't do anything here, oops)
SimplifyCfg (produces the duplicate SwitchTargets that InstCombine is looking for)
```
So in here, I have factored out the specific function from `InstCombine` and placed it inside the simplify that produces the case it is looking for. This should ensure that it runs in the scenario it was designed for.
Fixes https://github.com/rust-lang/rust/issues/110551
r? `@cjgillot`
Diffstat (limited to 'tests/rustdoc-js-std/parser-errors.js')
0 files changed, 0 insertions, 0 deletions