Commit 0d40cc60 by Anatoly Sokolov Committed by Anatoly Sokolov

avr.c (expand_prologue, [...]): Don't save/restore frame pointer register and…

avr.c (expand_prologue, [...]): Don't save/restore frame pointer register and don't use 'call-prologues' ...

	* config/avr/avr.c (expand_prologue, expand_epilogue): Don't 
	save/restore frame pointer register and don't use 'call-prologues' 
	optimization in function with "OS_task" attribute.

From-SVN: r131474
parent fd6590f8
2008-01-11 Anatoly Sokolov <aesok@post.ru>
* config/avr/avr.c (expand_prologue, expand_epilogue): Don't
save/restore frame pointer register and don't use 'call-prologues'
optimization in function with "OS_task" attribute.
2008-01-11 Eric Botcazou <ebotcazou@adacore.com> 2008-01-11 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/31309 PR middle-end/31309
...@@ -607,7 +607,9 @@ expand_prologue (void) ...@@ -607,7 +607,9 @@ expand_prologue (void)
live_seq = sequent_regs_live (); live_seq = sequent_regs_live ();
minimize = (TARGET_CALL_PROLOGUES minimize = (TARGET_CALL_PROLOGUES
&& !(cfun->machine->is_interrupt || cfun->machine->is_signal) && !cfun->machine->is_interrupt
&& !cfun->machine->is_signal
&& !cfun->machine->is_OS_task
&& live_seq); && live_seq);
if (cfun->machine->is_interrupt || cfun->machine->is_signal) if (cfun->machine->is_interrupt || cfun->machine->is_signal)
...@@ -668,9 +670,13 @@ expand_prologue (void) ...@@ -668,9 +670,13 @@ expand_prologue (void)
} }
if (frame_pointer_needed) if (frame_pointer_needed)
{ {
/* Push frame pointer. */ if(!cfun->machine->is_OS_task)
insn = emit_move_insn (pushword, frame_pointer_rtx); {
RTX_FRAME_RELATED_P (insn) = 1; /* Push frame pointer. */
insn = emit_move_insn (pushword, frame_pointer_rtx);
RTX_FRAME_RELATED_P (insn) = 1;
}
if (!size) if (!size)
{ {
insn = emit_move_insn (frame_pointer_rtx, stack_pointer_rtx); insn = emit_move_insn (frame_pointer_rtx, stack_pointer_rtx);
...@@ -813,7 +819,9 @@ expand_epilogue (void) ...@@ -813,7 +819,9 @@ expand_epilogue (void)
live_seq = sequent_regs_live (); live_seq = sequent_regs_live ();
minimize = (TARGET_CALL_PROLOGUES minimize = (TARGET_CALL_PROLOGUES
&& !(cfun->machine->is_interrupt || cfun->machine->is_signal) && !cfun->machine->is_interrupt
&& !cfun->machine->is_signal
&& !cfun->machine->is_OS_task
&& live_seq); && live_seq);
if (minimize && (frame_pointer_needed || live_seq > 4)) if (minimize && (frame_pointer_needed || live_seq > 4))
...@@ -876,9 +884,11 @@ expand_epilogue (void) ...@@ -876,9 +884,11 @@ expand_epilogue (void)
emit_move_insn (stack_pointer_rtx, frame_pointer_rtx); emit_move_insn (stack_pointer_rtx, frame_pointer_rtx);
} }
} }
if(!cfun->machine->is_OS_task)
/* Restore previous frame_pointer. */ {
emit_insn (gen_pophi (frame_pointer_rtx)); /* Restore previous frame_pointer. */
emit_insn (gen_pophi (frame_pointer_rtx));
}
} }
/* Restore used registers. */ /* Restore used registers. */
HARD_REG_SET set; HARD_REG_SET set;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment