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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |pinskia at gcc dot 
gnu.org
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2021-09-06
                 CC|                            |pinskia at gcc dot gnu.org
           Keywords|                            |diagnostic,
                   |                            |missed-optimization

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The problem is dead code:
  language_names_p_9 = &MEM <const char *> [(void *)_4 + 24B];
  MEM[(const char * *)_4 + 24B] = "";
  MEM[(const char * *)_4 + 32B] = "";
  MEM[(const char * *)_4 + 40B] = 0B;
  _2 = _4 + 40;
  D.50907._M_comp = compare_cstrings;
  __comp = D.50907;
  if (_2 != language_names_p_9)
    goto <bb 3>; [53.47%]
  else
    goto <bb 12>; [46.53%]

  <bb 3> [local count: 574129759]:
  _15 = _2 - language_names_p_9;
  _16 = _15 /[ex] 8;

...
 _22 = _2 - language_names_p_9;
  if (_22 > 128)
    goto <bb 4>; [50.00%]
  else
    goto <bb 10>; [50.00%]

  <bb 4> [local count: 287064879]:
  _23 = &MEM <const char *> [(void *)_4 + 152B];
  std::__insertion_sort<const char**, __gnu_cxx::__ops::_Iter_comp_iter<bool
(*)(const char*, const char*)> > (language_names_p_9, _23, __comp);
  __comp_24 = MEM[(struct _Iter_comp_iter *)&__comp];
  goto <bb 9>; [100.00%]

That is _22 (and _15) should be 16.

I just fixed a similar issue today (but the patch did not fix this case).
I will look into fixing this one tomorrow.

Reply via email to