https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117048

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Kyrylo Tkachov <ktkac...@gcc.gnu.org>:

https://gcc.gnu.org/g:70566e719f0710323251e8e9190b322f4de8faeb

commit r15-4269-g70566e719f0710323251e8e9190b322f4de8faeb
Author: Kyrylo Tkachov <ktkac...@nvidia.com>
Date:   Wed Oct 9 09:39:55 2024 -0700

    PR 117048: simplify-rtx: Extend (x << C1) | (X >> C2) --> ROTATE
transformation to vector operands

    In the testcase from patch [2/2] we want to match a vector rotate operate
from
    an IOR of left and right shifts by immediate.  simplify-rtx has code for
just
    that but it looks like it's prepared to do handle only scalar operands.
    In practice most of the code works for vector modes as well except the
shift
    amounts are checked to be CONST_INT rather than vector constants that we
have
    here.  This is easily extended by using unwrap_const_vec_duplicate to
extract
    the repeating constant shift amount.  With this change combine now tries
    matching the simpler and expected:
    (set (reg:V2DI 119 [ _14 ])
        (rotate:V2DI (xor:V2DI (reg:V2DI 114 [ vect__1.12_16 ])
                (reg:V2DI 116 [ *m1_01_8(D) ]))
            (const_vector:V2DI [
                    (const_int 32 [0x20]) repeated x2
                ])))
    instead of the previous:
    (set (reg:V2DI 119 [ _14 ])
        (ior:V2DI (ashift:V2DI (xor:V2DI (reg:V2DI 114 [ vect__1.12_16 ])
                    (reg:V2DI 116 [ *m1_01_8(D) ]))
                (const_vector:V2DI [
                        (const_int 32 [0x20]) repeated x2
                    ]))
            (lshiftrt:V2DI (xor:V2DI (reg:V2DI 114 [ vect__1.12_16 ])
                    (reg:V2DI 116 [ *m1_01_8(D) ]))
                (const_vector:V2DI [
                        (const_int 32 [0x20]) repeated x2
                    ]))))

    To actually fix the PR the aarch64 backend needs some adjustment as well
    which is done in patch [2/2], which adds the testcase as well.

    Bootstrapped and tested on aarch64-none-linux-gnu.

    Signed-off-by: Kyrylo Tkachov <ktkac...@nvidia.com>

            PR target/117048
            * simplify-rtx.cc (simplify_context::simplify_binary_operation_1):
            Handle vector constants in (x << C1) | (x >> C2) -> ROTATE
            simplification.

Reply via email to