From 3668e76e9041960e4ab3c433d8d7c89c4d45bf35 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Thu, 29 Dec 1994 19:50:28 -0700 Subject: [PATCH] calls.c (expand_call): Set MEM_IN_STRUCT_P as needed on return value from assign_stack_temp. * calls.c (expand_call): Set MEM_IN_STRUCT_P as needed on return value from assign_stack_temp. (store_one_arg): Likewise. * expr.c (save_noncopied_parts): Likewise. (expand_expr): Likewise. * function.c (assign_parms): Likewise. * integrate.c (expand_inline_function): Likewise. * stmt.c (expand_decl): Likewise. From-SVN: r8708 --- gcc/calls.c | 5 +++++ gcc/expr.c | 4 ++++ gcc/function.c | 1 + gcc/integrate.c | 1 + gcc/stmt.c | 2 ++ 5 files changed, 13 insertions(+) diff --git a/gcc/calls.c b/gcc/calls.c index 32d1ab014fe..cfc86444142 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -684,6 +684,8 @@ expand_call (exp, target, ignore) structure_value_addr = XEXP (assign_stack_temp (BLKmode, struct_value_size, 1), 0); + MEM_IN_STRUCT_P (structure_value_addr) + = AGGREGATE_TYPE_P (TREE_TYPE (exp)); target = 0; } } @@ -1682,6 +1684,7 @@ expand_call (exp, target, ignore) if (save_mode == BLKmode) { save_area = assign_stack_temp (BLKmode, num_to_save, 1); + MEM_IN_STRUCT_P (save_area) = 0; emit_block_move (validize_mem (save_area), stack_area, GEN_INT (num_to_save), PARM_BOUNDARY / BITS_PER_UNIT); @@ -2949,6 +2952,8 @@ store_one_arg (arg, argblock, may_be_alloca, variable_size, fndecl, { arg->save_area = assign_stack_temp (BLKmode, arg->size.constant, 1); + MEM_IN_STRUCT_P (arg->save_area) + = AGGREGATE_TYPE_P (TREE_TYPE (arg->tree_value)); preserve_temp_slots (arg->save_area); emit_block_move (validize_mem (arg->save_area), stack_area, GEN_INT (arg->size.constant), diff --git a/gcc/expr.c b/gcc/expr.c index 8a85200ef68..087f3912057 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -3727,6 +3727,7 @@ save_noncopied_parts (lhs, list) tree to_be_saved = build (COMPONENT_REF, part_type, lhs, part); rtx target = assign_stack_temp (TYPE_MODE (part_type), int_size_in_bytes (part_type), 0); + MEM_IN_STRUCT_P (target) = AGGREGATE_TYPE_P (part_type); if (! memory_address_p (TYPE_MODE (part_type), XEXP (target, 0))) target = change_address (target, TYPE_MODE (part_type), NULL_RTX); parts = tree_cons (to_be_saved, @@ -5025,6 +5026,7 @@ expand_expr (exp, target, tmode, modifier) (TREE_INT_CST_LOW (TYPE_SIZE (type)) + BITS_PER_UNIT - 1) / BITS_PER_UNIT, 0); + MEM_IN_STRUCT_P (target) = AGGREGATE_TYPE_P (type); } else target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode); @@ -6014,6 +6016,7 @@ expand_expr (exp, target, tmode, modifier) else { target = assign_stack_temp (mode, int_size_in_bytes (type), 2); + MEM_IN_STRUCT_P (target) = AGGREGATE_TYPE_P (type); /* All temp slots at this level must not conflict. */ preserve_temp_slots (target); DECL_RTL (slot) = target; @@ -6222,6 +6225,7 @@ expand_expr (exp, target, tmode, modifier) rtx memloc = assign_stack_temp (inner_mode, int_size_in_bytes (inner_type), 1); + MEM_IN_STRUCT_P (memloc) = AGGREGATE_TYPE_P (inner_type); mark_temp_addr_taken (memloc); emit_move_insn (memloc, op0); diff --git a/gcc/function.c b/gcc/function.c index 6dfc17cac1d..884cca70ff2 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -3646,6 +3646,7 @@ assign_parms (fndecl, second_time) else copy = assign_stack_temp (TYPE_MODE (type), int_size_in_bytes (type), 1); + MEM_IN_STRUCT_P (copy) = AGGREGATE_TYPE_P (type); store_expr (parm, copy, 0); emit_move_insn (parmreg, XEXP (copy, 0)); diff --git a/gcc/integrate.c b/gcc/integrate.c index ebb34b0acc0..ed21858659e 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -1271,6 +1271,7 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add rtx stack_slot = assign_stack_temp (TYPE_MODE (TREE_TYPE (arg)), int_size_in_bytes (TREE_TYPE (arg)), 1); + MEM_IN_STRUCT_P (stack_slot) = AGGREGATE_TYPE_P (TREE_TYPE (arg)); store_expr (arg, stack_slot, 0); diff --git a/gcc/stmt.c b/gcc/stmt.c index f96534cccfb..30eb838b717 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -3248,6 +3248,7 @@ expand_decl (decl) /* An initializer is going to decide the size of this array. Until we know the size, represent its address with a reg. */ DECL_RTL (decl) = gen_rtx (MEM, BLKmode, gen_reg_rtx (Pmode)); + MEM_IN_STRUCT_P (DECL_RTL (decl)) = AGGREGATE_TYPE_P (type); } else if (DECL_MODE (decl) != BLKmode /* If -ffloat-store, don't put explicit float vars @@ -3309,6 +3310,7 @@ expand_decl (decl) + BITS_PER_UNIT - 1) / BITS_PER_UNIT), 1); + MEM_IN_STRUCT_P (DECL_RTL (decl)) = AGGREGATE_TYPE_P (TREE_TYPE (decl)); /* Set alignment we actually gave this decl. */ DECL_ALIGN (decl) = (DECL_MODE (decl) == BLKmode ? BIGGEST_ALIGNMENT -- 2.30.2