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