From e0e349f3f25d1b2d8c492fc384506bf250cb1d6a Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sat, 24 May 2014 19:11:35 +0200 Subject: [PATCH] * sched-int.h (sd_iterator_cond): Manually tail recurse. From-SVN: r210895 --- gcc/ChangeLog | 4 ++++ gcc/sched-int.h | 45 ++++++++++++++++++++++++--------------------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 845c8c6..f419574 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2014-05-23 Jan Hubicka + + * sched-int.h (sd_iterator_cond): Manually tail recurse. + 2014-05-23 Segher Boessenkool * config/rs6000/440.md (ppc440-integer): Include shift without diff --git a/gcc/sched-int.h b/gcc/sched-int.h index ffe618c..fe00496 100644 --- a/gcc/sched-int.h +++ b/gcc/sched-int.h @@ -1550,34 +1550,37 @@ sd_iterator_start (rtx insn, sd_list_types_def types) static inline bool sd_iterator_cond (sd_iterator_def *it_ptr, dep_t *dep_ptr) { - dep_link_t link = *it_ptr->linkp; - - if (link != NULL) - { - *dep_ptr = DEP_LINK_DEP (link); - return true; - } - else + while (true) { - sd_list_types_def types = it_ptr->types; + dep_link_t link = *it_ptr->linkp; - if (types != SD_LIST_NONE) - /* Switch to next list. */ + if (link != NULL) + { + *dep_ptr = DEP_LINK_DEP (link); + return true; + } + else { - deps_list_t list; + sd_list_types_def types = it_ptr->types; - sd_next_list (it_ptr->insn, - &it_ptr->types, &list, &it_ptr->resolved_p); + if (types != SD_LIST_NONE) + /* Switch to next list. */ + { + deps_list_t list; - it_ptr->linkp = &DEPS_LIST_FIRST (list); + sd_next_list (it_ptr->insn, + &it_ptr->types, &list, &it_ptr->resolved_p); - if (list) - return sd_iterator_cond (it_ptr, dep_ptr); - } + it_ptr->linkp = &DEPS_LIST_FIRST (list); + + if (list) + continue; + } - *dep_ptr = NULL; - return false; - } + *dep_ptr = NULL; + return false; + } + } } /* Advance iterator. */ -- 2.7.4