summaryrefslogtreecommitdiff
path: root/gcc/tree-scalar-evolution.c
diff options
context:
space:
mode:
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-09 22:09:41 +0000
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-09 22:09:41 +0000
commitdfeb6545e649ba53adf17b8d77f6499b7cb02977 (patch)
tree16cb9ff437410085c14df0ecfcb646e19a6e2c9c /gcc/tree-scalar-evolution.c
parentdff64cac3ba39c55966dbd20dd298a28ecd9bab0 (diff)
downloadgcc-dfeb6545e649ba53adf17b8d77f6499b7cb02977.tar.gz
Call compute_overall_effect_of_inner_loop from instantiate_scev_name.
2010-06-09 Sebastian Pop <sebastian.pop@amd.com> * tree-scalar-evolution.c (instantiate_scev_name): Do not fail the scev analysis when the variable is not used outside the loop in a close phi node: call compute_overall_effect_of_inner_loop. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160510 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-scalar-evolution.c')
-rw-r--r--gcc/tree-scalar-evolution.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c
index 5eb61740bee..13d897fd5ce 100644
--- a/gcc/tree-scalar-evolution.c
+++ b/gcc/tree-scalar-evolution.c
@@ -2172,9 +2172,19 @@ instantiate_scev_name (basic_block instantiate_below,
else
res = chrec;
- if (res == NULL_TREE
- || !dominated_by_p (CDI_DOMINATORS, instantiate_below,
- gimple_bb (SSA_NAME_DEF_STMT (res))))
+ /* When there is no loop_closed_phi_def, it means that the
+ variable is not used after the loop: try to still compute the
+ value of the variable when exiting the loop. */
+ if (res == NULL_TREE)
+ {
+ loop_p loop = loop_containing_stmt (SSA_NAME_DEF_STMT (chrec));
+ res = analyze_scalar_evolution (loop, chrec);
+ res = compute_overall_effect_of_inner_loop (loop, res);
+ res = instantiate_scev_r (instantiate_below, evolution_loop, res,
+ fold_conversions, cache, size_expr);
+ }
+ else if (!dominated_by_p (CDI_DOMINATORS, instantiate_below,
+ gimple_bb (SSA_NAME_DEF_STMT (res))))
res = chrec_dont_know;
}