https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110067
--- Comment #4 from Hongtao.liu <crazylht at gmail dot com> --- For br64 = br; br64 = ((br64 << 16) & 0x000000ff00000000ull) | (br64 & 0x0000ff00ull); n->n is 0x3000000200. n->range is 32. n->type is uint64. Currently the code assumes n->range is same as TYPE PRECISION(n->type), and tries to rotate the mask with below code and get new mask as 0x20300 which is incorrect. tmp_n = tmp_n >> count | tmp_n << (range - count)