1 /* Natural loop functions
2    Copyright (C) 1987-2018 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 #ifndef GCC_CFGLOOP_H
21 #define GCC_CFGLOOP_H
22 
23 #include "cfgloopmanip.h"
24 
25 /* Structure to hold decision about unrolling/peeling.  */
26 enum lpt_dec
27 {
28   LPT_NONE,
29   LPT_UNROLL_CONSTANT,
30   LPT_UNROLL_RUNTIME,
31   LPT_UNROLL_STUPID
32 };
33 
34 struct GTY (()) lpt_decision {
35   enum lpt_dec decision;
36   unsigned times;
37 };
38 
39 /* The type of extend applied to an IV.  */
40 enum iv_extend_code
41 {
42   IV_SIGN_EXTEND,
43   IV_ZERO_EXTEND,
44   IV_UNKNOWN_EXTEND
45 };
46 
47 /* The structure describing a bound on number of iterations of a loop.  */
48 
49 struct GTY ((chain_next ("%h.next"))) nb_iter_bound {
50   /* The statement STMT is executed at most ...  */
51   gimple *stmt;
52 
53   /* ... BOUND + 1 times (BOUND must be an unsigned constant).
54      The + 1 is added for the following reasons:
55 
56      a) 0 would otherwise be unused, while we would need to care more about
57         overflows (as MAX + 1 is sometimes produced as the estimate on number
58 	of executions of STMT).
59      b) it is consistent with the result of number_of_iterations_exit.  */
60   widest_int bound;
61 
62   /* True if the statement will cause the loop to be leaved the (at most)
63      BOUND + 1-st time it is executed, that is, all the statements after it
64      are executed at most BOUND times.  */
65   bool is_exit;
66 
67   /* The next bound in the list.  */
68   struct nb_iter_bound *next;
69 };
70 
71 /* Description of the loop exit.  */
72 
73 struct GTY ((for_user)) loop_exit {
74   /* The exit edge.  */
75   edge e;
76 
77   /* Previous and next exit in the list of the exits of the loop.  */
78   struct loop_exit *prev;
79   struct loop_exit *next;
80 
81   /* Next element in the list of loops from that E exits.  */
82   struct loop_exit *next_e;
83 };
84 
85 struct loop_exit_hasher : ggc_ptr_hash<loop_exit>
86 {
87   typedef edge compare_type;
88 
89   static hashval_t hash (loop_exit *);
90   static bool equal (loop_exit *, edge);
91   static void remove (loop_exit *);
92 };
93 
94 typedef struct loop *loop_p;
95 
96 /* An integer estimation of the number of iterations.  Estimate_state
97    describes what is the state of the estimation.  */
98 enum loop_estimation
99 {
100   /* Estimate was not computed yet.  */
101   EST_NOT_COMPUTED,
102   /* Estimate is ready.  */
103   EST_AVAILABLE,
104   EST_LAST
105 };
106 
107 /* The structure describing non-overflow control induction variable for
108    loop's exit edge.  */
109 struct GTY ((chain_next ("%h.next"))) control_iv {
110   tree base;
111   tree step;
112   struct control_iv *next;
113 };
114 
115 /* Structure to hold information for each natural loop.  */
116 struct GTY ((chain_next ("%h.next"))) loop {
117   /* Index into loops array.  Note indices will never be reused after loop
118      is destroyed.  */
119   int num;
120 
121   /* Number of loop insns.  */
122   unsigned ninsns;
123 
124   /* Basic block of loop header.  */
125   basic_block header;
126 
127   /* Basic block of loop latch.  */
128   basic_block latch;
129 
130   /* For loop unrolling/peeling decision.  */
131   struct lpt_decision lpt_decision;
132 
133   /* Average number of executed insns per iteration.  */
134   unsigned av_ninsns;
135 
136   /* Number of blocks contained within the loop.  */
137   unsigned num_nodes;
138 
139   /* Superloops of the loop, starting with the outermost loop.  */
140   vec<loop_p, va_gc> *superloops;
141 
142   /* The first inner (child) loop or NULL if innermost loop.  */
143   struct loop *inner;
144 
145   /* Link to the next (sibling) loop.  */
146   struct loop *next;
147 
148   /* Auxiliary info specific to a pass.  */
149   PTR GTY ((skip (""))) aux;
150 
151   /* The number of times the latch of the loop is executed.  This can be an
152      INTEGER_CST, or a symbolic expression representing the number of
153      iterations like "N - 1", or a COND_EXPR containing the runtime
154      conditions under which the number of iterations is non zero.
155 
156      Don't access this field directly: number_of_latch_executions
157      computes and caches the computed information in this field.  */
158   tree nb_iterations;
159 
160   /* An integer guaranteed to be greater or equal to nb_iterations.  Only
161      valid if any_upper_bound is true.  */
162   widest_int nb_iterations_upper_bound;
163 
164   widest_int nb_iterations_likely_upper_bound;
165 
166   /* An integer giving an estimate on nb_iterations.  Unlike
167      nb_iterations_upper_bound, there is no guarantee that it is at least
168      nb_iterations.  */
169   widest_int nb_iterations_estimate;
170 
171   /* If > 0, an integer, where the user asserted that for any
172      I in [ 0, nb_iterations ) and for any J in
173      [ I, min ( I + safelen, nb_iterations ) ), the Ith and Jth iterations
174      of the loop can be safely evaluated concurrently.  */
175   int safelen;
176 
177   /* Constraints are generally set by consumers and affect certain
178      semantics of niter analyzer APIs.  Currently the APIs affected are
179      number_of_iterations_exit* functions and their callers.  One typical
180      use case of constraints is to vectorize possibly infinite loop:
181 
182        1) Compute niter->assumptions by calling niter analyzer API and
183 	  record it as possible condition for loop versioning.
184        2) Clear buffered result of niter/scev analyzer.
185        3) Set constraint LOOP_C_FINITE assuming the loop is finite.
186        4) Analyze data references.  Since data reference analysis depends
187 	  on niter/scev analyzer, the point is that niter/scev analysis
188 	  is done under circumstance of LOOP_C_FINITE constraint.
189        5) Version the loop with niter->assumptions computed in step 1).
190        6) Vectorize the versioned loop in which niter->assumptions is
191 	  checked to be true.
192        7) Update constraints in versioned loops so that niter analyzer
193 	  in following passes can use it.
194 
195      Note consumers are usually the loop optimizers and it is consumers'
196      responsibility to set/clear constraints correctly.  Failing to do
197      that might result in hard to track down bugs in niter/scev consumers.  */
198   unsigned constraints;
199 
200   /* An integer estimation of the number of iterations.  Estimate_state
201      describes what is the state of the estimation.  */
202   ENUM_BITFIELD(loop_estimation) estimate_state : 8;
203 
204   unsigned any_upper_bound : 1;
205   unsigned any_estimate : 1;
206   unsigned any_likely_upper_bound : 1;
207 
208   /* True if the loop can be parallel.  */
209   unsigned can_be_parallel : 1;
210 
211   /* True if -Waggressive-loop-optimizations warned about this loop
212      already.  */
213   unsigned warned_aggressive_loop_optimizations : 1;
214 
215   /* True if this loop should never be vectorized.  */
216   unsigned dont_vectorize : 1;
217 
218   /* True if we should try harder to vectorize this loop.  */
219   unsigned force_vectorize : 1;
220 
221   /* True if the loop is part of an oacc kernels region.  */
222   unsigned in_oacc_kernels_region : 1;
223 
224   /* The number of times to unroll the loop.  0 means no information given,
225      just do what we always do.  A value of 1 means do not unroll the loop.
226      A value of USHRT_MAX means unroll with no specific unrolling factor.
227      Other values means unroll with the given unrolling factor.  */
228   unsigned short unroll;
229 
230   /* If this loop was inlined the main clique of the callee which does
231      not need remapping when copying the loop body.  */
232   unsigned short owned_clique;
233 
234   /* For SIMD loops, this is a unique identifier of the loop, referenced
235      by IFN_GOMP_SIMD_VF, IFN_GOMP_SIMD_LANE and IFN_GOMP_SIMD_LAST_LANE
236      builtins.  */
237   tree simduid;
238 
239   /* In loop optimization, it's common to generate loops from the original
240      loop.  This field records the index of the original loop which can be
241      used to track the original loop from newly generated loops.  This can
242      be done by calling function get_loop (cfun, orig_loop_num).  Note the
243      original loop could be destroyed for various reasons thus no longer
244      exists, as a result, function call to get_loop returns NULL pointer.
245      In this case, this field should not be used and needs to be cleared
246      whenever possible.  */
247   int orig_loop_num;
248 
249   /* Upper bound on number of iterations of a loop.  */
250   struct nb_iter_bound *bounds;
251 
252   /* Non-overflow control ivs of a loop.  */
253   struct control_iv *control_ivs;
254 
255   /* Head of the cyclic list of the exits of the loop.  */
256   struct loop_exit *exits;
257 
258   /* Number of iteration analysis data for RTL.  */
259   struct niter_desc *simple_loop_desc;
260 
261   /* For sanity checking during loop fixup we record here the former
262      loop header for loops marked for removal.  Note that this prevents
263      the basic-block from being collected but its index can still be
264      reused.  */
265   basic_block former_header;
266 };
267 
268 /* Set if the loop is known to be infinite.  */
269 #define LOOP_C_INFINITE		(1 << 0)
270 /* Set if the loop is known to be finite without any assumptions.  */
271 #define LOOP_C_FINITE		(1 << 1)
272 
273 /* Set C to the LOOP constraint.  */
274 static inline void
loop_constraint_set(struct loop * loop,unsigned c)275 loop_constraint_set (struct loop *loop, unsigned c)
276 {
277   loop->constraints |= c;
278 }
279 
280 /* Clear C from the LOOP constraint.  */
281 static inline void
loop_constraint_clear(struct loop * loop,unsigned c)282 loop_constraint_clear (struct loop *loop, unsigned c)
283 {
284   loop->constraints &= ~c;
285 }
286 
287 /* Check if C is set in the LOOP constraint.  */
288 static inline bool
loop_constraint_set_p(struct loop * loop,unsigned c)289 loop_constraint_set_p (struct loop *loop, unsigned c)
290 {
291   return (loop->constraints & c) == c;
292 }
293 
294 /* Flags for state of loop structure.  */
295 enum
296 {
297   LOOPS_HAVE_PREHEADERS = 1,
298   LOOPS_HAVE_SIMPLE_LATCHES = 2,
299   LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS = 4,
300   LOOPS_HAVE_RECORDED_EXITS = 8,
301   LOOPS_MAY_HAVE_MULTIPLE_LATCHES = 16,
302   LOOP_CLOSED_SSA = 32,
303   LOOPS_NEED_FIXUP = 64,
304   LOOPS_HAVE_FALLTHRU_PREHEADERS = 128
305 };
306 
307 #define LOOPS_NORMAL (LOOPS_HAVE_PREHEADERS | LOOPS_HAVE_SIMPLE_LATCHES \
308 		      | LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
309 #define AVOID_CFG_MODIFICATIONS (LOOPS_MAY_HAVE_MULTIPLE_LATCHES)
310 
311 /* Structure to hold CFG information about natural loops within a function.  */
312 struct GTY (()) loops {
313   /* State of loops.  */
314   int state;
315 
316   /* Array of the loops.  */
317   vec<loop_p, va_gc> *larray;
318 
319   /* Maps edges to the list of their descriptions as loop exits.  Edges
320      whose sources or destinations have loop_father == NULL (which may
321      happen during the cfg manipulations) should not appear in EXITS.  */
322   hash_table<loop_exit_hasher> *GTY(()) exits;
323 
324   /* Pointer to root of loop hierarchy tree.  */
325   struct loop *tree_root;
326 };
327 
328 /* Loop recognition.  */
329 bool bb_loop_header_p (basic_block);
330 void init_loops_structure (struct function *, struct loops *, unsigned);
331 extern struct loops *flow_loops_find (struct loops *);
332 extern void disambiguate_loops_with_multiple_latches (void);
333 extern void flow_loops_free (struct loops *);
334 extern void flow_loops_dump (FILE *,
335 			     void (*)(const struct loop *, FILE *, int), int);
336 extern void flow_loop_dump (const struct loop *, FILE *,
337 			    void (*)(const struct loop *, FILE *, int), int);
338 struct loop *alloc_loop (void);
339 extern void flow_loop_free (struct loop *);
340 int flow_loop_nodes_find (basic_block, struct loop *);
341 unsigned fix_loop_structure (bitmap changed_bbs);
342 bool mark_irreducible_loops (void);
343 void release_recorded_exits (function *);
344 void record_loop_exits (void);
345 void rescan_loop_exit (edge, bool, bool);
346 void sort_sibling_loops (function *);
347 
348 /* Loop data structure manipulation/querying.  */
349 extern void flow_loop_tree_node_add (struct loop *, struct loop *,
350 				     struct loop * = NULL);
351 extern void flow_loop_tree_node_remove (struct loop *);
352 extern bool flow_loop_nested_p	(const struct loop *, const struct loop *);
353 extern bool flow_bb_inside_loop_p (const struct loop *, const_basic_block);
354 extern struct loop * find_common_loop (struct loop *, struct loop *);
355 struct loop *superloop_at_depth (struct loop *, unsigned);
356 struct eni_weights;
357 extern int num_loop_insns (const struct loop *);
358 extern int average_num_loop_insns (const struct loop *);
359 extern unsigned get_loop_level (const struct loop *);
360 extern bool loop_exit_edge_p (const struct loop *, const_edge);
361 extern bool loop_exits_to_bb_p (struct loop *, basic_block);
362 extern bool loop_exits_from_bb_p (struct loop *, basic_block);
363 extern void mark_loop_exit_edges (void);
364 extern location_t get_loop_location (struct loop *loop);
365 
366 /* Loops & cfg manipulation.  */
367 extern basic_block *get_loop_body (const struct loop *);
368 extern unsigned get_loop_body_with_size (const struct loop *, basic_block *,
369 					 unsigned);
370 extern basic_block *get_loop_body_in_dom_order (const struct loop *);
371 extern basic_block *get_loop_body_in_bfs_order (const struct loop *);
372 extern basic_block *get_loop_body_in_custom_order (const struct loop *,
373 			       int (*) (const void *, const void *));
374 
375 extern vec<edge> get_loop_exit_edges (const struct loop *);
376 extern edge single_exit (const struct loop *);
377 extern edge single_likely_exit (struct loop *loop);
378 extern unsigned num_loop_branches (const struct loop *);
379 
380 extern edge loop_preheader_edge (const struct loop *);
381 extern edge loop_latch_edge (const struct loop *);
382 
383 extern void add_bb_to_loop (basic_block, struct loop *);
384 extern void remove_bb_from_loops (basic_block);
385 
386 extern void cancel_loop_tree (struct loop *);
387 extern void delete_loop (struct loop *);
388 
389 
390 extern void verify_loop_structure (void);
391 
392 /* Loop analysis.  */
393 extern bool just_once_each_iteration_p (const struct loop *, const_basic_block);
394 gcov_type expected_loop_iterations_unbounded (const struct loop *,
395 					      bool *read_profile_p = NULL, bool by_profile_only = false);
396 extern unsigned expected_loop_iterations (struct loop *);
397 extern rtx doloop_condition_get (rtx_insn *);
398 
399 void mark_loop_for_removal (loop_p);
400 
401 /* Induction variable analysis.  */
402 
403 /* The description of induction variable.  The things are a bit complicated
404    due to need to handle subregs and extends.  The value of the object described
405    by it can be obtained as follows (all computations are done in extend_mode):
406 
407    Value in i-th iteration is
408      delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)).
409 
410    If first_special is true, the value in the first iteration is
411      delta + mult * base
412 
413    If extend = UNKNOWN, first_special must be false, delta 0, mult 1 and value is
414      subreg_{mode} (base + i * step)
415 
416    The get_iv_value function can be used to obtain these expressions.
417 
418    ??? Add a third mode field that would specify the mode in that inner
419    computation is done, which would enable it to be different from the
420    outer one?  */
421 
422 struct rtx_iv
423 {
424   /* Its base and step (mode of base and step is supposed to be extend_mode,
425      see the description above).  */
426   rtx base, step;
427 
428   /* The type of extend applied to it (IV_SIGN_EXTEND, IV_ZERO_EXTEND,
429      or IV_UNKNOWN_EXTEND).  */
430   enum iv_extend_code extend;
431 
432   /* Operations applied in the extended mode.  */
433   rtx delta, mult;
434 
435   /* The mode it is extended to.  */
436   scalar_int_mode extend_mode;
437 
438   /* The mode the variable iterates in.  */
439   scalar_int_mode mode;
440 
441   /* Whether the first iteration needs to be handled specially.  */
442   unsigned first_special : 1;
443 };
444 
445 /* The description of an exit from the loop and of the number of iterations
446    till we take the exit.  */
447 
448 struct GTY(()) niter_desc
449 {
450   /* The edge out of the loop.  */
451   edge out_edge;
452 
453   /* The other edge leading from the condition.  */
454   edge in_edge;
455 
456   /* True if we are able to say anything about number of iterations of the
457      loop.  */
458   bool simple_p;
459 
460   /* True if the loop iterates the constant number of times.  */
461   bool const_iter;
462 
463   /* Number of iterations if constant.  */
464   uint64_t niter;
465 
466   /* Assumptions under that the rest of the information is valid.  */
467   rtx assumptions;
468 
469   /* Assumptions under that the loop ends before reaching the latch,
470      even if value of niter_expr says otherwise.  */
471   rtx noloop_assumptions;
472 
473   /* Condition under that the loop is infinite.  */
474   rtx infinite;
475 
476   /* Whether the comparison is signed.  */
477   bool signed_p;
478 
479   /* The mode in that niter_expr should be computed.  */
480   scalar_int_mode mode;
481 
482   /* The number of iterations of the loop.  */
483   rtx niter_expr;
484 };
485 
486 extern void iv_analysis_loop_init (struct loop *);
487 extern bool iv_analyze (rtx_insn *, scalar_int_mode, rtx, struct rtx_iv *);
488 extern bool iv_analyze_result (rtx_insn *, rtx, struct rtx_iv *);
489 extern bool iv_analyze_expr (rtx_insn *, scalar_int_mode, rtx,
490 			     struct rtx_iv *);
491 extern rtx get_iv_value (struct rtx_iv *, rtx);
492 extern bool biv_p (rtx_insn *, scalar_int_mode, rtx);
493 extern void find_simple_exit (struct loop *, struct niter_desc *);
494 extern void iv_analysis_done (void);
495 
496 extern struct niter_desc *get_simple_loop_desc (struct loop *loop);
497 extern void free_simple_loop_desc (struct loop *loop);
498 
499 static inline struct niter_desc *
simple_loop_desc(struct loop * loop)500 simple_loop_desc (struct loop *loop)
501 {
502   return loop->simple_loop_desc;
503 }
504 
505 /* Accessors for the loop structures.  */
506 
507 /* Returns the loop with index NUM from FNs loop tree.  */
508 
509 static inline struct loop *
get_loop(struct function * fn,unsigned num)510 get_loop (struct function *fn, unsigned num)
511 {
512   return (*loops_for_fn (fn)->larray)[num];
513 }
514 
515 /* Returns the number of superloops of LOOP.  */
516 
517 static inline unsigned
loop_depth(const struct loop * loop)518 loop_depth (const struct loop *loop)
519 {
520   return vec_safe_length (loop->superloops);
521 }
522 
523 /* Returns the immediate superloop of LOOP, or NULL if LOOP is the outermost
524    loop.  */
525 
526 static inline struct loop *
loop_outer(const struct loop * loop)527 loop_outer (const struct loop *loop)
528 {
529   unsigned n = vec_safe_length (loop->superloops);
530 
531   if (n == 0)
532     return NULL;
533 
534   return (*loop->superloops)[n - 1];
535 }
536 
537 /* Returns true if LOOP has at least one exit edge.  */
538 
539 static inline bool
loop_has_exit_edges(const struct loop * loop)540 loop_has_exit_edges (const struct loop *loop)
541 {
542   return loop->exits->next->e != NULL;
543 }
544 
545 /* Returns the list of loops in FN.  */
546 
547 inline vec<loop_p, va_gc> *
get_loops(struct function * fn)548 get_loops (struct function *fn)
549 {
550   struct loops *loops = loops_for_fn (fn);
551   if (!loops)
552     return NULL;
553 
554   return loops->larray;
555 }
556 
557 /* Returns the number of loops in FN (including the removed
558    ones and the fake loop that forms the root of the loop tree).  */
559 
560 static inline unsigned
number_of_loops(struct function * fn)561 number_of_loops (struct function *fn)
562 {
563   struct loops *loops = loops_for_fn (fn);
564   if (!loops)
565     return 0;
566 
567   return vec_safe_length (loops->larray);
568 }
569 
570 /* Returns true if state of the loops satisfies all properties
571    described by FLAGS.  */
572 
573 static inline bool
loops_state_satisfies_p(function * fn,unsigned flags)574 loops_state_satisfies_p (function *fn, unsigned flags)
575 {
576   return (loops_for_fn (fn)->state & flags) == flags;
577 }
578 
579 static inline bool
loops_state_satisfies_p(unsigned flags)580 loops_state_satisfies_p (unsigned flags)
581 {
582   return loops_state_satisfies_p (cfun, flags);
583 }
584 
585 /* Sets FLAGS to the loops state.  */
586 
587 static inline void
loops_state_set(function * fn,unsigned flags)588 loops_state_set (function *fn, unsigned flags)
589 {
590   loops_for_fn (fn)->state |= flags;
591 }
592 
593 static inline void
loops_state_set(unsigned flags)594 loops_state_set (unsigned flags)
595 {
596   loops_state_set (cfun, flags);
597 }
598 
599 /* Clears FLAGS from the loops state.  */
600 
601 static inline void
loops_state_clear(function * fn,unsigned flags)602 loops_state_clear (function *fn, unsigned flags)
603 {
604   loops_for_fn (fn)->state &= ~flags;
605 }
606 
607 static inline void
loops_state_clear(unsigned flags)608 loops_state_clear (unsigned flags)
609 {
610   if (!current_loops)
611     return;
612   loops_state_clear (cfun, flags);
613 }
614 
615 /* Check loop structure invariants, if internal consistency checks are
616    enabled.  */
617 
618 static inline void
checking_verify_loop_structure(void)619 checking_verify_loop_structure (void)
620 {
621   /* VERIFY_LOOP_STRUCTURE essentially asserts that no loops need fixups.
622 
623      The loop optimizers should never make changes to the CFG which
624      require loop fixups.  But the low level CFG manipulation code may
625      set the flag conservatively.
626 
627      Go ahead and clear the flag here.  That avoids the assert inside
628      VERIFY_LOOP_STRUCTURE, and if there is an inconsistency in the loop
629      structures VERIFY_LOOP_STRUCTURE will detect it.
630 
631      This also avoid the compile time cost of excessive fixups.  */
632   loops_state_clear (LOOPS_NEED_FIXUP);
633   if (flag_checking)
634     verify_loop_structure ();
635 }
636 
637 /* Loop iterators.  */
638 
639 /* Flags for loop iteration.  */
640 
641 enum li_flags
642 {
643   LI_INCLUDE_ROOT = 1,		/* Include the fake root of the loop tree.  */
644   LI_FROM_INNERMOST = 2,	/* Iterate over the loops in the reverse order,
645 				   starting from innermost ones.  */
646   LI_ONLY_INNERMOST = 4		/* Iterate only over innermost loops.  */
647 };
648 
649 /* The iterator for loops.  */
650 
651 struct loop_iterator
652 {
653   loop_iterator (function *fn, loop_p *loop, unsigned flags);
654   ~loop_iterator ();
655 
656   inline loop_p next ();
657 
658   /* The function we are visiting.  */
659   function *fn;
660 
661   /* The list of loops to visit.  */
662   vec<int> to_visit;
663 
664   /* The index of the actual loop.  */
665   unsigned idx;
666 };
667 
668 inline loop_p
next()669 loop_iterator::next ()
670 {
671   int anum;
672 
673   while (this->to_visit.iterate (this->idx, &anum))
674     {
675       this->idx++;
676       loop_p loop = get_loop (fn, anum);
677       if (loop)
678 	return loop;
679     }
680 
681   return NULL;
682 }
683 
684 inline
loop_iterator(function * fn,loop_p * loop,unsigned flags)685 loop_iterator::loop_iterator (function *fn, loop_p *loop, unsigned flags)
686 {
687   struct loop *aloop;
688   unsigned i;
689   int mn;
690 
691   this->idx = 0;
692   this->fn = fn;
693   if (!loops_for_fn (fn))
694     {
695       this->to_visit.create (0);
696       *loop = NULL;
697       return;
698     }
699 
700   this->to_visit.create (number_of_loops (fn));
701   mn = (flags & LI_INCLUDE_ROOT) ? 0 : 1;
702 
703   if (flags & LI_ONLY_INNERMOST)
704     {
705       for (i = 0; vec_safe_iterate (loops_for_fn (fn)->larray, i, &aloop); i++)
706 	if (aloop != NULL
707 	    && aloop->inner == NULL
708 	    && aloop->num >= mn)
709 	  this->to_visit.quick_push (aloop->num);
710     }
711   else if (flags & LI_FROM_INNERMOST)
712     {
713       /* Push the loops to LI->TO_VISIT in postorder.  */
714       for (aloop = loops_for_fn (fn)->tree_root;
715 	   aloop->inner != NULL;
716 	   aloop = aloop->inner)
717 	continue;
718 
719       while (1)
720 	{
721 	  if (aloop->num >= mn)
722 	    this->to_visit.quick_push (aloop->num);
723 
724 	  if (aloop->next)
725 	    {
726 	      for (aloop = aloop->next;
727 		   aloop->inner != NULL;
728 		   aloop = aloop->inner)
729 		continue;
730 	    }
731 	  else if (!loop_outer (aloop))
732 	    break;
733 	  else
734 	    aloop = loop_outer (aloop);
735 	}
736     }
737   else
738     {
739       /* Push the loops to LI->TO_VISIT in preorder.  */
740       aloop = loops_for_fn (fn)->tree_root;
741       while (1)
742 	{
743 	  if (aloop->num >= mn)
744 	    this->to_visit.quick_push (aloop->num);
745 
746 	  if (aloop->inner != NULL)
747 	    aloop = aloop->inner;
748 	  else
749 	    {
750 	      while (aloop != NULL && aloop->next == NULL)
751 		aloop = loop_outer (aloop);
752 	      if (aloop == NULL)
753 		break;
754 	      aloop = aloop->next;
755 	    }
756 	}
757     }
758 
759   *loop = this->next ();
760 }
761 
762 inline
~loop_iterator()763 loop_iterator::~loop_iterator ()
764 {
765   this->to_visit.release ();
766 }
767 
768 #define FOR_EACH_LOOP(LOOP, FLAGS) \
769   for (loop_iterator li(cfun, &(LOOP), FLAGS); \
770        (LOOP); \
771        (LOOP) = li.next ())
772 
773 #define FOR_EACH_LOOP_FN(FN, LOOP, FLAGS) \
774   for (loop_iterator li(FN, &(LOOP), FLAGS); \
775        (LOOP); \
776        (LOOP) = li.next ())
777 
778 /* The properties of the target.  */
779 struct target_cfgloop {
780   /* Number of available registers.  */
781   unsigned x_target_avail_regs;
782 
783   /* Number of available registers that are call-clobbered.  */
784   unsigned x_target_clobbered_regs;
785 
786   /* Number of registers reserved for temporary expressions.  */
787   unsigned x_target_res_regs;
788 
789   /* The cost for register when there still is some reserve, but we are
790      approaching the number of available registers.  */
791   unsigned x_target_reg_cost[2];
792 
793   /* The cost for register when we need to spill.  */
794   unsigned x_target_spill_cost[2];
795 };
796 
797 extern struct target_cfgloop default_target_cfgloop;
798 #if SWITCHABLE_TARGET
799 extern struct target_cfgloop *this_target_cfgloop;
800 #else
801 #define this_target_cfgloop (&default_target_cfgloop)
802 #endif
803 
804 #define target_avail_regs \
805   (this_target_cfgloop->x_target_avail_regs)
806 #define target_clobbered_regs \
807   (this_target_cfgloop->x_target_clobbered_regs)
808 #define target_res_regs \
809   (this_target_cfgloop->x_target_res_regs)
810 #define target_reg_cost \
811   (this_target_cfgloop->x_target_reg_cost)
812 #define target_spill_cost \
813   (this_target_cfgloop->x_target_spill_cost)
814 
815 /* Register pressure estimation for induction variable optimizations & loop
816    invariant motion.  */
817 extern unsigned estimate_reg_pressure_cost (unsigned, unsigned, bool, bool);
818 extern void init_set_costs (void);
819 
820 /* Loop optimizer initialization.  */
821 extern void loop_optimizer_init (unsigned);
822 extern void loop_optimizer_finalize (function *);
823 inline void
loop_optimizer_finalize()824 loop_optimizer_finalize ()
825 {
826   loop_optimizer_finalize (cfun);
827 }
828 
829 /* Optimization passes.  */
830 enum
831 {
832   UAP_UNROLL = 1,	/* Enables unrolling of loops if it seems profitable.  */
833   UAP_UNROLL_ALL = 2	/* Enables unrolling of all loops.  */
834 };
835 
836 extern void doloop_optimize_loops (void);
837 extern void move_loop_invariants (void);
838 extern vec<basic_block> get_loop_hot_path (const struct loop *loop);
839 
840 /* Returns the outermost loop of the loop nest that contains LOOP.*/
841 static inline struct loop *
loop_outermost(struct loop * loop)842 loop_outermost (struct loop *loop)
843 {
844   unsigned n = vec_safe_length (loop->superloops);
845 
846   if (n <= 1)
847     return loop;
848 
849   return (*loop->superloops)[1];
850 }
851 
852 extern void record_niter_bound (struct loop *, const widest_int &, bool, bool);
853 extern HOST_WIDE_INT get_estimated_loop_iterations_int (struct loop *);
854 extern HOST_WIDE_INT get_max_loop_iterations_int (const struct loop *);
855 extern HOST_WIDE_INT get_likely_max_loop_iterations_int (struct loop *);
856 extern bool get_estimated_loop_iterations (struct loop *loop, widest_int *nit);
857 extern bool get_max_loop_iterations (const struct loop *loop, widest_int *nit);
858 extern bool get_likely_max_loop_iterations (struct loop *loop, widest_int *nit);
859 extern int bb_loop_depth (const_basic_block);
860 
861 /* Converts VAL to widest_int.  */
862 
863 static inline widest_int
gcov_type_to_wide_int(gcov_type val)864 gcov_type_to_wide_int (gcov_type val)
865 {
866   HOST_WIDE_INT a[2];
867 
868   a[0] = (unsigned HOST_WIDE_INT) val;
869   /* If HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_WIDEST_INT, avoid shifting by
870      the size of type.  */
871   val >>= HOST_BITS_PER_WIDE_INT - 1;
872   val >>= 1;
873   a[1] = (unsigned HOST_WIDE_INT) val;
874 
875   return widest_int::from_array (a, 2);
876 }
877 #endif /* GCC_CFGLOOP_H */
878