make stack_slot_list a vec<rtx>

gcc/ChangeLog:

2016-08-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* emit-rtl.h (struct rtl_data): Make stack_slot_list a vector.
	* emit-rtl.c (unshare_all_rtl_1): Adjust.
	(unshare_all_rtl_again): Likewise.
	* function.c (assign_stack_local_1): Likewise.
	(assign_stack_temp_for_type): Likewise.

From-SVN: r239801
This commit is contained in:
Trevor Saunders 2016-08-28 00:04:04 +00:00 committed by Trevor Saunders
parent 6f7eba349b
commit 8c39f8aeb9
4 changed files with 20 additions and 9 deletions

View File

@ -1,3 +1,11 @@
2016-08-27 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* emit-rtl.h (struct rtl_data): Make stack_slot_list a vector.
* emit-rtl.c (unshare_all_rtl_1): Adjust.
(unshare_all_rtl_again): Likewise.
* function.c (assign_stack_local_1): Likewise.
(assign_stack_temp_for_type): Likewise.
2016-08-27 Trevor Saunders <tbsaunde+gcc@tbsaunde.org> 2016-08-27 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* cfgbuild.c (make_edges): Adjust. * cfgbuild.c (make_edges): Adjust.

View File

@ -2626,8 +2626,10 @@ unshare_all_rtl_1 (rtx_insn *insn)
This special care is necessary when the stack slot MEM does not This special care is necessary when the stack slot MEM does not
actually appear in the insn chain. If it does appear, its address actually appear in the insn chain. If it does appear, its address
is unshared from all else at that point. */ is unshared from all else at that point. */
stack_slot_list = safe_as_a <rtx_expr_list *> ( unsigned int i;
copy_rtx_if_shared (stack_slot_list)); rtx temp;
FOR_EACH_VEC_SAFE_ELT (stack_slot_list, i, temp)
(*stack_slot_list)[i] = copy_rtx_if_shared (temp);
} }
/* Go through all the RTL insn bodies and copy any invalid shared /* Go through all the RTL insn bodies and copy any invalid shared
@ -2656,7 +2658,10 @@ unshare_all_rtl_again (rtx_insn *insn)
for (decl = DECL_ARGUMENTS (cfun->decl); decl; decl = DECL_CHAIN (decl)) for (decl = DECL_ARGUMENTS (cfun->decl); decl; decl = DECL_CHAIN (decl))
set_used_flags (DECL_RTL (decl)); set_used_flags (DECL_RTL (decl));
reset_used_flags (stack_slot_list); rtx temp;
unsigned int i;
FOR_EACH_VEC_SAFE_ELT (stack_slot_list, i, temp)
reset_used_flags (temp);
unshare_all_rtl_1 (insn); unshare_all_rtl_1 (insn);
} }

View File

@ -104,7 +104,7 @@ struct GTY(()) rtl_data {
/* List (chain of EXPR_LISTs) of all stack slots in this function. /* List (chain of EXPR_LISTs) of all stack slots in this function.
Made for the sake of unshare_all_rtl. */ Made for the sake of unshare_all_rtl. */
rtx_expr_list *x_stack_slot_list; vec<rtx, va_gc> *x_stack_slot_list;
/* List of empty areas in the stack frame. */ /* List of empty areas in the stack frame. */
struct frame_space *frame_space_list; struct frame_space *frame_space_list;

View File

@ -499,8 +499,7 @@ assign_stack_local_1 (machine_mode mode, HOST_WIDE_INT size,
set_mem_align (x, alignment_in_bits); set_mem_align (x, alignment_in_bits);
MEM_NOTRAP_P (x) = 1; MEM_NOTRAP_P (x) = 1;
stack_slot_list vec_safe_push (stack_slot_list, x);
= gen_rtx_EXPR_LIST (VOIDmode, x, stack_slot_list);
if (frame_offset_overflow (frame_offset, current_function_decl)) if (frame_offset_overflow (frame_offset, current_function_decl))
frame_offset = 0; frame_offset = 0;
@ -829,8 +828,7 @@ assign_stack_temp_for_type (machine_mode mode, HOST_WIDE_INT size,
p->type = best_p->type; p->type = best_p->type;
insert_slot_to_list (p, &avail_temp_slots); insert_slot_to_list (p, &avail_temp_slots);
stack_slot_list = gen_rtx_EXPR_LIST (VOIDmode, p->slot, vec_safe_push (stack_slot_list, p->slot);
stack_slot_list);
best_p->size = rounded_size; best_p->size = rounded_size;
best_p->full_size = rounded_size; best_p->full_size = rounded_size;
@ -902,7 +900,7 @@ assign_stack_temp_for_type (machine_mode mode, HOST_WIDE_INT size,
/* Create a new MEM rtx to avoid clobbering MEM flags of old slots. */ /* Create a new MEM rtx to avoid clobbering MEM flags of old slots. */
slot = gen_rtx_MEM (mode, XEXP (p->slot, 0)); slot = gen_rtx_MEM (mode, XEXP (p->slot, 0));
stack_slot_list = gen_rtx_EXPR_LIST (VOIDmode, slot, stack_slot_list); vec_safe_push (stack_slot_list, slot);
/* If we know the alias set for the memory that will be used, use /* If we know the alias set for the memory that will be used, use
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