diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f8c9d175e779..41549962c141 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2016-07-28 Trevor Saunders + + * haifa-sched.c (add_to_speculative_block): Make twins a vector. + 2016-07-28 Trevor Saunders * store-motion.c (struct st_expr): Make pattern_regs a vector. diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index 95035762915a..93b7089f710e 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -7991,7 +7991,7 @@ add_to_speculative_block (rtx_insn *insn) ds_t ts; sd_iterator_def sd_it; dep_t dep; - rtx_insn_list *twins = NULL; + auto_vec twins; ts = TODO_SPEC (insn); gcc_assert (!(ts & ~BE_IN_SPEC)); @@ -8060,7 +8060,7 @@ add_to_speculative_block (rtx_insn *insn) fprintf (spec_info->dump, ";;\t\tGenerated twin insn : %d/rec%d\n", INSN_UID (twin), rec->index); - twins = alloc_INSN_LIST (twin, twins); + twins.safe_push (twin); /* Add dependences between TWIN and all appropriate instructions from REC. */ @@ -8099,23 +8099,14 @@ add_to_speculative_block (rtx_insn *insn) /* We couldn't have added the dependencies between INSN and TWINS earlier because that would make TWINS appear in the INSN_BACK_DEPS (INSN). */ - while (twins) + unsigned int i; + rtx_insn *twin; + FOR_EACH_VEC_ELT_REVERSE (twins, i, twin) { - rtx_insn *twin; - rtx_insn_list *next_node; + dep_def _new_dep, *new_dep = &_new_dep; - twin = twins->insn (); - - { - dep_def _new_dep, *new_dep = &_new_dep; - - init_dep (new_dep, insn, twin, REG_DEP_OUTPUT); - sd_add_dep (new_dep, false); - } - - next_node = twins->next (); - free_INSN_LIST_node (twins); - twins = next_node; + init_dep (new_dep, insn, twin, REG_DEP_OUTPUT); + sd_add_dep (new_dep, false); } calc_priorities (priorities_roots);