http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59605
H.J. Lu <hjl.tools at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-12-26 Ever confirmed|0 |1 --- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> --- ix86_expand_set_or_movmem has rtx jump_around_label = NULL; /* Misaligned move sequences handles both prologues and epilogues at once. Default code generation results in smaller code for large alignments and also avoids redundant job when sizes are known precisely. */ if (misaligned_prologue_used) { /* Misaligned move prologue handled small blocks by itself. */ expand_set_or_movmem_prologue_epilogue_by_misaligned_moves (dst, src, &destreg, &srcreg, move_mode, promoted_val, vec_promoted_val, &count_exp, &jump_around_label, desired_align < align ? MAX (desired_align, epilogue_size_needed) : epilogue_size_needed, desired_align, align, &min_size, dynamic_check, issetmem); if (!issetmem) src = change_address (src, BLKmode, srcreg); ... else { rtx hot_label = gen_label_rtx (); jump_around_label = gen_label_rtx (); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When jump_around_label != NULL, the previous jump_around_label is lost. emit_cmp_and_jump_insns (count_exp, GEN_INT (dynamic_check - 1), LEU, 0, GET_MODE (count_exp), 1, hot_label); predict_jump (REG_BR_PROB_BASE * 90 / 100); if (issetmem) set_storage_via_libcall (dst, count_exp, val_exp, false); else emit_block_move_via_libcall (dst, src, count_exp, false); emit_jump (jump_around_label); emit_label (hot_label); }