aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 8ed8c69..ebbd894 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -64,6 +64,7 @@ along with GCC; see the file COPYING3. If not see
#include "opts.h"
#include "asan.h"
#include "profile.h"
+#include "sreal.h"
/* This file contains functions for building the Control Flow Graph (CFG)
for a function tree. */
@@ -9084,18 +9085,32 @@ gimple_account_profile_record (basic_block bb,
struct profile_record *record)
{
gimple_stmt_iterator i;
- for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
+ for (i = gsi_start_nondebug_after_labels_bb (bb); !gsi_end_p (i);
+ gsi_next_nondebug (&i))
{
record->size
+= estimate_num_insns (gsi_stmt (i), &eni_size_weights);
- if (bb->count.initialized_p ())
+ if (profile_info)
+ {
+ if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.ipa ().initialized_p ()
+ && ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.ipa ().nonzero_p ()
+ && bb->count.ipa ().initialized_p ())
+ record->time
+ += estimate_num_insns (gsi_stmt (i),
+ &eni_time_weights)
+ * bb->count.ipa ().to_gcov_type ();
+ }
+ else if (bb->count.initialized_p ()
+ && ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.initialized_p ())
record->time
- += estimate_num_insns (gsi_stmt (i),
- &eni_time_weights) * bb->count.to_gcov_type ();
- else if (profile_status_for_fn (cfun) == PROFILE_GUESSED)
- record->time
- += estimate_num_insns (gsi_stmt (i),
- &eni_time_weights) * bb->count.to_frequency (cfun);
+ += estimate_num_insns
+ (gsi_stmt (i),
+ &eni_time_weights)
+ * bb->count.to_sreal_scale
+ (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count).to_double ();
+ else
+ record->time
+ += estimate_num_insns (gsi_stmt (i), &eni_time_weights);
}
}