+2014-05-23 Jan Hubicka <hubicka@ucw.cz>
+
+ * sched-int.h (sd_iterator_cond): Manually tail recurse.
+
2014-05-23 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/440.md (ppc440-integer): Include shift without
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. */