This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, i386]: Fix PR 58779, wrong MINUS overflow checks


Hello!

As explained in the PR [1], the pattern that implements MINUS overflow
checks is wrong. The combine pass is able to create
*subsi3_cconly_overflow pattern, but since the functionality of the
pattern depends on inverted conditions in put_condition_mode, the
final jump in the combined sequence gets the inverted condition.

The attached patch removes wrong definitions.

2013-10-22  Uros Bizjak  <ubizjak@gmail.com>

    PR target/58779
    * config/i386/i386.c (put_condition_code) <case GTU, case LEU>:
    Remove CCCmode handling.
    <case LTU>: Return 'c' suffix for CCCmode.
    <case GEU>: Return 'nc' suffix for CCCmode.
    (ix86_cc_mode) <case GTU, case LEU>: Do not generate overflow checks.
    * config/i386/i386.md (*sub<mode>3_cconly_overflow): Remove.
    (*sub<mode>3_cc_overflow): Ditto.
    (*subsi3_zext_cc_overflow): Ditto.

testsuite/ChangeLog:

2013-10-22  Uros Bizjak  <ubizjak@gmail.com>

    PR target/58779
    * gcc.target/i386/pr30315.c: Remove MINUSCC, DECCC, MINUSCCONLY
    and MINUSCCZEXT defines. Update scan-assembler dg directive.
    * gcc.dg/torture/pr58779.c: New test.

Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu
{,-m32} for all default languages plus obj-c++ and go.

Patch was committed to mainline SVN and will be committed to release
branches in a couple of days.

[1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58779#c5

Uros.

Attachment: p.diff.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]