[Bug tree-optimization/84011] Optimize switch table with run-time relocation
peter at cordes dot ca
gcc-bugzilla@gcc.gnu.org
Tue May 1 15:27:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84011
--- Comment #13 from Peter Cordes <peter at cordes dot ca> ---
(In reply to Jakub Jelinek from comment #10)
> ?? That is the task for the linker SHF_MERGE|SHF_STRINGS handling.
> Why should gcc duplicate that?
Because gcc would benefit from knowing if merging makes the total block of
strings for a switch() table short enough to use a uint8_t offset[] instead of
uint16_t.
If we don't know at compile time, we'd have to be conservative and potentially
use a wider offset table. (Although as Joseph points out
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85585#c2, without more linker
support for this we could end up missing out on literal merging across
compilation units. So perhaps a first step in applying this idea would be to
use 32-bit offsets from the start of the .rodata.str1.1 section, so we can
still let the linker merge strings and end up with them non-contiguous without
having to force the one that gets kept to be the one that's part of our block
of strings.)
More information about the Gcc-bugs
mailing list