diff options
author | (no author) <(no author)@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-13 00:26:22 +0000 |
---|---|---|
committer | (no author) <(no author)@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-13 00:26:22 +0000 |
commit | 642b971b14d7107cfe01bf72648ae3b510a2d33c (patch) | |
tree | baf23254fca2fd8d16741acf27572f3219d56c89 /gcc/reload.c | |
parent | 59bc598e01e292d67c32b6ae240b4544d4c234ab (diff) |
This commit was manufactured by cvs2svn to create tagapple/gcc-1751
'apple-gcc-1751'.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/tags/apple-gcc-1751@81762 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reload.c')
-rw-r--r-- | gcc/reload.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/gcc/reload.c b/gcc/reload.c index ae211302efa..2b069a27d18 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -1300,18 +1300,31 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc, and IN or CLASS and OUT. Get the icode and push any required reloads needed for each of them if so. */ + /* APPLE LOCAL restoration of inmode/outmode */ #ifdef SECONDARY_INPUT_RELOAD_CLASS if (in != 0) - secondary_in_reload - = push_secondary_reload (1, in, opnum, optional, class, inmode, type, - &secondary_in_icode); + { + secondary_in_reload + = push_secondary_reload (1, in, opnum, optional, class, inmode, type, + &secondary_in_icode); +#ifdef TARGET_POWERPC + if ( secondary_in_reload != -1 && in_subreg_loc ) + inmode = GET_MODE (*in_subreg_loc); +#endif + } #endif #ifdef SECONDARY_OUTPUT_RELOAD_CLASS if (out != 0 && GET_CODE (out) != SCRATCH) - secondary_out_reload - = push_secondary_reload (0, out, opnum, optional, class, outmode, - type, &secondary_out_icode); + { + secondary_out_reload + = push_secondary_reload (0, out, opnum, optional, class, outmode, + type, &secondary_out_icode); +#ifdef TARGET_POWERPC + if ( secondary_out_reload != -1 && out_subreg_loc ) + outmode = GET_MODE (*out_subreg_loc); +#endif + } #endif /* We found no existing reload suitable for re-use. @@ -1720,7 +1733,13 @@ combine_reloads (void) if ((rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS) && rld[i].opnum == rld[output_reload].opnum) + /* APPLE LOCAL begin try destroyed input */ +#ifdef TARGET_POWERPC + goto try_destroyed_input; +#else return; +#endif + /* APPLE LOCAL end try destroyed input */ /* Check each input reload; can we combine it? */ @@ -1817,6 +1836,11 @@ combine_reloads (void) that it does not occur in the output (we already know it isn't an earlyclobber. If this is an asm insn, give up. */ + /* APPLE LOCAL begin try destroyed input */ +#ifdef TARGET_POWERPC + try_destroyed_input: +#endif + /* APPLE LOCAL end try destroyed input */ if (INSN_CODE (this_insn) == -1) return; |