From bb88a6c704fc352a6b60e217f3bf57ebb8806d7f Mon Sep 17 00:00:00 2001 From: eraman Date: Tue, 28 May 2013 17:27:54 +0000 Subject: [PATCH] 2013-05-28 Easwaran Raman PR tree-optimization/57337 * tree-ssa-reassoc.c (appears_later_in_bb): New function. (find_insert_point): Correctly identify the insertion point when two statements with the same UID is compared. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@199385 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 12 ++++++++++-- gcc/tree-ssa-reassoc.c | 31 ++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9f4f85e2fcb..015ccfb9005 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-05-28 Easwaran Raman + + PR tree-optimization/57337 + * tree-ssa-reassoc.c (appears_later_in_bb): New function. + (find_insert_point): Correctly identify the insertion point + when two statements with the same UID is compared. + 2013-05-28 Richard Biener PR tree-optimization/56787 @@ -464,6 +471,7 @@ * config/rs6000/rs6000-opts.h (PROCESSOR_POWER8): Likewise. (enum rs6000_vector): Add power8 vector support. +>>>>>>> .r199383 2013-05-22 Ramana Radhakrishnan PR target/19599 @@ -495,8 +503,8 @@ 2013-05-21 Easwaran Raman PR tree-optimization/57322 - * (build_and_add_sum): If a BB is empty, set the UID of the statement - added to the BB to be 1. + * tree-ssa-reassoc.c (build_and_add_sum): If a BB is empty, set the + UID of the statement added to the BB to be 1. 2013-05-21 Jakub Jelinek diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 8e137630624..24ad390333c 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -2866,6 +2866,31 @@ not_dominated_by (gimple a, gimple b) } +/* Among STMT1 and STMT2, return the statement that appears later. Both + statements are in same BB and have the same UID. */ + +static gimple +appears_later_in_bb (gimple stmt1, gimple stmt2) +{ + unsigned uid = gimple_uid (stmt1); + gimple_stmt_iterator gsi = gsi_for_stmt (stmt1); + gsi_next (&gsi); + if (gsi_end_p (gsi)) + return stmt1; + for (; !gsi_end_p (gsi); gsi_next (&gsi)) + { + gimple stmt = gsi_stmt (gsi); + + /* If STMT has a different UID than STMT1 and we haven't seen + STMT2 during traversal, we know STMT1 appears later. */ + if (gimple_uid (stmt) != uid) + return stmt1; + else if (stmt == stmt2) + return stmt2; + } + gcc_unreachable (); +} + /* Find the statement after which STMT must be moved so that the dependency from DEP_STMT to STMT is maintained. */ @@ -2875,7 +2900,11 @@ find_insert_point (gimple stmt, gimple dep_stmt) gimple insert_stmt = stmt; if (dep_stmt == NULL) return stmt; - if (not_dominated_by (insert_stmt, dep_stmt)) + if (gimple_uid (insert_stmt) == gimple_uid (dep_stmt) + && gimple_bb (insert_stmt) == gimple_bb (dep_stmt) + && insert_stmt != dep_stmt) + insert_stmt = appears_later_in_bb (insert_stmt, dep_stmt); + else if (not_dominated_by (insert_stmt, dep_stmt)) insert_stmt = dep_stmt; return insert_stmt; } -- 2.11.4.GIT