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:
parent
6f7eba349b
commit
8c39f8aeb9
@ -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.
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user