From fd78e43e0d0fac3b7081a2cbaad430c2c411c2e1 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Tue, 4 Jul 2017 19:05:26 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/ipa-utils.c | 19 +++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ccb1bd47605..1168a3ac619 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-07-04 Jan Hubicka + + * ipa-utils.c (ipa_merge_profiles): Fix merging when dst is + uninitialized while src is not. + 2017-07-04 Richard Earnshaw * common/config/arm/arm-common.c: Adjust include path for diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c index 65eed77c930..708710d6135 100644 --- a/gcc/ipa-utils.c +++ b/gcc/ipa-utils.c @@ -404,14 +404,17 @@ ipa_merge_profiles (struct cgraph_node *dst, /* FIXME when we merge in unknown profile, we ought to set counts as unsafe. */ - if (!dst->count.initialized_p ()) + if (!src->count.initialized_p ()) return; if (symtab->dump_file) { fprintf (symtab->dump_file, "Merging profiles of %s to %s\n", 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. If declaration is merged, we need to duplicate it to be able @@ -521,12 +524,20 @@ ipa_merge_profiles (struct cgraph_node *dst, unsigned int i; 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++) { edge srce = EDGE_SUCC (srcbb, 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); -- 2.30.2