This is the mail archive of the gcc-bugs@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]

[Bug tree-optimization/42893] [4.3/4.4/4.5 Regression] Missed conditionally dead store elimination



------- 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


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