http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56957
Steven Bosscher <steven at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |NEW
CC| |abel at gcc dot gnu.org
AssignedTo|steven at gcc dot gnu.org |unassigned at gcc dot
| |gnu.org
--- Comment #2 from Steven Bosscher <steven at gcc dot gnu.org> 2013-04-16
20:54:17 UTC ---
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))
void
(gdb) up
#1 0x0000000010843984 in remove_insn_from_stream (insn=0x3fffb5da4e78,
only_disconnect=false) at ../../trunk/gcc/sel-sched.c:6042
6042 sel_remove_insn (insn, only_disconnect, false);
(gdb) up
#2 0x0000000010843af0 in move_op_orig_expr_found (insn=0x3fffb5da4e78,
expr=0x115f9fd8, lparams=0x3fffffffda78, static_params=0x3fffffffdaa8) at
../../trunk/gcc/sel-sched.c:6066
6066 remove_insn_from_stream (insn, only_disconnect);
gdb) p only_disconnect
$19 = false
(gdb) l 6060
6055 moveop_static_params_p params = (moveop_static_params_p)
static_params;
6056
6057 copy_expr_onside (params->c_expr, INSN_EXPR (insn));
6058 track_scheduled_insns_and_blocks (insn);
6059 insn_emitted = handle_emitting_transformations (insn, expr, params);
6060 only_disconnect = (params->uid == INSN_UID (insn)
6061 && ! insn_emitted && ! EXPR_WAS_CHANGED (expr));
6062
6063 /* Mark that we've disconnected an insn. */
6064 if (only_disconnect)
(gdb) p params->uid
$20 = 303
(gdb) p insn_emitted
$21 = false
(gdb) p EXPR_WAS_CHANGED(expr)
$22 = true
No idea what to make of this. sel-sched deliberately chooses to discard
the insn instead of only disconnecting it, but it re-emits the insn
later anyway. That's wrong.
CC sel-sched guru.