aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrevor Saunders <tbsaunde+gcc@tbsaunde.org>2016-08-28 00:04:04 +0000
committerTrevor Saunders <tbsaunde+gcc@tbsaunde.org>2016-08-28 00:04:04 +0000
commit8a43f8b8f22c52458becd0e1e4c605917d8782ec (patch)
tree4b1988c81c3db678ecd464b5bc3742a5f9eff054
parent3dde57de2778bf19efbb687c58f2bd8eacd6c312 (diff)
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. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@239801 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/emit-rtl.c11
-rw-r--r--gcc/emit-rtl.h2
-rw-r--r--gcc/function.c8
4 files changed, 20 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index baff0c613bf..529ec91f2ea 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
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>
+
* cfgbuild.c (make_edges): Adjust.
* cfgrtl.c (can_delete_label_p): Likewise.
* dwarf2cfi.c (create_trace_edges): Likewise.
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 99f052d22d7..a7246089222 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -2626,8 +2626,10 @@ unshare_all_rtl_1 (rtx_insn *insn)
This special care is necessary when the stack slot MEM does not
actually appear in the insn chain. If it does appear, its address
is unshared from all else at that point. */
- stack_slot_list = safe_as_a <rtx_expr_list *> (
- copy_rtx_if_shared (stack_slot_list));
+ unsigned int i;
+ 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
@@ -2656,7 +2658,10 @@ unshare_all_rtl_again (rtx_insn *insn)
for (decl = DECL_ARGUMENTS (cfun->decl); decl; decl = DECL_CHAIN (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);
}
diff --git a/gcc/emit-rtl.h b/gcc/emit-rtl.h
index 39dfce946d4..52c72b1eed2 100644
--- a/gcc/emit-rtl.h
+++ b/gcc/emit-rtl.h
@@ -104,7 +104,7 @@ struct GTY(()) rtl_data {
/* List (chain of EXPR_LISTs) of all stack slots in this function.
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. */
struct frame_space *frame_space_list;
diff --git a/gcc/function.c b/gcc/function.c
index bba07057a8c..53bad8736e9 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -499,8 +499,7 @@ assign_stack_local_1 (machine_mode mode, HOST_WIDE_INT size,
set_mem_align (x, alignment_in_bits);
MEM_NOTRAP_P (x) = 1;
- stack_slot_list
- = gen_rtx_EXPR_LIST (VOIDmode, x, stack_slot_list);
+ vec_safe_push (stack_slot_list, x);
if (frame_offset_overflow (frame_offset, current_function_decl))
frame_offset = 0;
@@ -829,8 +828,7 @@ assign_stack_temp_for_type (machine_mode mode, HOST_WIDE_INT size,
p->type = best_p->type;
insert_slot_to_list (p, &avail_temp_slots);
- stack_slot_list = gen_rtx_EXPR_LIST (VOIDmode, p->slot,
- stack_slot_list);
+ vec_safe_push (stack_slot_list, p->slot);
best_p->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. */
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
it. If there's no TYPE, then we don't know anything about the