From: Richard Kenner Date: Thu, 1 Jun 2000 01:12:19 +0000 (-0400) Subject: Makefile.in (c-decl.o): Depend on rtl.h and expr.h. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=289c5b4547dc83ab77f73917835b750fc87dae43;p=gcc.git Makefile.in (c-decl.o): Depend on rtl.h and expr.h. * Makefile.in (c-decl.o): Depend on rtl.h and expr.h. * alias.c (struct alias_entry): alias_set is HOST_WIDE_INT. (REG_BASE_VALUE): Remove unneeded cast to unsigned. (get_alias_set_entry): ALIAS_SET arg is HOST_WIDE_INT. (find_base_decl): New function, from c_find_base_decl in c-common.c. (new_alias_set): Moved from tree.c; return is HOST_WIDE_INT. (get_alias_set): Likewise. Major rework to do more things and allow language-specific code to just handle special-cases. (record_alias_subset): Args are HOST_WIDE_INT. (record_component_alias): Local vars are HOST_WIDE_INT. Don't handle COMPLEX_EXPR. (get_varargs_alias_set): Moved from builtins.c. (get_frame_alias_set): New function. * builtins.c (expand_builtin_return_address): Use frame alias set. (expand_builtin_setjmp, expand_builtin_longjmp): Use alias set for setjmp buffer. (get_memory_rtx): Rework to use set_mem_attributes. (get_varargs_alias_set): Deleted from here. * c-common.c (c_apply_type_quals_to_decl): Alias sets now HOST_WIDE_INT. (c_find_base_decl): Deleted from here. (c_get_alias_set): Remove many cases and rework to just handle C-specific cases. * c-common.h (c_get_alias_set): Returns HOST_WIDE_INT. * c-decl.c (rtl.h, expr.h): Now included. (init_decl_processing): Call record_component_aliases on array types. (grokdeclarator): Likewise. Set TREE_ADDRESSABLE for all fields that are not bitfields. * c-typeck.c (common_type): Call record_component_aliases for array. * caller-save.c (setup_save_areas): Rework register loop for unsigned. Set all save areas to the frame alias set. * calls.c (initialie_argument_information): Call set_mem_attributes. (compute_argument_addresses, expand_call): Likewise. * explow.c (set_mem_attributes): New function. (stabilize): Use MEM_COPY_ATTRIBUTES and force_reg. * expr.c (struct move_by_pieces): Remove {to,from}_{struct,readonly}. LEN and OFFSET now HOST_WIDE_INT. (clear_by_pieces): Similar changes. (move_by_pieces): LEN now HOST_WIDE_INT; don't set deleted fields. (move_by_pieces_ninsns): Now returns unsigned HOST_WIDE_INT. (move_by_pieces_1): Don't use deleted fields, use MEM_COPY_ATTRIBUTES. (clear_by_pieces_1): Likewise. (emit_push_insn): Call set_mem_attributes. (expand_expr, case INDIRECT_REF): Likewise. (expand_expr, case VAR_DECL): Call change_address. * expr.h (ADD_PARM_SIZE, SUB_PARM_SIZE): Use host_integerp and tree_low_cst. (get_varargs_alias_set, get_frame_alias_set): New decls. (record_base_value, record_alias_subset, lang_get_alias_set): Likewise. (new_alias_set, set_mem_attributes): Likewse. * function.c (struct temp_slot): ALIAS_SET is HOST_WIDE_INT. (assign_stack_temp_for_type): Likewise. Can split slot even if alias set since can copy. Set MEM_ALIAS_SET and MEM_SET_IN_STRUCT_P. (assign_temp): Use host_integerp and tree_low_cst. (put_var_into_stack): Properly handle SAVE_EXPR. (put_addressof_into_stack): Likewise. (assign_parms): Call set_mem_attributes. Delete #if 0 code. (fix_lexical_address): Put reference to chain into frame alias set. (expand_function_start): Call set_mem_attributes. * integrate.c (expand_inline_function): Likewise. * recog.c (adj_offsettable_operand): Use MEM_COPY_ATTRIBUTES. * regmove.c (try_apply_stack_adjustment): Likewise. * reload.c (push_reload, make_memloc): Likewise. * reload1.c (alter_reg): Make alias sets for spilled pseudos. * rtl.def (MEM): Update comment. * rtl.h (MEM_ALIAS_SET): Now uses XCWINT. (move_by_pieces): Change length to HOST_WIDE_INT. (record_base_value, record_alias_subset): Delete from here. * stmt.c (expand_decl): Call set_mem_attributes. * stor-layout.c (finish_record_layout): Call record_component_aliases.i * toplev.c (compile_file): Call init_alias_once earlier. * tree.c (lang_get_alias_set, get_alias_set, new_alias_set): Deleted from here: now in alias.c. * tree.h (struct tree_type): alias_set is HOST_WIDE_INT. (struct tree_decl): Likewise. (get_alias_set, new_alias_set, lang_get_alias_set): Deleted from here. * varasm.c (make_function_rtl, make_decl_rtl): Call set_mem_attributes. (output_constant_def, force_const_mem): Likewise. * cp/Makefile.in (decl.o): Include ../expr.h. * cp/decl.c (expr.h): Include. (init_decl_processing): Call record_component_aliases for arrays. (grokdeclarator): Likewise. Set TREE_ADDRESSABLE for fields that aren't bitfields. * cp/tree.c (build_cplus_array_type_1): Call record_component_aliases. From-SVN: r34325 --- diff --git a/gcc/integrate.c b/gcc/integrate.c index 53295744ff4..ee473f6e3f7 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -1186,7 +1186,7 @@ expand_inline_function (fndecl, parms, target, ignore, type, target = gen_rtx_MEM (TYPE_MODE (type), memory_address (TYPE_MODE (type), structure_value_addr)); - MEM_SET_IN_STRUCT_P (target, 1); + set_mem_attributes (target, type, 1); } /* Make sure we free the things we explicitly allocated with xmalloc. */ diff --git a/gcc/varasm.c b/gcc/varasm.c index 1731839480c..04937370c90 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -559,10 +559,12 @@ make_function_rtl (decl) DECL_RTL (decl) = gen_rtx_MEM (DECL_MODE (decl), gen_rtx_SYMBOL_REF (Pmode, name)); + set_mem_attributes (DECL_RTL (decl), decl, 1); - /* Optionally set flags or add text to the name to record information - such as that it is a function name. If the name is changed, the macro - ASM_OUTPUT_LABELREF will have to know how to strip this information. */ + /* Optionally set flags or add text to the name to record + information such as that it is a function name. If the name + is changed, the macro ASM_OUTPUT_LABELREF will have to know + how to strip this information. */ #ifdef ENCODE_SECTION_INFO ENCODE_SECTION_INFO (decl); #endif @@ -798,30 +800,19 @@ make_decl_rtl (decl, asmspec, top_level) name = new_name; } + /* If this variable is to be treated as volatile, show its + tree node has side effects. */ + if ((flag_volatile_global && TREE_CODE (decl) == VAR_DECL + && TREE_PUBLIC (decl)) + || ((flag_volatile_static && TREE_CODE (decl) == VAR_DECL + && (TREE_PUBLIC (decl) || TREE_STATIC (decl))))) + TREE_SIDE_EFFECTS (decl) = 1; + DECL_ASSEMBLER_NAME (decl) = get_identifier (name[0] == '*' ? name + 1 : name); DECL_RTL (decl) = gen_rtx_MEM (DECL_MODE (decl), gen_rtx_SYMBOL_REF (Pmode, name)); - MEM_ALIAS_SET (DECL_RTL (decl)) = get_alias_set (decl); - - /* If this variable is to be treated as volatile, show its - tree node has side effects. If it has side effects, either - because of this test or from TREE_THIS_VOLATILE also - being set, show the MEM is volatile. */ - if (flag_volatile_global && TREE_CODE (decl) == VAR_DECL - && TREE_PUBLIC (decl)) - TREE_SIDE_EFFECTS (decl) = 1; - else if (flag_volatile_static && TREE_CODE (decl) == VAR_DECL - && (TREE_PUBLIC (decl) || TREE_STATIC (decl))) - TREE_SIDE_EFFECTS (decl) = 1; - - if (TREE_SIDE_EFFECTS (decl)) - MEM_VOLATILE_P (DECL_RTL (decl)) = 1; - - if (TREE_READONLY (decl)) - RTX_UNCHANGING_P (DECL_RTL (decl)) = 1; - MEM_SET_IN_STRUCT_P (DECL_RTL (decl), - AGGREGATE_TYPE_P (TREE_TYPE (decl))); + set_mem_attributes (DECL_RTL (decl), decl, 1); /* Optionally set flags or add text to the name to record information such as that it is a function name. @@ -3109,10 +3100,7 @@ output_constant_def (exp) = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)), gen_rtx_SYMBOL_REF (Pmode, desc->label)); - RTX_UNCHANGING_P (desc->rtl) = 1; - if (AGGREGATE_TYPE_P (TREE_TYPE (exp))) - MEM_SET_IN_STRUCT_P (desc->rtl, 1); - + set_mem_attributes (desc->rtl, exp, 1); pop_obstacks (); found = 0; @@ -3668,8 +3656,9 @@ force_const_mem (mode, x) /* We have a symbol name; construct the SYMBOL_REF and the MEM. */ def = gen_rtx_MEM (mode, gen_rtx_SYMBOL_REF (Pmode, found)); - + set_mem_attributes (def, type_for_mode (mode, 0), 1); RTX_UNCHANGING_P (def) = 1; + /* Mark the symbol_ref as belonging to this constants pool. */ CONSTANT_POOL_ADDRESS_P (XEXP (def, 0)) = 1; current_function_uses_const_pool = 1;