Commit fd78e43e by Jan Hubicka Committed by Jan Hubicka

ipa-utils.c (ipa_merge_profiles): Fix merging when dst is uninitialized while src is not.


	* ipa-utils.c (ipa_merge_profiles): Fix merging when dst is
	uninitialized while src is not.

From-SVN: r249973
parent a4187dab
2017-07-04 Jan Hubicka <hubicka@ucw.cz>
* ipa-utils.c (ipa_merge_profiles): Fix merging when dst is
uninitialized while src is not.
2017-07-04 Richard Earnshaw <rearnsha@arm.com> 2017-07-04 Richard Earnshaw <rearnsha@arm.com>
* common/config/arm/arm-common.c: Adjust include path for * common/config/arm/arm-common.c: Adjust include path for
......
...@@ -404,14 +404,17 @@ ipa_merge_profiles (struct cgraph_node *dst, ...@@ -404,14 +404,17 @@ ipa_merge_profiles (struct cgraph_node *dst,
/* FIXME when we merge in unknown profile, we ought to set counts as /* FIXME when we merge in unknown profile, we ought to set counts as
unsafe. */ unsafe. */
if (!dst->count.initialized_p ()) if (!src->count.initialized_p ())
return; return;
if (symtab->dump_file) if (symtab->dump_file)
{ {
fprintf (symtab->dump_file, "Merging profiles of %s to %s\n", fprintf (symtab->dump_file, "Merging profiles of %s to %s\n",
src->dump_name (), dst->dump_name ()); src->dump_name (), dst->dump_name ());
} }
dst->count += src->count; if (dst->count.initialized_p ())
dst->count += src->count;
else
dst->count = src->count;
/* This is ugly. We need to get both function bodies into memory. /* This is ugly. We need to get both function bodies into memory.
If declaration is merged, we need to duplicate it to be able If declaration is merged, we need to duplicate it to be able
...@@ -521,12 +524,20 @@ ipa_merge_profiles (struct cgraph_node *dst, ...@@ -521,12 +524,20 @@ ipa_merge_profiles (struct cgraph_node *dst,
unsigned int i; unsigned int i;
dstbb = BASIC_BLOCK_FOR_FN (dstcfun, srcbb->index); dstbb = BASIC_BLOCK_FOR_FN (dstcfun, srcbb->index);
dstbb->count += srcbb->count; if (dstbb->count.initialized_p ())
dstbb->count += srcbb->count;
else
dstbb->count = srcbb->count;
for (i = 0; i < EDGE_COUNT (srcbb->succs); i++) for (i = 0; i < EDGE_COUNT (srcbb->succs); i++)
{ {
edge srce = EDGE_SUCC (srcbb, i); edge srce = EDGE_SUCC (srcbb, i);
edge dste = EDGE_SUCC (dstbb, i); edge dste = EDGE_SUCC (dstbb, i);
dste->count += srce->count; if (dstbb->count.initialized_p ())
dste->count += srce->count;
else
dste->count = srce->count;
if (dstbb->count > 0 && dste->count.initialized_p ())
dste->probability = dste->count.probability_in (dstbb->count);
} }
} }
push_cfun (dstcfun); push_cfun (dstcfun);
......
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