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.