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

--- Comment #2 from Marc Glisse <glisse at gcc dot gnu.org> ---
bswap was happy dealing with

  _2 = MEM[(const unsigned char *)&word];
  _3 = (uint64_t) _2;
  _4 = MEM[(const unsigned char *)&word + 1B];
  _5 = (uint64_t) _4;
  _6 = _5 << 8;
  _8 = MEM[(const unsigned char *)&word + 2B];
  _9 = (uint64_t) _8;
  _10 = _9 << 16;
  _32 = _6 | _10;
  _11 = _3 | _32;

etc, but has trouble with

  _21 = word_31(D) & 255;
  _1 = BIT_FIELD_REF <word_31(D), 8, 8>;
  _23 = (uint64_t) _1;
  _2 = _23 << 8;
  _4 = BIT_FIELD_REF <word_31(D), 8, 16>;
  _24 = (uint64_t) _4;
  _5 = _24 << 16;
  _32 = _2 | _5;
  _6 = _21 | _32;

Reply via email to