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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2025-05-15
           Keywords|                            |missed-optimization

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Comes from:


  <bb 3> [local count: 114863530]:
  _11 = &MEM[(const struct _Hashtable *)this_2(D)]._M_before_begin;
  # VUSE <.MEM_1(D)>
  _50 = MEM[(struct __node_base *)_11]._M_nxt;
  if (_50 != 0B)
    goto <bb 4>; [94.50%]
  else
    goto <bb 8>; [5.50%] ;; return
...

  # _30 = PHI <_17(7), _11(3)> ;; _11 is non-null
  # _31 = PHI <_18(7), _50(3)> ;; _50 is non-null
...
  if (_30 != 0B)
    goto <bb 5>; [74.64%]
  else
    goto <bb 6>; [25.36%]

  <bb 5> [local count: 757361647]:

  <bb 6> [local count: 1014686025]:
  # _13 = PHI <0B(4), _31(5)>
  # VUSE <.MEM_32>
  _14 = MEM[(const struct key * const &)_13 + 8]; <--- here

...
  <bb 7> [local count: 958878295]:
  # VUSE <.MEM_47>
  _17 = _30->_M_nxt;
  # VUSE <.MEM_47>
  _18 = MEM[(struct __node_base *)_17]._M_nxt;
  if (_18 != 0B)
    goto <bb 4>; [94.50%]
  else
    goto <bb 8>; [5.50%]

```

Looks like a missed optimization of non-nullness.

Reply via email to