summaryrefslogtreecommitdiffstats
path: root/gcc/tree.h
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-16 01:15:37 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-16 01:15:37 +0000
commitd490e2f2f1bcc2c534aa63496a502c829beaad03 (patch)
treefae62ef4946025fccda89bb881cd3b03f4785068 /gcc/tree.h
parent333b5b5444981a5f9ff808afccdfbd82e5a02c04 (diff)
downloadppe42-gcc-d490e2f2f1bcc2c534aa63496a502c829beaad03.tar.gz
ppe42-gcc-d490e2f2f1bcc2c534aa63496a502c829beaad03.zip
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35734 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree.h')
-rw-r--r--gcc/tree.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/tree.h b/gcc/tree.h
index e428a8a3864..001e776cf2d 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -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));
OpenPOWER on IntegriCloud