diff options
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 78 |
1 files changed, 1 insertions, 77 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index c194d66..79d96ed 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -882,23 +882,6 @@ delete_noop_moves (void) next = NEXT_INSN (insn); if (INSN_P (insn) && noop_move_p (insn)) { - rtx note; - - /* If we're about to remove the first insn of a libcall - then move the libcall note to the next real insn and - update the retval note. */ - if ((note = find_reg_note (insn, REG_LIBCALL, NULL_RTX)) - && XEXP (note, 0) != insn) - { - rtx new_libcall_insn = next_real_insn (insn); - rtx retval_note = find_reg_note (XEXP (note, 0), - REG_RETVAL, NULL_RTX); - REG_NOTES (new_libcall_insn) - = gen_rtx_INSN_LIST (REG_LIBCALL, XEXP (note, 0), - REG_NOTES (new_libcall_insn)); - XEXP (retval_note, 0) = new_libcall_insn; - } - if (dump_file) fprintf (dump_file, "deleting noop move %d\n", INSN_UID (insn)); @@ -1676,14 +1659,6 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED, rtx succ, || (succ && FIND_REG_INC_NOTE (succ, dest)) /* Don't substitute into a non-local goto, this confuses CFG. */ || (JUMP_P (i3) && find_reg_note (i3, REG_NON_LOCAL_GOTO, NULL_RTX)) -#if 0 - /* Don't combine the end of a libcall into anything. */ - /* ??? This gives worse code, and appears to be unnecessary, since no - pass after flow uses REG_LIBCALL/REG_RETVAL notes. Local-alloc does - use REG_RETVAL notes for noconflict blocks, but other code here - makes sure that those insns don't disappear. */ - || find_reg_note (insn, REG_RETVAL, NULL_RTX) -#endif /* Make sure that DEST is not used after SUCC but before I3. */ || (succ && ! all_adjacent && reg_used_between_p (dest, succ, i3)) @@ -2241,16 +2216,7 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p) if (cant_combine_insn_p (i3) || cant_combine_insn_p (i2) || (i1 && cant_combine_insn_p (i1)) - || likely_spilled_retval_p (i3) - /* We also can't do anything if I3 has a - REG_LIBCALL note since we don't want to disrupt the contiguity of a - libcall. */ -#if 0 - /* ??? This gives worse code, and appears to be unnecessary, since no - pass after flow uses REG_LIBCALL/REG_RETVAL notes. */ - || find_reg_note (i3, REG_LIBCALL, NULL_RTX) -#endif - ) + || likely_spilled_retval_p (i3)) return 0; combine_attempts++; @@ -12547,48 +12513,6 @@ distribute_notes (rtx notes, rtx from_insn, rtx i3, rtx i2, rtx elim_i2, to simply delete it. */ break; - case REG_RETVAL: - /* If the insn previously containing this note still exists, - put it back where it was. Otherwise move it to the previous - insn. Adjust the corresponding REG_LIBCALL note. */ - if (!NOTE_P (from_insn)) - place = from_insn; - else - { - tem = find_reg_note (XEXP (note, 0), REG_LIBCALL, NULL_RTX); - place = prev_real_insn (from_insn); - if (tem && place) - XEXP (tem, 0) = place; - /* If we're deleting the last remaining instruction of a - libcall sequence, don't add the notes. */ - else if (XEXP (note, 0) == from_insn) - tem = place = 0; - /* Don't add the dangling REG_RETVAL note. */ - else if (! tem) - place = 0; - } - break; - - case REG_LIBCALL: - /* This is handled similarly to REG_RETVAL. */ - if (!NOTE_P (from_insn)) - place = from_insn; - else - { - tem = find_reg_note (XEXP (note, 0), REG_RETVAL, NULL_RTX); - place = next_real_insn (from_insn); - if (tem && place) - XEXP (tem, 0) = place; - /* If we're deleting the last remaining instruction of a - libcall sequence, don't add the notes. */ - else if (XEXP (note, 0) == from_insn) - tem = place = 0; - /* Don't add the dangling REG_LIBCALL note. */ - else if (! tem) - place = 0; - } - break; - case REG_DEAD: /* If we replaced the right hand side of FROM_INSN with a REG_EQUAL note, the original use of the dying register |