On Fri, Feb 09, 2018 at 04:12:47PM +1030, Alan Modra wrote: > This PR is one of those with a really obvious cause, and fix. There's > nothing in the unspec rtl to say the insn needs lr! > Bootstrapped and regression tested powerpc64le-linux. OK? > > PR target/84300 > gcc/ > * config/rs6000/rs6000.md (split_stack_return): Use LR. > gcc/testsuite/ > * gcc.dg/pr84300.c: New. > > diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md > index 33f0d95..287461f 100644 > --- a/gcc/config/rs6000/rs6000.md > +++ b/gcc/config/rs6000/rs6000.md > @@ -13359,7 +13359,8 @@ (define_insn "load_split_stack_limit_si" > ;; Use r0 to stop regrename twiddling with lr restore insns emitted > ;; after the call to __morestack. > (define_insn "split_stack_return" > - [(unspec_volatile [(use (reg:SI 0))] UNSPECV_SPLIT_STACK_RETURN)] > + [(unspec_volatile [(use (reg:SI 0)) (use (reg:SI LR_REGNO))] > + UNSPECV_SPLIT_STACK_RETURN)]
I'm not sure what a USE as input of an UNSPEC means -- it should work without the USEs? So please try without; otherwise okay of course. Thanks! Segher