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

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

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

commit r12-311-gc111f6066043d3b7bc4141ca0411eae9294aa6c5
Author: Uros Bizjak <ubiz...@gmail.com>
Date:   Fri Apr 30 10:15:26 2021 +0200

    i386: Introduce reversed ADC and SBB patterns [PR98060]

    The compiler is able to merge LTU comparisons with PLUS or MINUS pattern to
    form addition with carry (ADC) and subtraction with borrow (SBB)
instructions:

            op = op + carry         [ADC $0, op]
            op = op - carry         [SBB $0, op]

    The patch introduces reversed ADC and SBB insn patterns:

            op = op + !carry        [SBB $-1, op]
            op = op - !carry        [ADC $-1, op]

    allowing the compiler to also merge GEU comparisons.

    2021-04-30  Uroš Bizjak  <ubiz...@gmail.com>

    gcc/
            PR target/98060
            * config/i386/i386.md (*add<mode>3_carry_0r): New insn pattern.
            (*addsi3_carry_zext_0r): Ditto.
            (*sub<mode>3_carry_0): Ditto.
            (*subsi3_carry_zext_0r): Ditto.
            * config/i386/predicates.md (ix86_carry_flag_unset_operator):
            New predicate.
            * config/i386/i386.c (ix86_rtx_costs) <case PLUS, case MINUS>:
            Also consider ix86_carry_flag_unset_operator to calculate
            the cost of adc/sbb insn.

    gcc/testsuite/

            PR target/98060
            * gcc.target/i386/pr98060.c: New test.
  • [Bug target/98060] Failure to o... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to