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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by H.J. Lu <[email protected]>:

https://gcc.gnu.org/g:368ef32ae78804c7c4fc8f021db337e0e63576b2

commit r17-2434-g368ef32ae78804c7c4fc8f021db337e0e63576b2
Author: H.J. Lu <[email protected]>
Date:   Thu Jul 16 07:30:31 2026 +0800

    x86-64: Add *fix_trunc<mode>si_sse_2_zext

    We expand

    unsigned long long
    func (float x)
    {
      return (unsigned int) x;
    }

    to

    (insn 6 5 7 (set (reg:DI 103)
            (fix:DI (reg/v:SF 100 [ x ]))) "x.c":4:10 -1
         (nil))

    (insn 7 6 8 (set (reg:SI 102 [ _1 ])
            (subreg:SI (reg:DI 103) 0)) "x.c":4:10 -1
         (nil))

    (insn 8 7 9 (set (reg:DI 101 [ _3 ])
            (zero_extend:DI (reg:SI 102 [ _1 ]))) "x.c":4:10 -1
         (nil))

    Add *fix_trunc<mode>si_sse_2_zext so that combine can generate:

    (insn 8 6 13 2 (set (reg:DI 101 [ _3 ])
            (zero_extend:DI (subreg:SI (fix:DI (reg:SF 104 [ x ])) 0)))
"x.c":4:10 235 {*fix_truncsfsi_sse_2_zext}
         (expr_list:REG_DEAD (reg:SF 104 [ x ])
            (nil)))

    This fixes

    FAIL: gcc.target/i386/zext-sse-1.c check-function-bodies func1
    FAIL: gcc.target/i386/zext-sse-1.c check-function-bodies func2

            PR target/126231
            * config/i386/i386.md (*fix_trunc<mode>si_sse_2_zext): New.

    Signed-off-by: H.J. Lu <[email protected]>

Reply via email to