diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-02-11 17:56:39 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-02-11 17:56:39 +0000 |
commit | 8541c166e2dd81d8edf53aca8c226cff81a4fe27 (patch) | |
tree | e0d0c93720e1f9622f8a6d02f91e442f6654c194 /gcc/fold-const.c | |
parent | 34bd6fd743f839847b9c6b362d8c5fd38de356a2 (diff) | |
download | gcc-8541c166e2dd81d8edf53aca8c226cff81a4fe27.tar.gz |
* fold-const.c (split_tree): Don't assume a constant isn't splittable.
(fold): Don't assume a constant isn't foldable.
* tree.c (build): Set TREE_CONSTANT for an expression with no
side-effects and constant operands.
(build1): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39585 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 9516d0d4bee..3cb1869981b 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -1357,9 +1357,6 @@ split_tree (in, code, conp, litp, negate_p) if (TREE_CODE (in) == INTEGER_CST || TREE_CODE (in) == REAL_CST) *litp = in; - else if (TREE_CONSTANT (in)) - *conp = in; - else if (TREE_CODE (in) == code || (! FLOAT_TYPE_P (TREE_TYPE (in)) /* We can associate addition and subtraction together (even @@ -1399,6 +1396,8 @@ split_tree (in, code, conp, litp, negate_p) if (neg_conp_p) *conp = negate_expr (*conp); if (neg_var_p) var = negate_expr (var); } + else if (TREE_CONSTANT (in)) + *conp = in; else var = in; @@ -4711,7 +4710,7 @@ fold (expr) tree type = TREE_TYPE (expr); register tree arg0 = NULL_TREE, arg1 = NULL_TREE; register enum tree_code code = TREE_CODE (t); - register int kind; + register int kind = TREE_CODE_CLASS (code); int invert; /* WINS will be nonzero when the switch is done if all operands are constant. */ @@ -4722,19 +4721,14 @@ fold (expr) if (code == RTL_EXPR || (code == SAVE_EXPR && SAVE_EXPR_RTL (t)) != 0) return t; - /* Return right away if already constant. */ - if (TREE_CONSTANT (t)) - { - if (code == CONST_DECL) - return DECL_INITIAL (t); - return t; - } + /* Return right away if a constant. */ + if (kind == 'c') + return t; #ifdef MAX_INTEGER_COMPUTATION_MODE check_max_integer_computation_mode (expr); #endif - kind = TREE_CODE_CLASS (code); if (code == NOP_EXPR || code == FLOAT_EXPR || code == CONVERT_EXPR) { tree subop; |