https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118581

            Bug ID: 118581
           Summary: auto_profile can't annotate bb with all debug_stmt
                    which assigned  value with constant
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
          Assignee: unassigned at gcc dot gnu.org
          Reporter: liuhongt at gcc dot gnu.org
  Target Milestone: ---

The source code is like

                if( TEST_FLAG_SWEEP( srcGrid, ACCEL )) {
                        ux = 0.005;
                        uy = 0.002;
                        uz = 0.000;
                }


The afdo gimple ir is like

  <bb 6> [count: 0]:  
  # DEBUG BEGIN_STMT
  # DEBUG ux => 5.00000000000000010408340855860842566471546888351440429688e-3
  # DEBUG BEGIN_STMT
  # DEBUG uy => 2.00000000000000004163336342344337026588618755340576171875e-3
  # DEBUG BEGIN_STMT
  # DEBUG uz => 0.0

according to autofdo profiling, the bb is executed.
gcov_dump:
...
68: 1103467
69: 17189: the corresponding source code level count
70: 17189: Ditto.
71: 17189: Ditto.
74: 1086389
76: 1103571 
...

But afdo_set_bb_count ignore all debug stmts

  /* For a given BB, set its execution count. Attach value profile if a stmt
   is not in PROMOTED, because we only want to promote an indirect call once.
   Return TRUE if BB is annotated.  */

static bool
afdo_set_bb_count (basic_block bb, const stmt_set &promoted)
{
  gimple_stmt_iterator gsi;
  edge e;
  edge_iterator ei;
  gcov_type max_count = 0;
  bool has_annotated = false;

  for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
    {
      count_info info;
      gimple *stmt = gsi_stmt (gsi);
      if (gimple_clobber_p (stmt) || is_gimple_debug (stmt))
        continue;
      if (afdo_source_profile->get_count_info (stmt, &info))
        {
          if (info.count > max_count)
            max_count = info.count;
          has_annotated = true;
          if (info.targets.size () > 0
              && promoted.find (stmt) == promoted.end ())
            afdo_vpt (&gsi, info.targets, false);
        }
    }

  if (!has_annotated)
    return false;

Reply via email to