Home | History | Annotate | Line # | Download | only in gcc
      1 /* Natural loop discovery code for GNU compiler.
      2    Copyright (C) 2000-2022 Free Software Foundation, Inc.
      3 
      4 This file is part of GCC.
      5 
      6 GCC is free software; you can redistribute it and/or modify it under
      7 the terms of the GNU General Public License as published by the Free
      8 Software Foundation; either version 3, or (at your option) any later
      9 version.
     10 
     11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
     12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14 for more details.
     15 
     16 You should have received a copy of the GNU General Public License
     17 along with GCC; see the file COPYING3.  If not see
     18 <http://www.gnu.org/licenses/>.  */
     19 
     20 #include "config.h"
     21 #include "system.h"
     22 #include "coretypes.h"
     23 #include "backend.h"
     24 #include "rtl.h"
     25 #include "tree.h"
     26 #include "gimple.h"
     27 #include "cfghooks.h"
     28 #include "gimple-ssa.h"
     29 #include "diagnostic-core.h"
     30 #include "cfganal.h"
     31 #include "cfgloop.h"
     32 #include "gimple-iterator.h"
     33 #include "dumpfile.h"
     34 #include "tree-ssa.h"
     35 #include "tree-pretty-print.h"
     36 
     37 static void flow_loops_cfg_dump (FILE *);
     38 
     39 /* Dump loop related CFG information.  */
     41 
     42 static void
     43 flow_loops_cfg_dump (FILE *file)
     44 {
     45   basic_block bb;
     46 
     47   if (!file)
     48     return;
     49 
     50   FOR_EACH_BB_FN (bb, cfun)
     51     {
     52       edge succ;
     53       edge_iterator ei;
     54 
     55       fprintf (file, ";; %d succs { ", bb->index);
     56       FOR_EACH_EDGE (succ, ei, bb->succs)
     57 	fprintf (file, "%d ", succ->dest->index);
     58       fprintf (file, "}\n");
     59     }
     60 }
     61 
     62 /* Return nonzero if the nodes of LOOP are a subset of OUTER.  */
     63 
     64 bool
     65 flow_loop_nested_p (const class loop *outer, const class loop *loop)
     66 {
     67   unsigned odepth = loop_depth (outer);
     68 
     69   return (loop_depth (loop) > odepth
     70 	  && (*loop->superloops)[odepth] == outer);
     71 }
     72 
     73 /* Returns the loop such that LOOP is nested DEPTH (indexed from zero)
     74    loops within LOOP.  */
     75 
     76 class loop *
     77 superloop_at_depth (class loop *loop, unsigned depth)
     78 {
     79   unsigned ldepth = loop_depth (loop);
     80 
     81   gcc_assert (depth <= ldepth);
     82 
     83   if (depth == ldepth)
     84     return loop;
     85 
     86   return (*loop->superloops)[depth];
     87 }
     88 
     89 /* Returns the list of the latch edges of LOOP.  */
     90 
     91 static vec<edge>
     92 get_loop_latch_edges (const class loop *loop)
     93 {
     94   edge_iterator ei;
     95   edge e;
     96   vec<edge> ret = vNULL;
     97 
     98   FOR_EACH_EDGE (e, ei, loop->header->preds)
     99     {
    100       if (dominated_by_p (CDI_DOMINATORS, e->src, loop->header))
    101 	ret.safe_push (e);
    102     }
    103 
    104   return ret;
    105 }
    106 
    107 /* Dump the loop information specified by LOOP to the stream FILE
    108    using auxiliary dump callback function LOOP_DUMP_AUX if non null.  */
    109 
    110 void
    111 flow_loop_dump (const class loop *loop, FILE *file,
    112 		void (*loop_dump_aux) (const class loop *, FILE *, int),
    113 		int verbose)
    114 {
    115   basic_block *bbs;
    116   unsigned i;
    117   vec<edge> latches;
    118   edge e;
    119 
    120   if (! loop || ! loop->header)
    121     return;
    122 
    123   fprintf (file, ";;\n;; Loop %d\n", loop->num);
    124 
    125   fprintf (file, ";;  header %d, ", loop->header->index);
    126   if (loop->latch)
    127     fprintf (file, "latch %d\n", loop->latch->index);
    128   else
    129     {
    130       fprintf (file, "multiple latches:");
    131       latches = get_loop_latch_edges (loop);
    132       FOR_EACH_VEC_ELT (latches, i, e)
    133 	fprintf (file, " %d", e->src->index);
    134       latches.release ();
    135       fprintf (file, "\n");
    136     }
    137 
    138   fprintf (file, ";;  depth %d, outer %ld\n",
    139 	   loop_depth (loop), (long) (loop_outer (loop)
    140 				      ? loop_outer (loop)->num : -1));
    141 
    142   if (loop->latch)
    143     {
    144       bool read_profile_p;
    145       gcov_type nit = expected_loop_iterations_unbounded (loop, &read_profile_p);
    146       if (read_profile_p && !loop->any_estimate)
    147 	fprintf (file, ";;  profile-based iteration count: %" PRIu64 "\n",
    148 		 (uint64_t) nit);
    149     }
    150 
    151   fprintf (file, ";;  nodes:");
    152   bbs = get_loop_body (loop);
    153   for (i = 0; i < loop->num_nodes; i++)
    154     fprintf (file, " %d", bbs[i]->index);
    155   free (bbs);
    156   fprintf (file, "\n");
    157 
    158   if (loop_dump_aux)
    159     loop_dump_aux (loop, file, verbose);
    160 }
    161 
    162 /* Dump the loop information about loops to the stream FILE,
    163    using auxiliary dump callback function LOOP_DUMP_AUX if non null.  */
    164 
    165 void
    166 flow_loops_dump (FILE *file, void (*loop_dump_aux) (const class loop *, FILE *, int), int verbose)
    167 {
    168   if (!current_loops || ! file)
    169     return;
    170 
    171   fprintf (file, ";; %d loops found\n", number_of_loops (cfun));
    172 
    173   for (auto loop : loops_list (cfun, LI_INCLUDE_ROOT))
    174     {
    175       flow_loop_dump (loop, file, loop_dump_aux, verbose);
    176     }
    177 
    178   if (verbose)
    179     flow_loops_cfg_dump (file);
    180 }
    181 
    182 /* Free data allocated for LOOP.  */
    183 
    184 void
    185 flow_loop_free (class loop *loop)
    186 {
    187   struct loop_exit *exit, *next;
    188 
    189   vec_free (loop->superloops);
    190 
    191   /* Break the list of the loop exit records.  They will be freed when the
    192      corresponding edge is rescanned or removed, and this avoids
    193      accessing the (already released) head of the list stored in the
    194      loop structure.  */
    195   for (exit = loop->exits->next; exit != loop->exits; exit = next)
    196     {
    197       next = exit->next;
    198       exit->next = exit;
    199       exit->prev = exit;
    200     }
    201 
    202   ggc_free (loop->exits);
    203   ggc_free (loop);
    204 }
    205 
    206 /* Free all the memory allocated for LOOPS.  */
    207 
    208 void
    209 flow_loops_free (struct loops *loops)
    210 {
    211   if (loops->larray)
    212     {
    213       unsigned i;
    214       loop_p loop;
    215 
    216       /* Free the loop descriptors.  */
    217       FOR_EACH_VEC_SAFE_ELT (loops->larray, i, loop)
    218 	{
    219 	  if (!loop)
    220 	    continue;
    221 
    222 	  flow_loop_free (loop);
    223 	}
    224 
    225       vec_free (loops->larray);
    226     }
    227 }
    228 
    229 /* Find the nodes contained within the LOOP with header HEADER.
    230    Return the number of nodes within the loop.  */
    231 
    232 int
    233 flow_loop_nodes_find (basic_block header, class loop *loop)
    234 {
    235   vec<basic_block> stack = vNULL;
    236   int num_nodes = 1;
    237   edge latch;
    238   edge_iterator latch_ei;
    239 
    240   header->loop_father = loop;
    241 
    242   FOR_EACH_EDGE (latch, latch_ei, loop->header->preds)
    243     {
    244       if (latch->src->loop_father == loop
    245 	  || !dominated_by_p (CDI_DOMINATORS, latch->src, loop->header))
    246 	continue;
    247 
    248       num_nodes++;
    249       stack.safe_push (latch->src);
    250       latch->src->loop_father = loop;
    251 
    252       while (!stack.is_empty ())
    253 	{
    254 	  basic_block node;
    255 	  edge e;
    256 	  edge_iterator ei;
    257 
    258 	  node = stack.pop ();
    259 
    260 	  FOR_EACH_EDGE (e, ei, node->preds)
    261 	    {
    262 	      basic_block ancestor = e->src;
    263 
    264 	      if (ancestor->loop_father != loop)
    265 		{
    266 		  ancestor->loop_father = loop;
    267 		  num_nodes++;
    268 		  stack.safe_push (ancestor);
    269 		}
    270 	    }
    271 	}
    272     }
    273   stack.release ();
    274 
    275   return num_nodes;
    276 }
    277 
    278 /* Records the vector of superloops of the loop LOOP, whose immediate
    279    superloop is FATHER.  */
    280 
    281 static void
    282 establish_preds (class loop *loop, class loop *father)
    283 {
    284   loop_p ploop;
    285   unsigned depth = loop_depth (father) + 1;
    286   unsigned i;
    287 
    288   loop->superloops = 0;
    289   vec_alloc (loop->superloops, depth);
    290   FOR_EACH_VEC_SAFE_ELT (father->superloops, i, ploop)
    291     loop->superloops->quick_push (ploop);
    292   loop->superloops->quick_push (father);
    293 
    294   for (ploop = loop->inner; ploop; ploop = ploop->next)
    295     establish_preds (ploop, loop);
    296 }
    297 
    298 /* Add LOOP to the loop hierarchy tree where FATHER is father of the
    299    added loop.  If LOOP has some children, take care of that their
    300    pred field will be initialized correctly.  If AFTER is non-null
    301    then it's expected it's a pointer into FATHERs inner sibling
    302    list and LOOP is added behind AFTER, otherwise it's added in front
    303    of FATHERs siblings.  */
    304 
    305 void
    306 flow_loop_tree_node_add (class loop *father, class loop *loop,
    307 			 class loop *after)
    308 {
    309   if (after)
    310     {
    311       loop->next = after->next;
    312       after->next = loop;
    313     }
    314   else
    315     {
    316       loop->next = father->inner;
    317       father->inner = loop;
    318     }
    319 
    320   establish_preds (loop, father);
    321 }
    322 
    323 /* Remove LOOP from the loop hierarchy tree.  */
    324 
    325 void
    326 flow_loop_tree_node_remove (class loop *loop)
    327 {
    328   class loop *prev, *father;
    329 
    330   father = loop_outer (loop);
    331 
    332   /* Remove loop from the list of sons.  */
    333   if (father->inner == loop)
    334     father->inner = loop->next;
    335   else
    336     {
    337       for (prev = father->inner; prev->next != loop; prev = prev->next)
    338 	continue;
    339       prev->next = loop->next;
    340     }
    341 
    342   loop->superloops = NULL;
    343 }
    344 
    345 /* Allocates and returns new loop structure.  */
    346 
    347 class loop *
    348 alloc_loop (void)
    349 {
    350   class loop *loop = ggc_cleared_alloc<class loop> ();
    351 
    352   loop->exits = ggc_cleared_alloc<loop_exit> ();
    353   loop->exits->next = loop->exits->prev = loop->exits;
    354   loop->can_be_parallel = false;
    355   loop->constraints = 0;
    356   loop->nb_iterations_upper_bound = 0;
    357   loop->nb_iterations_likely_upper_bound = 0;
    358   loop->nb_iterations_estimate = 0;
    359   return loop;
    360 }
    361 
    362 /* Initializes loops structure LOOPS, reserving place for NUM_LOOPS loops
    363    (including the root of the loop tree).  */
    364 
    365 void
    366 init_loops_structure (struct function *fn,
    367 		      struct loops *loops, unsigned num_loops)
    368 {
    369   class loop *root;
    370 
    371   memset (loops, 0, sizeof *loops);
    372   vec_alloc (loops->larray, num_loops);
    373 
    374   /* Dummy loop containing whole function.  */
    375   root = alloc_loop ();
    376   root->num_nodes = n_basic_blocks_for_fn (fn);
    377   root->latch = EXIT_BLOCK_PTR_FOR_FN (fn);
    378   root->header = ENTRY_BLOCK_PTR_FOR_FN (fn);
    379   ENTRY_BLOCK_PTR_FOR_FN (fn)->loop_father = root;
    380   EXIT_BLOCK_PTR_FOR_FN (fn)->loop_father = root;
    381 
    382   loops->larray->quick_push (root);
    383   loops->tree_root = root;
    384 }
    385 
    386 /* Returns whether HEADER is a loop header.  */
    387 
    388 bool
    389 bb_loop_header_p (basic_block header)
    390 {
    391   edge_iterator ei;
    392   edge e;
    393 
    394   /* If we have an abnormal predecessor, do not consider the
    395      loop (not worth the problems).  */
    396   if (bb_has_abnormal_pred (header))
    397     return false;
    398 
    399   /* Look for back edges where a predecessor is dominated
    400      by this block.  A natural loop has a single entry
    401      node (header) that dominates all the nodes in the
    402      loop.  It also has single back edge to the header
    403      from a latch node.  */
    404   FOR_EACH_EDGE (e, ei, header->preds)
    405     {
    406       basic_block latch = e->src;
    407       if (latch != ENTRY_BLOCK_PTR_FOR_FN (cfun)
    408 	  && dominated_by_p (CDI_DOMINATORS, latch, header))
    409 	return true;
    410     }
    411 
    412   return false;
    413 }
    414 
    415 /* Find all the natural loops in the function and save in LOOPS structure and
    416    recalculate loop_father information in basic block structures.
    417    If LOOPS is non-NULL then the loop structures for already recorded loops
    418    will be re-used and their number will not change.  We assume that no
    419    stale loops exist in LOOPS.
    420    When LOOPS is NULL it is allocated and re-built from scratch.
    421    Return the built LOOPS structure.  */
    422 
    423 struct loops *
    424 flow_loops_find (struct loops *loops)
    425 {
    426   bool from_scratch = (loops == NULL);
    427   int *rc_order;
    428   int b;
    429   unsigned i;
    430 
    431   /* Ensure that the dominators are computed.  */
    432   calculate_dominance_info (CDI_DOMINATORS);
    433 
    434   if (!loops)
    435     {
    436       loops = ggc_cleared_alloc<struct loops> ();
    437       init_loops_structure (cfun, loops, 1);
    438     }
    439 
    440   /* Ensure that loop exits were released.  */
    441   gcc_assert (loops->exits == NULL);
    442 
    443   /* Taking care of this degenerate case makes the rest of
    444      this code simpler.  */
    445   if (n_basic_blocks_for_fn (cfun) == NUM_FIXED_BLOCKS)
    446     return loops;
    447 
    448   /* The root loop node contains all basic-blocks.  */
    449   loops->tree_root->num_nodes = n_basic_blocks_for_fn (cfun);
    450 
    451   /* Compute depth first search order of the CFG so that outer
    452      natural loops will be found before inner natural loops.  */
    453   rc_order = XNEWVEC (int, n_basic_blocks_for_fn (cfun));
    454   pre_and_rev_post_order_compute (NULL, rc_order, false);
    455 
    456   /* Gather all loop headers in reverse completion order and allocate
    457      loop structures for loops that are not already present.  */
    458   auto_vec<loop_p> larray (loops->larray->length ());
    459   for (b = 0; b < n_basic_blocks_for_fn (cfun) - NUM_FIXED_BLOCKS; b++)
    460     {
    461       basic_block header = BASIC_BLOCK_FOR_FN (cfun, rc_order[b]);
    462       if (bb_loop_header_p (header))
    463 	{
    464 	  class loop *loop;
    465 
    466 	  /* The current active loop tree has valid loop-fathers for
    467 	     header blocks.  */
    468 	  if (!from_scratch
    469 	      && header->loop_father->header == header)
    470 	    {
    471 	      loop = header->loop_father;
    472 	      /* If we found an existing loop remove it from the
    473 		 loop tree.  It is going to be inserted again
    474 		 below.  */
    475 	      flow_loop_tree_node_remove (loop);
    476 	    }
    477 	  else
    478 	    {
    479 	      /* Otherwise allocate a new loop structure for the loop.  */
    480 	      loop = alloc_loop ();
    481 	      /* ???  We could re-use unused loop slots here.  */
    482 	      loop->num = loops->larray->length ();
    483 	      vec_safe_push (loops->larray, loop);
    484 	      loop->header = header;
    485 
    486 	      if (!from_scratch
    487 		  && dump_file && (dump_flags & TDF_DETAILS))
    488 		fprintf (dump_file, "flow_loops_find: discovered new "
    489 			 "loop %d with header %d\n",
    490 			 loop->num, header->index);
    491 	    }
    492 	  /* Reset latch, we recompute it below.  */
    493 	  loop->latch = NULL;
    494 	  larray.safe_push (loop);
    495 	}
    496 
    497       /* Make blocks part of the loop root node at start.  */
    498       header->loop_father = loops->tree_root;
    499     }
    500 
    501   free (rc_order);
    502 
    503   /* Now iterate over the loops found, insert them into the loop tree
    504      and assign basic-block ownership.  */
    505   for (i = 0; i < larray.length (); ++i)
    506     {
    507       class loop *loop = larray[i];
    508       basic_block header = loop->header;
    509       edge_iterator ei;
    510       edge e;
    511 
    512       flow_loop_tree_node_add (header->loop_father, loop);
    513       loop->num_nodes = flow_loop_nodes_find (loop->header, loop);
    514 
    515       /* Look for the latch for this header block, if it has just a
    516 	 single one.  */
    517       FOR_EACH_EDGE (e, ei, header->preds)
    518 	{
    519 	  basic_block latch = e->src;
    520 
    521 	  if (flow_bb_inside_loop_p (loop, latch))
    522 	    {
    523 	      if (loop->latch != NULL)
    524 		{
    525 		  /* More than one latch edge.  */
    526 		  loop->latch = NULL;
    527 		  break;
    528 		}
    529 	      loop->latch = latch;
    530 	    }
    531 	}
    532     }
    533 
    534   return loops;
    535 }
    536 
    537 /* qsort helper for sort_sibling_loops.  */
    538 
    539 static int *sort_sibling_loops_cmp_rpo;
    540 static int
    541 sort_sibling_loops_cmp (const void *la_, const void *lb_)
    542 {
    543   const class loop *la = *(const class loop * const *)la_;
    544   const class loop *lb = *(const class loop * const *)lb_;
    545   return (sort_sibling_loops_cmp_rpo[la->header->index]
    546 	  - sort_sibling_loops_cmp_rpo[lb->header->index]);
    547 }
    548 
    549 /* Sort sibling loops in RPO order.  */
    550 
    551 void
    552 sort_sibling_loops (function *fn)
    553 {
    554   /* Match flow_loops_find in the order we sort sibling loops.  */
    555   sort_sibling_loops_cmp_rpo = XNEWVEC (int, last_basic_block_for_fn (cfun));
    556   int *rc_order = XNEWVEC (int, n_basic_blocks_for_fn (cfun));
    557   pre_and_rev_post_order_compute_fn (fn, NULL, rc_order, false);
    558   for (int i = 0; i < n_basic_blocks_for_fn (cfun) - NUM_FIXED_BLOCKS; ++i)
    559     sort_sibling_loops_cmp_rpo[rc_order[i]] = i;
    560   free (rc_order);
    561 
    562   auto_vec<loop_p, 3> siblings;
    563   for (auto loop : loops_list (fn, LI_INCLUDE_ROOT))
    564     if (loop->inner && loop->inner->next)
    565       {
    566 	loop_p sibling = loop->inner;
    567 	do
    568 	  {
    569 	    siblings.safe_push (sibling);
    570 	    sibling = sibling->next;
    571 	  }
    572 	while (sibling);
    573 	siblings.qsort (sort_sibling_loops_cmp);
    574 	loop_p *siblingp = &loop->inner;
    575 	for (unsigned i = 0; i < siblings.length (); ++i)
    576 	  {
    577 	    *siblingp = siblings[i];
    578 	    siblingp = &(*siblingp)->next;
    579 	  }
    580 	*siblingp = NULL;
    581 	siblings.truncate (0);
    582       }
    583 
    584   free (sort_sibling_loops_cmp_rpo);
    585   sort_sibling_loops_cmp_rpo = NULL;
    586 }
    587 
    588 /* Ratio of frequencies of edges so that one of more latch edges is
    589    considered to belong to inner loop with same header.  */
    590 #define HEAVY_EDGE_RATIO 8
    591 
    592 /* Minimum number of samples for that we apply
    593    find_subloop_latch_edge_by_profile heuristics.  */
    594 #define HEAVY_EDGE_MIN_SAMPLES 10
    595 
    596 /* If the profile info is available, finds an edge in LATCHES that much more
    597    frequent than the remaining edges.  Returns such an edge, or NULL if we do
    598    not find one.
    599 
    600    We do not use guessed profile here, only the measured one.  The guessed
    601    profile is usually too flat and unreliable for this (and it is mostly based
    602    on the loop structure of the program, so it does not make much sense to
    603    derive the loop structure from it).  */
    604 
    605 static edge
    606 find_subloop_latch_edge_by_profile (vec<edge> latches)
    607 {
    608   unsigned i;
    609   edge e, me = NULL;
    610   profile_count mcount = profile_count::zero (), tcount = profile_count::zero ();
    611 
    612   FOR_EACH_VEC_ELT (latches, i, e)
    613     {
    614       if (e->count ()> mcount)
    615 	{
    616 	  me = e;
    617 	  mcount = e->count();
    618 	}
    619       tcount += e->count();
    620     }
    621 
    622   if (!tcount.initialized_p () || !(tcount.ipa () > HEAVY_EDGE_MIN_SAMPLES)
    623       || (tcount - mcount).apply_scale (HEAVY_EDGE_RATIO, 1) > tcount)
    624     return NULL;
    625 
    626   if (dump_file)
    627     fprintf (dump_file,
    628 	     "Found latch edge %d -> %d using profile information.\n",
    629 	     me->src->index, me->dest->index);
    630   return me;
    631 }
    632 
    633 /* Among LATCHES, guesses a latch edge of LOOP corresponding to subloop, based
    634    on the structure of induction variables.  Returns this edge, or NULL if we
    635    do not find any.
    636 
    637    We are quite conservative, and look just for an obvious simple innermost
    638    loop (which is the case where we would lose the most performance by not
    639    disambiguating the loop).  More precisely, we look for the following
    640    situation: The source of the chosen latch edge dominates sources of all
    641    the other latch edges.  Additionally, the header does not contain a phi node
    642    such that the argument from the chosen edge is equal to the argument from
    643    another edge.  */
    644 
    645 static edge
    646 find_subloop_latch_edge_by_ivs (class loop *loop ATTRIBUTE_UNUSED, vec<edge> latches)
    647 {
    648   edge e, latch = latches[0];
    649   unsigned i;
    650   gphi *phi;
    651   gphi_iterator psi;
    652   tree lop;
    653   basic_block bb;
    654 
    655   /* Find the candidate for the latch edge.  */
    656   for (i = 1; latches.iterate (i, &e); i++)
    657     if (dominated_by_p (CDI_DOMINATORS, latch->src, e->src))
    658       latch = e;
    659 
    660   /* Verify that it dominates all the latch edges.  */
    661   FOR_EACH_VEC_ELT (latches, i, e)
    662     if (!dominated_by_p (CDI_DOMINATORS, e->src, latch->src))
    663       return NULL;
    664 
    665   /* Check for a phi node that would deny that this is a latch edge of
    666      a subloop.  */
    667   for (psi = gsi_start_phis (loop->header); !gsi_end_p (psi); gsi_next (&psi))
    668     {
    669       phi = psi.phi ();
    670       lop = PHI_ARG_DEF_FROM_EDGE (phi, latch);
    671 
    672       /* Ignore the values that are not changed inside the subloop.  */
    673       if (TREE_CODE (lop) != SSA_NAME
    674 	  || SSA_NAME_DEF_STMT (lop) == phi)
    675 	continue;
    676       bb = gimple_bb (SSA_NAME_DEF_STMT (lop));
    677       if (!bb || !flow_bb_inside_loop_p (loop, bb))
    678 	continue;
    679 
    680       FOR_EACH_VEC_ELT (latches, i, e)
    681 	if (e != latch
    682 	    && PHI_ARG_DEF_FROM_EDGE (phi, e) == lop)
    683 	  return NULL;
    684     }
    685 
    686   if (dump_file)
    687     fprintf (dump_file,
    688 	     "Found latch edge %d -> %d using iv structure.\n",
    689 	     latch->src->index, latch->dest->index);
    690   return latch;
    691 }
    692 
    693 /* If we can determine that one of the several latch edges of LOOP behaves
    694    as a latch edge of a separate subloop, returns this edge.  Otherwise
    695    returns NULL.  */
    696 
    697 static edge
    698 find_subloop_latch_edge (class loop *loop)
    699 {
    700   vec<edge> latches = get_loop_latch_edges (loop);
    701   edge latch = NULL;
    702 
    703   if (latches.length () > 1)
    704     {
    705       latch = find_subloop_latch_edge_by_profile (latches);
    706 
    707       if (!latch
    708 	  /* We consider ivs to guess the latch edge only in SSA.  Perhaps we
    709 	     should use cfghook for this, but it is hard to imagine it would
    710 	     be useful elsewhere.  */
    711 	  && current_ir_type () == IR_GIMPLE)
    712 	latch = find_subloop_latch_edge_by_ivs (loop, latches);
    713     }
    714 
    715   latches.release ();
    716   return latch;
    717 }
    718 
    719 /* Callback for make_forwarder_block.  Returns true if the edge E is marked
    720    in the set MFB_REIS_SET.  */
    721 
    722 static hash_set<edge> *mfb_reis_set;
    723 static bool
    724 mfb_redirect_edges_in_set (edge e)
    725 {
    726   return mfb_reis_set->contains (e);
    727 }
    728 
    729 /* Creates a subloop of LOOP with latch edge LATCH.  */
    730 
    731 static void
    732 form_subloop (class loop *loop, edge latch)
    733 {
    734   edge_iterator ei;
    735   edge e, new_entry;
    736   class loop *new_loop;
    737 
    738   mfb_reis_set = new hash_set<edge>;
    739   FOR_EACH_EDGE (e, ei, loop->header->preds)
    740     {
    741       if (e != latch)
    742 	mfb_reis_set->add (e);
    743     }
    744   new_entry = make_forwarder_block (loop->header, mfb_redirect_edges_in_set,
    745 				    NULL);
    746   delete mfb_reis_set;
    747 
    748   loop->header = new_entry->src;
    749 
    750   /* Find the blocks and subloops that belong to the new loop, and add it to
    751      the appropriate place in the loop tree.  */
    752   new_loop = alloc_loop ();
    753   new_loop->header = new_entry->dest;
    754   new_loop->latch = latch->src;
    755   add_loop (new_loop, loop);
    756 }
    757 
    758 /* Make all the latch edges of LOOP to go to a single forwarder block --
    759    a new latch of LOOP.  */
    760 
    761 static void
    762 merge_latch_edges (class loop *loop)
    763 {
    764   vec<edge> latches = get_loop_latch_edges (loop);
    765   edge latch, e;
    766   unsigned i;
    767 
    768   gcc_assert (latches.length () > 0);
    769 
    770   if (latches.length () == 1)
    771     loop->latch = latches[0]->src;
    772   else
    773     {
    774       if (dump_file)
    775 	fprintf (dump_file, "Merged latch edges of loop %d\n", loop->num);
    776 
    777       mfb_reis_set = new hash_set<edge>;
    778       FOR_EACH_VEC_ELT (latches, i, e)
    779 	mfb_reis_set->add (e);
    780       latch = make_forwarder_block (loop->header, mfb_redirect_edges_in_set,
    781 				    NULL);
    782       delete mfb_reis_set;
    783 
    784       loop->header = latch->dest;
    785       loop->latch = latch->src;
    786     }
    787 
    788   latches.release ();
    789 }
    790 
    791 /* LOOP may have several latch edges.  Transform it into (possibly several)
    792    loops with single latch edge.  */
    793 
    794 static void
    795 disambiguate_multiple_latches (class loop *loop)
    796 {
    797   edge e;
    798 
    799   /* We eliminate the multiple latches by splitting the header to the forwarder
    800      block F and the rest R, and redirecting the edges.  There are two cases:
    801 
    802      1) If there is a latch edge E that corresponds to a subloop (we guess
    803         that based on profile -- if it is taken much more often than the
    804 	remaining edges; and on trees, using the information about induction
    805 	variables of the loops), we redirect E to R, all the remaining edges to
    806 	F, then rescan the loops and try again for the outer loop.
    807      2) If there is no such edge, we redirect all latch edges to F, and the
    808         entry edges to R, thus making F the single latch of the loop.  */
    809 
    810   if (dump_file)
    811     fprintf (dump_file, "Disambiguating loop %d with multiple latches\n",
    812 	     loop->num);
    813 
    814   /* During latch merging, we may need to redirect the entry edges to a new
    815      block.  This would cause problems if the entry edge was the one from the
    816      entry block.  To avoid having to handle this case specially, split
    817      such entry edge.  */
    818   e = find_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun), loop->header);
    819   if (e)
    820     split_edge (e);
    821 
    822   while (1)
    823     {
    824       e = find_subloop_latch_edge (loop);
    825       if (!e)
    826 	break;
    827 
    828       form_subloop (loop, e);
    829     }
    830 
    831   merge_latch_edges (loop);
    832 }
    833 
    834 /* Split loops with multiple latch edges.  */
    835 
    836 void
    837 disambiguate_loops_with_multiple_latches (void)
    838 {
    839   for (auto loop : loops_list (cfun, 0))
    840     {
    841       if (!loop->latch)
    842 	disambiguate_multiple_latches (loop);
    843     }
    844 }
    845 
    846 /* Return nonzero if basic block BB belongs to LOOP.  */
    847 bool
    848 flow_bb_inside_loop_p (const class loop *loop, const_basic_block bb)
    849 {
    850   class loop *source_loop;
    851 
    852   if (bb == ENTRY_BLOCK_PTR_FOR_FN (cfun)
    853       || bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
    854     return 0;
    855 
    856   source_loop = bb->loop_father;
    857   return loop == source_loop || flow_loop_nested_p (loop, source_loop);
    858 }
    859 
    860 /* Enumeration predicate for get_loop_body_with_size.  */
    861 static bool
    862 glb_enum_p (const_basic_block bb, const void *glb_loop)
    863 {
    864   const class loop *const loop = (const class loop *) glb_loop;
    865   return (bb != loop->header
    866 	  && dominated_by_p (CDI_DOMINATORS, bb, loop->header));
    867 }
    868 
    869 /* Gets basic blocks of a LOOP.  Header is the 0-th block, rest is in dfs
    870    order against direction of edges from latch.  Specially, if
    871    header != latch, latch is the 1-st block.  LOOP cannot be the fake
    872    loop tree root, and its size must be at most MAX_SIZE.  The blocks
    873    in the LOOP body are stored to BODY, and the size of the LOOP is
    874    returned.  */
    875 
    876 unsigned
    877 get_loop_body_with_size (const class loop *loop, basic_block *body,
    878 			 unsigned max_size)
    879 {
    880   return dfs_enumerate_from (loop->header, 1, glb_enum_p,
    881 			     body, max_size, loop);
    882 }
    883 
    884 /* Gets basic blocks of a LOOP.  Header is the 0-th block, rest is in dfs
    885    order against direction of edges from latch.  Specially, if
    886    header != latch, latch is the 1-st block.  */
    887 
    888 basic_block *
    889 get_loop_body (const class loop *loop)
    890 {
    891   basic_block *body, bb;
    892   unsigned tv = 0;
    893 
    894   gcc_assert (loop->num_nodes);
    895 
    896   body = XNEWVEC (basic_block, loop->num_nodes);
    897 
    898   if (loop->latch == EXIT_BLOCK_PTR_FOR_FN (cfun))
    899     {
    900       /* There may be blocks unreachable from EXIT_BLOCK, hence we need to
    901 	 special-case the fake loop that contains the whole function.  */
    902       gcc_assert (loop->num_nodes == (unsigned) n_basic_blocks_for_fn (cfun));
    903       body[tv++] = loop->header;
    904       body[tv++] = EXIT_BLOCK_PTR_FOR_FN (cfun);
    905       FOR_EACH_BB_FN (bb, cfun)
    906 	body[tv++] = bb;
    907     }
    908   else
    909     tv = get_loop_body_with_size (loop, body, loop->num_nodes);
    910 
    911   gcc_assert (tv == loop->num_nodes);
    912   return body;
    913 }
    914 
    915 /* Fills dominance descendants inside LOOP of the basic block BB into
    916    array TOVISIT from index *TV.  */
    917 
    918 static void
    919 fill_sons_in_loop (const class loop *loop, basic_block bb,
    920 		   basic_block *tovisit, int *tv)
    921 {
    922   basic_block son, postpone = NULL;
    923 
    924   tovisit[(*tv)++] = bb;
    925   for (son = first_dom_son (CDI_DOMINATORS, bb);
    926        son;
    927        son = next_dom_son (CDI_DOMINATORS, son))
    928     {
    929       if (!flow_bb_inside_loop_p (loop, son))
    930 	continue;
    931 
    932       if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
    933 	{
    934 	  postpone = son;
    935 	  continue;
    936 	}
    937       fill_sons_in_loop (loop, son, tovisit, tv);
    938     }
    939 
    940   if (postpone)
    941     fill_sons_in_loop (loop, postpone, tovisit, tv);
    942 }
    943 
    944 /* Gets body of a LOOP (that must be different from the outermost loop)
    945    sorted by dominance relation.  Additionally, if a basic block s dominates
    946    the latch, then only blocks dominated by s are be after it.  */
    947 
    948 basic_block *
    949 get_loop_body_in_dom_order (const class loop *loop)
    950 {
    951   basic_block *tovisit;
    952   int tv;
    953 
    954   gcc_assert (loop->num_nodes);
    955 
    956   tovisit = XNEWVEC (basic_block, loop->num_nodes);
    957 
    958   gcc_assert (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun));
    959 
    960   tv = 0;
    961   fill_sons_in_loop (loop, loop->header, tovisit, &tv);
    962 
    963   gcc_assert (tv == (int) loop->num_nodes);
    964 
    965   return tovisit;
    966 }
    967 
    968 /* Gets body of a LOOP sorted via provided BB_COMPARATOR.  */
    969 
    970 basic_block *
    971 get_loop_body_in_custom_order (const class loop *loop,
    972 			       int (*bb_comparator) (const void *, const void *))
    973 {
    974   basic_block *bbs = get_loop_body (loop);
    975 
    976   qsort (bbs, loop->num_nodes, sizeof (basic_block), bb_comparator);
    977 
    978   return bbs;
    979 }
    980 
    981 /* Same as above, but use gcc_sort_r instead of qsort.  */
    982 
    983 basic_block *
    984 get_loop_body_in_custom_order (const class loop *loop, void *data,
    985 			       int (*bb_comparator) (const void *, const void *, void *))
    986 {
    987   basic_block *bbs = get_loop_body (loop);
    988 
    989   gcc_sort_r (bbs, loop->num_nodes, sizeof (basic_block), bb_comparator, data);
    990 
    991   return bbs;
    992 }
    993 
    994 /* Get body of a LOOP in breadth first sort order.  */
    995 
    996 basic_block *
    997 get_loop_body_in_bfs_order (const class loop *loop)
    998 {
    999   basic_block *blocks;
   1000   basic_block bb;
   1001   unsigned int i = 1;
   1002   unsigned int vc = 0;
   1003 
   1004   gcc_assert (loop->num_nodes);
   1005   gcc_assert (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun));
   1006 
   1007   blocks = XNEWVEC (basic_block, loop->num_nodes);
   1008   auto_bitmap visited;
   1009   blocks[0] = loop->header;
   1010   bitmap_set_bit (visited, loop->header->index);
   1011   while (i < loop->num_nodes)
   1012     {
   1013       edge e;
   1014       edge_iterator ei;
   1015       gcc_assert (i > vc);
   1016       bb = blocks[vc++];
   1017 
   1018       FOR_EACH_EDGE (e, ei, bb->succs)
   1019 	{
   1020 	  if (flow_bb_inside_loop_p (loop, e->dest))
   1021 	    {
   1022 	      /* This bb is now visited.  */
   1023 	      if (bitmap_set_bit (visited, e->dest->index))
   1024 		blocks[i++] = e->dest;
   1025 	    }
   1026 	}
   1027     }
   1028 
   1029   return blocks;
   1030 }
   1031 
   1032 /* Hash function for struct loop_exit.  */
   1033 
   1034 hashval_t
   1035 loop_exit_hasher::hash (loop_exit *exit)
   1036 {
   1037   return htab_hash_pointer (exit->e);
   1038 }
   1039 
   1040 /* Equality function for struct loop_exit.  Compares with edge.  */
   1041 
   1042 bool
   1043 loop_exit_hasher::equal (loop_exit *exit, edge e)
   1044 {
   1045   return exit->e == e;
   1046 }
   1047 
   1048 /* Frees the list of loop exit descriptions EX.  */
   1049 
   1050 void
   1051 loop_exit_hasher::remove (loop_exit *exit)
   1052 {
   1053   loop_exit *next;
   1054   for (; exit; exit = next)
   1055     {
   1056       next = exit->next_e;
   1057 
   1058       exit->next->prev = exit->prev;
   1059       exit->prev->next = exit->next;
   1060 
   1061       ggc_free (exit);
   1062     }
   1063 }
   1064 
   1065 /* Returns the list of records for E as an exit of a loop.  */
   1066 
   1067 static struct loop_exit *
   1068 get_exit_descriptions (edge e)
   1069 {
   1070   return current_loops->exits->find_with_hash (e, htab_hash_pointer (e));
   1071 }
   1072 
   1073 /* Updates the lists of loop exits in that E appears.
   1074    If REMOVED is true, E is being removed, and we
   1075    just remove it from the lists of exits.
   1076    If NEW_EDGE is true and E is not a loop exit, we
   1077    do not try to remove it from loop exit lists.  */
   1078 
   1079 void
   1080 rescan_loop_exit (edge e, bool new_edge, bool removed)
   1081 {
   1082   struct loop_exit *exits = NULL, *exit;
   1083   class loop *aloop, *cloop;
   1084 
   1085   if (!loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
   1086     return;
   1087 
   1088   if (!removed
   1089       && e->src->loop_father != NULL
   1090       && e->dest->loop_father != NULL
   1091       && !flow_bb_inside_loop_p (e->src->loop_father, e->dest))
   1092     {
   1093       cloop = find_common_loop (e->src->loop_father, e->dest->loop_father);
   1094       for (aloop = e->src->loop_father;
   1095 	   aloop != cloop;
   1096 	   aloop = loop_outer (aloop))
   1097 	{
   1098 	  exit = ggc_alloc<loop_exit> ();
   1099 	  exit->e = e;
   1100 
   1101 	  exit->next = aloop->exits->next;
   1102 	  exit->prev = aloop->exits;
   1103 	  exit->next->prev = exit;
   1104 	  exit->prev->next = exit;
   1105 
   1106 	  exit->next_e = exits;
   1107 	  exits = exit;
   1108 	}
   1109     }
   1110 
   1111   if (!exits && new_edge)
   1112     return;
   1113 
   1114   loop_exit **slot
   1115     = current_loops->exits->find_slot_with_hash (e, htab_hash_pointer (e),
   1116 						 exits ? INSERT : NO_INSERT);
   1117   if (!slot)
   1118     return;
   1119 
   1120   if (exits)
   1121     {
   1122       if (*slot)
   1123 	loop_exit_hasher::remove (*slot);
   1124       *slot = exits;
   1125     }
   1126   else
   1127     current_loops->exits->clear_slot (slot);
   1128 }
   1129 
   1130 /* For each loop, record list of exit edges, and start maintaining these
   1131    lists.  */
   1132 
   1133 void
   1134 record_loop_exits (void)
   1135 {
   1136   basic_block bb;
   1137   edge_iterator ei;
   1138   edge e;
   1139 
   1140   if (!current_loops)
   1141     return;
   1142 
   1143   if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
   1144     return;
   1145   loops_state_set (LOOPS_HAVE_RECORDED_EXITS);
   1146 
   1147   gcc_assert (current_loops->exits == NULL);
   1148   current_loops->exits
   1149     = hash_table<loop_exit_hasher>::create_ggc (2 * number_of_loops (cfun));
   1150 
   1151   FOR_EACH_BB_FN (bb, cfun)
   1152     {
   1153       FOR_EACH_EDGE (e, ei, bb->succs)
   1154 	{
   1155 	  rescan_loop_exit (e, true, false);
   1156 	}
   1157     }
   1158 }
   1159 
   1160 /* Dumps information about the exit in *SLOT to FILE.
   1161    Callback for htab_traverse.  */
   1162 
   1163 int
   1164 dump_recorded_exit (loop_exit **slot, FILE *file)
   1165 {
   1166   struct loop_exit *exit = *slot;
   1167   unsigned n = 0;
   1168   edge e = exit->e;
   1169 
   1170   for (; exit != NULL; exit = exit->next_e)
   1171     n++;
   1172 
   1173   fprintf (file, "Edge %d->%d exits %u loops\n",
   1174 	   e->src->index, e->dest->index, n);
   1175 
   1176   return 1;
   1177 }
   1178 
   1179 /* Dumps the recorded exits of loops to FILE.  */
   1180 
   1181 extern void dump_recorded_exits (FILE *);
   1182 void
   1183 dump_recorded_exits (FILE *file)
   1184 {
   1185   if (!current_loops->exits)
   1186     return;
   1187   current_loops->exits->traverse<FILE *, dump_recorded_exit> (file);
   1188 }
   1189 
   1190 /* Releases lists of loop exits.  */
   1191 
   1192 void
   1193 release_recorded_exits (function *fn)
   1194 {
   1195   gcc_assert (loops_state_satisfies_p (fn, LOOPS_HAVE_RECORDED_EXITS));
   1196   loops_for_fn (fn)->exits->empty ();
   1197   loops_for_fn (fn)->exits = NULL;
   1198   loops_state_clear (fn, LOOPS_HAVE_RECORDED_EXITS);
   1199 }
   1200 
   1201 /* Returns the list of the exit edges of a LOOP.  */
   1202 
   1203 auto_vec<edge>
   1204 get_loop_exit_edges (const class loop *loop, basic_block *body)
   1205 {
   1206   auto_vec<edge> edges;
   1207   edge e;
   1208   unsigned i;
   1209   edge_iterator ei;
   1210   struct loop_exit *exit;
   1211 
   1212   gcc_assert (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun));
   1213 
   1214   /* If we maintain the lists of exits, use them.  Otherwise we must
   1215      scan the body of the loop.  */
   1216   if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
   1217     {
   1218       for (exit = loop->exits->next; exit->e; exit = exit->next)
   1219 	edges.safe_push (exit->e);
   1220     }
   1221   else
   1222     {
   1223       bool body_from_caller = true;
   1224       if (!body)
   1225 	{
   1226 	  body = get_loop_body (loop);
   1227 	  body_from_caller = false;
   1228 	}
   1229       for (i = 0; i < loop->num_nodes; i++)
   1230 	FOR_EACH_EDGE (e, ei, body[i]->succs)
   1231 	  {
   1232 	    if (!flow_bb_inside_loop_p (loop, e->dest))
   1233 	      edges.safe_push (e);
   1234 	  }
   1235       if (!body_from_caller)
   1236 	free (body);
   1237     }
   1238 
   1239   return edges;
   1240 }
   1241 
   1242 /* Counts the number of conditional branches inside LOOP.  */
   1243 
   1244 unsigned
   1245 num_loop_branches (const class loop *loop)
   1246 {
   1247   unsigned i, n;
   1248   basic_block * body;
   1249 
   1250   gcc_assert (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun));
   1251 
   1252   body = get_loop_body (loop);
   1253   n = 0;
   1254   for (i = 0; i < loop->num_nodes; i++)
   1255     if (EDGE_COUNT (body[i]->succs) >= 2)
   1256       n++;
   1257   free (body);
   1258 
   1259   return n;
   1260 }
   1261 
   1262 /* Adds basic block BB to LOOP.  */
   1263 void
   1264 add_bb_to_loop (basic_block bb, class loop *loop)
   1265 {
   1266   unsigned i;
   1267   loop_p ploop;
   1268   edge_iterator ei;
   1269   edge e;
   1270 
   1271   gcc_assert (bb->loop_father == NULL);
   1272   bb->loop_father = loop;
   1273   loop->num_nodes++;
   1274   FOR_EACH_VEC_SAFE_ELT (loop->superloops, i, ploop)
   1275     ploop->num_nodes++;
   1276 
   1277   FOR_EACH_EDGE (e, ei, bb->succs)
   1278     {
   1279       rescan_loop_exit (e, true, false);
   1280     }
   1281   FOR_EACH_EDGE (e, ei, bb->preds)
   1282     {
   1283       rescan_loop_exit (e, true, false);
   1284     }
   1285 }
   1286 
   1287 /* Remove basic block BB from loops.  */
   1288 void
   1289 remove_bb_from_loops (basic_block bb)
   1290 {
   1291   unsigned i;
   1292   class loop *loop = bb->loop_father;
   1293   loop_p ploop;
   1294   edge_iterator ei;
   1295   edge e;
   1296 
   1297   gcc_assert (loop != NULL);
   1298   loop->num_nodes--;
   1299   FOR_EACH_VEC_SAFE_ELT (loop->superloops, i, ploop)
   1300     ploop->num_nodes--;
   1301   bb->loop_father = NULL;
   1302 
   1303   FOR_EACH_EDGE (e, ei, bb->succs)
   1304     {
   1305       rescan_loop_exit (e, false, true);
   1306     }
   1307   FOR_EACH_EDGE (e, ei, bb->preds)
   1308     {
   1309       rescan_loop_exit (e, false, true);
   1310     }
   1311 }
   1312 
   1313 /* Finds nearest common ancestor in loop tree for given loops.  */
   1314 class loop *
   1315 find_common_loop (class loop *loop_s, class loop *loop_d)
   1316 {
   1317   unsigned sdepth, ddepth;
   1318 
   1319   if (!loop_s) return loop_d;
   1320   if (!loop_d) return loop_s;
   1321 
   1322   sdepth = loop_depth (loop_s);
   1323   ddepth = loop_depth (loop_d);
   1324 
   1325   if (sdepth < ddepth)
   1326     loop_d = (*loop_d->superloops)[sdepth];
   1327   else if (sdepth > ddepth)
   1328     loop_s = (*loop_s->superloops)[ddepth];
   1329 
   1330   while (loop_s != loop_d)
   1331     {
   1332       loop_s = loop_outer (loop_s);
   1333       loop_d = loop_outer (loop_d);
   1334     }
   1335   return loop_s;
   1336 }
   1337 
   1338 /* Removes LOOP from structures and frees its data.  */
   1339 
   1340 void
   1341 delete_loop (class loop *loop)
   1342 {
   1343   /* Remove the loop from structure.  */
   1344   flow_loop_tree_node_remove (loop);
   1345 
   1346   /* Remove loop from loops array.  */
   1347   (*current_loops->larray)[loop->num] = NULL;
   1348 
   1349   /* Free loop data.  */
   1350   flow_loop_free (loop);
   1351 }
   1352 
   1353 /* Cancels the LOOP; it must be innermost one.  */
   1354 
   1355 static void
   1356 cancel_loop (class loop *loop)
   1357 {
   1358   basic_block *bbs;
   1359   unsigned i;
   1360   class loop *outer = loop_outer (loop);
   1361 
   1362   gcc_assert (!loop->inner);
   1363 
   1364   /* Move blocks up one level (they should be removed as soon as possible).  */
   1365   bbs = get_loop_body (loop);
   1366   for (i = 0; i < loop->num_nodes; i++)
   1367     bbs[i]->loop_father = outer;
   1368 
   1369   free (bbs);
   1370   delete_loop (loop);
   1371 }
   1372 
   1373 /* Cancels LOOP and all its subloops.  */
   1374 void
   1375 cancel_loop_tree (class loop *loop)
   1376 {
   1377   while (loop->inner)
   1378     cancel_loop_tree (loop->inner);
   1379   cancel_loop (loop);
   1380 }
   1381 
   1382 /* Disable warnings about missing quoting in GCC diagnostics for
   1383    the verification errors.  Their format strings don't follow GCC
   1384    diagnostic conventions and the calls are ultimately followed by
   1385    a deliberate ICE triggered by a failed assertion.  */
   1386 #if __GNUC__ >= 10
   1387 #  pragma GCC diagnostic push
   1388 #  pragma GCC diagnostic ignored "-Wformat-diag"
   1389 #endif
   1390 
   1391 /* Checks that information about loops is correct
   1392      -- sizes of loops are all right
   1393      -- results of get_loop_body really belong to the loop
   1394      -- loop header have just single entry edge and single latch edge
   1395      -- loop latches have only single successor that is header of their loop
   1396      -- irreducible loops are correctly marked
   1397      -- the cached loop depth and loop father of each bb is correct
   1398   */
   1399 DEBUG_FUNCTION void
   1400 verify_loop_structure (void)
   1401 {
   1402   unsigned *sizes, i, j;
   1403   basic_block bb, *bbs;
   1404   int err = 0;
   1405   edge e;
   1406   unsigned num = number_of_loops (cfun);
   1407   struct loop_exit *exit, *mexit;
   1408   bool dom_available = dom_info_available_p (CDI_DOMINATORS);
   1409 
   1410   if (loops_state_satisfies_p (LOOPS_NEED_FIXUP))
   1411     {
   1412       error ("loop verification on loop tree that needs fixup");
   1413       err = 1;
   1414     }
   1415 
   1416   /* We need up-to-date dominators, compute or verify them.  */
   1417   if (!dom_available)
   1418     calculate_dominance_info (CDI_DOMINATORS);
   1419   else
   1420     verify_dominators (CDI_DOMINATORS);
   1421 
   1422   /* Check the loop tree root.  */
   1423   if (current_loops->tree_root->header != ENTRY_BLOCK_PTR_FOR_FN (cfun)
   1424       || current_loops->tree_root->latch != EXIT_BLOCK_PTR_FOR_FN (cfun)
   1425       || (current_loops->tree_root->num_nodes
   1426 	  != (unsigned) n_basic_blocks_for_fn (cfun)))
   1427     {
   1428       error ("corrupt loop tree root");
   1429       err = 1;
   1430     }
   1431 
   1432   /* Check the headers.  */
   1433   FOR_EACH_BB_FN (bb, cfun)
   1434     if (bb_loop_header_p (bb))
   1435       {
   1436 	if (bb->loop_father->header == NULL)
   1437 	  {
   1438 	    error ("loop with header %d marked for removal", bb->index);
   1439 	    err = 1;
   1440 	  }
   1441 	else if (bb->loop_father->header != bb)
   1442 	  {
   1443 	    error ("loop with header %d not in loop tree", bb->index);
   1444 	    err = 1;
   1445 	  }
   1446       }
   1447     else if (bb->loop_father->header == bb)
   1448       {
   1449 	error ("non-loop with header %d not marked for removal", bb->index);
   1450 	err = 1;
   1451       }
   1452 
   1453   /* Check the recorded loop father and sizes of loops.  */
   1454   auto_sbitmap visited (last_basic_block_for_fn (cfun));
   1455   bitmap_clear (visited);
   1456   bbs = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun));
   1457   for (auto loop : loops_list (cfun, LI_FROM_INNERMOST))
   1458     {
   1459       unsigned n;
   1460 
   1461       if (loop->header == NULL)
   1462 	{
   1463 	  error ("removed loop %d in loop tree", loop->num);
   1464 	  err = 1;
   1465 	  continue;
   1466 	}
   1467 
   1468       n = get_loop_body_with_size (loop, bbs, n_basic_blocks_for_fn (cfun));
   1469       if (loop->num_nodes != n)
   1470 	{
   1471 	  error ("size of loop %d should be %d, not %d",
   1472 		 loop->num, n, loop->num_nodes);
   1473 	  err = 1;
   1474 	}
   1475 
   1476       for (j = 0; j < n; j++)
   1477 	{
   1478 	  bb = bbs[j];
   1479 
   1480 	  if (!flow_bb_inside_loop_p (loop, bb))
   1481 	    {
   1482 	      error ("bb %d does not belong to loop %d",
   1483 		     bb->index, loop->num);
   1484 	      err = 1;
   1485 	    }
   1486 
   1487 	  /* Ignore this block if it is in an inner loop.  */
   1488 	  if (bitmap_bit_p (visited, bb->index))
   1489 	    continue;
   1490 	  bitmap_set_bit (visited, bb->index);
   1491 
   1492 	  if (bb->loop_father != loop)
   1493 	    {
   1494 	      error ("bb %d has father loop %d, should be loop %d",
   1495 		     bb->index, bb->loop_father->num, loop->num);
   1496 	      err = 1;
   1497 	    }
   1498 	}
   1499     }
   1500   free (bbs);
   1501 
   1502   /* Check headers and latches.  */
   1503   for (auto loop : loops_list (cfun, 0))
   1504     {
   1505       i = loop->num;
   1506       if (loop->header == NULL)
   1507 	continue;
   1508       if (!bb_loop_header_p (loop->header))
   1509 	{
   1510 	  error ("loop %d%'s header is not a loop header", i);
   1511 	  err = 1;
   1512 	}
   1513       if (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS)
   1514 	  && EDGE_COUNT (loop->header->preds) != 2)
   1515 	{
   1516 	  error ("loop %d%'s header does not have exactly 2 entries", i);
   1517 	  err = 1;
   1518 	}
   1519       if (loop->latch)
   1520 	{
   1521 	  if (!find_edge (loop->latch, loop->header))
   1522 	    {
   1523 	      error ("loop %d%'s latch does not have an edge to its header", i);
   1524 	      err = 1;
   1525 	    }
   1526 	  if (!dominated_by_p (CDI_DOMINATORS, loop->latch, loop->header))
   1527 	    {
   1528 	      error ("loop %d%'s latch is not dominated by its header", i);
   1529 	      err = 1;
   1530 	    }
   1531 	}
   1532       if (loops_state_satisfies_p (LOOPS_HAVE_SIMPLE_LATCHES))
   1533 	{
   1534 	  if (!single_succ_p (loop->latch))
   1535 	    {
   1536 	      error ("loop %d%'s latch does not have exactly 1 successor", i);
   1537 	      err = 1;
   1538 	    }
   1539 	  if (single_succ (loop->latch) != loop->header)
   1540 	    {
   1541 	      error ("loop %d%'s latch does not have header as successor", i);
   1542 	      err = 1;
   1543 	    }
   1544 	  if (loop->latch->loop_father != loop)
   1545 	    {
   1546 	      error ("loop %d%'s latch does not belong directly to it", i);
   1547 	      err = 1;
   1548 	    }
   1549 	}
   1550       if (loop->header->loop_father != loop)
   1551 	{
   1552 	  error ("loop %d%'s header does not belong directly to it", i);
   1553 	  err = 1;
   1554 	}
   1555       if (loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
   1556 	{
   1557 	  edge_iterator ei;
   1558 	  FOR_EACH_EDGE (e, ei, loop->header->preds)
   1559 	    if (dominated_by_p (CDI_DOMINATORS, e->src, loop->header)
   1560 		&& e->flags & EDGE_IRREDUCIBLE_LOOP)
   1561 	      {
   1562 		error ("loop %d%'s latch is marked as part of irreducible"
   1563 		       " region", i);
   1564 		err = 1;
   1565 	      }
   1566 	}
   1567 
   1568       /* Check cached number of iterations for released SSA names.  */
   1569       tree ref;
   1570       if (loop->nb_iterations
   1571 	  && (ref = walk_tree (&loop->nb_iterations,
   1572 			       find_released_ssa_name, NULL, NULL)))
   1573 	{
   1574 	  error ("loop %d%'s number of iterations %qE references the"
   1575 		 " released SSA name %qE", i, loop->nb_iterations, ref);
   1576 	  err = 1;
   1577 	}
   1578     }
   1579 
   1580   /* Check irreducible loops.  */
   1581   if (loops_state_satisfies_p (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS))
   1582     {
   1583       auto_edge_flag saved_edge_irr (cfun);
   1584       auto_bb_flag saved_bb_irr (cfun);
   1585       /* Save old info.  */
   1586       FOR_EACH_BB_FN (bb, cfun)
   1587 	{
   1588 	  edge_iterator ei;
   1589 	  if (bb->flags & BB_IRREDUCIBLE_LOOP)
   1590 	    bb->flags |= saved_bb_irr;
   1591 	  FOR_EACH_EDGE (e, ei, bb->succs)
   1592 	    if (e->flags & EDGE_IRREDUCIBLE_LOOP)
   1593 	      e->flags |= saved_edge_irr;
   1594 	}
   1595 
   1596       /* Recount it.  */
   1597       mark_irreducible_loops ();
   1598 
   1599       /* Compare.  */
   1600       FOR_EACH_BB_FN (bb, cfun)
   1601 	{
   1602 	  edge_iterator ei;
   1603 
   1604 	  if ((bb->flags & BB_IRREDUCIBLE_LOOP)
   1605 	      && !(bb->flags & saved_bb_irr))
   1606 	    {
   1607 	      error ("basic block %d should be marked irreducible", bb->index);
   1608 	      err = 1;
   1609 	    }
   1610 	  else if (!(bb->flags & BB_IRREDUCIBLE_LOOP)
   1611 		   && (bb->flags & saved_bb_irr))
   1612 	    {
   1613 	      error ("basic block %d should not be marked irreducible", bb->index);
   1614 	      err = 1;
   1615 	    }
   1616 	  bb->flags &= ~saved_bb_irr;
   1617 	  FOR_EACH_EDGE (e, ei, bb->succs)
   1618 	    {
   1619 	      if ((e->flags & EDGE_IRREDUCIBLE_LOOP)
   1620 		  && !(e->flags & saved_edge_irr))
   1621 		{
   1622 		  error ("edge from %d to %d should be marked irreducible",
   1623 			 e->src->index, e->dest->index);
   1624 		  err = 1;
   1625 		}
   1626 	      else if (!(e->flags & EDGE_IRREDUCIBLE_LOOP)
   1627 		       && (e->flags & saved_edge_irr))
   1628 		{
   1629 		  error ("edge from %d to %d should not be marked irreducible",
   1630 			 e->src->index, e->dest->index);
   1631 		  err = 1;
   1632 		}
   1633 	      e->flags &= ~saved_edge_irr;
   1634 	    }
   1635 	}
   1636     }
   1637 
   1638   /* Check the recorded loop exits.  */
   1639   for (auto loop : loops_list (cfun, 0))
   1640     {
   1641       if (!loop->exits || loop->exits->e != NULL)
   1642 	{
   1643 	  error ("corrupted head of the exits list of loop %d",
   1644 		 loop->num);
   1645 	  err = 1;
   1646 	}
   1647       else
   1648 	{
   1649 	  /* Check that the list forms a cycle, and all elements except
   1650 	     for the head are nonnull.  */
   1651 	  for (mexit = loop->exits, exit = mexit->next, i = 0;
   1652 	       exit->e && exit != mexit;
   1653 	       exit = exit->next)
   1654 	    {
   1655 	      if (i++ & 1)
   1656 		mexit = mexit->next;
   1657 	    }
   1658 
   1659 	  if (exit != loop->exits)
   1660 	    {
   1661 	      error ("corrupted exits list of loop %d", loop->num);
   1662 	      err = 1;
   1663 	    }
   1664 	}
   1665 
   1666       if (!loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
   1667 	{
   1668 	  if (loop->exits->next != loop->exits)
   1669 	    {
   1670 	      error ("nonempty exits list of loop %d, but exits are not recorded",
   1671 		     loop->num);
   1672 	      err = 1;
   1673 	    }
   1674 	}
   1675     }
   1676 
   1677   if (loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
   1678     {
   1679       unsigned n_exits = 0, eloops;
   1680 
   1681       sizes = XCNEWVEC (unsigned, num);
   1682       memset (sizes, 0, sizeof (unsigned) * num);
   1683       FOR_EACH_BB_FN (bb, cfun)
   1684 	{
   1685 	  edge_iterator ei;
   1686 	  if (bb->loop_father == current_loops->tree_root)
   1687 	    continue;
   1688 	  FOR_EACH_EDGE (e, ei, bb->succs)
   1689 	    {
   1690 	      if (flow_bb_inside_loop_p (bb->loop_father, e->dest))
   1691 		continue;
   1692 
   1693 	      n_exits++;
   1694 	      exit = get_exit_descriptions (e);
   1695 	      if (!exit)
   1696 		{
   1697 		  error ("exit %d->%d not recorded",
   1698 			 e->src->index, e->dest->index);
   1699 		  err = 1;
   1700 		}
   1701 	      eloops = 0;
   1702 	      for (; exit; exit = exit->next_e)
   1703 		eloops++;
   1704 
   1705 	      for (class loop *loop = bb->loop_father;
   1706 		   loop != e->dest->loop_father
   1707 		   /* When a loop exit is also an entry edge which
   1708 		      can happen when avoiding CFG manipulations
   1709 		      then the last loop exited is the outer loop
   1710 		      of the loop entered.  */
   1711 		   && loop != loop_outer (e->dest->loop_father);
   1712 		   loop = loop_outer (loop))
   1713 		{
   1714 		  eloops--;
   1715 		  sizes[loop->num]++;
   1716 		}
   1717 
   1718 	      if (eloops != 0)
   1719 		{
   1720 		  error ("wrong list of exited loops for edge %d->%d",
   1721 			 e->src->index, e->dest->index);
   1722 		  err = 1;
   1723 		}
   1724 	    }
   1725 	}
   1726 
   1727       if (n_exits != current_loops->exits->elements ())
   1728 	{
   1729 	  error ("too many loop exits recorded");
   1730 	  err = 1;
   1731 	}
   1732 
   1733       for (auto loop : loops_list (cfun, 0))
   1734 	{
   1735 	  eloops = 0;
   1736 	  for (exit = loop->exits->next; exit->e; exit = exit->next)
   1737 	    eloops++;
   1738 	  if (eloops != sizes[loop->num])
   1739 	    {
   1740 	      error ("%d exits recorded for loop %d (having %d exits)",
   1741 		     eloops, loop->num, sizes[loop->num]);
   1742 	      err = 1;
   1743 	    }
   1744 	}
   1745 
   1746       free (sizes);
   1747     }
   1748 
   1749   gcc_assert (!err);
   1750 
   1751   if (!dom_available)
   1752     free_dominance_info (CDI_DOMINATORS);
   1753 }
   1754 
   1755 #if __GNUC__ >= 10
   1756 #  pragma GCC diagnostic pop
   1757 #endif
   1758 
   1759 /* Returns latch edge of LOOP.  */
   1760 edge
   1761 loop_latch_edge (const class loop *loop)
   1762 {
   1763   return find_edge (loop->latch, loop->header);
   1764 }
   1765 
   1766 /* Returns preheader edge of LOOP.  */
   1767 edge
   1768 loop_preheader_edge (const class loop *loop)
   1769 {
   1770   edge e;
   1771   edge_iterator ei;
   1772 
   1773   gcc_assert (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS)
   1774 	      && ! loops_state_satisfies_p (LOOPS_MAY_HAVE_MULTIPLE_LATCHES));
   1775 
   1776   FOR_EACH_EDGE (e, ei, loop->header->preds)
   1777     if (e->src != loop->latch)
   1778       break;
   1779 
   1780   if (! e)
   1781     {
   1782       gcc_assert (! loop_outer (loop));
   1783       return single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun));
   1784     }
   1785 
   1786   return e;
   1787 }
   1788 
   1789 /* Returns true if E is an exit of LOOP.  */
   1790 
   1791 bool
   1792 loop_exit_edge_p (const class loop *loop, const_edge e)
   1793 {
   1794   return (flow_bb_inside_loop_p (loop, e->src)
   1795 	  && !flow_bb_inside_loop_p (loop, e->dest));
   1796 }
   1797 
   1798 /* Returns the single exit edge of LOOP, or NULL if LOOP has either no exit
   1799    or more than one exit.  If loops do not have the exits recorded, NULL
   1800    is returned always.  */
   1801 
   1802 edge
   1803 single_exit (const class loop *loop)
   1804 {
   1805   struct loop_exit *exit = loop->exits->next;
   1806 
   1807   if (!loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
   1808     return NULL;
   1809 
   1810   if (exit->e && exit->next == loop->exits)
   1811     return exit->e;
   1812   else
   1813     return NULL;
   1814 }
   1815 
   1816 /* Returns true when BB has an incoming edge exiting LOOP.  */
   1817 
   1818 bool
   1819 loop_exits_to_bb_p (class loop *loop, basic_block bb)
   1820 {
   1821   edge e;
   1822   edge_iterator ei;
   1823 
   1824   FOR_EACH_EDGE (e, ei, bb->preds)
   1825     if (loop_exit_edge_p (loop, e))
   1826       return true;
   1827 
   1828   return false;
   1829 }
   1830 
   1831 /* Returns true when BB has an outgoing edge exiting LOOP.  */
   1832 
   1833 bool
   1834 loop_exits_from_bb_p (class loop *loop, basic_block bb)
   1835 {
   1836   edge e;
   1837   edge_iterator ei;
   1838 
   1839   FOR_EACH_EDGE (e, ei, bb->succs)
   1840     if (loop_exit_edge_p (loop, e))
   1841       return true;
   1842 
   1843   return false;
   1844 }
   1845 
   1846 /* Return location corresponding to the loop control condition if possible.  */
   1847 
   1848 dump_user_location_t
   1849 get_loop_location (class loop *loop)
   1850 {
   1851   rtx_insn *insn = NULL;
   1852   class niter_desc *desc = NULL;
   1853   edge exit;
   1854 
   1855   /* For a for or while loop, we would like to return the location
   1856      of the for or while statement, if possible.  To do this, look
   1857      for the branch guarding the loop back-edge.  */
   1858 
   1859   /* If this is a simple loop with an in_edge, then the loop control
   1860      branch is typically at the end of its source.  */
   1861   desc = get_simple_loop_desc (loop);
   1862   if (desc->in_edge)
   1863     {
   1864       FOR_BB_INSNS_REVERSE (desc->in_edge->src, insn)
   1865         {
   1866           if (INSN_P (insn) && INSN_HAS_LOCATION (insn))
   1867             return insn;
   1868         }
   1869     }
   1870   /* If loop has a single exit, then the loop control branch
   1871      must be at the end of its source.  */
   1872   if ((exit = single_exit (loop)))
   1873     {
   1874       FOR_BB_INSNS_REVERSE (exit->src, insn)
   1875         {
   1876           if (INSN_P (insn) && INSN_HAS_LOCATION (insn))
   1877             return insn;
   1878         }
   1879     }
   1880   /* Next check the latch, to see if it is non-empty.  */
   1881   FOR_BB_INSNS_REVERSE (loop->latch, insn)
   1882     {
   1883       if (INSN_P (insn) && INSN_HAS_LOCATION (insn))
   1884         return insn;
   1885     }
   1886   /* Finally, if none of the above identifies the loop control branch,
   1887      return the first location in the loop header.  */
   1888   FOR_BB_INSNS (loop->header, insn)
   1889     {
   1890       if (INSN_P (insn) && INSN_HAS_LOCATION (insn))
   1891         return insn;
   1892     }
   1893   /* If all else fails, simply return the current function location.  */
   1894   return dump_user_location_t::from_function_decl (current_function_decl);
   1895 }
   1896 
   1897 /* Records that every statement in LOOP is executed I_BOUND times.
   1898    REALISTIC is true if I_BOUND is expected to be close to the real number
   1899    of iterations.  UPPER is true if we are sure the loop iterates at most
   1900    I_BOUND times.  */
   1901 
   1902 void
   1903 record_niter_bound (class loop *loop, const widest_int &i_bound,
   1904 		    bool realistic, bool upper)
   1905 {
   1906   /* Update the bounds only when there is no previous estimation, or when the
   1907      current estimation is smaller.  */
   1908   if (upper
   1909       && (!loop->any_upper_bound
   1910 	  || wi::ltu_p (i_bound, loop->nb_iterations_upper_bound)))
   1911     {
   1912       loop->any_upper_bound = true;
   1913       loop->nb_iterations_upper_bound = i_bound;
   1914       if (!loop->any_likely_upper_bound)
   1915 	{
   1916 	  loop->any_likely_upper_bound = true;
   1917 	  loop->nb_iterations_likely_upper_bound = i_bound;
   1918 	}
   1919     }
   1920   if (realistic
   1921       && (!loop->any_estimate
   1922 	  || wi::ltu_p (i_bound, loop->nb_iterations_estimate)))
   1923     {
   1924       loop->any_estimate = true;
   1925       loop->nb_iterations_estimate = i_bound;
   1926     }
   1927   if (!realistic
   1928       && (!loop->any_likely_upper_bound
   1929           || wi::ltu_p (i_bound, loop->nb_iterations_likely_upper_bound)))
   1930     {
   1931       loop->any_likely_upper_bound = true;
   1932       loop->nb_iterations_likely_upper_bound = i_bound;
   1933     }
   1934 
   1935   /* If an upper bound is smaller than the realistic estimate of the
   1936      number of iterations, use the upper bound instead.  */
   1937   if (loop->any_upper_bound
   1938       && loop->any_estimate
   1939       && wi::ltu_p (loop->nb_iterations_upper_bound,
   1940 		    loop->nb_iterations_estimate))
   1941     loop->nb_iterations_estimate = loop->nb_iterations_upper_bound;
   1942   if (loop->any_upper_bound
   1943       && loop->any_likely_upper_bound
   1944       && wi::ltu_p (loop->nb_iterations_upper_bound,
   1945 		    loop->nb_iterations_likely_upper_bound))
   1946     loop->nb_iterations_likely_upper_bound = loop->nb_iterations_upper_bound;
   1947 }
   1948 
   1949 /* Similar to get_estimated_loop_iterations, but returns the estimate only
   1950    if it fits to HOST_WIDE_INT.  If this is not the case, or the estimate
   1951    on the number of iterations of LOOP could not be derived, returns -1.  */
   1952 
   1953 HOST_WIDE_INT
   1954 get_estimated_loop_iterations_int (class loop *loop)
   1955 {
   1956   widest_int nit;
   1957   HOST_WIDE_INT hwi_nit;
   1958 
   1959   if (!get_estimated_loop_iterations (loop, &nit))
   1960     return -1;
   1961 
   1962   if (!wi::fits_shwi_p (nit))
   1963     return -1;
   1964   hwi_nit = nit.to_shwi ();
   1965 
   1966   return hwi_nit < 0 ? -1 : hwi_nit;
   1967 }
   1968 
   1969 /* Returns an upper bound on the number of executions of statements
   1970    in the LOOP.  For statements before the loop exit, this exceeds
   1971    the number of execution of the latch by one.  */
   1972 
   1973 HOST_WIDE_INT
   1974 max_stmt_executions_int (class loop *loop)
   1975 {
   1976   HOST_WIDE_INT nit = get_max_loop_iterations_int (loop);
   1977   HOST_WIDE_INT snit;
   1978 
   1979   if (nit == -1)
   1980     return -1;
   1981 
   1982   snit = (HOST_WIDE_INT) ((unsigned HOST_WIDE_INT) nit + 1);
   1983 
   1984   /* If the computation overflows, return -1.  */
   1985   return snit < 0 ? -1 : snit;
   1986 }
   1987 
   1988 /* Returns an likely upper bound on the number of executions of statements
   1989    in the LOOP.  For statements before the loop exit, this exceeds
   1990    the number of execution of the latch by one.  */
   1991 
   1992 HOST_WIDE_INT
   1993 likely_max_stmt_executions_int (class loop *loop)
   1994 {
   1995   HOST_WIDE_INT nit = get_likely_max_loop_iterations_int (loop);
   1996   HOST_WIDE_INT snit;
   1997 
   1998   if (nit == -1)
   1999     return -1;
   2000 
   2001   snit = (HOST_WIDE_INT) ((unsigned HOST_WIDE_INT) nit + 1);
   2002 
   2003   /* If the computation overflows, return -1.  */
   2004   return snit < 0 ? -1 : snit;
   2005 }
   2006 
   2007 /* Sets NIT to the estimated number of executions of the latch of the
   2008    LOOP.  If we have no reliable estimate, the function returns false, otherwise
   2009    returns true.  */
   2010 
   2011 bool
   2012 get_estimated_loop_iterations (class loop *loop, widest_int *nit)
   2013 {
   2014   /* Even if the bound is not recorded, possibly we can derrive one from
   2015      profile.  */
   2016   if (!loop->any_estimate)
   2017     {
   2018       if (loop->header->count.reliable_p ())
   2019 	{
   2020           *nit = gcov_type_to_wide_int
   2021 		   (expected_loop_iterations_unbounded (loop) + 1);
   2022 	  return true;
   2023 	}
   2024       return false;
   2025     }
   2026 
   2027   *nit = loop->nb_iterations_estimate;
   2028   return true;
   2029 }
   2030 
   2031 /* Sets NIT to an upper bound for the maximum number of executions of the
   2032    latch of the LOOP.  If we have no reliable estimate, the function returns
   2033    false, otherwise returns true.  */
   2034 
   2035 bool
   2036 get_max_loop_iterations (const class loop *loop, widest_int *nit)
   2037 {
   2038   if (!loop->any_upper_bound)
   2039     return false;
   2040 
   2041   *nit = loop->nb_iterations_upper_bound;
   2042   return true;
   2043 }
   2044 
   2045 /* Similar to get_max_loop_iterations, but returns the estimate only
   2046    if it fits to HOST_WIDE_INT.  If this is not the case, or the estimate
   2047    on the number of iterations of LOOP could not be derived, returns -1.  */
   2048 
   2049 HOST_WIDE_INT
   2050 get_max_loop_iterations_int (const class loop *loop)
   2051 {
   2052   widest_int nit;
   2053   HOST_WIDE_INT hwi_nit;
   2054 
   2055   if (!get_max_loop_iterations (loop, &nit))
   2056     return -1;
   2057 
   2058   if (!wi::fits_shwi_p (nit))
   2059     return -1;
   2060   hwi_nit = nit.to_shwi ();
   2061 
   2062   return hwi_nit < 0 ? -1 : hwi_nit;
   2063 }
   2064 
   2065 /* Sets NIT to an upper bound for the maximum number of executions of the
   2066    latch of the LOOP.  If we have no reliable estimate, the function returns
   2067    false, otherwise returns true.  */
   2068 
   2069 bool
   2070 get_likely_max_loop_iterations (class loop *loop, widest_int *nit)
   2071 {
   2072   if (!loop->any_likely_upper_bound)
   2073     return false;
   2074 
   2075   *nit = loop->nb_iterations_likely_upper_bound;
   2076   return true;
   2077 }
   2078 
   2079 /* Similar to get_max_loop_iterations, but returns the estimate only
   2080    if it fits to HOST_WIDE_INT.  If this is not the case, or the estimate
   2081    on the number of iterations of LOOP could not be derived, returns -1.  */
   2082 
   2083 HOST_WIDE_INT
   2084 get_likely_max_loop_iterations_int (class loop *loop)
   2085 {
   2086   widest_int nit;
   2087   HOST_WIDE_INT hwi_nit;
   2088 
   2089   if (!get_likely_max_loop_iterations (loop, &nit))
   2090     return -1;
   2091 
   2092   if (!wi::fits_shwi_p (nit))
   2093     return -1;
   2094   hwi_nit = nit.to_shwi ();
   2095 
   2096   return hwi_nit < 0 ? -1 : hwi_nit;
   2097 }
   2098 
   2099 /* Returns the loop depth of the loop BB belongs to.  */
   2100 
   2101 int
   2102 bb_loop_depth (const_basic_block bb)
   2103 {
   2104   return bb->loop_father ? loop_depth (bb->loop_father) : 0;
   2105 }
   2106 
   2107 /* Marks LOOP for removal and sets LOOPS_NEED_FIXUP.  */
   2108 
   2109 void
   2110 mark_loop_for_removal (loop_p loop)
   2111 {
   2112   if (loop->header == NULL)
   2113     return;
   2114   loop->former_header = loop->header;
   2115   loop->header = NULL;
   2116   loop->latch = NULL;
   2117   loops_state_set (LOOPS_NEED_FIXUP);
   2118 }
   2119 
   2120 /* Starting from loop tree ROOT, walk loop tree as the visiting
   2121    order specified by FLAGS.  The supported visiting orders
   2122    are:
   2123      - LI_ONLY_INNERMOST
   2124      - LI_FROM_INNERMOST
   2125      - Preorder (if neither of above is specified)  */
   2126 
   2127 void
   2128 loops_list::walk_loop_tree (class loop *root, unsigned flags)
   2129 {
   2130   bool only_innermost_p = flags & LI_ONLY_INNERMOST;
   2131   bool from_innermost_p = flags & LI_FROM_INNERMOST;
   2132   bool preorder_p = !(only_innermost_p || from_innermost_p);
   2133 
   2134   /* Early handle root without any inner loops, make later
   2135      processing simpler, that is all loops processed in the
   2136      following while loop are impossible to be root.  */
   2137   if (!root->inner)
   2138     {
   2139       if (flags & LI_INCLUDE_ROOT)
   2140 	this->to_visit.quick_push (root->num);
   2141       return;
   2142     }
   2143   else if (preorder_p && flags & LI_INCLUDE_ROOT)
   2144     this->to_visit.quick_push (root->num);
   2145 
   2146   class loop *aloop;
   2147   for (aloop = root->inner;
   2148        aloop->inner != NULL;
   2149        aloop = aloop->inner)
   2150     {
   2151       if (preorder_p)
   2152 	this->to_visit.quick_push (aloop->num);
   2153       continue;
   2154     }
   2155 
   2156   while (1)
   2157     {
   2158       gcc_assert (aloop != root);
   2159       if (from_innermost_p || aloop->inner == NULL)
   2160 	this->to_visit.quick_push (aloop->num);
   2161 
   2162       if (aloop->next)
   2163 	{
   2164 	  for (aloop = aloop->next;
   2165 	       aloop->inner != NULL;
   2166 	       aloop = aloop->inner)
   2167 	    {
   2168 	      if (preorder_p)
   2169 		this->to_visit.quick_push (aloop->num);
   2170 	      continue;
   2171 	    }
   2172 	}
   2173       else if (loop_outer (aloop) == root)
   2174 	break;
   2175       else
   2176 	aloop = loop_outer (aloop);
   2177     }
   2178 
   2179   /* When visiting from innermost, we need to consider root here
   2180      since the previous while loop doesn't handle it.  */
   2181   if (from_innermost_p && flags & LI_INCLUDE_ROOT)
   2182     this->to_visit.quick_push (root->num);
   2183 }
   2184 
   2185