On Sat, 30 Nov 2024, Jeff Law wrote:

> 
> 
> On 11/28/24 5:26 AM, Alexey Merzlyakov wrote:
> > This patch adds optimization of the following patterns:
> > 
> >    (zero_extend:M (subreg:N (not:O==M (X:Q==M)))) ->
> >    (xor:M (zero_extend:M (subreg:N (X:M)), mask))
> >    ... where the mask is GET_MODE_MASK (N).
> > 
> > For the cases when X:M doesn't have any non-zero bits outside of mode N,
> > (zero_extend:M (subreg:N (X:M)) could be simplified to just (X:M)
> > and whole optimization will be:
> > 
> >    (zero_extend:M (subreg:N (not:M (X:M)))) ->
> >    (xor:M (X:M, mask))
> > 
> > Patch targets to handle code patterns like:
> >    not   a0,a0
> >    andi  a0,a0,0xff
> > to be optimized to:
> >    xori  a0,a0,255

> Thanks.  I've bootstrapped & regression tested this on x86_64 as well as run
> it through my tester successfully.  Pushed to the trunk.  Hopefully no fallout
> this time :-)
> 
> jeff
> 
> 

This doesn't look like an obviously generic, universal 
optimization.

Targets that have to move a constant to a register for the xor 
mask, but have simple access to sub-word "not" and zero-extend, 
will be pessimized by having the "not" and zero-extend replaced 
with an xor with a constant, IIUC.

brgds, H-P

Reply via email to