diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2000-08-16 01:15:37 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2000-08-15 21:15:37 -0400 |
commit | 7393c6422b26ff6275354b69b74cb06c280caa16 (patch) | |
tree | fae62ef4946025fccda89bb881cd3b03f4785068 /gcc/tree.h | |
parent | 81baa09a56392e03742b4b253b9fd82b3ecbd783 (diff) | |
download | gcc-7393c6422b26ff6275354b69b74cb06c280caa16.zip gcc-7393c6422b26ff6275354b69b74cb06c280caa16.tar.gz gcc-7393c6422b26ff6275354b69b74cb06c280caa16.tar.bz2 |
calls.c (ECF_SP_DEPRESSED): New macro.
* calls.c (ECF_SP_DEPRESSED): New macro.
(calls_function_1): Treat calling sp-depressed function as alloca.
(emit_call_1): Don't adjust SP if calling sp-depressed function.
(expand_call): Set ECF_SP_DEPRESSED if TYPE_RETURNS_STACK_DEPRESSED.
If sp-depressed, ensure block saves and restores SP.
* fold-const.c (extract_muldiv): Only check TYPE_IS_SIZETYPE
for INTEGER_TYPE.
* function.c (keep_stack_depressed): New function.
(thread_prologue_and_epilogue_insns): Call it.
* print-tree.c (print_node): Use HOST_WIDE_INT_PRINT_UNSIGNED
to print DECL_OFFSET_ALIGN.
Print no-force-blk and transparent-union flags properly.
* stmt.c (expand_goto_internal): Don't restore stack if last block
and function returns with sp depressed.
(fixup_gotos): Likewise.
(save_stack_pointer): New function, from code in expand_decl.
(expand_decl): Call new function.
* tree.h (TYPE_IS_SIZETYPE): Call INTEGER_TYPE_CHECK.
(TYPE_RETURNS_STACK_DEPRESSED): New macro.
(save_stack_pointer): New declaration.
From-SVN: r35734
Diffstat (limited to 'gcc/tree.h')
-rw-r--r-- | gcc/tree.h | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -954,7 +954,13 @@ struct tree_block /* In an INTEGER_TYPE, it means the type represents a size. We use this both for validity checking and to permit optimziations that are unsafe for other types. */ -#define TYPE_IS_SIZETYPE(NODE) (TYPE_CHECK (NODE)->type.no_force_blk_flag) +#define TYPE_IS_SIZETYPE(NODE) \ + (INTEGER_TYPE_CHECK (NODE)->type.no_force_blk_flag) + +/* In a FUNCTION_TYPE, indicates that the function returns with the stack + pointer depressed. */ +#define TYPE_RETURNS_STACK_DEPRESSED(NODE) \ + (FUNCTION_TYPE_CHECK(NODE)->type.no_force_blk_flag) /* Nonzero in a type considered volatile as a whole. */ #define TYPE_VOLATILE(NODE) ((NODE)->common.volatile_flag) @@ -2811,6 +2817,7 @@ extern int drop_through_at_end_p PARAMS ((void)); extern void expand_start_target_temps PARAMS ((void)); extern void expand_end_target_temps PARAMS ((void)); extern void expand_elseif PARAMS ((tree)); +extern void save_stack_pointer PARAMS ((void)); extern void expand_decl PARAMS ((tree)); extern int expand_decl_cleanup PARAMS ((tree, tree)); extern void expand_anon_union_decl PARAMS ((tree, tree, tree)); |