gcc/
* combine.c (make_compound_operation): Handle the 'E' format.
(count_rtxs): Likewise.
(update_table_tick): Likewise.
(get_last_value_validate): Likewise.
From-SVN: r140669
+2008-09-25 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * combine.c (make_compound_operation): Handle the 'E' format.
+ (count_rtxs): Likewise.
+ (update_table_tick): Likewise.
+ (get_last_value_validate): Likewise.
+
2008-09-25 Eric Botcazou <ebotcazou@adacore.com>
* dbxout.c (dbxout_parms): Fetch the inner REG inside a PARALLEL.
2008-09-25 Eric Botcazou <ebotcazou@adacore.com>
* dbxout.c (dbxout_parms): Fetch the inner REG inside a PARALLEL.
int mode_width = GET_MODE_BITSIZE (mode);
rtx rhs, lhs;
enum rtx_code next_code;
int mode_width = GET_MODE_BITSIZE (mode);
rtx rhs, lhs;
enum rtx_code next_code;
rtx new_rtx = 0;
rtx tem;
const char *fmt;
rtx new_rtx = 0;
rtx tem;
const char *fmt;
new_rtx = make_compound_operation (XEXP (x, i), next_code);
SUBST (XEXP (x, i), new_rtx);
}
new_rtx = make_compound_operation (XEXP (x, i), next_code);
SUBST (XEXP (x, i), new_rtx);
}
+ else if (fmt[i] == 'E')
+ for (j = 0; j < XVECLEN (x, i); j++)
+ {
+ new_rtx = make_compound_operation (XVECEXP (x, i, j), next_code);
+ SUBST (XVECEXP (x, i, j), new_rtx);
+ }
/* If this is a commutative operation, the changes to the operands
may have made it noncanonical. */
/* If this is a commutative operation, the changes to the operands
may have made it noncanonical. */
{
enum rtx_code code = GET_CODE (x);
const char *fmt;
{
enum rtx_code code = GET_CODE (x);
const char *fmt;
if (GET_RTX_CLASS (code) == '2'
|| GET_RTX_CLASS (code) == 'c')
if (GET_RTX_CLASS (code) == '2'
|| GET_RTX_CLASS (code) == 'c')
for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
if (fmt[i] == 'e')
ret += count_rtxs (XEXP (x, i));
for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
if (fmt[i] == 'e')
ret += count_rtxs (XEXP (x, i));
+ else if (fmt[i] == 'E')
+ for (j = 0; j < XVECLEN (x, i); j++)
+ ret += count_rtxs (XVECEXP (x, i, j));
{
enum rtx_code code = GET_CODE (x);
const char *fmt = GET_RTX_FORMAT (code);
{
enum rtx_code code = GET_CODE (x);
const char *fmt = GET_RTX_FORMAT (code);
}
for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
}
for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
- /* Note that we can't have an "E" in values stored; see
- get_last_value_validate. */
if (fmt[i] == 'e')
{
/* Check for identical subexpressions. If x contains
if (fmt[i] == 'e')
{
/* Check for identical subexpressions. If x contains
update_table_tick (XEXP (x, i));
}
update_table_tick (XEXP (x, i));
}
+ else if (fmt[i] == 'E')
+ for (j = 0; j < XVECLEN (x, i); j++)
+ update_table_tick (XVECEXP (x, i, j));
}
/* Record that REG is set to VALUE in insn INSN. If VALUE is zero, we
}
/* Record that REG is set to VALUE in insn INSN. If VALUE is zero, we
rtx x = *loc;
const char *fmt = GET_RTX_FORMAT (GET_CODE (x));
int len = GET_RTX_LENGTH (GET_CODE (x));
rtx x = *loc;
const char *fmt = GET_RTX_FORMAT (GET_CODE (x));
int len = GET_RTX_LENGTH (GET_CODE (x));
replace) == 0)
return 0;
}
replace) == 0)
return 0;
}
- /* Don't bother with these. They shouldn't occur anyway. */
+ for (j = 0; j < XVECLEN (x, i); j++)
+ if (get_last_value_validate (&XVECEXP (x, i, j),
+ insn, tick, replace) == 0)
+ return 0;
}
/* If we haven't found a reason for it to be invalid, it is valid. */
}
/* If we haven't found a reason for it to be invalid, it is valid. */