diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2003-02-01 17:14:32 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2003-02-01 17:14:32 +0000 |
commit | 112f7223d17a7e98e996af22e1b474855e7cae48 (patch) | |
tree | f6f34c5988b057dc5538a5a0a2d61070b2e3e522 | |
parent | 064994a3f25f1c2ff8462ed81f513b50d7d1a1b0 (diff) | |
download | gcc-112f7223d17a7e98e996af22e1b474855e7cae48.zip gcc-112f7223d17a7e98e996af22e1b474855e7cae48.tar.gz gcc-112f7223d17a7e98e996af22e1b474855e7cae48.tar.bz2 |
* reload.c: Revert 2003-01-31 change.
From-SVN: r62249
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/reload.c | 51 |
2 files changed, 17 insertions, 38 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a226c3b..a36da64 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2003-02-01 Ulrich Weigand <uweigand@de.ibm.com> + + * reload.c: Revert 2003-01-31 change. + Sat Feb 1 14:14:40 CET 2003 Jan Hubicka <jh@suse.cz> * combine.c (combine_simplify_rtx): Use reversed_comparison_code_parts. diff --git a/gcc/reload.c b/gcc/reload.c index 1a7434f..46d0d64 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -274,7 +274,6 @@ static void find_reloads_address_part PARAMS ((rtx, rtx *, enum reg_class, static rtx find_reloads_subreg_address PARAMS ((rtx, int, int, enum reload_type, int, rtx)); static void copy_replacements_1 PARAMS ((rtx *, rtx *, int)); -static bool have_replacement_p PARAMS ((rtx *)); static int find_inc_amount PARAMS ((rtx, rtx)); #ifdef HAVE_SECONDARY_RELOADS @@ -2690,10 +2689,6 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) recog_data.operand[i] = *recog_data.operand_loc[i]; substed_operand[i] = recog_data.operand[i]; - - /* Address operands are reloaded in their existing mode, - no matter what is specified in the machine description. */ - operand_mode[i] = GET_MODE (recog_data.operand[i]); } else if (code == MEM) { @@ -3307,6 +3302,10 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) the address into a base register. */ this_alternative[i] = (int) MODE_BASE_REG_CLASS (VOIDmode); badop = 0; + + /* Address constraints are reloaded in Pmode, no matter + what mode is given in the machine description. */ + operand_mode[i] = Pmode; break; } @@ -3877,20 +3876,9 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) return 0; } } - - /* Generate optional reloads only when optimizing, and only - on the last pass through reload. Also, make sure we do not - make an optional reload where we already have a mandatory - one; this can happen in the case of address operands. - - To check for mandatory reloads, we use have_replacement_p. - Note that this works only on the last pass through reload. */ - else if (!optimize || !replace - || have_replacement_p (recog_data.operand_loc[i])) - ; /* Do nothing. */ - else if (goal_alternative_matched[i] < 0 - && goal_alternative_matches[i] < 0) + && goal_alternative_matches[i] < 0 + && optimize) { /* For each non-matching operand that's a MEM or a pseudo-register that didn't get a hard register, make an optional reload. @@ -3940,10 +3928,11 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) reload, check if this is actually a pseudo register reference; we then need to emit a USE and/or a CLOBBER so that reload inheritance will do the right thing. */ - else if (GET_CODE (operand) == MEM - || (GET_CODE (operand) == REG - && REGNO (operand) >= FIRST_PSEUDO_REGISTER - && reg_renumber [REGNO (operand)] < 0)) + else if (replace + && (GET_CODE (operand) == MEM + || (GET_CODE (operand) == REG + && REGNO (operand) >= FIRST_PSEUDO_REGISTER + && reg_renumber [REGNO (operand)] < 0))) { operand = *recog_data.operand_loc[i]; @@ -3966,7 +3955,8 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) && goal_alternative_win[goal_alternative_matches[i]] && modified[i] == RELOAD_READ && modified[goal_alternative_matches[i]] == RELOAD_WRITE - && ! no_input_reloads && ! no_output_reloads) + && ! no_input_reloads && ! no_output_reloads + && optimize) { /* Similarly, make an optional reload for a pair of matching objects that are in MEM or a pseudo that didn't get a hard reg. */ @@ -6140,21 +6130,6 @@ find_replacement (loc) return *loc; } - -/* Return true if some replacement was scheduled at LOC. */ - -static bool -have_replacement_p (loc) - rtx *loc; -{ - struct replacement *r; - - for (r = &replacements[0]; r < &replacements[n_replacements]; r++) - if (r->where == loc) - return true; - - return false; -} /* Return nonzero if register in range [REGNO, ENDREGNO) appears either explicitly or implicitly in X |