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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|2023-07-03 00:00:00         |2024-02-19
     Ever confirmed|0                           |1

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed with -O2 -gstatement-frontiers -fselective-scheduling2 (but oddly not
-O2 -g -fselective-scheduling2).

Samples: 4K of event 'cycles:u', Event count (approx.): 5647511948              
Overhead       Samples  Command  Shared Object     Symbol                       
  20.82%           901  cc1      cc1               [.] moveup_expr_cached
  10.45%           446  cc1      cc1               [.]
schedule_expr_on_boundary
   7.60%           328  cc1      cc1               [.] is_ineligible_successor
   7.56%           327  cc1      cc1               [.] bitmap_bit_p
   7.30%           315  cc1      cc1               [.] sel_bb_head

possibly because of

/* Same as moveup_expr, but first looks up the result of
   transformation in caches.  */
static enum MOVEUP_EXPR_CODE
moveup_expr_cached (expr_t expr, insn_t insn, bool inside_insn_group)
{
...
  if (DEBUG_INSN_P (EXPR_INSN_RTX (expr))
      && BLOCK_FOR_INSN (EXPR_INSN_RTX (expr))
      && (sel_bb_head (BLOCK_FOR_INSN (EXPR_INSN_RTX (expr)))
          == EXPR_INSN_RTX (expr)))
    /* Don't use cached information for debug insns that are heads of
       basic blocks.  */;

and likely -gstatement-frontiers puts debug insns right there.

It reads like a band-aid fix for a compare-debug issue that was then traded
for this compile-time one ...

Reply via email to