From d057a470d3bbf617b86f0010cae9cb1741661918 Mon Sep 17 00:00:00 2001 From: Chung-Ju Wu Date: Sun, 12 Aug 2018 13:41:22 +0000 Subject: [PATCH] [NDS32] Add new option: -msched-prolog-epilog gcc/ * config/nds32/nds32.c (nds32_expand_prologue, nds32_expand_epilogue): Support -msched-prolog-epilog option. * config/nds32/nds32.opt (msched-prolog-epilog): New option. From-SVN: r263496 --- gcc/ChangeLog | 6 ++++++ gcc/config/nds32/nds32.c | 16 ++++++++++------ gcc/config/nds32/nds32.opt | 4 ++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 59f48eedad6..02f007bcb97 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-08-12 Chung-Ju Wu + + * config/nds32/nds32.c (nds32_expand_prologue, nds32_expand_epilogue): + Support -msched-prolog-epilog option. + * config/nds32/nds32.opt (msched-prolog-epilog): New option. + 2018-08-12 Chung-Ju Wu * common/config/nds32/nds32-common.c diff --git a/gcc/config/nds32/nds32.c b/gcc/config/nds32/nds32.c index f68341e1fcd..d58be37ee9c 100644 --- a/gcc/config/nds32/nds32.c +++ b/gcc/config/nds32/nds32.c @@ -4763,9 +4763,11 @@ nds32_expand_prologue (void) if (flag_pic && df_regs_ever_live_p (PIC_OFFSET_TABLE_REGNUM)) nds32_emit_load_gp (); - /* Prevent the instruction scheduler from - moving instructions across the boundary. */ - emit_insn (gen_blockage ()); + /* If user applies -mno-sched-prolog-epilog option, + we need to prevent instructions of function body from being + scheduled with stack adjustment in prologue. */ + if (!flag_sched_prolog_epilog) + emit_insn (gen_blockage ()); } /* Function for normal multiple pop epilogue. */ @@ -4779,9 +4781,11 @@ nds32_expand_epilogue (bool sibcall_p) The result will be in cfun->machine. */ nds32_compute_stack_frame (); - /* Prevent the instruction scheduler from - moving instructions across the boundary. */ - emit_insn (gen_blockage ()); + /* If user applies -mno-sched-prolog-epilog option, + we need to prevent instructions of function body from being + scheduled with stack adjustment in epilogue. */ + if (!flag_sched_prolog_epilog) + emit_insn (gen_blockage ()); /* If the function is 'naked', we do not have to generate epilogue code fragment BUT 'ret' instruction. diff --git a/gcc/config/nds32/nds32.opt b/gcc/config/nds32/nds32.opt index d73f5af9dbc..0e50c991aba 100644 --- a/gcc/config/nds32/nds32.opt +++ b/gcc/config/nds32/nds32.opt @@ -444,6 +444,10 @@ mforce-no-ext-dsp Target Undocumented Report Mask(FORCE_NO_EXT_DSP) Force disable hardware loop, even use -mext-dsp. +msched-prolog-epilog +Target Var(flag_sched_prolog_epilog) Init(0) +Permit scheduling of a function's prologue and epilogue sequence. + mret-in-naked-func Target Var(flag_ret_in_naked_func) Init(1) Generate return instruction in naked function. -- 2.30.2