[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