lambda-code.c (lambda_loopnest_to_gcc_loopnest): Swap the test when the edge has the opposite meaning...

2004-11-16  Daniel Berlin  <dberlin@dberlin.org>

	* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Swap
	the test when the edge has the opposite meaning, not when
	the first argument is invariant.

From-SVN: r90788
This commit is contained in:
Daniel Berlin 2004-11-17 02:51:55 +00:00 committed by Daniel Berlin
parent 354ed18fbd
commit 13cf683781
2 changed files with 14 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2004-11-16 Daniel Berlin <dberlin@dberlin.org>
* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Swap
the test when the edge has the opposite meaning, not when
the first argument is invariant.
2004-11-16 Aldy Hernandez <aldyh@redhat.com>
* config/rs6000/rs6000.c (rs6000_override_options): Split e500v2

View File

@ -1867,6 +1867,7 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest,
{
lambda_loop newloop;
basic_block bb;
edge exit;
tree ivvar, ivvarinced, exitcond, stmts;
enum tree_code testtype;
tree newupperbound, newlowerbound;
@ -1908,6 +1909,7 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest,
type,
new_ivs,
invariants, MIN_EXPR, &stmts);
exit = temp->single_exit;
exitcond = get_loop_exit_condition (temp);
bb = bb_for_stmt (exitcond);
bsi = bsi_start (bb);
@ -1928,14 +1930,13 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest,
testtype = LL_STEP (newloop) >= 0 ? LE_EXPR : GE_EXPR;
/* Since we don't know which cond_expr part currently points to each
edge, check which one is invariant and make sure we reverse the
comparison if we are trying to replace a <= 50 with 50 >= newiv.
This ensures that we still canonicalize to <invariant> <test>
<induction variable>. */
if (!expr_invariant_in_loop_p (temp, TREE_OPERAND (exitcond, 0)))
/* We want to build a conditional where true means exit the loop, and
false means continue the loop.
So swap the testtype if this isn't the way things are.*/
if (exit->flags & EDGE_FALSE_VALUE)
testtype = swap_tree_comparison (testtype);
COND_EXPR_COND (exitcond) = build (testtype,
boolean_type_node,
newupperbound, ivvarinced);