Commit e3a0e200 by Peter Bergner Committed by Peter Bergner

rs6000.c (get_store_dest): New.

	* config/rs6000/rs6000.c (get_store_dest): New.
	(adjacent_mem_locations): Use get_store_dest() to get
	the rtl of the store destination.

From-SVN: r119099
parent 61c76239
2006-11-22 Peter Bergner <bergner@vnet.ibm.com>
* config/rs6000/rs6000.c (get_store_dest): New.
(adjacent_mem_locations): Use get_store_dest() to get
the rtl of the store destination.
2006-11-22 Joseph Myers <joseph@codesourcery.com> 2006-11-22 Joseph Myers <joseph@codesourcery.com>
* config/rs6000/spe.md (SPE64): New mode macro. * config/rs6000/spe.md (SPE64): New mode macro.
......
...@@ -693,6 +693,7 @@ static bool is_nonpipeline_insn (rtx); ...@@ -693,6 +693,7 @@ static bool is_nonpipeline_insn (rtx);
static bool is_cracked_insn (rtx); static bool is_cracked_insn (rtx);
static bool is_branch_slot_insn (rtx); static bool is_branch_slot_insn (rtx);
static bool is_load_insn (rtx); static bool is_load_insn (rtx);
static rtx get_store_dest (rtx pat);
static bool is_store_insn (rtx); static bool is_store_insn (rtx);
static bool set_to_load_agen (rtx,rtx); static bool set_to_load_agen (rtx,rtx);
static bool adjacent_mem_locations (rtx,rtx); static bool adjacent_mem_locations (rtx,rtx);
...@@ -17066,9 +17067,9 @@ static bool ...@@ -17066,9 +17067,9 @@ static bool
adjacent_mem_locations (rtx insn1, rtx insn2) adjacent_mem_locations (rtx insn1, rtx insn2)
{ {
rtx a = SET_DEST (PATTERN (insn1)); rtx a = get_store_dest (PATTERN (insn1));
rtx b = SET_DEST (PATTERN (insn2)); rtx b = get_store_dest (PATTERN (insn2));
if ((GET_CODE (XEXP (a, 0)) == REG if ((GET_CODE (XEXP (a, 0)) == REG
|| (GET_CODE (XEXP (a, 0)) == PLUS || (GET_CODE (XEXP (a, 0)) == PLUS
&& GET_CODE (XEXP (XEXP (a, 0), 1)) == CONST_INT)) && GET_CODE (XEXP (XEXP (a, 0), 1)) == CONST_INT))
...@@ -17374,6 +17375,32 @@ is_store_insn (rtx insn) ...@@ -17374,6 +17375,32 @@ is_store_insn (rtx insn)
return is_store_insn1 (PATTERN (insn)); return is_store_insn1 (PATTERN (insn));
} }
/* Return the dest of a store insn. */
static rtx
get_store_dest (rtx pat)
{
gcc_assert (is_store_insn1 (pat));
if (GET_CODE (pat) == SET)
return SET_DEST (pat);
else if (GET_CODE (pat) == PARALLEL)
{
int i;
for (i = 0; i < XVECLEN (pat, 0); i++)
{
rtx inner_pat = XVECEXP (pat, 0, i);
if (GET_CODE (inner_pat) == SET
&& is_mem_ref (SET_DEST (inner_pat)))
return inner_pat;
}
}
/* We shouldn't get here, because we should have either a simple
store insn or a store with update which are covered above. */
gcc_unreachable();
}
/* Returns whether the dependence between INSN and NEXT is considered /* Returns whether the dependence between INSN and NEXT is considered
costly by the given target. */ costly by the given target. */
......
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