[Bug target/105930] [12/13 Regression] Excessive stack spill generation on 32-bit x86

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jun 14 08:50:17 GMT 2022


--- Comment #16 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Though, ix86_rot{l,r}di3_doubleword define_insn_and_split patterns were split
only after reload both before and after Roger's change, so somehow whether we
emit it as SImode from the beginning or only split it before reload affects the
RA decisions.
unsigned long long foo (unsigned long long x, int y, unsigned long long z) { x
^= z; return (x << 24) | (x >> (-24 & 63)); }
is too simplified, the difference with that is just that we used to emit
setting of the DImode pseudo to 0 before setting its halves with xor, while now
we don't, so it must be something else.

I believe as post-reload splitters the doubleword rotates have been introduced
already in PR17886.
Rewriting those into pre-reload splitters from post-reload splitters would be
certainly possible, I will try that, the question is whether it would cure this
and what effects it would have on other code.

More information about the Gcc-bugs mailing list