On Thu, Oct 31, 2024 at 4:30 PM Jeff Law <jeffreya...@gmail.com> wrote:
>
>
>
> On 10/27/24 10:21 AM, Kyrylo Tkachov wrote:
> > Hi all,
> >
> > simplify-rtx can transform (X << C1) | (X >> C2) into ROTATE (X, C1) when
> > C1 + C2 == mode-width.  But the transformation is also valid for PLUS and 
> > XOR.
> > Indeed GIMPLE can also do the fold.  Let's teach RTL to do it too.
> >
> > The motivating testcase for this is in AArch64 intrinsics:
> >
> > uint64x2_t G2(uint64x2_t a, uint64x2_t b) {
> >      uint64x2_t c = veorq_u64(a, b);
> >      return veorq_u64(vaddq_u64(c, c), vshrq_n_u64(c, 63));
> > }
> >
> > which I was hoping to fold to a single XAR (a ROTATE+XOR instruction) but
> > GCC was failing to detect the rotate operation for two reasons:
> > 1) The combination of the two arms of the expression is done under XOR 
> > rather
> > than IOR that simplify-rtx currently supports.
> > 2) The ASHIFT operation is actually a (PLUS X X) operation and thus is not
> > detected as the LHS of the two arms we require.
> >
> > The patch fixes both issues.  The analysis of the two arms of the rotation
> > expression is factored out into a common helper simplify_rotate which is
> > then used in the PLUS, XOR, IOR cases in simplify_binary_operation_1.
> >
> > The check-assembly testcase for this is added in the following patch because
> > it needs some extra AArch64 backend work, but I've added self-tests in this
> > patch to validate the transformation.
> >
> > Bootstrapped and tested on aarch64-none-linux-gnu.
> > Ok for mainline?
> > Thanks,
> > Kyrill
> >
> > Signed-off-by: Kyrylo Tkachov<ktac...@nvidia.com>
> >
> >       PR target/117048
> >       * simplify-rtx.cc (extract_ashift_operands_p): Define.
> >       (simplify_rotate_op): Likewise.
> >       (simplify_context::simplify_binary_operation_1): Use the above in
> >       the PLUS, IOR, XOR cases.
> >       (test_vector_rotate): Define.
> >       (test_vector_ops): Use the above.
> OK

This seems to have broken bootstrap on multiple targets and is causing
the arm CI to hang, miscompiling stage2 - can
you please revert for now?

Thanks,
Richard.

> jeff
>

Reply via email to