aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2003-02-01 17:14:32 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2003-02-01 17:14:32 +0000
commit112f7223d17a7e98e996af22e1b474855e7cae48 (patch)
treef6f34c5988b057dc5538a5a0a2d61070b2e3e522 /gcc/reload.c
parent064994a3f25f1c2ff8462ed81f513b50d7d1a1b0 (diff)
downloadgcc-112f7223d17a7e98e996af22e1b474855e7cae48.zip
gcc-112f7223d17a7e98e996af22e1b474855e7cae48.tar.gz
gcc-112f7223d17a7e98e996af22e1b474855e7cae48.tar.bz2
* reload.c: Revert 2003-01-31 change.
From-SVN: r62249
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c51
1 files changed, 13 insertions, 38 deletions
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