aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/lambda-code.c15
2 files changed, 14 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index def3930..1461084 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/lambda-code.c b/gcc/lambda-code.c
index 2e1d851..96d9798 100644
--- a/gcc/lambda-code.c
+++ b/gcc/lambda-code.c
@@ -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);