summaryrefslogtreecommitdiff
path: root/gcc/resource.c
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-12-05 19:32:16 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-12-05 19:32:16 +0000
commit923f5d9753ad924d6bb7931170b85141581e181a (patch)
tree65db31735c6861639ec33f3d20a2191f62c65382 /gcc/resource.c
parentc34db9a547c681b70749402d5bf58f4b89e04eee (diff)
downloadgcc-923f5d9753ad924d6bb7931170b85141581e181a.tar.gz
gcc/
* resource.c (init_resource_info): Only consider EXIT_IGNORE_STACK if there is in epilogue. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182023 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/resource.c')
-rw-r--r--gcc/resource.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/gcc/resource.c b/gcc/resource.c
index 1a8cb1be494..e5fa91f778e 100644
--- a/gcc/resource.c
+++ b/gcc/resource.c
@@ -1145,11 +1145,11 @@ init_resource_info (rtx epilogue_insn)
basic_block bb;
/* Indicate what resources are required to be valid at the end of the current
- function. The condition code never is and memory always is. If the
- frame pointer is needed, it is and so is the stack pointer unless
- EXIT_IGNORE_STACK is nonzero. If the frame pointer is not needed, the
- stack pointer is. Registers used to return the function value are
- needed. Registers holding global variables are needed. */
+ function. The condition code never is and memory always is.
+ The stack pointer is needed unless EXIT_IGNORE_STACK is true
+ and there is an epilogue that restores the original stack pointer
+ from the frame pointer. Registers used to return the function value
+ are needed. Registers holding global variables are needed. */
end_of_function_needs.cc = 0;
end_of_function_needs.memory = 1;
@@ -1162,11 +1162,11 @@ init_resource_info (rtx epilogue_insn)
#if !HARD_FRAME_POINTER_IS_FRAME_POINTER
SET_HARD_REG_BIT (end_of_function_needs.regs, HARD_FRAME_POINTER_REGNUM);
#endif
- if (! EXIT_IGNORE_STACK
- || current_function_sp_is_unchanging)
- SET_HARD_REG_BIT (end_of_function_needs.regs, STACK_POINTER_REGNUM);
}
- else
+ if (!(frame_pointer_needed
+ && EXIT_IGNORE_STACK
+ && epilogue_insn
+ && !current_function_sp_is_unchanging))
SET_HARD_REG_BIT (end_of_function_needs.regs, STACK_POINTER_REGNUM);
if (crtl->return_rtx != 0)