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

--- Comment #9 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Xiong Hu Luo <luo...@gcc.gnu.org>:

https://gcc.gnu.org/g:2ef4cf87a7c7f36c1fe523e4d71bbb4846ab0c35

commit r11-2245-g2ef4cf87a7c7f36c1fe523e4d71bbb4846ab0c35
Author: Xionghu Luo <luo...@linux.ibm.com>
Date:   Mon Jul 20 22:37:30 2020 -0500

    rs6000: Define movsf_from_si2 to extract high part SF element from
DImode[PR89310]

    For extracting high part element from DImode register like:

    {%1:SF=unspec[r122:DI>>0x20#0] 86;clobber scratch;}

    split it before reload with "and mask" to avoid generating shift right
    32 bit then shift left 32 bit.  This pattern also exists in PR42475 and
    PR67741, etc.

    srdi 3,3,32
    sldi 9,3,32
    mtvsrd 1,9
    xscvspdpn 1,1

    =>

    rldicr 3,3,0,31
    mtvsrd 1,3
    xscvspdpn 1,1

    Bootstrap and regression tested pass on Power8-LE.

    gcc/ChangeLog:

    2020-07-21  Xionghu Luo  <luo...@linux.ibm.com>

            PR rtl-optimization/89310
            * config/rs6000/rs6000.md (movsf_from_si2): New
define_insn_and_split.

    gcc/testsuite/ChangeLog:

    2020-07-21  Xionghu Luo  <luo...@linux.ibm.com>

            PR rtl-optimization/89310
            * gcc.target/powerpc/pr89310.c: New test.

Reply via email to