X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Ftree-ssa-reassoc.c;h=a4118c923392ba9ad44cf19515c8f29b85f1fb85;hp=200088d7dd43871f2b10929e5e6ea49f40204fed;hb=4251ed760f214b43bb43729abcd0ce1feda5c173;hpb=8c7642de510f166c863daf76b3779aa2dc6b6a34 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