Thanks for the quick reply and the pointers.
I agree it’s better to reuse existing address decomposition instead of
duplicating logic locally. I’ll rework the patch to use create_data_ref (or
tree_to_aff_combination_expand if more appropriate) to extract base +
constant/scale parts.
I’ll send a v2 once updated.
Best regards,
Denis

--
Denis Dolya (Ferki)
GCC contributor
GitHub: https://github.com/Ferki-git-creator

ср, 4 лют. 2026 р., 12:39 користувач Richard Biener <
[email protected]> пише:

> On Wed, Feb 4, 2026 at 11:02 AM Доля Денис <[email protected]> wrote:
> >
> > Hello,
> >
> > this patch fixes PR tree-optimization/94071 by improving the
> store-merging
> > pass to recognize adjacent byte loads even when offsets are computed
> > through simple SSA expressions.
> >
> > The change teaches the pass to decompose offset expressions into
> > base plus constant, allowing patterns like data[i] and data[i + 1]
> > to be merged into halfword loads even when temporaries or helper
> > functions are involved.
> >
> > An AArch64 testsuite case is added to verify the optimization.
> >
> > Tested on aarch64-linux-gnu:
> >
> > make check-gcc
> RUNTESTFLAGS="aarch64.exp=gcc.target/aarch64/adjacent-byte-load-merge.c"
> >
> > The patch is attached.
> >
> > Any feedback is welcome.
>
> There is already similar support to gather address parts and splitting
> constant
> offsets as part of SCEV and dataref analysis so I believe we should re-use
> that
> instead.  That will also handle multiplication which you'd see when the
> array
> element size is not 1 byte (not relevant for bswap, but possibly
> word-swap).
>
> So you'd want to look at using create_data_ref here.
>
> An alternative is to use tree-affine.cc which has
> tree_to_aff_combination_expand
> doing similar gathering.
>
> Richard.
>
> > Best regards,
> > Denis Dolya
> >
> > --
> > Denis Dolya (Ferki)
> > GCC contributor
> > GitHub: https://github.com/Ferki-git-creator
>

Reply via email to