https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112366
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- (gdb) p code $1 = BIT_XOR_EXPR OK, that's somewhat unexpected ;) Reduced testcase: int sm3_compress___trans_tmp_1, sm3_compress_x_6; extern int sm3_compress_x[]; void sm3_compress() { for (int i = 0; i < 12; ++i) { int tt2 = sm3_compress_x[4] ^ sm3_compress_x[5] ^ sm3_compress_x_6; sm3_compress___trans_tmp_1 = sm3_compress_x[5]; sm3_compress_x_6 = sm3_compress___trans_tmp_1; sm3_compress_x[5] = sm3_compress_x[4]; long rd; __asm__("" : "=r"(rd) : ""(tt2)); sm3_compress_x[4] = rd; } }