diff options
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 8afcfbec98a..9ea0c8fb888 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -3354,9 +3354,8 @@ prev_nonnote_insn (rtx_insn *insn) not look inside SEQUENCEs. */ rtx_insn * -prev_nonnote_insn_bb (rtx uncast_insn) +prev_nonnote_insn_bb (rtx_insn *insn) { - rtx_insn *insn = safe_as_a <rtx_insn *> (uncast_insn); while (insn) { @@ -4813,7 +4812,7 @@ emit_pattern_before (rtx pattern, rtx uncast_before, bool skip_debug_insns, insnp, make_raw); else return emit_pattern_before_noloc (pattern, before, - insnp ? before : NULL_RTX, + insnp ? before : NULL_RTX, NULL, make_raw); } @@ -6169,17 +6168,19 @@ emit_copy_of_insn_after (rtx_insn *insn, rtx_insn *after) which may be duplicated by the basic block reordering code. */ RTX_FRAME_RELATED_P (new_rtx) = RTX_FRAME_RELATED_P (insn); + /* Locate the end of existing REG_NOTES in NEW_RTX. */ + rtx *ptail = ®_NOTES (new_rtx); + while (*ptail != NULL_RTX) + ptail = &XEXP (*ptail, 1); + /* Copy all REG_NOTES except REG_LABEL_OPERAND since mark_jump_label will make them. REG_LABEL_TARGETs are created there too, but are supposed to be sticky, so we copy them. */ for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) if (REG_NOTE_KIND (link) != REG_LABEL_OPERAND) { - if (GET_CODE (link) == EXPR_LIST) - add_reg_note (new_rtx, REG_NOTE_KIND (link), - copy_insn_1 (XEXP (link, 0))); - else - add_shallow_copy_of_reg_note (new_rtx, link); + *ptail = duplicate_reg_note (link); + ptail = &XEXP (*ptail, 1); } INSN_CODE (new_rtx) = INSN_CODE (insn); |