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)] "" "blr" [(set_attr "type" "jmpreg")]) diff --git a/gcc/testsuite/gcc.dg/pr84300.c b/gcc/testsuite/gcc.dg/pr84300.c new file mode 100644 index 0000000..6016799 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr84300.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target split_stack } */ +/* { dg-options "-g -O2 -fsplit-stack -fno-omit-frame-pointer" } */ + +void trap () { __builtin_trap (); } -- Alan Modra Australia Development Lab, IBM