diff options
author | Zdenek Dvorak <dvorakz@suse.cz> | 2004-11-11 21:12:34 +0100 |
---|---|---|
committer | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2004-11-11 20:12:34 +0000 |
commit | f8e9d51205091e8ca25cd831fc32671c714bf2f7 (patch) | |
tree | 8ffe0179b9d6365d2ca4bbddb0921543c6850566 /gcc | |
parent | e0afb98af7dafb0bb088cd57d168d95542fdbf6b (diff) | |
download | gcc-f8e9d51205091e8ca25cd831fc32671c714bf2f7.zip gcc-f8e9d51205091e8ca25cd831fc32671c714bf2f7.tar.gz gcc-f8e9d51205091e8ca25cd831fc32671c714bf2f7.tar.bz2 |
re PR tree-optimization/17742 (C Optimization error with -O1 on i686)
PR tree-optimization/17742
* tree-scalar-evolution.c (follow_ssa_edge_in_rhs): Handle
MINUS_EXPR correctly.
From-SVN: r90492
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-scalar-evolution.c | 60 |
2 files changed, 11 insertions, 55 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 620cefa..7c072a4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-11-11 Zdenek Dvorak <dvorakz@suse.cz> + + PR tree-optimization/17742 + * tree-scalar-evolution.c (follow_ssa_edge_in_rhs): Handle + MINUS_EXPR correctly. + 2004-11-11 Sebastian Pop <pop@cri.ensmp.fr> * tree-scalar-evolution.c (follow_ssa_edge_in_condition_phi): diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index e26f1da..21e020d 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -1186,65 +1186,15 @@ follow_ssa_edge_in_rhs (struct loop *loop, if (TREE_CODE (rhs0) == SSA_NAME) { - if (TREE_CODE (rhs1) == SSA_NAME) - { - /* Match an assignment under the form: - "a = b - c". */ - res = follow_ssa_edge - (loop, SSA_NAME_DEF_STMT (rhs0), halting_phi, - evolution_of_loop); - - if (res) - *evolution_of_loop = add_to_evolution - (loop->num, chrec_convert (type_rhs, *evolution_of_loop), - MINUS_EXPR, rhs1); - - else - { - res = follow_ssa_edge - (loop, SSA_NAME_DEF_STMT (rhs1), halting_phi, - evolution_of_loop); - - if (res) - *evolution_of_loop = add_to_evolution - (loop->num, - chrec_fold_multiply (type_rhs, - *evolution_of_loop, - build_int_cst_type (type_rhs, -1)), - PLUS_EXPR, rhs0); - } - } - - else - { - /* Match an assignment under the form: - "a = b - ...". */ - res = follow_ssa_edge - (loop, SSA_NAME_DEF_STMT (rhs0), halting_phi, - evolution_of_loop); - if (res) - *evolution_of_loop = add_to_evolution - (loop->num, chrec_convert (type_rhs, *evolution_of_loop), - MINUS_EXPR, rhs1); - } - } - - else if (TREE_CODE (rhs1) == SSA_NAME) - { /* Match an assignment under the form: - "a = ... - c". */ - res = follow_ssa_edge - (loop, SSA_NAME_DEF_STMT (rhs1), halting_phi, - evolution_of_loop); + "a = b - ...". */ + res = follow_ssa_edge (loop, SSA_NAME_DEF_STMT (rhs0), halting_phi, + evolution_of_loop); if (res) *evolution_of_loop = add_to_evolution - (loop->num, - chrec_fold_multiply (type_rhs, - *evolution_of_loop, - build_int_cst_type (type_rhs, -1)), - PLUS_EXPR, rhs0); + (loop->num, chrec_convert (type_rhs, *evolution_of_loop), + MINUS_EXPR, rhs1); } - else /* Otherwise, match an assignment under the form: "a = ... - ...". */ |