optabs.c (expand_binop): Tighten conditions for doubleword expansions.
* optabs.c (expand_binop): Tighten conditions for doubleword expansions. (widen_bswap): Assert that mode bitsize and precision are the same. * stor-layout.c (get_best_mode): Skip modes that have lower precision than bitsize. * recog.c (simplify_while_replacing): Assert that bitsize and precision are the same. From-SVN: r176040
This commit is contained in:
parent
86cdf39313
commit
0d44736e75
@ -16,6 +16,15 @@
|
|||||||
* rtlanal.c (nonzero_bits1): Don't compare GET_MODE_SIZE against
|
* rtlanal.c (nonzero_bits1): Don't compare GET_MODE_SIZE against
|
||||||
a bitsize.
|
a bitsize.
|
||||||
|
|
||||||
|
* optabs.c (expand_binop): Tighten conditions for doubleword
|
||||||
|
expansions.
|
||||||
|
(widen_bswap): Assert that mode bitsize and precision are the
|
||||||
|
same.
|
||||||
|
* stor-layout.c (get_best_mode): Skip modes that have lower
|
||||||
|
precision than bitsize.
|
||||||
|
* recog.c (simplify_while_replacing): Assert that bitsize and
|
||||||
|
precision are the same.
|
||||||
|
|
||||||
2011-07-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2011-07-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* Makefile.in (LIBGCOV): Remove.
|
* Makefile.in (LIBGCOV): Remove.
|
||||||
|
11
gcc/optabs.c
11
gcc/optabs.c
@ -1428,12 +1428,12 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1,
|
|||||||
takes operands of this mode and makes a wider mode. */
|
takes operands of this mode and makes a wider mode. */
|
||||||
|
|
||||||
if (binoptab == smul_optab
|
if (binoptab == smul_optab
|
||||||
&& GET_MODE_WIDER_MODE (mode) != VOIDmode
|
&& GET_MODE_2XWIDER_MODE (mode) != VOIDmode
|
||||||
&& (optab_handler ((unsignedp ? umul_widen_optab : smul_widen_optab),
|
&& (optab_handler ((unsignedp ? umul_widen_optab : smul_widen_optab),
|
||||||
GET_MODE_WIDER_MODE (mode))
|
GET_MODE_2XWIDER_MODE (mode))
|
||||||
!= CODE_FOR_nothing))
|
!= CODE_FOR_nothing))
|
||||||
{
|
{
|
||||||
temp = expand_binop (GET_MODE_WIDER_MODE (mode),
|
temp = expand_binop (GET_MODE_2XWIDER_MODE (mode),
|
||||||
unsignedp ? umul_widen_optab : smul_widen_optab,
|
unsignedp ? umul_widen_optab : smul_widen_optab,
|
||||||
op0, op1, NULL_RTX, unsignedp, OPTAB_DIRECT);
|
op0, op1, NULL_RTX, unsignedp, OPTAB_DIRECT);
|
||||||
|
|
||||||
@ -1575,6 +1575,7 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1,
|
|||||||
&& mclass == MODE_INT
|
&& mclass == MODE_INT
|
||||||
&& (CONST_INT_P (op1) || optimize_insn_for_speed_p ())
|
&& (CONST_INT_P (op1) || optimize_insn_for_speed_p ())
|
||||||
&& GET_MODE_SIZE (mode) == 2 * UNITS_PER_WORD
|
&& GET_MODE_SIZE (mode) == 2 * UNITS_PER_WORD
|
||||||
|
&& GET_MODE_PRECISION (mode) == GET_MODE_BITSIZE (mode)
|
||||||
&& optab_handler (binoptab, word_mode) != CODE_FOR_nothing
|
&& optab_handler (binoptab, word_mode) != CODE_FOR_nothing
|
||||||
&& optab_handler (ashl_optab, word_mode) != CODE_FOR_nothing
|
&& optab_handler (ashl_optab, word_mode) != CODE_FOR_nothing
|
||||||
&& optab_handler (lshr_optab, word_mode) != CODE_FOR_nothing)
|
&& optab_handler (lshr_optab, word_mode) != CODE_FOR_nothing)
|
||||||
@ -1647,7 +1648,7 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1,
|
|||||||
if ((binoptab == rotl_optab || binoptab == rotr_optab)
|
if ((binoptab == rotl_optab || binoptab == rotr_optab)
|
||||||
&& mclass == MODE_INT
|
&& mclass == MODE_INT
|
||||||
&& CONST_INT_P (op1)
|
&& CONST_INT_P (op1)
|
||||||
&& GET_MODE_SIZE (mode) == 2 * UNITS_PER_WORD
|
&& GET_MODE_PRECISION (mode) == 2 * BITS_PER_WORD
|
||||||
&& optab_handler (ashl_optab, word_mode) != CODE_FOR_nothing
|
&& optab_handler (ashl_optab, word_mode) != CODE_FOR_nothing
|
||||||
&& optab_handler (lshr_optab, word_mode) != CODE_FOR_nothing)
|
&& optab_handler (lshr_optab, word_mode) != CODE_FOR_nothing)
|
||||||
{
|
{
|
||||||
@ -2463,6 +2464,8 @@ widen_bswap (enum machine_mode mode, rtx op0, rtx target)
|
|||||||
x = widen_operand (op0, wider_mode, mode, true, true);
|
x = widen_operand (op0, wider_mode, mode, true, true);
|
||||||
x = expand_unop (wider_mode, bswap_optab, x, NULL_RTX, true);
|
x = expand_unop (wider_mode, bswap_optab, x, NULL_RTX, true);
|
||||||
|
|
||||||
|
gcc_assert (GET_MODE_PRECISION (wider_mode) == GET_MODE_BITSIZE (wider_mode)
|
||||||
|
&& GET_MODE_PRECISION (mode) == GET_MODE_BITSIZE (mode));
|
||||||
if (x != 0)
|
if (x != 0)
|
||||||
x = expand_shift (RSHIFT_EXPR, wider_mode, x,
|
x = expand_shift (RSHIFT_EXPR, wider_mode, x,
|
||||||
GET_MODE_BITSIZE (wider_mode)
|
GET_MODE_BITSIZE (wider_mode)
|
||||||
|
@ -638,6 +638,8 @@ simplify_while_replacing (rtx *loc, rtx to, rtx object,
|
|||||||
(GET_MODE_SIZE (is_mode) - GET_MODE_SIZE (wanted_mode) -
|
(GET_MODE_SIZE (is_mode) - GET_MODE_SIZE (wanted_mode) -
|
||||||
offset);
|
offset);
|
||||||
|
|
||||||
|
gcc_assert (GET_MODE_PRECISION (wanted_mode)
|
||||||
|
== GET_MODE_BITSIZE (wanted_mode));
|
||||||
pos %= GET_MODE_BITSIZE (wanted_mode);
|
pos %= GET_MODE_BITSIZE (wanted_mode);
|
||||||
|
|
||||||
newmem = adjust_address_nv (XEXP (x, 0), wanted_mode, offset);
|
newmem = adjust_address_nv (XEXP (x, 0), wanted_mode, offset);
|
||||||
|
@ -2389,7 +2389,8 @@ get_best_mode (int bitsize, int bitpos, unsigned int align,
|
|||||||
mode = GET_MODE_WIDER_MODE (mode))
|
mode = GET_MODE_WIDER_MODE (mode))
|
||||||
{
|
{
|
||||||
unit = GET_MODE_BITSIZE (mode);
|
unit = GET_MODE_BITSIZE (mode);
|
||||||
if ((bitpos % unit) + bitsize <= unit)
|
if (unit == GET_MODE_PRECISION (mode)
|
||||||
|
&& (bitpos % unit) + bitsize <= unit)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2414,7 +2415,8 @@ get_best_mode (int bitsize, int bitpos, unsigned int align,
|
|||||||
tmode = GET_MODE_WIDER_MODE (tmode))
|
tmode = GET_MODE_WIDER_MODE (tmode))
|
||||||
{
|
{
|
||||||
unit = GET_MODE_BITSIZE (tmode);
|
unit = GET_MODE_BITSIZE (tmode);
|
||||||
if (bitpos / unit == (bitpos + bitsize - 1) / unit
|
if (unit == GET_MODE_PRECISION (tmode)
|
||||||
|
&& bitpos / unit == (bitpos + bitsize - 1) / unit
|
||||||
&& unit <= BITS_PER_WORD
|
&& unit <= BITS_PER_WORD
|
||||||
&& unit <= MIN (align, BIGGEST_ALIGNMENT)
|
&& unit <= MIN (align, BIGGEST_ALIGNMENT)
|
||||||
&& (largest_mode == VOIDmode
|
&& (largest_mode == VOIDmode
|
||||||
|
Loading…
Reference in New Issue
Block a user