gcc/: 2014-09-25 Anton Blanchard <an...@samba.org>
PR target/63354 * config/rs6000/rs6000.c (rs6000_keep_leaf_when_profiled): New function. * config/rs6000/linux64.h (TARGET_KEEP_LEAF_WHEN_PROFILED): Define. --- gcc/config/rs6000/linux64.h | 3 +++ gcc/config/rs6000/rs6000.c | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index 39a2b17..415345b 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -59,6 +59,9 @@ extern int dot_symbols; #define TARGET_PROFILE_KERNEL profile_kernel +#undef TARGET_KEEP_LEAF_WHEN_PROFILED +#define TARGET_KEEP_LEAF_WHEN_PROFILED rs6000_keep_leaf_when_profiled + #define TARGET_USES_LINUX64_OPT 1 #ifdef HAVE_LD_LARGE_TOC #undef TARGET_CMODEL diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 16847aa..4e33e7b 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -23997,6 +23997,15 @@ rs6000_output_function_prologue (FILE *file, rs6000_pic_labelno++; } +/* -mprofile-kernel code calls mcount before the function prolog, + so a profiled leaf function should stay a leaf function. */ + +static bool +rs6000_keep_leaf_when_profiled () +{ + return TARGET_PROFILE_KERNEL; +} + /* Non-zero if vmx regs are restored before the frame pop, zero if we restore after the pop when possible. */ #define ALWAYS_RESTORE_ALTIVEC_BEFORE_POP 0 -- 1.9.1