[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc-bugs
Subject:    [Bug target/44474] GCC inserts redundant "test" instruction due to incorrect clobber
From:       "pinskia at gcc dot gnu.org" <gcc-bugzilla () gcc ! gnu ! org>
Date:       2011-12-30 23:50:08
Message-ID: bug-44474-4-k0QUXqEzZZ () http ! gcc ! gnu ! org/bugzilla/
[Download RAW message or body]

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44474

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2011-12-30
     Ever Confirmed|0                           |1

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> 2011-12-30 23:50:08 UTC ---
Confirmed.

Combine does:
Trying 7 -> 8:
Trying 9 -> 10:
But never 7 -> 9 which is needed for this to work.
This is for:
int foo();
int t;

int test( int b )
{
    (b)--;
    t = b;
    if( b == 0 )
        return foo();
    return 0;
}
--- CUT --
Where 7, 8, 9, and 10 are:
(insn 7 3 8 2 (parallel [
            (set (reg/v:SI 60 [ b ])
                (plus:SI (reg/v:SI 62 [ b ])
                    (const_int -1 [0xffffffffffffffff])))
            (clobber (reg:CC 17 flags))
        ]) t.c:6 253 {*addsi_1}
     (expr_list:REG_DEAD (reg/v:SI 62 [ b ])
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (nil))))

(insn 8 7 9 2 (set (mem/c/i:SI (symbol_ref:DI ("t")  <var_decl 0x7fedc8e8c140
t>) [2 t+0 S4 A32])
        (reg/v:SI 60 [ b ])) t.c:7 64 {*movsi_internal}
     (nil))

(insn 9 8 10 2 (set (reg:CCZ 17 flags)
        (compare:CCZ (reg/v:SI 60 [ b ])
            (const_int 0 [0]))) t.c:8 2 {*cmpsi_ccno_1}
     (expr_list:REG_DEAD (reg/v:SI 60 [ b ])
        (nil)))

(jump_insn 10 9 11 2 (set (pc)
        (if_then_else (ne (reg:CCZ 17 flags)
                (const_int 0 [0]))
            (label_ref 16)
            (pc))) t.c:8 599 {*jcc_1}
     (expr_list:REG_DEAD (reg:CCZ 17 flags)
        (expr_list:REG_BR_PROB (const_int 6102 [0x17d6])
            (nil)))
 -> 16)
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic