[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
This commit is contained in:
Chung-Ju Wu 2018-08-12 13:41:22 +00:00 committed by Chung-Ju Wu
parent 68acadb1ff
commit d057a470d3
3 changed files with 20 additions and 6 deletions

View file

@ -1,3 +1,9 @@
2018-08-12 Chung-Ju Wu <jasonwucj@gmail.com>
* 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 <jasonwucj@gmail.com>
* common/config/nds32/nds32-common.c

View file

@ -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.

View file

@ -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.