mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-13 13:54:05 +08:00
fold-const.c (extract_muldiv): Check whether c divides op1 exactly if operation is not multiplication.
2000-07-08 Toon Moene <toon@moene.indiv.nluug.nl> * fold-const.c (extract_muldiv) case PLUS_EXPR, MINUS_EXPR: Check whether c divides op1 exactly if operation is not multiplication. From-SVN: r34928
This commit is contained in:
parent
0ac76ad9eb
commit
12644a9a40
@ -1,3 +1,9 @@
|
||||
2000-07-08 Toon Moene <toon@moene.indiv.nluug.nl>
|
||||
|
||||
* fold-const.c (extract_muldiv) case PLUS_EXPR, MINUS_EXPR:
|
||||
Check whether c divides op1 exactly if operation is not
|
||||
multiplication.
|
||||
|
||||
2000-07-08 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* final.c (final): Do not abort when reg-stack introduces
|
||||
|
@ -4501,10 +4501,17 @@ extract_muldiv (t, c, code, wide_type)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Now do the operation and verify it doesn't overflow. */
|
||||
op1 = const_binop (code, convert (ctype, op1), convert (ctype, c), 0);
|
||||
if (op1 == 0 || TREE_OVERFLOW (op1))
|
||||
break;
|
||||
/* If it's a multiply or a division/modulus operation of a multiple
|
||||
of our constant, do the operation and verify it doesn't overflow. */
|
||||
if (code == MULT_EXPR
|
||||
|| integer_zerop (const_binop (TRUNC_MOD_EXPR, op1, c, 0)))
|
||||
{
|
||||
op1 = const_binop (code, convert (ctype, op1), convert (ctype, c), 0);
|
||||
if (op1 == 0 || TREE_OVERFLOW (op1))
|
||||
break;
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
||||
/* If we have an unsigned type is not a sizetype, we cannot widen
|
||||
the operation since it will change the result if the original
|
||||
|
Loading…
Reference in New Issue
Block a user