make stack_slot_list a vec<rtx>
authorTrevor Saunders <tbsaunde+gcc@tbsaunde.org>
Sun, 28 Aug 2016 00:04:04 +0000 (00:04 +0000)
committerTrevor Saunders <tbsaunde@gcc.gnu.org>
Sun, 28 Aug 2016 00:04:04 +0000 (00:04 +0000)
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

gcc/ChangeLog
gcc/emit-rtl.c
gcc/emit-rtl.h
gcc/function.c

index baff0c613bfb49f22344a2e2277776955e159102..529ec91f2ea530f91ff19304b1931cbe3cba0e1d 100644 (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>
 
        * cfgbuild.c (make_edges): Adjust.
index 99f052d22d7f0100dbd7fef605776b28d1ef9f2c..a72460892223add72e9c58547938978abe28614a 100644 (file)
@@ -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);
 }
index 39dfce946d47d724977ab1ab5cae3ee002f0708b..52c72b1eed2ebf30f668bf4692d2e6e137816aa1 100644 (file)
@@ -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;
index bba07057a8cf7a2b396650e10579e7b81746c82f..53bad8736e9ef251347d23d40bc0ab767a979bc7 100644 (file)
@@ -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