diff options
author | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-18 22:06:36 +0000 |
---|---|---|
committer | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-18 22:06:36 +0000 |
commit | 05ae776c039af0b27b80dfc443def90291345713 (patch) | |
tree | fbc2c77e2ddf6b70e1a93ba6afc611f8b36b9730 /gcc/dojump.c | |
parent | d0518928abfb487dea969fb92cf0ffae9242ac36 (diff) | |
download | gcc-05ae776c039af0b27b80dfc443def90291345713.tar.gz |
PR middle-end/17813
* dojump.c (discard_pending_stack_adjust): New function.
(clear_pending_stack_adjust): Call it.
* expr.h (discard_pending_stack_adjust): Declare it.
* explow.c (emit_stack_save): Emit pending stack adjustments
before saving the stack pointer.
(emit_stack_restore): Discard pending stack adjustments before
restoring the stack pointer.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89251 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dojump.c')
-rw-r--r-- | gcc/dojump.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/dojump.c b/gcc/dojump.c index 50fc093f72f..e506684f41d 100644 --- a/gcc/dojump.c +++ b/gcc/dojump.c @@ -50,6 +50,15 @@ init_pending_stack_adjust (void) pending_stack_adjust = 0; } +/* Discard any pending stack adjustment. This avoid relying on the + RTL optimizers to remove useless adjustments when we know the + stack pointer value is dead. */ +void discard_pending_stack_adjust (void) +{ + stack_pointer_delta -= pending_stack_adjust; + pending_stack_adjust = 0; +} + /* When exiting from function, if safe, clear out any pending stack adjust so the adjustment won't get done. @@ -64,10 +73,7 @@ clear_pending_stack_adjust (void) && EXIT_IGNORE_STACK && ! (DECL_INLINE (current_function_decl) && ! flag_no_inline) && ! flag_inline_functions) - { - stack_pointer_delta -= pending_stack_adjust, - pending_stack_adjust = 0; - } + discard_pending_stack_adjust (); } /* Pop any previously-pushed arguments that have not been popped yet. */ |