Commit 051c57da by Richard Kenner

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: r34308
parent 26a41784
...@@ -30,9 +30,11 @@ Boston, MA 02111-1307, USA. */ ...@@ -30,9 +30,11 @@ Boston, MA 02111-1307, USA. */
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
#include "tree.h" #include "tree.h"
#include "rtl.h"
#include "flags.h" #include "flags.h"
#include "function.h" #include "function.h"
#include "output.h" #include "output.h"
#include "expr.h"
#include "c-tree.h" #include "c-tree.h"
#include "c-lex.h" #include "c-lex.h"
#include "toplev.h" #include "toplev.h"
...@@ -3012,13 +3014,19 @@ init_decl_processing () ...@@ -3012,13 +3014,19 @@ init_decl_processing ()
array type. */ array type. */
char_array_type_node char_array_type_node
= build_array_type (char_type_node, array_domain_type); = build_array_type (char_type_node, array_domain_type);
/* Likewise for arrays of ints. */ /* Likewise for arrays of ints. */
int_array_type_node int_array_type_node
= build_array_type (integer_type_node, array_domain_type); = build_array_type (integer_type_node, array_domain_type);
/* This is for wide string constants. */ /* This is for wide string constants. */
wchar_array_type_node wchar_array_type_node
= build_array_type (wchar_type_node, array_domain_type); = build_array_type (wchar_type_node, array_domain_type);
record_component_aliases (char_array_type_node);
record_component_aliases (int_array_type_node);
record_component_aliases (wchar_array_type_node);
void_list_node = tree_cons (NULL_TREE, void_type_node, NULL_TREE); void_list_node = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
default_function_type default_function_type
...@@ -4399,6 +4407,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized) ...@@ -4399,6 +4407,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
type = build_array_type (type, itype); type = build_array_type (type, itype);
if (type_quals) if (type_quals)
type = c_build_qualified_type (type, type_quals); type = c_build_qualified_type (type, type_quals);
record_component_aliases (type);
#if 0 /* don't clear these; leave them set so that the array type #if 0 /* don't clear these; leave them set so that the array type
or the variable is itself const or volatile. */ or the variable is itself const or volatile. */
...@@ -4571,6 +4580,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized) ...@@ -4571,6 +4580,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
&& TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0) && TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0)
{ {
type = build_array_type (TREE_TYPE (type), 0); type = build_array_type (TREE_TYPE (type), 0);
record_component_aliases (type);
if (size_varies) if (size_varies)
C_TYPE_VARIABLE_SIZE (type) = 1; C_TYPE_VARIABLE_SIZE (type) = 1;
} }
...@@ -4683,11 +4693,13 @@ grokdeclarator (declarator, declspecs, decl_context, initialized) ...@@ -4683,11 +4693,13 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
type = build_array_type (c_build_qualified_type (TREE_TYPE (type), type = build_array_type (c_build_qualified_type (TREE_TYPE (type),
type_quals), type_quals),
TYPE_DOMAIN (type)); TYPE_DOMAIN (type));
record_component_aliases (type);
#if 0 /* Leave the field const or volatile as well. */ #if 0 /* Leave the field const or volatile as well. */
type_quals = TYPE_UNQUALIFIED; type_quals = TYPE_UNQUALIFIED;
#endif #endif
} }
decl = build_decl (FIELD_DECL, declarator, type); decl = build_decl (FIELD_DECL, declarator, type);
TREE_ADDRESSABLE (decl) = ! bitfield;
if (size_varies) if (size_varies)
C_DECL_VARIABLE_SIZE (decl) = 1; C_DECL_VARIABLE_SIZE (decl) = 1;
} }
...@@ -4763,6 +4775,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized) ...@@ -4763,6 +4775,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
type = build_array_type (c_build_qualified_type (TREE_TYPE (type), type = build_array_type (c_build_qualified_type (TREE_TYPE (type),
type_quals), type_quals),
TYPE_DOMAIN (type)); TYPE_DOMAIN (type));
record_component_aliases (type);
#if 0 /* Leave the variable const or volatile as well. */ #if 0 /* Leave the variable const or volatile as well. */
type_quals = TYPE_UNQUALIFIED; type_quals = TYPE_UNQUALIFIED;
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment