about summary refs log tree commit diff
path: root/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2020-10-29 01:37:49 +0000
committerbors <bors@rust-lang.org>2020-10-29 01:37:49 +0000
commitf9187adaef2005b903f666bf323ac675cadf8407 (patch)
treee688da00c25304fc6ce9a68a365a98c3eb24155a /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
parent31ee872db5aae4750e3da1ca4ed1523c4356947f (diff)
parent41a74ace4aeba292ac524dccaa594c2c8aeb19c0 (diff)
downloadrust-f9187adaef2005b903f666bf323ac675cadf8407.tar.gz
rust-f9187adaef2005b903f666bf323ac675cadf8407.zip
Auto merge of #78430 - Nadrieril:taking-constructors-seriously2, r=varkor
Clarify main code paths in exhaustiveness checking

This PR massively clarifies the main code paths of exhaustiveness checking, by using the `Constructor` enum to a fuller extent. I've been itching to write it for more than a year, but the complexity of matching consts had prevented me. Behold a massive simplification :D.
This in particular removes a fair amount of duplication between various parts, localizes code into methods of relevant types when applicable, makes some implicit assumptions explicit, and overall improves legibility a lot (or so I hope). Additionally, after my changes undoing #76918 turned out to be a noticeable perf gain.

As usual I tried my best to make the commits self-contained and easy to follow. I've also tried to keep the code well-commented, but I tend to forget how complex this file is; I'm happy to clarify things as needed.
My measurements show good perf improvements on the two match-heavy benchmarks (-18.0% on `unicode_normalization-check`! :D); I'd like a perf run to check the overall impact.

r? `@varkor`
`@rustbot` modify labels: +A-exhaustiveness-checking
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions