From 81cab2425b462b264fbb0095687a83c175e53345 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Tue, 18 Feb 2014 23:15:27 +0000 Subject: PR tree-optimization/60174 * tree-ssa-reassoc.c (init_range_entry): Do not look into the defining statement of an SSA_NAME that occurs in an abnormal PHI node. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207859 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/tree-ssa-reassoc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gcc/tree-ssa-reassoc.c') diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index b989ca55bb9..df8cca84a30 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -1840,7 +1840,8 @@ init_range_entry (struct range_entry *r, tree exp, gimple stmt) if (exp != NULL_TREE) { - if (TREE_CODE (exp) != SSA_NAME) + if (TREE_CODE (exp) != SSA_NAME + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (exp)) break; stmt = SSA_NAME_DEF_STMT (exp); -- cgit v1.2.1 From c2c07119eb5479988b3f1d91f93935894f8b1f7c Mon Sep 17 00:00:00 2001 From: jakub Date: Wed, 12 Mar 2014 09:21:59 +0000 Subject: PR tree-optimization/60502 * tree-ssa-reassoc.c (eliminate_not_pairs): Use build_all_ones_cst instead of build_low_bits_mask. * gcc.c-torture/compile/pr60502.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@208507 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/tree-ssa-reassoc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'gcc/tree-ssa-reassoc.c') diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index df8cca84a30..99282227039 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -806,8 +806,7 @@ eliminate_not_pairs (enum tree_code opcode, if (opcode == BIT_AND_EXPR) oe->op = build_zero_cst (TREE_TYPE (oe->op)); else if (opcode == BIT_IOR_EXPR) - oe->op = build_low_bits_mask (TREE_TYPE (oe->op), - TYPE_PRECISION (TREE_TYPE (oe->op))); + oe->op = build_all_ones_cst (TREE_TYPE (oe->op)); reassociate_stats.ops_eliminated += ops->length () - 1; ops->truncate (0); -- cgit v1.2.1 From c89eca7bd0efb4061b06eab7d5fed040170a8faf Mon Sep 17 00:00:00 2001 From: jakub Date: Thu, 13 Mar 2014 09:38:28 +0000 Subject: PR tree-optimization/59025 PR middle-end/60418 * tree-ssa-reassoc.c (sort_by_operand_rank): For SSA_NAMEs with the same rank, sort by bb_rank and gimple_uid of SSA_NAME_DEF_STMT first. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@208535 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/tree-ssa-reassoc.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'gcc/tree-ssa-reassoc.c') diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 99282227039..e9e29e550f7 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -219,6 +219,7 @@ static struct pointer_map_t *operand_rank; /* Forward decls. */ static long get_rank (tree); +static bool reassoc_stmt_dominates_stmt_p (gimple, gimple); /* Bias amount for loop-carried phis. We want this to be larger than @@ -506,11 +507,37 @@ sort_by_operand_rank (const void *pa, const void *pb) } /* Lastly, make sure the versions that are the same go next to each - other. We use SSA_NAME_VERSION because it's stable. */ + other. */ if ((oeb->rank - oea->rank == 0) && TREE_CODE (oea->op) == SSA_NAME && TREE_CODE (oeb->op) == SSA_NAME) { + /* As SSA_NAME_VERSION is assigned pretty randomly, because we reuse + versions of removed SSA_NAMEs, so if possible, prefer to sort + based on basic block and gimple_uid of the SSA_NAME_DEF_STMT. + See PR60418. */ + if (!SSA_NAME_IS_DEFAULT_DEF (oea->op) + && !SSA_NAME_IS_DEFAULT_DEF (oeb->op) + && SSA_NAME_VERSION (oeb->op) != SSA_NAME_VERSION (oea->op)) + { + gimple stmta = SSA_NAME_DEF_STMT (oea->op); + gimple stmtb = SSA_NAME_DEF_STMT (oeb->op); + basic_block bba = gimple_bb (stmta); + basic_block bbb = gimple_bb (stmtb); + if (bbb != bba) + { + if (bb_rank[bbb->index] != bb_rank[bba->index]) + return bb_rank[bbb->index] - bb_rank[bba->index]; + } + else + { + bool da = reassoc_stmt_dominates_stmt_p (stmta, stmtb); + bool db = reassoc_stmt_dominates_stmt_p (stmtb, stmta); + if (da != db) + return da ? 1 : -1; + } + } + if (SSA_NAME_VERSION (oeb->op) != SSA_NAME_VERSION (oea->op)) return SSA_NAME_VERSION (oeb->op) - SSA_NAME_VERSION (oea->op); else -- cgit v1.2.1