Commit 8819eb78 by Anatoly Sokolov Committed by Anatoly Sokolov

* config/avr/avr.c (expand_epilogue): Don't set RTX_FRAME_RELATED_P.

From-SVN: r129023
parent 815cd406
2007-10-04 Anatoly Sokolov <aesok@post.ru>
* config/avr/avr.c (expand_epilogue): Don't set RTX_FRAME_RELATED_P.
2007-10-04 Richard Guenther <rguenther@suse.de> 2007-10-04 Richard Guenther <rguenther@suse.de>
PR middle-end/33641 PR middle-end/33641
...@@ -787,13 +787,11 @@ expand_epilogue (void) ...@@ -787,13 +787,11 @@ expand_epilogue (void)
int live_seq; int live_seq;
int minimize; int minimize;
HOST_WIDE_INT size = get_frame_size(); HOST_WIDE_INT size = get_frame_size();
rtx insn;
/* epilogue: naked */ /* epilogue: naked */
if (cfun->machine->is_naked) if (cfun->machine->is_naked)
{ {
insn = emit_jump_insn (gen_return ()); emit_jump_insn (gen_return ());
RTX_FRAME_RELATED_P (insn) = 1;
return; return;
} }
...@@ -806,29 +804,23 @@ expand_epilogue (void) ...@@ -806,29 +804,23 @@ expand_epilogue (void)
{ {
/* Return value from main() is already in the correct registers /* Return value from main() is already in the correct registers
(r25:r24) as the exit() argument. */ (r25:r24) as the exit() argument. */
insn = emit_jump_insn (gen_return ()); emit_jump_insn (gen_return ());
RTX_FRAME_RELATED_P (insn) = 1;
} }
else if (minimize && (frame_pointer_needed || live_seq > 4)) else if (minimize && (frame_pointer_needed || live_seq > 4))
{ {
if (frame_pointer_needed) if (frame_pointer_needed)
{ {
/* Get rid of frame. */ /* Get rid of frame. */
insn = emit_move_insn(frame_pointer_rtx,
emit_move_insn(frame_pointer_rtx, gen_rtx_PLUS (HImode, frame_pointer_rtx,
gen_rtx_PLUS (HImode, frame_pointer_rtx, gen_int_mode (size, HImode)));
gen_int_mode (size, HImode)));
RTX_FRAME_RELATED_P (insn) = 1;
} }
else else
{ {
insn = emit_move_insn (frame_pointer_rtx, stack_pointer_rtx); emit_move_insn (frame_pointer_rtx, stack_pointer_rtx);
RTX_FRAME_RELATED_P (insn) = 1;
} }
insn = emit_insn (gen_epilogue_restores (gen_int_mode (live_seq, HImode)));
emit_insn (gen_epilogue_restores (gen_int_mode (live_seq, HImode)));
RTX_FRAME_RELATED_P (insn) = 1;
} }
else else
{ {
...@@ -842,7 +834,7 @@ expand_epilogue (void) ...@@ -842,7 +834,7 @@ expand_epilogue (void)
fp_plus_length = fp_plus_length =
get_attr_length (gen_move_insn (frame_pointer_rtx, get_attr_length (gen_move_insn (frame_pointer_rtx,
gen_rtx_PLUS (HImode, frame_pointer_rtx, gen_rtx_PLUS (HImode, frame_pointer_rtx,
gen_int_mode (size, gen_int_mode (size,
HImode)))); HImode))));
/* Copy to stack pointer. */ /* Copy to stack pointer. */
fp_plus_length += fp_plus_length +=
...@@ -855,32 +847,28 @@ expand_epilogue (void) ...@@ -855,32 +847,28 @@ expand_epilogue (void)
sp_plus_length = sp_plus_length =
get_attr_length (gen_move_insn (stack_pointer_rtx, get_attr_length (gen_move_insn (stack_pointer_rtx,
gen_rtx_PLUS (HImode, stack_pointer_rtx, gen_rtx_PLUS (HImode, stack_pointer_rtx,
gen_int_mode (size, gen_int_mode (size,
HImode)))); HImode))));
} }
/* Use shortest method. */ /* Use shortest method. */
if (size <= 5 && (sp_plus_length < fp_plus_length)) if (size <= 5 && (sp_plus_length < fp_plus_length))
{ {
insn = emit_move_insn (stack_pointer_rtx, emit_move_insn (stack_pointer_rtx,
gen_rtx_PLUS (HImode, stack_pointer_rtx, gen_rtx_PLUS (HImode, stack_pointer_rtx,
gen_int_mode (size, HImode))); gen_int_mode (size, HImode)));
RTX_FRAME_RELATED_P (insn) = 1;
} }
else else
{ {
insn = emit_move_insn (frame_pointer_rtx, emit_move_insn (frame_pointer_rtx,
gen_rtx_PLUS (HImode, frame_pointer_rtx, gen_rtx_PLUS (HImode, frame_pointer_rtx,
gen_int_mode (size, HImode))); gen_int_mode (size, HImode)));
RTX_FRAME_RELATED_P (insn) = 1;
/* Copy to stack pointer. */ /* Copy to stack pointer. */
insn = emit_move_insn (stack_pointer_rtx, frame_pointer_rtx); emit_move_insn (stack_pointer_rtx, frame_pointer_rtx);
RTX_FRAME_RELATED_P (insn) = 1;
} }
} }
/* Restore previous frame_pointer. */ /* Restore previous frame_pointer. */
insn = emit_insn (gen_pophi (frame_pointer_rtx)); emit_insn (gen_pophi (frame_pointer_rtx));
RTX_FRAME_RELATED_P (insn) = 1;
} }
/* Restore used registers. */ /* Restore used registers. */
HARD_REG_SET set; HARD_REG_SET set;
...@@ -888,33 +876,25 @@ expand_epilogue (void) ...@@ -888,33 +876,25 @@ expand_epilogue (void)
for (reg = 31; reg >= 0; --reg) for (reg = 31; reg >= 0; --reg)
{ {
if (TEST_HARD_REG_BIT (set, reg)) if (TEST_HARD_REG_BIT (set, reg))
{ emit_insn (gen_popqi (gen_rtx_REG (QImode, reg)));
insn = emit_insn (gen_popqi (gen_rtx_REG (QImode, reg)));
RTX_FRAME_RELATED_P (insn) = 1;
}
} }
if (cfun->machine->is_interrupt || cfun->machine->is_signal) if (cfun->machine->is_interrupt || cfun->machine->is_signal)
{ {
/* Restore SREG using tmp reg as scratch. */ /* Restore SREG using tmp reg as scratch. */
insn = emit_insn (gen_popqi (tmp_reg_rtx)); emit_insn (gen_popqi (tmp_reg_rtx));
RTX_FRAME_RELATED_P (insn) = 1;
insn = emit_move_insn (gen_rtx_MEM(QImode, GEN_INT(SREG_ADDR)), emit_move_insn (gen_rtx_MEM(QImode, GEN_INT(SREG_ADDR)),
tmp_reg_rtx); tmp_reg_rtx);
RTX_FRAME_RELATED_P (insn) = 1;
/* Restore tmp REG. */ /* Restore tmp REG. */
insn = emit_insn (gen_popqi (tmp_reg_rtx)); emit_insn (gen_popqi (tmp_reg_rtx));
RTX_FRAME_RELATED_P (insn) = 1;
/* Restore zero REG. */ /* Restore zero REG. */
insn = emit_insn (gen_popqi (zero_reg_rtx)); emit_insn (gen_popqi (zero_reg_rtx));
RTX_FRAME_RELATED_P (insn) = 1;
} }
insn = emit_jump_insn (gen_return ()); emit_jump_insn (gen_return ());
RTX_FRAME_RELATED_P (insn) = 1;
} }
} }
......
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