aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorZdenek Dvorak <dvorakz@suse.cz>2004-11-11 21:12:34 +0100
committerZdenek Dvorak <rakdver@gcc.gnu.org>2004-11-11 20:12:34 +0000
commitf8e9d51205091e8ca25cd831fc32671c714bf2f7 (patch)
tree8ffe0179b9d6365d2ca4bbddb0921543c6850566 /gcc
parente0afb98af7dafb0bb088cd57d168d95542fdbf6b (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/tree-scalar-evolution.c60
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 = ... - ...". */