From 9b72fab4b724d273d7df2c94398adc1394ee52bb Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sun, 22 Mar 1992 13:16:15 -0500 Subject: [PATCH] *** empty log message *** From-SVN: r565 --- gcc/reorg.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/gcc/reorg.c b/gcc/reorg.c index 160e49a1556..f518fb89880 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -2820,21 +2820,22 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely, We could check for more complex cases than those tested below, but it doesn't seem worth it. It might also be a good idea to try - to swap the two insns. That might do better. */ + to swap the two insns. That might do better. + + We can't do this if the next insn modifies our source, because that + would make the replacement into the insn invalid. This also + prevents updating the contents of a PRE_INC. */ if (GET_CODE (trial) == INSN && GET_CODE (pat) == SET && GET_CODE (SET_SRC (pat)) == REG && GET_CODE (SET_DEST (pat)) == REG) { rtx next = next_nonnote_insn (trial); - int our_dest = REGNO (SET_DEST (pat)); if (next && GET_CODE (next) == INSN - && GET_CODE (PATTERN (next)) == SET - && GET_CODE (SET_DEST (PATTERN (next))) == REG - && REGNO (SET_DEST (PATTERN (next))) != our_dest - && refers_to_regno_p (our_dest, our_dest + 1, - SET_SRC (PATTERN (next)), 0)) + && GET_CODE (PATTERN (next)) != USE + && ! reg_set_p (SET_DEST (pat), next) + && reg_referenced_p (SET_DEST (pat), PATTERN (next))) validate_replace_rtx (SET_DEST (pat), SET_SRC (pat), next); } }