aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorZdenek Dvorak <dvorakz@suse.cz>2005-02-25 13:07:11 +0100
committerZdenek Dvorak <rakdver@gcc.gnu.org>2005-02-25 12:07:11 +0000
commit9e7376e5952775dca8267df699af56fb53e69739 (patch)
treef8ee603bfd3418fc02fdb4850b03ae8255571708 /gcc
parentbd182be84e9c8ae8485ac7c392fa0b6678969e3c (diff)
downloadgcc-9e7376e5952775dca8267df699af56fb53e69739.zip
gcc-9e7376e5952775dca8267df699af56fb53e69739.tar.gz
gcc-9e7376e5952775dca8267df699af56fb53e69739.tar.bz2
re PR tree-optimization/19937 (Wrong loop exit (causes binutils to fail))
PR tree-optimization/19937 * tree-ssa-loop-ivopts.c (rewrite_use_compare): Cast the final value to the type of the induction variable. From-SVN: r95535
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-ssa-loop-ivopts.c8
2 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a41808c..ef164be 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-02-25 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR tree-optimization/19937
+ * tree-ssa-loop-ivopts.c (rewrite_use_compare): Cast the final value
+ to the type of the induction variable.
+
2005-02-25 Kaz Kojima <kkojima@gcc.gnu.org>
PR rtl-optimization/20117
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index 8b069d0..b1636a7 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -4878,15 +4878,17 @@ rewrite_use_compare (struct ivopts_data *data,
if (may_eliminate_iv (data, use, cand, &compare, &bound))
{
+ tree var = var_at_stmt (data->current_loop, cand, use->stmt);
+ tree var_type = TREE_TYPE (var);
+
+ bound = fold_convert (var_type, bound);
op = force_gimple_operand (unshare_expr (bound), &stmts,
true, NULL_TREE);
if (stmts)
bsi_insert_before (&bsi, stmts, BSI_SAME_STMT);
- *use->op_p = build2 (compare, boolean_type_node,
- var_at_stmt (data->current_loop,
- cand, use->stmt), op);
+ *use->op_p = build2 (compare, boolean_type_node, var, op);
modify_stmt (use->stmt);
return;
}