diff options
| -rw-r--r-- | gcc/ChangeLog | 8 | ||||
| -rw-r--r-- | gcc/reload1.c | 6 |
2 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b612daf..d084659 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-01-13 Hans-Peter Nilsson <hp@bitrange.com> + + PR target/18329 + PR target/18330 + * reload1.c (delete_output_reload): Don't delete an output reload + if the pseudo lives longer than a single basic block. Adjust and + improve wording of comment. + 2005-01-12 Andrew Pinski <pinskia@physics.uc.edu> PR target/19334 diff --git a/gcc/reload1.c b/gcc/reload1.c index 6402050..71c1afa 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -7624,13 +7624,13 @@ delete_output_reload (rtx insn, int j, int last_reload_reg) /* If the pseudo-reg we are reloading is no longer referenced anywhere between the store into it and here, - and no jumps or labels intervene, then the value can get - here through the reload reg alone. + and we're within the same basic block, then the value can only + pass through the reload reg and end up here. Otherwise, give up--return. */ for (i1 = NEXT_INSN (output_reload_insn); i1 != insn; i1 = NEXT_INSN (i1)) { - if (LABEL_P (i1) || JUMP_P (i1)) + if (NOTE_INSN_BASIC_BLOCK_P (i1)) return; if ((NONJUMP_INSN_P (i1) || CALL_P (i1)) && reg_mentioned_p (reg, PATTERN (i1))) |
