From: Mark Mitchell Date: Tue, 29 Aug 2000 16:23:20 +0000 (+0000) Subject: calls.c (expand_call): Don't create a VAR_DECL just to throw it away. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4361b41d838b11e957dfb751d55298bd1d1b1a55;p=gcc.git calls.c (expand_call): Don't create a VAR_DECL just to throw it away. * calls.c (expand_call): Don't create a VAR_DECL just to throw it away. * expr.c (expand_expr, case TARGET_EXPR): Don't call mark_addressable. * tree.h (get_file_function_name): Remove two duplicate declarations. * typeck.c (mark_addressable): Remove code that pokes around in RTL. From-SVN: r36038 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a12a9432405..b054ac6f33b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2000-08-29 Mark Mitchell + + * calls.c (expand_call): Don't create a VAR_DECL just to throw it + away. + * expr.c (expand_expr, case TARGET_EXPR): Don't call + mark_addressable. + * tree.h (get_file_function_name): Remove two duplicate + declarations. + 2000-08-28 Kazu Hirata * tree.c: Fix formatting. diff --git a/gcc/calls.c b/gcc/calls.c index 6784bca9fe8..605c5ae9393 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -2260,8 +2260,7 @@ expand_call (exp, target, ignore) structure_value_addr = XEXP (target, 0); else { - /* Assign a temporary to hold the value. */ - tree d; + rtx d; /* For variable-sized objects, we must be called with a target specified. If we were to allocate space on the stack here, @@ -2270,14 +2269,9 @@ expand_call (exp, target, ignore) if (struct_value_size < 0) abort (); - /* This DECL is just something to feed to mark_addressable; - it doesn't get pushed. */ - d = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE (exp)); - DECL_RTL (d) = assign_temp (TREE_TYPE (exp), 1, 0, 1); - mark_addressable (d); - mark_temp_addr_taken (DECL_RTL (d)); - structure_value_addr = XEXP (DECL_RTL (d), 0); - TREE_USED (d) = 1; + d = assign_temp (TREE_TYPE (exp), 1, 1, 1); + mark_temp_addr_taken (d); + structure_value_addr = XEXP (d, 0); target = 0; } } diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c9224cfdd76..325872dc80f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2000-08-29 Mark Mitchell + + * typeck.c (mark_addressable): Remove code that pokes around in + RTL. + 2000-08-28 Jason Merrill * lex.c (file_name_nondirectory): Move to toplev.c. diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 964993d9392..015df0e78ad 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4925,19 +4925,6 @@ mark_addressable (exp) return 1; } case VAR_DECL: - if (TREE_STATIC (x) && TREE_READONLY (x) - && DECL_RTL (x) != 0 - && ! DECL_IN_MEMORY_P (x)) - { - TREE_ASM_WRITTEN (x) = 0; - DECL_RTL (x) = 0; - rest_of_decl_compilation (x, 0, - !DECL_FUNCTION_SCOPE_P (x), - 0); - TREE_ADDRESSABLE (x) = 1; - - return 1; - } /* Caller should not be trying to mark initialized constant fields addressable. */ my_friendly_assert (DECL_LANG_SPECIFIC (x) == 0 @@ -4952,8 +4939,6 @@ mark_addressable (exp) cp_warning ("address requested for `%D', which is declared `register'", x); TREE_ADDRESSABLE (x) = 1; - if (cfun && expanding_p) - put_var_into_stack (x); return 1; case FUNCTION_DECL: diff --git a/gcc/expr.c b/gcc/expr.c index a5c306fd3a5..04604e01ea8 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -8104,10 +8104,7 @@ expand_expr (exp, target, tmode, modifier) preserve_temp_slots (target); DECL_RTL (slot) = target; if (TREE_ADDRESSABLE (slot)) - { - TREE_ADDRESSABLE (slot) = 0; - mark_addressable (slot); - } + put_var_into_stack (slot); /* Since SLOT is not known to the called function to belong to its stack frame, we must build an explicit @@ -8145,10 +8142,7 @@ expand_expr (exp, target, tmode, modifier) /* If we must have an addressable slot, then make sure that the RTL that we just stored in slot is OK. */ if (TREE_ADDRESSABLE (slot)) - { - TREE_ADDRESSABLE (slot) = 0; - mark_addressable (slot); - } + put_var_into_stack (slot); } } diff --git a/gcc/tree.h b/gcc/tree.h index 80bb787b7c9..93a54161572 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -2436,7 +2436,6 @@ extern tree builtin_function PARAMS ((const char *, tree, int, /* In tree.c */ extern char *perm_calloc PARAMS ((int, long)); extern void clean_symbol_name PARAMS ((char *)); -extern tree get_file_function_name PARAMS ((int)); extern tree get_file_function_name_long PARAMS ((const char *)); extern tree get_set_constructor_bits PARAMS ((tree, char *, int)); extern tree get_set_constructor_bytes PARAMS ((tree, @@ -2649,7 +2648,6 @@ extern void preserve_momentary PARAMS ((void)); extern void saveable_allocation PARAMS ((void)); extern void temporary_allocation PARAMS ((void)); extern void resume_temporary_allocation PARAMS ((void)); -extern tree get_file_function_name PARAMS ((int)); extern void set_identifier_size PARAMS ((int)); extern int int_fits_type_p PARAMS ((tree, tree)); extern int tree_log2 PARAMS ((tree));