https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117068
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I can't think of a good way of solving this really. Having a specific pass after register allocation might work but I am not 100% sure if it will work always. The other way of solving this is having special "variables"/"registers" where you can't take their addresses but only load/store to. And then translate them to the reg+offset after register allocator. This seems more reasonible way of fixing this. Plus it hides it from the RA and other passes which might do CSE or otherwise stuff for registers+offset.