From ac1fdb22b8df0622528a2c7ad7d90e1ad16cae67 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 9 Jun 1998 15:05:49 -0700 Subject: [PATCH] fold-const.c (fold): Even with otherwise constant trees... * fold-const.c (fold): Even with otherwise constant trees, look for opportunities to combine integer constants. From-SVN: r20392 --- gcc/ChangeLog | 5 +++++ gcc/fold-const.c | 22 +++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1f9f640..072b82a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Tue Jun 9 22:05:34 1998 Richard Henderson + + * 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 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 5daa253..18e8385 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -4433,9 +4433,12 @@ fold (expr) 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. */ @@ -4450,9 +4453,12 @@ fold (expr) 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). */ @@ -4481,7 +4487,13 @@ fold (expr) 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) -- 2.7.4