[Bug target/97950] Unoptimal code generation with __builtin_*_overflow{,_p} for short and __int128

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Nov 24 09:46:15 GMT 2020


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

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:

https://gcc.gnu.org/g:a1dd66b108cba086f58448ccbe9bf57b0a342f9a

commit r11-5279-ga1dd66b108cba086f58448ccbe9bf57b0a342f9a
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Nov 24 10:45:40 2020 +0100

    i386: Add *setcc_hi_1* define_insn_and_split [PR97950]

    As the following testcase shows, unlike char, int or long long sized
    __builtin_*_overflow{,_p}, for short sized one in most cases the ce1 pass
    doesn't optimize the jo/jno or jc/jnc jumps with setting of a pseudo to 0/1
    into seto/setc.  The reason is missing *setcc_hi_1* pattern.  The following
    patch implements it using mode iterators so that on i486 and pentium?
    one can get the zero extension through and instead of movzbw.

    2020-11-24  Jakub Jelinek  <jakub@redhat.com>

            PR target/97950
            * config/i386/i386.md (*setcc_si_1_and): Macroize into...
            (*setcc_<mode>_1_and): New define_insn_and_split with SWI24
iterator.
            (*setcc_si_1_movzbl): Macroize into...
            (*setcc_<mode>_1_movzbl): New define_insn_and_split with SWI24
            iterator.

            * gcc.target/i386/pr97950.c: New test.


More information about the Gcc-bugs mailing list