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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Indeed bswap passes job.  I think the issue is the pass sees

  <bb 2> [local count: 1073741824]:
  _1 = *p_9(D);
  _2 = (signed short) _1;
  _3 = MEM[(unsigned char *)p_9(D) + 1B];
  _4 = (int) _3;
  _5 = _4 << 8;
  _6 = (signed short) _5;
  _7 = _2 | _6;
  _10 = (short unsigned int) _7;
  return _10;

and it analyzes _2 | _6 not being able to deal with the integer promotions
occuring somehow.  _6 already stops being analyzed at the (int) _3
promotion for some reason for example (possibly depth search limit...).
Raising the limit by 1 fixes the get_unaligned_16 testcase, raising by
another 1 the get_unaligned_32 one.

Reply via email to