[Bug target/86994] [9 regression] 64-bit gcc.target/i386/20040112-1.c FAILs

ubizjak at gmail dot com gcc-bugzilla@gcc.gnu.org
Sat Aug 18 08:37:00 GMT 2018


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

Uroš Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-08-18
                 CC|                            |law at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> ---
It is r263591:

2018-08-16  Vlad Lazar  <vlad.lazar@arm.com>

        * expmed.h (canonicalize_comparison): New declaration.
        * expmed.c (canonicalize_comparison, equivalent_cmp_code): New
function.
        * expmed.c (emit_store_flag_1): Add call to canonicalize_comparison.
        * optabs.c (prepare_cmp_insn): Likewise.
        * rtl.h (unsigned_condition_p): New function which checks if a
        comparison operator is unsigned.

That now expands with:

(insn 12 8 13 4 (set (reg:CCGC 17 flags)
        (compare:CCGC (reg/v:QI 87 [ status ])
            (const_int -1 [0xffffffffffffffff]))) "20040112-1.c":13 9
{*cmpqi_1}
     (nil))

instead of:

(insn 10 8 11 4 (set (reg:CCGOC 17 flags)
        (compare:CCGOC (reg/v:QI 87 [ status ])
            (const_int 0 [0]))) "20040112-1.c":13 5 {*cmpqi_ccno_1}
     (nil))

The canonicalization, introduced in r263591 does not universally benefit all
targets. I wonder why TARGET_CANONICALIZE_COMPARISON hook was not used instead.


More information about the Gcc-bugs mailing list