[NDS32] Add new option: -msched-prolog-epilog
authorChung-Ju Wu <jasonwucj@gmail.com>
Sun, 12 Aug 2018 13:41:22 +0000 (13:41 +0000)
committerChung-Ju Wu <jasonwucj@gcc.gnu.org>
Sun, 12 Aug 2018 13:41:22 +0000 (13:41 +0000)
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
gcc/config/nds32/nds32.c
gcc/config/nds32/nds32.opt

index 59f48eedad62a9990ad2eff825fe97490214fe6e..02f007bcb97e8c16305ecec6002084d015787d36 100644 (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
index f68341e1fcda02ad9c5bf945dced6f734f41b442..d58be37ee9cf14a14469d75a9d7ee43bd75f7ac2 100644 (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.
index d73f5af9dbc82437cf8460adbe53c37bdbaa8b10..0e50c991aba13b6c20c2ddde529ebe219aff85dd 100644 (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.