summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-reassoc.c
diff options
context:
space:
mode:
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2008-02-07 14:11:26 +0000
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2008-02-07 14:11:26 +0000
commit4251ed760f214b43bb43729abcd0ce1feda5c173 (patch)
treecaa1218e23262b710b363a0ef1598e5755b4ea94 /gcc/tree-ssa-reassoc.c
parent8c7642de510f166c863daf76b3779aa2dc6b6a34 (diff)
downloadgcc-4251ed760f214b43bb43729abcd0ce1feda5c173.tar.gz
PR tree-optimization/35085
* tree-ssa-reassoc.c (rewrite_expr_tree): Enable destructive update for operand entry oe2 in addition to operand entry oe3 in order to expose more opportunities for vectorizer sum reduction. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132168 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-reassoc.c')
-rw-r--r--gcc/tree-ssa-reassoc.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c
index 200088d7dd4..a4118c92339 100644
--- a/gcc/tree-ssa-reassoc.c
+++ b/gcc/tree-ssa-reassoc.c
@@ -857,6 +857,18 @@ rewrite_expr_tree (tree stmt, unsigned int opindex,
oe1->op = temp.op;
oe1->rank= temp.rank;
}
+ else if ((oe1->rank == oe3->rank
+ && oe2->rank != oe3->rank)
+ || (is_phi_for_stmt (stmt, oe2->op)
+ && !is_phi_for_stmt (stmt, oe1->op)
+ && !is_phi_for_stmt (stmt, oe3->op)))
+ {
+ struct operand_entry temp = *oe2;
+ oe2->op = oe1->op;
+ oe2->rank = oe1->rank;
+ oe1->op = temp.op;
+ oe1->rank= temp.rank;
+ }
}
/* The final recursion case for this function is that you have