Hi,

The field in which profile_count holds the count has 61 bits but the
getter method only returns it as a 32 bit number.  The getter is (and
should be) only used for dumping but even dumps are better when they do
not lie.

The patch has passed bootstrap and testing on x86_64-linux and Honza has
approved it so I will commit it shortly.

Martin


gcc/ChangeLog:

2021-07-13  Martin Jambor  <mjam...@suse.cz>

        * profile-count.h (profile_count::value): Change the return type to
        uint64_t.
        * gimple-pretty-print.c (dump_gimple_bb_header): Adjust print
        statement.
        * tree-cfg.c (dump_function_to_file): Likewise.
---
 gcc/gimple-pretty-print.c | 2 +-
 gcc/profile-count.h       | 2 +-
 gcc/tree-cfg.c            | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c
index 39c5775e2cb..d6e63d6e57f 100644
--- a/gcc/gimple-pretty-print.c
+++ b/gcc/gimple-pretty-print.c
@@ -2831,7 +2831,7 @@ dump_gimple_bb_header (FILE *outf, basic_block bb, int 
indent,
          if (bb->loop_father->header == bb)
            fprintf (outf, ",loop_header(%d)", bb->loop_father->num);
          if (bb->count.initialized_p ())
-           fprintf (outf, ",%s(%d)",
+           fprintf (outf, ",%s(%" PRIu64 ")",
                     profile_quality_as_string (bb->count.quality ()),
                     bb->count.value ());
          fprintf (outf, "):\n");
diff --git a/gcc/profile-count.h b/gcc/profile-count.h
index f2b1e3a6525..c7a45ac5ee3 100644
--- a/gcc/profile-count.h
+++ b/gcc/profile-count.h
@@ -804,7 +804,7 @@ public:
     }
 
   /* Get the value of the count.  */
-  uint32_t value () const { return m_val; }
+  uint64_t value () const { return m_val; }
 
   /* Get the quality of the count.  */
   enum profile_quality quality () const { return m_quality; }
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index c73e1cbdda6..2ed191f9a47 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -8081,7 +8081,7 @@ dump_function_to_file (tree fndecl, FILE *file, 
dump_flags_t flags)
        {
          basic_block bb = ENTRY_BLOCK_PTR_FOR_FN (cfun);
          if (bb->count.initialized_p ())
-           fprintf (file, ",%s(%d)",
+           fprintf (file, ",%s(%" PRIu64 ")",
                     profile_quality_as_string (bb->count.quality ()),
                     bb->count.value ());
          fprintf (file, ")\n%s (", function_name (fun));
-- 
2.32.0

Reply via email to