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



--- Comment #4 from Andrey Belevantsev <abel at gcc dot gnu.org> 2013-04-17 
05:14:44 UTC ---

(In reply to comment #2)

> Breakpoint 5, sel_remove_insn (insn=0x3fffb5da4e78, only_disconnect=false,

> full_tidying=false) at ../../trunk/gcc/sel-sched-ir.c:3938

> 3938          delete_insn (insn);

> 1: debug_rtx(insn) = (insn 303 190 191 10 (set (reg:DF 165 f37 [421])

>         (unspec:DF [

>                 (mem:DF (reg/f:DI 18 r18 [420]) [2 *a_7(D) S8 A64])

>             ] UNSPEC_LDA)) 13 {movdf_advanced}

>      (nil))



You are right, this is not supposed to happen.  The only_disconnect business is

for the unification and transformation support, when you have possibly several

insns as sources of the one chosen for scheduling.  Thus, you need to delete

all sources but the one you're going to move upwards, and even this chosen one

should be deleted if it was changed while moving.



The insn in question is a speculative insn possibly generated earlier, so ...



> (gdb) p EXPR_WAS_CHANGED(expr)

> $22 = true



... if this is true, we are supposed to emit the new insn obviously with the

new id.  The issue is that we then decide to emit the very same insn.  I will

take a look.

Reply via email to