diff options
author | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-02-07 14:11:26 +0000 |
---|---|---|
committer | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-02-07 14:11:26 +0000 |
commit | 4251ed760f214b43bb43729abcd0ce1feda5c173 (patch) | |
tree | caa1218e23262b710b363a0ef1598e5755b4ea94 /gcc/tree-ssa-reassoc.c | |
parent | 8c7642de510f166c863daf76b3779aa2dc6b6a34 (diff) | |
download | gcc-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.c | 12 |
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 |