Commit 3cd58fd7 by Olivier Hainque Committed by Richard Kenner

fold-const.c (fold, [...]): Restore a number of conversions required for type…

fold-const.c (fold, [...]): Restore a number of conversions required for type consistency and previously...

	* fold-const.c (fold, case PLUS_EXPR and case MULT_EXPR): Restore
	a number of conversions required for type consistency and previously
	stripped off by STRIP_NOPS.

From-SVN: r65913
parent 9e91ce11
...@@ -5,6 +5,10 @@ ...@@ -5,6 +5,10 @@
2003-04-21 Olivier Hainque <hainque@act-europe.fr> 2003-04-21 Olivier Hainque <hainque@act-europe.fr>
* fold-const.c (fold, case PLUS_EXPR and case MULT_EXPR): Restore
a number of conversions required for type consistency and previously
stripped off by STRIP_NOPS.
* calls.c (expand_call): Prevent sibcall optimization for calls to * calls.c (expand_call): Prevent sibcall optimization for calls to
nested subprograms. nested subprograms.
......
...@@ -4182,8 +4182,12 @@ extract_muldiv_1 (t, c, code, wide_type) ...@@ -4182,8 +4182,12 @@ extract_muldiv_1 (t, c, code, wide_type)
/* Pass the constant down and see if we can make a simplification. If /* Pass the constant down and see if we can make a simplification. If
we can, replace this expression with the inner simplification for we can, replace this expression with the inner simplification for
possible later conversion to our or some other type. */ possible later conversion to our or some other type. */
if (0 != (t1 = extract_muldiv (op0, convert (TREE_TYPE (op0), c), code, if ((t2 = convert (TREE_TYPE (op0), c)) != 0
code == MULT_EXPR ? ctype : NULL_TREE))) && TREE_CODE (t2) == INTEGER_CST
&& ! TREE_CONSTANT_OVERFLOW (t2)
&& (0 != (t1 = extract_muldiv (op0, t2, code,
code == MULT_EXPR
? ctype : NULL_TREE))))
return t1; return t1;
break; break;
...@@ -5478,13 +5482,17 @@ fold (expr) ...@@ -5478,13 +5482,17 @@ fold (expr)
if (TREE_CODE (parg0) == MULT_EXPR if (TREE_CODE (parg0) == MULT_EXPR
&& TREE_CODE (parg1) != MULT_EXPR) && TREE_CODE (parg1) != MULT_EXPR)
return fold (build (PLUS_EXPR, type, return fold (build (PLUS_EXPR, type,
fold (build (PLUS_EXPR, type, parg0, marg)), fold (build (PLUS_EXPR, type,
parg1)); convert (type, parg0),
convert (type, marg))),
convert (type, parg1)));
if (TREE_CODE (parg0) != MULT_EXPR if (TREE_CODE (parg0) != MULT_EXPR
&& TREE_CODE (parg1) == MULT_EXPR) && TREE_CODE (parg1) == MULT_EXPR)
return fold (build (PLUS_EXPR, type, return fold (build (PLUS_EXPR, type,
fold (build (PLUS_EXPR, type, parg1, marg)), fold (build (PLUS_EXPR, type,
parg0)); convert (type, parg1),
convert (type, marg))),
convert (type, parg0)));
} }
if (TREE_CODE (arg0) == MULT_EXPR && TREE_CODE (arg1) == MULT_EXPR) if (TREE_CODE (arg0) == MULT_EXPR && TREE_CODE (arg1) == MULT_EXPR)
...@@ -5816,7 +5824,8 @@ fold (expr) ...@@ -5816,7 +5824,8 @@ fold (expr)
TREE_OPERAND (arg0, 1))); TREE_OPERAND (arg0, 1)));
if (TREE_CODE (arg1) == INTEGER_CST if (TREE_CODE (arg1) == INTEGER_CST
&& 0 != (tem = extract_muldiv (TREE_OPERAND (t, 0), arg1, && 0 != (tem = extract_muldiv (TREE_OPERAND (t, 0),
convert (type, arg1),
code, NULL_TREE))) code, NULL_TREE)))
return convert (type, tem); return convert (type, tem);
......
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