Commit e97f6223 by Trevor Saunders Committed by Trevor Saunders

make side_effects a vec<rtx>

gcc/ChangeLog:

2016-07-06  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* var-tracking.c (struct adjust_mem_data): Make side_effects a vector.
	(adjust_mems): Adjust.
	(adjust_insn): Likewise.
	(prepare_call_arguments): Likewise.

From-SVN: r238066
parent 0777c850
2016-07-06 Trevor Saunders <tbsaunde+gcc@tbsaunde.org> 2016-07-06 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* var-tracking.c (struct adjust_mem_data): Make side_effects a vector.
(adjust_mems): Adjust.
(adjust_insn): Likewise.
(prepare_call_arguments): Likewise.
2016-07-06 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* gcse.c (struct ls_expr): Make stores field a vector. * gcse.c (struct ls_expr): Make stores field a vector.
(ldst_entry): Adjust. (ldst_entry): Adjust.
(free_ldst_entry): Likewise. (free_ldst_entry): Likewise.
......
...@@ -926,7 +926,7 @@ struct adjust_mem_data ...@@ -926,7 +926,7 @@ struct adjust_mem_data
bool store; bool store;
machine_mode mem_mode; machine_mode mem_mode;
HOST_WIDE_INT stack_adjust; HOST_WIDE_INT stack_adjust;
rtx_expr_list *side_effects; auto_vec<rtx> side_effects;
}; };
/* Helper for adjust_mems. Return true if X is suitable for /* Helper for adjust_mems. Return true if X is suitable for
...@@ -1072,9 +1072,7 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data) ...@@ -1072,9 +1072,7 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data)
amd->store = false; amd->store = false;
tem = simplify_replace_fn_rtx (tem, old_rtx, adjust_mems, data); tem = simplify_replace_fn_rtx (tem, old_rtx, adjust_mems, data);
amd->store = store_save; amd->store = store_save;
amd->side_effects = alloc_EXPR_LIST (0, amd->side_effects.safe_push (gen_rtx_SET (XEXP (loc, 0), tem));
gen_rtx_SET (XEXP (loc, 0), tem),
amd->side_effects);
return addr; return addr;
case PRE_MODIFY: case PRE_MODIFY:
addr = XEXP (loc, 1); addr = XEXP (loc, 1);
...@@ -1088,9 +1086,7 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data) ...@@ -1088,9 +1086,7 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data)
tem = simplify_replace_fn_rtx (XEXP (loc, 1), old_rtx, tem = simplify_replace_fn_rtx (XEXP (loc, 1), old_rtx,
adjust_mems, data); adjust_mems, data);
amd->store = store_save; amd->store = store_save;
amd->side_effects = alloc_EXPR_LIST (0, amd->side_effects.safe_push (gen_rtx_SET (XEXP (loc, 0), tem));
gen_rtx_SET (XEXP (loc, 0), tem),
amd->side_effects);
return addr; return addr;
case SUBREG: case SUBREG:
/* First try without delegitimization of whole MEMs and /* First try without delegitimization of whole MEMs and
...@@ -1184,7 +1180,6 @@ adjust_mem_stores (rtx loc, const_rtx expr, void *data) ...@@ -1184,7 +1180,6 @@ adjust_mem_stores (rtx loc, const_rtx expr, void *data)
static void static void
adjust_insn (basic_block bb, rtx_insn *insn) adjust_insn (basic_block bb, rtx_insn *insn)
{ {
struct adjust_mem_data amd;
rtx set; rtx set;
#ifdef HAVE_window_save #ifdef HAVE_window_save
...@@ -1213,9 +1208,9 @@ adjust_insn (basic_block bb, rtx_insn *insn) ...@@ -1213,9 +1208,9 @@ adjust_insn (basic_block bb, rtx_insn *insn)
} }
#endif #endif
adjust_mem_data amd;
amd.mem_mode = VOIDmode; amd.mem_mode = VOIDmode;
amd.stack_adjust = -VTI (bb)->out.stack_adjust; amd.stack_adjust = -VTI (bb)->out.stack_adjust;
amd.side_effects = NULL;
amd.store = true; amd.store = true;
note_stores (PATTERN (insn), adjust_mem_stores, &amd); note_stores (PATTERN (insn), adjust_mem_stores, &amd);
...@@ -1281,10 +1276,10 @@ adjust_insn (basic_block bb, rtx_insn *insn) ...@@ -1281,10 +1276,10 @@ adjust_insn (basic_block bb, rtx_insn *insn)
validate_change (NULL_RTX, &SET_SRC (set), XEXP (note, 0), true); validate_change (NULL_RTX, &SET_SRC (set), XEXP (note, 0), true);
} }
if (amd.side_effects) if (!amd.side_effects.is_empty ())
{ {
rtx *pat, new_pat, s; rtx *pat, new_pat;
int i, oldn, newn; int i, oldn;
pat = &PATTERN (insn); pat = &PATTERN (insn);
if (GET_CODE (*pat) == COND_EXEC) if (GET_CODE (*pat) == COND_EXEC)
...@@ -1293,17 +1288,18 @@ adjust_insn (basic_block bb, rtx_insn *insn) ...@@ -1293,17 +1288,18 @@ adjust_insn (basic_block bb, rtx_insn *insn)
oldn = XVECLEN (*pat, 0); oldn = XVECLEN (*pat, 0);
else else
oldn = 1; oldn = 1;
for (s = amd.side_effects, newn = 0; s; newn++) unsigned int newn = amd.side_effects.length ();
s = XEXP (s, 1);
new_pat = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (oldn + newn)); new_pat = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (oldn + newn));
if (GET_CODE (*pat) == PARALLEL) if (GET_CODE (*pat) == PARALLEL)
for (i = 0; i < oldn; i++) for (i = 0; i < oldn; i++)
XVECEXP (new_pat, 0, i) = XVECEXP (*pat, 0, i); XVECEXP (new_pat, 0, i) = XVECEXP (*pat, 0, i);
else else
XVECEXP (new_pat, 0, 0) = *pat; XVECEXP (new_pat, 0, 0) = *pat;
for (s = amd.side_effects, i = oldn; i < oldn + newn; i++, s = XEXP (s, 1))
XVECEXP (new_pat, 0, i) = XEXP (s, 0); rtx effect;
free_EXPR_LIST_list (&amd.side_effects); unsigned int j;
FOR_EACH_VEC_ELT_REVERSE (amd.side_effects, j, effect)
XVECEXP (new_pat, 0, j + oldn) = effect;
validate_change (NULL_RTX, pat, new_pat, true); validate_change (NULL_RTX, pat, new_pat, true);
} }
} }
...@@ -6335,11 +6331,10 @@ prepare_call_arguments (basic_block bb, rtx_insn *insn) ...@@ -6335,11 +6331,10 @@ prepare_call_arguments (basic_block bb, rtx_insn *insn)
struct adjust_mem_data amd; struct adjust_mem_data amd;
amd.mem_mode = VOIDmode; amd.mem_mode = VOIDmode;
amd.stack_adjust = -VTI (bb)->out.stack_adjust; amd.stack_adjust = -VTI (bb)->out.stack_adjust;
amd.side_effects = NULL;
amd.store = true; amd.store = true;
mem = simplify_replace_fn_rtx (mem, NULL_RTX, adjust_mems, mem = simplify_replace_fn_rtx (mem, NULL_RTX, adjust_mems,
&amd); &amd);
gcc_assert (amd.side_effects == NULL_RTX); gcc_assert (amd.side_effects.is_empty ());
} }
val = cselib_lookup (mem, GET_MODE (mem), 0, VOIDmode); val = cselib_lookup (mem, GET_MODE (mem), 0, VOIDmode);
if (val && cselib_preserved_value_p (val)) if (val && cselib_preserved_value_p (val))
......
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