https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96034
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The pxor is in there for performance reasons: ;; Break partial SSE register dependency stall. This splitter should split ;; late in the pass sequence (after register rename pass), so allocated ;; registers won't change anymore So sure, at -Os it is not present, because it makes the code larger (but faster). I also don't understand why you think the 8-bit to 32-bit sign extension is unnecessary, the x86_64 ABI says that the upper bits have unspecified values. It is true that LLVM ignores that part of ABI and makes its own incompatible one and so doesn't add that, but it is wrong.