diff options
author | J"orn Rennecke <joern.rennecke@superh.com> | 2002-06-17 11:33:20 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2002-06-17 12:33:20 +0100 |
commit | dec0798ef381045769f51dc673593d2261e40f2d (patch) | |
tree | a001f7b2f0c20aab459495d7f684d2a31057ecc9 /gcc/reload1.c | |
parent | 0af5c89673cef3f0cc10076491000e83ac28b4b3 (diff) | |
download | gcc-dec0798ef381045769f51dc673593d2261e40f2d.zip gcc-dec0798ef381045769f51dc673593d2261e40f2d.tar.gz gcc-dec0798ef381045769f51dc673593d2261e40f2d.tar.bz2 |
reload1.c (merge_assigned_reloads): Don't change reloads other than RELOAD_FOR_INPUT_ADDRESS /...
* reload1.c (merge_assigned_reloads): Don't change reloads
other than RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_INPADDR_ADDRESS
to RELOAD_OTHER when there are conflicting input reloads.
From-SVN: r54703
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 81adb8d..1cbdde1 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -6096,11 +6096,19 @@ merge_assigned_reloads (insn) if they were for inputs, RELOAD_OTHER for outputs. Note that this test is equivalent to looking for reloads for this operand number. */ + /* We must take special care when there are two or more reloads to + be merged and a RELOAD_FOR_OUTPUT_ADDRESS reload that loads the + same value or a part of it; we must not change its type if there + is a conflicting input. */ if (rld[i].when_needed == RELOAD_OTHER) for (j = 0; j < n_reloads; j++) if (rld[j].in != 0 && rld[j].when_needed != RELOAD_OTHER + && rld[j].when_needed != RELOAD_FOR_OTHER_ADDRESS + && (! conflicting_input + || rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS + || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS) && reg_overlap_mentioned_for_reload_p (rld[j].in, rld[i].in)) rld[j].when_needed |