[Valgrind-developers] [PATCH 1/2] x86: optimize XCHG to MOV for same-register forms

H.J. Lu hjl.tools@gmail.com
Fri Jul 3 13:32:23 GMT 2026


On Fri, Jul 3, 2026 at 8:28 PM Jan Beulich <jbeulich@suse.com> wrote:
>
> On 03.07.2026 13:39, H.J. Lu wrote:
> > On Fri, Jul 3, 2026 at 6:04 PM Sam James <sam@gentoo.org> wrote:
> >>
> >> Jan Beulich <jbeulich@suse.com> writes:
> >>
> >>> On 03.07.2026 08:09, Paul Floyd wrote:
> >>>> On 2026-07-03 08:00, Jan Beulich wrote:
> >>>>> On 03.07.2026 06:55, Paul Floyd wrote:
> >>>>>> Would it be possible for gas to only do this transformation if the source and destination registers are different?
> >>>>> When the registers are different, this transformation is invalid to do.
> >>>>
> >>>> OK so you are optimising a no-op. Does GCC use it as a no-op?
> >>>
> >>> I don't expect so. In fact, my take is that -O... should not be used on
> >>> compiler generated code. The compiler should do whatever optimizations
> >>> are possible / sensible, and it should not emit code which can (easily)
> >>> further be optimized. (Easily because the assembler really only does
> >>> very simple and pretty obvious transformations.)
> >>
> >> Yes, that's reasonable. We should document it though.
> >
> > -O should be safe for compiler generated codes.
>
> The question isn't about "being safe". -O should be safe on whatever input.
> If it's not, it's a bug.
>
> The question is whether it is plausible to use -O... at all for compiler
> generated code. I causes extra overhead in the assembler, after all. If the
> compiler did a decent job, all of that extra overhead is going to be in
> vein. (As said elsewhere, the situation is different for code coming from
> asm() - that's not really compiler generated code.)
>

>From what we have learned so far, "XCHG REG,REG" has been done
on purpose and compilers never generate them automatically.   Assembler
should leave them alone even with encoding optimization.

-- 
H.J.


More information about the Binutils mailing list