+Tue Jun 9 22:05:34 1998 Richard Henderson <rth@cygnus.com>
+
+ * fold-const.c (fold): Even with otherwise constant trees, look for
+ opportunities to combine integer constants.
+
Wed Jun 3 23:41:24 EDT 1998 John Wehle (john@feith.com)
* i386.md (movsfcc, movdfcc, movxfcc): The floating point
return convert (TREE_TYPE (t), con);
/* If ARG0 is a constant, don't change things around;
- instead keep all the constant computations together. */
+ instead keep all the constant computations together.
+ Notice, however, if we can merge integer constants. */
- if (TREE_CONSTANT (arg0))
+ if (TREE_CONSTANT (arg0)
+ && !(TREE_CODE (con) == INTEGER_CST
+ && TREE_CODE (arg1) == INTEGER_CST))
return t;
/* Otherwise return (CON +- ARG1) - VAR. */
return convert (TREE_TYPE (t), con);
/* If ARG0 is a constant, don't change things around;
- instead keep all the constant computations together. */
+ instead keep all the constant computations together.
+ Notice, however, if we can merge integer constants. */
- if (TREE_CONSTANT (arg0))
+ if (TREE_CONSTANT (arg0)
+ && !(TREE_CODE (con) == INTEGER_CST
+ && TREE_CODE (arg1) == INTEGER_CST))
return t;
/* Otherwise return VAR +- (ARG1 +- CON). */
if (split_tree (arg1, code, &var, &con, &varsign))
{
- if (TREE_CONSTANT (arg1))
+ /* If ARG1 is a constant, don't change things around;
+ instead keep all the constant computations together.
+ Notice, however, if we can merge integer constants. */
+
+ if (TREE_CONSTANT (arg1)
+ && !(TREE_CODE (con) == INTEGER_CST
+ && TREE_CODE (arg0) == INTEGER_CST))
return t;
if (varsign == -1)