Introduce a fast path that avoids the debug_tuple
abstraction when deriving
Debug for unit-like enum variants. The intent here is to allow LLVM to remove the switch entirely in favor of an indexed load from a table of constant strings, which is likely what the programmer would write in C. Unfortunately, LLVM currently doesn't perform this optimization due to a bug, but there is [a patch](https://reviews.llvm.org/D109565) that fixes this issue. I've verified that, with that patch applied on top of this commit, Debug for unit-like tuple variants becomes a load, reducing the O(n) code bloat to O(1). Note that inlining `DebugTuple::finish()` wasn't enough to allow LLVM to optimize the code properly; I had to avoid the abstraction entirely. Not using the abstraction is likely better for compile time anyway. Part of #88793.
This commit is contained in:
parent
497ee321af
commit
79bc53870f
2 changed files with 18 additions and 3 deletions
|
@ -1418,6 +1418,7 @@ symbols! {
|
|||
wrapping_sub,
|
||||
wreg,
|
||||
write_bytes,
|
||||
write_str,
|
||||
x87_reg,
|
||||
xer,
|
||||
xmm_reg,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue