aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 348d286..d8ab443 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -3250,16 +3250,11 @@ emit_push_insn (rtx x, enum machine_mode mode, tree type, rtx size,
target = gen_rtx_MEM (BLKmode, temp);
- if (type != 0)
- {
- set_mem_attributes (target, type, 1);
- /* Function incoming arguments may overlap with sibling call
- outgoing arguments and we cannot allow reordering of reads
- from function arguments with stores to outgoing arguments
- of sibling calls. */
- set_mem_alias_set (target, 0);
- }
-
+ /* We do *not* set_mem_attributes here, because incoming arguments
+ may overlap with sibling call outgoing arguments and we cannot
+ allow reordering of reads from function arguments with stores
+ to outgoing arguments of sibling calls. We do, however, want
+ to record the alignment of the stack slot. */
/* ALIGN may well be better aligned than TYPE, e.g. due to
PARM_BOUNDARY. Assume the caller isn't lying. */
set_mem_align (target, align);
@@ -3355,15 +3350,15 @@ emit_push_insn (rtx x, enum machine_mode mode, tree type, rtx size,
addr = memory_address (mode, gen_rtx_PLUS (Pmode, args_addr,
args_so_far));
dest = gen_rtx_MEM (mode, addr);
- if (type != 0)
- {
- set_mem_attributes (dest, type, 1);
- /* Function incoming arguments may overlap with sibling call
- outgoing arguments and we cannot allow reordering of reads
- from function arguments with stores to outgoing arguments
- of sibling calls. */
- set_mem_alias_set (dest, 0);
- }
+
+ /* We do *not* set_mem_attributes here, because incoming arguments
+ may overlap with sibling call outgoing arguments and we cannot
+ allow reordering of reads from function arguments with stores
+ to outgoing arguments of sibling calls. We do, however, want
+ to record the alignment of the stack slot. */
+ /* ALIGN may well be better aligned than TYPE, e.g. due to
+ PARM_BOUNDARY. Assume the caller isn't lying. */
+ set_mem_align (dest, align);
emit_move_insn (dest, x);
}