https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72827
--- Comment #21 from Bill Schmidt <wschmidt at gcc dot gnu.org> --- I think for the purposes of this bug we should be able to work around it by forcing the offset register to be modified instead of the base register. Going to try testing this: Index: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c (revision 239871) +++ gcc/config/rs6000/rs6000.c (working copy) @@ -24506,7 +24506,9 @@ rs6000_split_multireg_move (rtx dst, rtx src) && REG_P (basereg) && REG_P (offsetreg) && REGNO (basereg) != REGNO (offsetreg)); - if (REGNO (basereg) == 0) + if (REGNO (basereg) == 0 + || REGNO (basereg) == STACK_POINTER_REGNUM + || REGNO (basereg) == HARD_FRAME_POINTER_REGNUM) { rtx tmp = offsetreg; offsetreg = basereg;