https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113077
--- Comment #7 from Alex Coplan <acoplan at gcc dot gnu.org> --- After discussing with Richard S (thanks!), I think the problem is using REG_CFA_OFFSET in aarch64_save_callee_saves is too brittle: it is always required to be expressed in terms of the current CFA reg instead of e.g. just the stack pointer. Before switching to the unspec pair representation the code in dwarf2cfi could directly interpret the RTL and could keep track of things itself. We can restore that behaviour with the new (unspec) representation by using REG_FRAME_RELATED_EXPR instead (which simply gives dwarf2cfi an alternative pattern to look at). Testing a patch.