https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119839
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- What options are you using to compile? Are you using -fno-strict-aliasing? If so what is happening and why it was really just bad luck before if all of the uses of the variable were local to the partitioning; it was kept as static and if the variable had not taken the address of (which I think it is when looking into the source), then GCC aliasing system could figure out that the loads from change_stack_pointer would not change the value of change_stack_pointer. But with the different partitioning happening now, the variable needs to be not static to the one partition, so GCC has to assume that the variable has its address taken into a different partition. So you end up with the extra load/stores that way.