diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-08 16:16:41 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-08 16:16:41 +0000 |
commit | e37235f0737c6d605e0d795c9251a40ceffd09f2 (patch) | |
tree | 200138df775b12823401ef7db79aecec6a2142da /gcc/tree-ssa-ccp.c | |
parent | c6a73f83115c4b0bb92241805cad4f69f646a14e (diff) | |
download | gcc-e37235f0737c6d605e0d795c9251a40ceffd09f2.tar.gz |
* tree-cfg.c (make_exit_edges): Use get_call_expr_in.
(remove_useless_stmts_1, is_ctrl_altering_stmt): Likewise.
(tree_block_ends_with_call_p, need_fake_edge_p): Likewise.
* tree-eh.c (lower_eh_constructs_1): Likewise.
* tree-sra.c (sra_walk_modify_expr): Likewise.
* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
(eliminate_unnecessary_stmts): Likewise.
* tree-ssa-dse.c (dse_optimize_stmt): Likewise.
* tree-tailcall.c (optimize_tail_call): Likewise.
* tree-ssa-ccp.c (get_rhs, set_rhs): Reorg to use switch.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84298 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-ccp.c')
-rw-r--r-- | gcc/tree-ssa-ccp.c | 96 |
1 files changed, 55 insertions, 41 deletions
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index f8b8ab90e99..722f552c970 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -2106,27 +2106,30 @@ get_rhs (tree stmt) { enum tree_code code = TREE_CODE (stmt); - if (code == MODIFY_EXPR) - return TREE_OPERAND (stmt, 1); - if (code == COND_EXPR) - return COND_EXPR_COND (stmt); - else if (code == SWITCH_EXPR) - return SWITCH_COND (stmt); - else if (code == RETURN_EXPR) - { - if (!TREE_OPERAND (stmt, 0)) - return NULL_TREE; - if (TREE_CODE (TREE_OPERAND (stmt, 0)) == MODIFY_EXPR) - return TREE_OPERAND (TREE_OPERAND (stmt, 0), 1); + switch (code) + { + case RETURN_EXPR: + stmt = TREE_OPERAND (stmt, 0); + if (stmt) + return get_rhs (stmt); else - return TREE_OPERAND (stmt, 0); + return NULL; + + case MODIFY_EXPR: + return TREE_OPERAND (stmt, 1); + + case COND_EXPR: + return COND_EXPR_COND (stmt); + case SWITCH_EXPR: + return SWITCH_COND (stmt); + case GOTO_EXPR: + return GOTO_DESTINATION (stmt); + case LABEL_EXPR: + return LABEL_EXPR_LABEL (stmt); + + default: + return stmt; } - else if (code == GOTO_EXPR) - return GOTO_DESTINATION (stmt); - else if (code == LABEL_EXPR) - return LABEL_EXPR_LABEL (stmt); - else - return stmt; } @@ -2135,8 +2138,9 @@ get_rhs (tree stmt) static bool set_rhs (tree *stmt_p, tree expr) { - tree stmt = *stmt_p; + tree stmt = *stmt_p, op; enum tree_code code = TREE_CODE (expr); + stmt_ann_t ann; /* Verify the constant folded result is valid gimple. */ if (TREE_CODE_CLASS (code) == '2') @@ -2151,30 +2155,39 @@ set_rhs (tree *stmt_p, tree expr) return false; } - code = TREE_CODE (stmt); - if (code == MODIFY_EXPR) - TREE_OPERAND (stmt, 1) = expr; - else if (code == COND_EXPR) - COND_EXPR_COND (stmt) = expr; - else if (code == SWITCH_EXPR) - SWITCH_COND (stmt) = expr; - else if (code == RETURN_EXPR) - { - if (TREE_OPERAND (stmt, 0) - && TREE_CODE (TREE_OPERAND (stmt, 0)) == MODIFY_EXPR) - TREE_OPERAND (TREE_OPERAND (stmt, 0), 1) = expr; - else - TREE_OPERAND (stmt, 0) = expr; - } - else if (code == GOTO_EXPR) - GOTO_DESTINATION (stmt) = expr; - else if (code == LABEL_EXPR) - LABEL_EXPR_LABEL (stmt) = expr; - else + switch (TREE_CODE (stmt)) { + case RETURN_EXPR: + op = TREE_OPERAND (stmt, 0); + if (TREE_CODE (op) != MODIFY_EXPR) + { + TREE_OPERAND (stmt, 0) = expr; + break; + } + stmt = op; + /* FALLTHRU */ + + case MODIFY_EXPR: + TREE_OPERAND (stmt, 1) = expr; + break; + + case COND_EXPR: + COND_EXPR_COND (stmt) = expr; + break; + case SWITCH_EXPR: + SWITCH_COND (stmt) = expr; + break; + case GOTO_EXPR: + GOTO_DESTINATION (stmt) = expr; + break; + case LABEL_EXPR: + LABEL_EXPR_LABEL (stmt) = expr; + break; + + default: /* Replace the whole statement with EXPR. If EXPR has no side effects, then replace *STMT_P with an empty statement. */ - stmt_ann_t ann = stmt_ann (stmt); + ann = stmt_ann (stmt); *stmt_p = TREE_SIDE_EFFECTS (expr) ? expr : build_empty_stmt (); (*stmt_p)->common.ann = (tree_ann_t) ann; @@ -2211,6 +2224,7 @@ set_rhs (tree *stmt_p, tree expr) SSA_NAME_DEF_STMT (var) = *stmt_p; } } + break; } return true; |