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

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Peter Bergner <berg...@gcc.gnu.org>:

https://gcc.gnu.org/g:15c02ab2569b3c4e27d6f133c013b15a9fa70177

commit r12-5969-g15c02ab2569b3c4e27d6f133c013b15a9fa70177
Author: Peter Bergner <berg...@linux.ibm.com>
Date:   Tue Dec 14 14:50:41 2021 -0600

    rs6000: Do not allow combining of multiple assemble quads [PR103548]

    The compiler will gladly CSE the result of two __builtin_mma_build_acc
    calls with the same four vector arguments, leading to illegal MMA
    code being generated.  The fix here is to make the mma_assemble_acc
    pattern use a unspec_volatile to stop the CSE from happening.

    2021-12-14  Peter Bergner  <berg...@linux.ibm.com>

    gcc/
            PR target/103548
            * config/rs6000/mma.md (UNSPEC_MMA_ASSEMBLE): Rename unspec from
this...
            (UNSPEC_VSX_ASSEMBLE): ...to this.
            (UNSPECV_MMA_ASSEMBLE): New unspecv.
            (vsx_assemble_pair): Use UNSPEC_VSX_ASSEMBLE.
            (*vsx_assemble_pair): Likewise.
            (mma_assemble_acc): Use UNSPECV_MMA_ASSEMBLE.
            (*mma_assemble_acc): Likewise.
            * config/rs6000/rs6000.c (rs6000_split_multireg_move): Handle
            UNSPEC_VOLATILE.  Use UNSPEC_VSX_ASSEMBLE and UNSPECV_MMA_ASSEMBLE.

    gcc/testsuite/
            PR target/103548
            * gcc.target/powerpc/mma-builtin-10-pair.c: New test.
            * gcc.target/powerpc/mma-builtin-10-quad.c: New test.

Reply via email to