Commit f22ae1ec by Bin Cheng Committed by Bin Cheng

tree-ssa-loop-ivopts.c (iv_ca_add_use): Delete parameter important_candidates.


	* tree-ssa-loop-ivopts.c (iv_ca_add_use): Delete parameter
	important_candidates.  Consider all important candidates if
	IVS doesn't give any result.  Remove check on ivs->upto.
	(try_add_cand_for): Call iv_ca_add_use only once.

From-SVN: r214674
parent 8a2d2bf0
2014-08-28 Bin Cheng <bin.cheng@arm.com>
* tree-ssa-loop-ivopts.c (iv_ca_add_use): Delete parameter
important_candidates. Consider all important candidates if
IVS doesn't give any result. Remove check on ivs->upto.
(try_add_cand_for): Call iv_ca_add_use only once.
2014-08-28 Alexander Ivchenko <alexander.ivchenko@intel.com> 2014-08-28 Alexander Ivchenko <alexander.ivchenko@intel.com>
Maxim Kuznetsov <maxim.kuznetsov@intel.com> Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Anna Tikhonova <anna.tikhonova@intel.com> Anna Tikhonova <anna.tikhonova@intel.com>
...@@ -5415,36 +5415,40 @@ iv_ca_set_cp (struct ivopts_data *data, struct iv_ca *ivs, ...@@ -5415,36 +5415,40 @@ iv_ca_set_cp (struct ivopts_data *data, struct iv_ca *ivs,
} }
/* Extend set IVS by expressing USE by some of the candidates in it /* Extend set IVS by expressing USE by some of the candidates in it
if possible. All important candidates will be considered if possible. Consider all important candidates if candidates in
if IMPORTANT_CANDIDATES is true. */ set IVS don't give any result. */
static void static void
iv_ca_add_use (struct ivopts_data *data, struct iv_ca *ivs, iv_ca_add_use (struct ivopts_data *data, struct iv_ca *ivs,
struct iv_use *use, bool important_candidates) struct iv_use *use)
{ {
struct cost_pair *best_cp = NULL, *cp; struct cost_pair *best_cp = NULL, *cp;
bitmap_iterator bi; bitmap_iterator bi;
bitmap cands;
unsigned i; unsigned i;
struct iv_cand *cand;
gcc_assert (ivs->upto >= use->id); gcc_assert (ivs->upto >= use->id);
ivs->upto++;
ivs->bad_uses++;
if (ivs->upto == use->id) EXECUTE_IF_SET_IN_BITMAP (ivs->cands, 0, i, bi)
{
ivs->upto++;
ivs->bad_uses++;
}
cands = (important_candidates ? data->important_candidates : ivs->cands);
EXECUTE_IF_SET_IN_BITMAP (cands, 0, i, bi)
{ {
struct iv_cand *cand = iv_cand (data, i); cand = iv_cand (data, i);
cp = get_use_iv_cost (data, use, cand); cp = get_use_iv_cost (data, use, cand);
if (cheaper_cost_pair (cp, best_cp)) if (cheaper_cost_pair (cp, best_cp))
best_cp = cp; best_cp = cp;
} }
if (best_cp == NULL)
{
EXECUTE_IF_SET_IN_BITMAP (data->important_candidates, 0, i, bi)
{
cand = iv_cand (data, i);
cp = get_use_iv_cost (data, use, cand);
if (cheaper_cost_pair (cp, best_cp))
best_cp = cp;
}
}
iv_ca_set_cp (data, ivs, use, best_cp); iv_ca_set_cp (data, ivs, use, best_cp);
} }
...@@ -5878,18 +5882,9 @@ try_add_cand_for (struct ivopts_data *data, struct iv_ca *ivs, ...@@ -5878,18 +5882,9 @@ try_add_cand_for (struct ivopts_data *data, struct iv_ca *ivs,
struct iv_ca_delta *best_delta = NULL, *act_delta; struct iv_ca_delta *best_delta = NULL, *act_delta;
struct cost_pair *cp; struct cost_pair *cp;
iv_ca_add_use (data, ivs, use, false); iv_ca_add_use (data, ivs, use);
best_cost = iv_ca_cost (ivs); best_cost = iv_ca_cost (ivs);
cp = iv_ca_cand_for_use (ivs, use); cp = iv_ca_cand_for_use (ivs, use);
if (!cp)
{
ivs->upto--;
ivs->bad_uses--;
iv_ca_add_use (data, ivs, use, true);
best_cost = iv_ca_cost (ivs);
cp = iv_ca_cand_for_use (ivs, use);
}
if (cp) if (cp)
{ {
best_delta = iv_ca_delta_add (use, NULL, cp, NULL); best_delta = iv_ca_delta_add (use, NULL, cp, NULL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment