alias.c (can_address_p): Compnonents are not addressable if the containing type has alias set 0.

* alias.c (can_address_p): Compnonents are not addressable if
	the containing type has alias set 0.
	(get_alias_set): Rework to use STRIP_NOPS.
	Only call front-end routine on object, type, or object with
	NOPs stripped, not inner values.
	Use language hook to call front-end routine.
	* builtins.c (get_memory_rtx): Always call set_mem_attributes.
	(expand_builtin_apply): Call set_mem_align on MEMs we make.
	Don't pass alignment to emit_block_move.
	(expand_builtin_memcpy, expand_builtin_va_copy): Likewise.
	(expand_builtin_memset): Likewise, but for clear_storage.
	* c-common.c (lang_get_alias_set): Renamed to c_common_alias_set
	and remove C++ specific parts.
	* c-common.h (c_common_get_alias_set): Add declaration.
	* c-lang.c (LANG_HOOKS_GET_ALIAS_SET): New macro.
	* calls.c (emit_call_1): Fix typo in sibcall_pop case.
	(save_fixed_argument_area): Call set_mem_align.
	Remove alignment in call to emit_block_move.
	(emit_library_call_value_1, store_one_arg): Likewise.
	(target_for_arg): Remove; disabled long ago.
	* emit-rtl.c (set_mem_attributes): Rework to only call get_mem_attrs
	once and similar cleanups.
	(offset_address): Use proper introductory comment.
	* expr.c (emit_block_move): Use alignment from that of MEM args, not
	from explicit operand; all callers changed.
	(clear_storage): Likewise.
	(expand_assignment): Don't call set_mem_alias_set on to_rtx.
	(store_field): Remove kludge on alias set used for to_rtx.
	(highest_pow2_factor, case *_DIV_EXPR): Never return 0.
	(expand_expr_unaligned): Call set_mem_attributes instead of
	set_mem_alias_set.
	* expr.h (emit_block_move, clear_storage): Remove ALIGN argument.
	* function.c (assign_stack_temp_for_type): Set MEM alignment.
	(expand_function_end): Track MEM attributes of trampolines.
	* ifcvt.c (noce_try_cmove_arith): Set alignment of new MEM.
	* integrate.c (copy_rtx_and_substitute, case CALL): Copy memory
	attributes from original.
	* langhooks.c (lang_hook_default_get_alias_set): New function.
	(hook_get_alias_set_0): New function.
	* langhooks.h (hook_get_alias_set_0): New declaration.
	(lang_hook_default_get_alias_set): Likewise.
	(LANG_HOOKS_GET_ALIAS_SET): New macro; add to initializer.
	* reload1.c (alter_reg): Use adjust_address_nv.
	* rtl.c (get_mode_alignment): Moved to here.
	* rtl.h (MEM_ALIGN): Take default from mode, if not BLKmode, and
	change default if unknown from 1 to BITS_PER_UNIT.
	* stor-layout.c (get_mode_alignment): Remove from here.
	* toplev.h (struct lang_hoks): Add get_alias_set field.
	* tree.h (lang_get_alias_set): Delete declaration.
	* config/arc/arc.c (arc_setup_incoming_varags): Set MEM alignment.
	* config/i386/i386.c (ix86_setup_incoming_varargs): Likewise.
	(ix86_va_arg): Likewise.
	* config/i960/i960.c (i960_setup_incoming_varargs): Likewise.
	* config/pa/pa.c (hppa_builtin_saveregs): Likewise.
	* config/sparc/sparc.c (sparc_va_arg): Likewise.
	* config/rs6000/rs6000.c (setup_incoming_varargs): Likewise.
	(expand_block_move_mem): Remove dead code.
	* cp/cp-lang.c (cxx_get_alias_set): New function.
	Point LANG_HOOKS_GET_ALIAS_SET to it.
	* f/com.c (LANG_HOOKS_GET_ALIAS_SET): New macro.
	(lang_get_alias_set): Delete.
	* java/lang.c (lang_get_alias_set): Deleted.

From-SVN: r46442
This commit is contained in:
Richard Kenner 2001-10-23 16:41:59 -04:00
parent 711062347e
commit 74e2819c70
1 changed files with 13 additions and 5 deletions

View File

@ -637,7 +637,7 @@ assign_stack_temp_for_type (mode, size, keep, type)
int keep; int keep;
tree type; tree type;
{ {
int align; unsigned int align;
struct temp_slot *p, *best_p = 0; struct temp_slot *p, *best_p = 0;
/* If SIZE is -1 it means that somebody tried to allocate a temporary /* If SIZE is -1 it means that somebody tried to allocate a temporary
@ -795,6 +795,7 @@ assign_stack_temp_for_type (mode, size, keep, type)
it. If there's no TYPE, then we don't know anything about the it. If there's no TYPE, then we don't know anything about the
alias set for the memory. */ alias set for the memory. */
set_mem_alias_set (p->slot, type ? get_alias_set (type) : 0); set_mem_alias_set (p->slot, type ? get_alias_set (type) : 0);
set_mem_align (p->slot, align);
/* If a type is specified, set the relevant flags. */ /* If a type is specified, set the relevant flags. */
if (type != 0) if (type != 0)
@ -5017,8 +5018,15 @@ assign_parms (fndecl)
if (parm == function_result_decl) if (parm == function_result_decl)
{ {
tree result = DECL_RESULT (fndecl); tree result = DECL_RESULT (fndecl);
rtx x = gen_rtx_MEM (DECL_MODE (result), DECL_RTL (parm)); rtx addr = DECL_RTL (parm);
rtx x;
#ifdef POINTERS_EXTEND_UNSIGNED
if (GET_MODE (addr) != Pmode)
addr = convert_memory_address (Pmode, addr);
#endif
x = gen_rtx_MEM (DECL_MODE (result), addr);
set_mem_attributes (x, result, 1); set_mem_attributes (x, result, 1);
SET_DECL_RTL (result, x); SET_DECL_RTL (result, x);
} }
@ -6709,6 +6717,7 @@ expand_function_end (filename, line, end_bindings)
{ {
initial_trampoline initial_trampoline
= gen_rtx_MEM (BLKmode, assemble_trampoline_template ()); = gen_rtx_MEM (BLKmode, assemble_trampoline_template ());
set_mem_align (initial_trampoline, TRAMPOLINE_ALIGNMENT);
ggc_add_rtx_root (&initial_trampoline, 1); ggc_add_rtx_root (&initial_trampoline, 1);
} }
@ -6718,10 +6727,9 @@ expand_function_end (filename, line, end_bindings)
start_sequence (); start_sequence ();
tramp = round_trampoline_addr (XEXP (tramp, 0)); tramp = round_trampoline_addr (XEXP (tramp, 0));
#ifdef TRAMPOLINE_TEMPLATE #ifdef TRAMPOLINE_TEMPLATE
blktramp = change_address (initial_trampoline, BLKmode, tramp); blktramp = replace_equiv_address (initial_trampoline, tramp);
emit_block_move (blktramp, initial_trampoline, emit_block_move (blktramp, initial_trampoline,
GEN_INT (TRAMPOLINE_SIZE), GEN_INT (TRAMPOLINE_SIZE));
TRAMPOLINE_ALIGNMENT);
#endif #endif
INITIALIZE_TRAMPOLINE (tramp, XEXP (DECL_RTL (function), 0), context); INITIALIZE_TRAMPOLINE (tramp, XEXP (DECL_RTL (function), 0), context);
seq = get_insns (); seq = get_insns ();