------- Comment #4 from rguenth at gcc dot gnu dot org 2010-07-18 20:46 ------- @@ -29,7 +29,7 @@ (note# 0 0 NOTE_INSN_DELETED) (note# 0 0 [bb 2] NOTE_INSN_BASIC_BLOCK) (note# 0 0 NOTE_INSN_FUNCTION_BEG) -(insn:TI# 0 0 pr44971.c:22 (set (reg/f:SI 0 ax [orig:58 D.xxxx ] [58]) +(insn:TI# 0 0 pr44971.c:22 (set (reg/v/f:SI 0 ax [orig:58 info ] [58]) (mem/f/c:SI (symbol_ref:SI ("_XftintInfo") <var_decl # _XftintInfo>) [ MEM[(struct XftintInfo * *)&_XftintInfo]+0 S4 A32]))# {*movsi_internal} (nil)) (insn/f:TI# 0 0 pr44971.c:20 (set (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [ S4 A8]) (reg/f:SI 6 bp))# {*pushsi2} (nil)) @@ -37,7 +37,7 @@ (reg/f:SI 7 sp))# {*movsi_internal} (nil)) (note# 0 0 NOTE_INSN_PROLOGUE_END) (insn:TI# 0 0 pr44971.c:22 (set (reg:CCZ 17 flags) - (compare:CCZ (reg/f:SI 0 ax [orig:58 D.xxxx ] [58]) + (compare:CCZ (reg/v/f:SI 0 ax [orig:58 info ] [58]) (const_int 0 [0])))# {*cmpsi_ccno_1} (nil)) (jump_insn:TI# 0 0 pr44971.c:22 (set (pc) (if_then_else (eq (reg:CCZ 17 flags) ...
caused by phiprop. It chooses one dereference result to choose the result. But debug stmts change order of immediate uses. With debug stmts (uses of prev_1): # VUSE <.MEM_8(D)> info_5 = *prev_1; # DEBUG prev => prev_1 # VUSE <.MEM_8(D)> D.1973_6 = *prev_1; without: # VUSE <.MEM_8(D)> D.1973_6 = *prev_1; # VUSE <.MEM_8(D)> info_5 = *prev_1; so relying on stable order of immediate uses is now wrong? The compare-debug failure is spurious, there is no difference in the assembly output. I can fix it by always degrading debug info and creating a new variable. Alex, why should the immediate use lists show this behavior? -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |aoliva at gcc dot gnu dot | |org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44971