https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94042
--- Comment #20 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The return value of the first _Z11tsubst_exprP9tree_nodeS0_iS0_b.part.0 was being copied into r8 and then copied back into r3 (return value), but not r0 is used and that r0 is used for mtlr (moving back the return address).