http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46551
Dan Gohman <dgohman at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dgohman at gmail dot com --- Comment #2 from Dan Gohman <dgohman at gmail dot com> 2011-06-21 14:26:23 UTC --- Something has noticed that in the else block, a is equal to the value loaded from vm->cell[vm->index[0] - 2], so it is replacing the use of a and CSE'ing it with the loaded value. That's what causes the loaded value to have multiple uses, which presumably is why GCC subsequently declines to fold the addresssing into the compare.