rtl.h (shallow_copy_rtvec): Declare.
gcc/ * rtl.h (shallow_copy_rtvec): Declare. * rtl.c (shallow_copy_rtvec): New function. * cselib.c (cselib_subst_to_values): Use it. Only modify an rtx field if the subrtx has changed. From-SVN: r153475
This commit is contained in:
parent
2a31793e32
commit
bd7960b1e4
4 changed files with 37 additions and 14 deletions
|
@ -1,3 +1,10 @@
|
|||
2009-10-22 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* rtl.h (shallow_copy_rtvec): Declare.
|
||||
* rtl.c (shallow_copy_rtvec): New function.
|
||||
* cselib.c (cselib_subst_to_values): Use it. Only modify an
|
||||
rtx field if the subrtx has changed.
|
||||
|
||||
2009-10-22 Anatoly Sokolov <aesok@post.ru>
|
||||
|
||||
* config/m32c/m32c.c (m32c_function_value_regno_p): New function.
|
||||
|
|
29
gcc/cselib.c
29
gcc/cselib.c
|
@ -1422,30 +1422,31 @@ cselib_subst_to_values (rtx x)
|
|||
{
|
||||
rtx t = cselib_subst_to_values (XEXP (x, i));
|
||||
|
||||
if (t != XEXP (x, i) && x == copy)
|
||||
copy = shallow_copy_rtx (x);
|
||||
|
||||
XEXP (copy, i) = t;
|
||||
if (t != XEXP (x, i))
|
||||
{
|
||||
if (x == copy)
|
||||
copy = shallow_copy_rtx (x);
|
||||
XEXP (copy, i) = t;
|
||||
}
|
||||
}
|
||||
else if (fmt[i] == 'E')
|
||||
{
|
||||
int j, k;
|
||||
int j;
|
||||
|
||||
for (j = 0; j < XVECLEN (x, i); j++)
|
||||
{
|
||||
rtx t = cselib_subst_to_values (XVECEXP (x, i, j));
|
||||
|
||||
if (t != XVECEXP (x, i, j) && XVEC (x, i) == XVEC (copy, i))
|
||||
if (t != XVECEXP (x, i, j))
|
||||
{
|
||||
if (x == copy)
|
||||
copy = shallow_copy_rtx (x);
|
||||
|
||||
XVEC (copy, i) = rtvec_alloc (XVECLEN (x, i));
|
||||
for (k = 0; k < j; k++)
|
||||
XVECEXP (copy, i, k) = XVECEXP (x, i, k);
|
||||
if (XVEC (x, i) == XVEC (copy, i))
|
||||
{
|
||||
if (x == copy)
|
||||
copy = shallow_copy_rtx (x);
|
||||
XVEC (copy, i) = shallow_copy_rtvec (XVEC (x, i));
|
||||
}
|
||||
XVECEXP (copy, i, j) = t;
|
||||
}
|
||||
|
||||
XVECEXP (copy, i, j) = t;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
14
gcc/rtl.c
14
gcc/rtl.c
|
@ -164,6 +164,20 @@ rtvec_alloc (int n)
|
|||
return rt;
|
||||
}
|
||||
|
||||
/* Create a bitwise copy of VEC. */
|
||||
|
||||
rtvec
|
||||
shallow_copy_rtvec (rtvec vec)
|
||||
{
|
||||
rtvec newvec;
|
||||
int n;
|
||||
|
||||
n = GET_NUM_ELEM (vec);
|
||||
newvec = rtvec_alloc (n);
|
||||
memcpy (&newvec->elem[0], &vec->elem[0], sizeof (rtx) * n);
|
||||
return newvec;
|
||||
}
|
||||
|
||||
/* Return the number of bytes occupied by rtx value X. */
|
||||
|
||||
unsigned int
|
||||
|
|
|
@ -1568,6 +1568,7 @@ extern rtx rtx_alloc_stat (RTX_CODE MEM_STAT_DECL);
|
|||
#define rtx_alloc(c) rtx_alloc_stat (c MEM_STAT_INFO)
|
||||
|
||||
extern rtvec rtvec_alloc (int);
|
||||
extern rtvec shallow_copy_rtvec (rtvec);
|
||||
extern bool shared_const_p (const_rtx);
|
||||
extern rtx copy_rtx (rtx);
|
||||
extern void dump_rtx_statistics (void);
|
||||
|
|
Loading…
Add table
Reference in a new issue