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:
parent
711062347e
commit
74e2819c70
|
@ -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 ();
|
||||||
|
|
Loading…
Reference in New Issue