This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/42893] [4.3/4.4/4.5 Regression] Missed conditionally dead store elimination
- From: "steven at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 28 Jan 2010 11:00:23 -0000
- Subject: [Bug tree-optimization/42893] [4.3/4.4/4.5 Regression] Missed conditionally dead store elimination
- References: <bug-42893-280@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #2 from steven at gcc dot gnu dot org 2010-01-28 11:00 -------
The RTL .ce1 pass catches it in GCC 3.4.6. The codes goes from this:
;; Start of basic block 1, registers live: (nil)
(note 36 13 17 1 [bb 1] NOTE_INSN_BASIC_BLOCK)
(insn 17 36 18 1 (set (reg:SI 60 [ tui_refreshing_registers ])
(mem/f:SI (symbol_ref:DI ("tui_refreshing_registers") [flags 0x2]
<var_decl 0x63f012aee680 tui_refreshing_registers>) [2
tui_refreshing_registers+0 S4 A32])) 43 {*movsi_
(nil))
(insn 18 17 19 1 (set (reg:CCZ 17 flags)
(compare:CCZ (reg:SI 60 [ tui_refreshing_registers ])
(const_int 0 [0x0]))) 3 {*cmpsi_ccno_1} (nil)
(nil))
(jump_insn 19 18 37 1 (set (pc)
(if_then_else (ne (reg:CCZ 17 flags)
(const_int 0 [0x0]))
(label_ref 34)
(pc))) 494 {*jcc_1} (nil)
(expr_list:REG_BR_PROB (const_int 5000 [0x1388])
(nil)))
;; End of basic block 1, registers live:
(nil)
;; Start of basic block 2, registers live: (nil)
(note 37 19 25 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 25 37 32 2 (set (mem/f:SI (symbol_ref:DI ("tui_refreshing_registers")
[flags 0x2] <var_decl 0x63f012aee680 tui_refreshing_registers>) [2
tui_refreshing_registers+0 S4 A32]
(const_int 0 [0x0])) 43 {*movsi_1_nointernunit} (nil)
(nil))
;; End of basic block 2, registers live:
(nil)
...to this...:
note 36 13 17 1 [bb 1] NOTE_INSN_BASIC_BLOCK)
(insn 17 36 18 1 (set (reg:SI 60 [ tui_refreshing_registers ])
(mem/f:SI (symbol_ref:DI ("tui_refreshing_registers") [flags 0x2]
<var_decl 0x63f012aee680 tui_refreshing_registers>) [2
tui_refreshing_registers+0 S4 A32])) 43 {*movsi_
(nil))
(insn 18 17 42 1 (set (reg:CCZ 17 flags)
(compare:CCZ (reg:SI 60 [ tui_refreshing_registers ])
(const_int 0 [0x0]))) 3 {*cmpsi_ccno_1} (nil)
(nil))
(insn 42 18 44 1 (set (reg:SI 63 [ tui_refreshing_registers ])
(mem/f:SI (symbol_ref:DI ("tui_refreshing_registers") [flags 0x2]
<var_decl 0x63f012aee680 tui_refreshing_registers>) [2
tui_refreshing_registers+0 S4 A32])) -1 (nil)
(nil))
(insn 44 42 43 1 (set (reg:SI 64)
(const_int 0 [0x0])) -1 (nil)
(nil))
(insn 43 44 45 1 (set (reg:CCZ 17 flags)
(compare:CCZ (reg:SI 60 [ tui_refreshing_registers ])
(const_int 0 [0x0]))) -1 (nil)
(nil))
(insn 45 43 46 1 (set (reg:SI 62)
(if_then_else:SI (ne (reg:CCZ 17 flags)
(const_int 0 [0x0]))
(reg:SI 63 [ tui_refreshing_registers ])
(reg:SI 64))) -1 (nil)
(nil))
(insn 46 45 32 1 (set (mem/f:SI (symbol_ref:DI ("tui_refreshing_registers")
[flags 0x2] <var_decl 0x63f012aee680 tui_refreshing_registers>) [2
tui_refreshing_registers+0 S4 A32]
(reg:SI 62)) -1 (nil)
(nil))
;; End of basic block 1, registers live:
(nil)
This does not happen in GCC 4.5.0 (r156286) anymore because the constant 0 is
stored directly to a MEM, instead of through a register:
(note 7 6 8 3 [bb 3] NOTE_INSN_BASIC_BLOCK)
(insn 8 7 9 3 t.c:13 (set (reg:CCZ 17 flags)
(compare:CCZ (mem/c/i:SI (symbol_ref:DI ("tui_refreshing_registers")
[flags 0x2] <var_decl 0x20000000006080a0 tui_refreshing_registers>) [2
tui_refreshing_registers+0 S4 A32])
(const_int 0 [0x0]))) 2 {*cmpsi_ccno_1} (nil))
(jump_insn 9 8 10 3 t.c:13 (set (pc)
(if_then_else (ne (reg:CCZ 17 flags)
(const_int 0 [0x0]))
(label_ref:DI 14)
(pc))) 615 {*jcc_1} (expr_list:REG_DEAD (reg:CCZ 17 flags)
(expr_list:REG_BR_PROB (const_int 3900 [0xf3c])
(nil)))
-> 14)
(note 10 9 11 4 [bb 4] NOTE_INSN_BASIC_BLOCK)
(insn 11 10 14 4 t.c:16 (set (mem/c/i:SI (symbol_ref:DI
("tui_refreshing_registers") [flags 0x2] <var_decl 0x20000000006080a0
tui_refreshing_registers>) [2 tui_refreshing_registers+0 S4 A32])
(const_int 0 [0x0])) 47 {*movsi_1} (nil))
(code_label 14 11 15 5 1 "" [2 uses])
--
steven at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2010-01-28 11:00:23
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42893