Commit 6cabe79e by Ulrich Weigand Committed by Ulrich Weigand

reload.c (dup_replacements): New function.

	* reload.c (dup_replacements): New function.
	(find_reloads): Use it to duplicate replacements at the top level
	of match_dup operands.

From-SVN: r57542
parent 0855247a
2002-09-26 Ulrich Weigand <uweigand@de.ibm.com>
* reload.c (dup_replacements): New function.
(find_reloads): Use it to duplicate replacements at the top level
of match_dup operands.
2002-09-26 Miles Bader <miles@gnu.org> 2002-09-26 Miles Bader <miles@gnu.org>
* v850.md ("length"): Change default value to 4. * v850.md ("length"): Change default value to 4.
......
...@@ -244,6 +244,7 @@ static enum reg_class find_valid_class PARAMS ((enum machine_mode, int, ...@@ -244,6 +244,7 @@ static enum reg_class find_valid_class PARAMS ((enum machine_mode, int,
unsigned int)); unsigned int));
static int reload_inner_reg_of_subreg PARAMS ((rtx, enum machine_mode)); static int reload_inner_reg_of_subreg PARAMS ((rtx, enum machine_mode));
static void push_replacement PARAMS ((rtx *, int, enum machine_mode)); static void push_replacement PARAMS ((rtx *, int, enum machine_mode));
static void dup_replacements PARAMS ((rtx *, rtx *));
static void combine_reloads PARAMS ((void)); static void combine_reloads PARAMS ((void));
static int find_reusable_reload PARAMS ((rtx *, rtx, enum reg_class, static int find_reusable_reload PARAMS ((rtx *, rtx, enum reg_class,
enum reload_type, int, int)); enum reload_type, int, int));
...@@ -1563,6 +1564,25 @@ push_replacement (loc, reloadnum, mode) ...@@ -1563,6 +1564,25 @@ push_replacement (loc, reloadnum, mode)
r->mode = mode; r->mode = mode;
} }
} }
/* Duplicate any replacement we have recorded to apply at
location ORIG_LOC to also be performed at DUP_LOC.
This is used in insn patterns that use match_dup. */
static void
dup_replacements (dup_loc, orig_loc)
rtx *dup_loc;
rtx *orig_loc;
{
int i, n = n_replacements;
for (i = 0; i < n; i++)
{
struct replacement *r = &replacements[i];
if (r->where == orig_loc)
push_replacement (dup_loc, r->what, r->mode);
}
}
/* Transfer all replacements that used to be in reload FROM to be in /* Transfer all replacements that used to be in reload FROM to be in
reload TO. */ reload TO. */
...@@ -3979,9 +3999,7 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) ...@@ -3979,9 +3999,7 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
{ {
int opno = recog_data.dup_num[i]; int opno = recog_data.dup_num[i];
*recog_data.dup_loc[i] = *recog_data.operand_loc[opno]; *recog_data.dup_loc[i] = *recog_data.operand_loc[opno];
if (operand_reloadnum[opno] >= 0) dup_replacements (recog_data.dup_loc[i], recog_data.operand_loc[opno]);
push_replacement (recog_data.dup_loc[i], operand_reloadnum[opno],
insn_data[insn_code_number].operand[opno].mode);
} }
#if 0 #if 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment