[Bug target/95254] aarch64: gcc generate inefficient code with fixed sve vector length

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jun 5 09:36:27 GMT 2020


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

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

https://gcc.gnu.org/g:9a182ef9ee011935d827ab5c6c9a7cd8e22257d8

commit r11-966-g9a182ef9ee011935d827ab5c6c9a7cd8e22257d8
Author: Fei Yang <felix.yang@huawei.com>
Date:   Fri Jun 5 10:34:59 2020 +0100

    expand: Simplify removing subregs when expanding a copy [PR95254]

    In rtl expand, if we have a copy that matches one of the following
patterns:
      (set (subreg:M1 (reg:M2 ...)) (subreg:M1 (reg:M2 ...)))
      (set (subreg:M1 (reg:M2 ...)) (mem:M1 ADDR))
      (set (mem:M1 ADDR) (subreg:M1 (reg:M2 ...)))
      (set (subreg:M1 (reg:M2 ...)) (constant C))
    where mode M1 is equal in size to M2, try to detect whether the mode change
    involves an implicit round trip through memory.  If so, see if we can avoid
    that by removing the subregs and doing the move in mode M2 instead.

    2020-06-05  Felix Yang  <felix.yang@huawei.com>

    gcc/
            PR target/95254
            * expr.c (emit_move_insn): Check src and dest of the copy to see
            if one or both of them are subregs, try to remove the subregs when
            innermode and outermode are equal in size and the mode change
involves
            an implicit round trip through memory.

    gcc/testsuite/
            PR target/95254
            * gcc.target/aarch64/pr95254.c: New test.
            * gcc.target/i386/pr67609.c: Check "movq\t%xmm0" instead of
"movdqa".


More information about the Gcc-bugs mailing list