Revert 259346.
[official-gcc.git] / gcc / cfgloopanal.c
blob9151a33d6f738876584963a2a238d9686d5657df
1 /* Natural loop analysis code for GNU compiler.
2 Copyright (C) 2002-2018 Free Software Foundation, Inc.
4 This file is part of GCC.
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.
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.
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/>. */
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 "predict.h"
27 #include "memmodel.h"
28 #include "emit-rtl.h"
29 #include "cfgloop.h"
30 #include "explow.h"
31 #include "expr.h"
32 #include "graphds.h"
33 #include "params.h"
34 #include "sreal.h"
36 struct target_cfgloop default_target_cfgloop;
37 #if SWITCHABLE_TARGET
38 struct target_cfgloop *this_target_cfgloop = &default_target_cfgloop;
39 #endif
41 /* Checks whether BB is executed exactly once in each LOOP iteration. */
43 bool
44 just_once_each_iteration_p (const struct loop *loop, const_basic_block bb)
46 /* It must be executed at least once each iteration. */
47 if (!dominated_by_p (CDI_DOMINATORS, loop->latch, bb))
48 return false;
50 /* And just once. */
51 if (bb->loop_father != loop)
52 return false;
54 /* But this was not enough. We might have some irreducible loop here. */
55 if (bb->flags & BB_IRREDUCIBLE_LOOP)
56 return false;
58 return true;
61 /* Marks blocks and edges that are part of non-recognized loops; i.e. we
62 throw away all latch edges and mark blocks inside any remaining cycle.
63 Everything is a bit complicated due to fact we do not want to do this
64 for parts of cycles that only "pass" through some loop -- i.e. for
65 each cycle, we want to mark blocks that belong directly to innermost
66 loop containing the whole cycle.
68 LOOPS is the loop tree. */
70 #define LOOP_REPR(LOOP) ((LOOP)->num + last_basic_block_for_fn (cfun))
71 #define BB_REPR(BB) ((BB)->index + 1)
73 bool
74 mark_irreducible_loops (void)
76 basic_block act;
77 struct graph_edge *ge;
78 edge e;
79 edge_iterator ei;
80 int src, dest;
81 unsigned depth;
82 struct graph *g;
83 int num = number_of_loops (cfun);
84 struct loop *cloop;
85 bool irred_loop_found = false;
86 int i;
88 gcc_assert (current_loops != NULL);
90 /* Reset the flags. */
91 FOR_BB_BETWEEN (act, ENTRY_BLOCK_PTR_FOR_FN (cfun),
92 EXIT_BLOCK_PTR_FOR_FN (cfun), next_bb)
94 act->flags &= ~BB_IRREDUCIBLE_LOOP;
95 FOR_EACH_EDGE (e, ei, act->succs)
96 e->flags &= ~EDGE_IRREDUCIBLE_LOOP;
99 /* Create the edge lists. */
100 g = new_graph (last_basic_block_for_fn (cfun) + num);
102 FOR_BB_BETWEEN (act, ENTRY_BLOCK_PTR_FOR_FN (cfun),
103 EXIT_BLOCK_PTR_FOR_FN (cfun), next_bb)
104 FOR_EACH_EDGE (e, ei, act->succs)
106 /* Ignore edges to exit. */
107 if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
108 continue;
110 src = BB_REPR (act);
111 dest = BB_REPR (e->dest);
113 /* Ignore latch edges. */
114 if (e->dest->loop_father->header == e->dest
115 && e->dest->loop_father->latch == act)
116 continue;
118 /* Edges inside a single loop should be left where they are. Edges
119 to subloop headers should lead to representative of the subloop,
120 but from the same place.
122 Edges exiting loops should lead from representative
123 of the son of nearest common ancestor of the loops in that
124 act lays. */
126 if (e->dest->loop_father->header == e->dest)
127 dest = LOOP_REPR (e->dest->loop_father);
129 if (!flow_bb_inside_loop_p (act->loop_father, e->dest))
131 depth = 1 + loop_depth (find_common_loop (act->loop_father,
132 e->dest->loop_father));
133 if (depth == loop_depth (act->loop_father))
134 cloop = act->loop_father;
135 else
136 cloop = (*act->loop_father->superloops)[depth];
138 src = LOOP_REPR (cloop);
141 add_edge (g, src, dest)->data = e;
144 /* Find the strongly connected components. */
145 graphds_scc (g, NULL);
147 /* Mark the irreducible loops. */
148 for (i = 0; i < g->n_vertices; i++)
149 for (ge = g->vertices[i].succ; ge; ge = ge->succ_next)
151 edge real = (edge) ge->data;
152 /* edge E in graph G is irreducible if it connects two vertices in the
153 same scc. */
155 /* All edges should lead from a component with higher number to the
156 one with lower one. */
157 gcc_assert (g->vertices[ge->src].component >= g->vertices[ge->dest].component);
159 if (g->vertices[ge->src].component != g->vertices[ge->dest].component)
160 continue;
162 real->flags |= EDGE_IRREDUCIBLE_LOOP;
163 irred_loop_found = true;
164 if (flow_bb_inside_loop_p (real->src->loop_father, real->dest))
165 real->src->flags |= BB_IRREDUCIBLE_LOOP;
168 free_graph (g);
170 loops_state_set (LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS);
171 return irred_loop_found;
174 /* Counts number of insns inside LOOP. */
176 num_loop_insns (const struct loop *loop)
178 basic_block *bbs, bb;
179 unsigned i, ninsns = 0;
180 rtx_insn *insn;
182 bbs = get_loop_body (loop);
183 for (i = 0; i < loop->num_nodes; i++)
185 bb = bbs[i];
186 FOR_BB_INSNS (bb, insn)
187 if (NONDEBUG_INSN_P (insn))
188 ninsns++;
190 free (bbs);
192 if (!ninsns)
193 ninsns = 1; /* To avoid division by zero. */
195 return ninsns;
198 /* Counts number of insns executed on average per iteration LOOP. */
200 average_num_loop_insns (const struct loop *loop)
202 basic_block *bbs, bb;
203 unsigned i, binsns;
204 sreal ninsns;
205 rtx_insn *insn;
207 ninsns = 0;
208 bbs = get_loop_body (loop);
209 for (i = 0; i < loop->num_nodes; i++)
211 bb = bbs[i];
213 binsns = 0;
214 FOR_BB_INSNS (bb, insn)
215 if (NONDEBUG_INSN_P (insn))
216 binsns++;
218 ninsns += (sreal)binsns * bb->count.to_sreal_scale (loop->header->count);
219 /* Avoid overflows. */
220 if (ninsns > 1000000)
221 return 100000;
223 free (bbs);
225 int64_t ret = ninsns.to_int ();
226 if (!ret)
227 ret = 1; /* To avoid division by zero. */
229 return ret;
232 /* Returns expected number of iterations of LOOP, according to
233 measured or guessed profile. No bounding is done on the
234 value. */
236 gcov_type
237 expected_loop_iterations_unbounded (const struct loop *loop,
238 bool *read_profile_p)
240 edge e;
241 edge_iterator ei;
242 gcov_type expected = -1;
244 if (read_profile_p)
245 *read_profile_p = false;
247 /* If we have no profile at all, use AVG_LOOP_NITER. */
248 if (profile_status_for_fn (cfun) == PROFILE_ABSENT)
249 expected = PARAM_VALUE (PARAM_AVG_LOOP_NITER);
250 else if (loop->latch && (loop->latch->count.initialized_p ()
251 || loop->header->count.initialized_p ()))
253 profile_count count_in = profile_count::zero (),
254 count_latch = profile_count::zero ();
256 FOR_EACH_EDGE (e, ei, loop->header->preds)
257 if (e->src == loop->latch)
258 count_latch = e->count ();
259 else
260 count_in += e->count ();
262 if (!count_latch.initialized_p ())
263 expected = PARAM_VALUE (PARAM_AVG_LOOP_NITER);
264 else if (!count_in.nonzero_p ())
265 expected = count_latch.to_gcov_type () * 2;
266 else
268 expected = (count_latch.to_gcov_type () + count_in.to_gcov_type ()
269 - 1) / count_in.to_gcov_type ();
270 if (read_profile_p
271 && count_latch.reliable_p () && count_in.reliable_p ())
272 *read_profile_p = true;
275 else
276 expected = PARAM_VALUE (PARAM_AVG_LOOP_NITER);
278 HOST_WIDE_INT max = get_max_loop_iterations_int (loop);
279 if (max != -1 && max < expected)
280 return max;
282 return expected;
285 /* Returns expected number of LOOP iterations. The returned value is bounded
286 by REG_BR_PROB_BASE. */
288 unsigned
289 expected_loop_iterations (struct loop *loop)
291 gcov_type expected = expected_loop_iterations_unbounded (loop);
292 return (expected > REG_BR_PROB_BASE ? REG_BR_PROB_BASE : expected);
295 /* Returns the maximum level of nesting of subloops of LOOP. */
297 unsigned
298 get_loop_level (const struct loop *loop)
300 const struct loop *ploop;
301 unsigned mx = 0, l;
303 for (ploop = loop->inner; ploop; ploop = ploop->next)
305 l = get_loop_level (ploop);
306 if (l >= mx)
307 mx = l + 1;
309 return mx;
312 /* Initialize the constants for computing set costs. */
314 void
315 init_set_costs (void)
317 int speed;
318 rtx_insn *seq;
319 rtx reg1 = gen_raw_REG (SImode, LAST_VIRTUAL_REGISTER + 1);
320 rtx reg2 = gen_raw_REG (SImode, LAST_VIRTUAL_REGISTER + 2);
321 rtx addr = gen_raw_REG (Pmode, LAST_VIRTUAL_REGISTER + 3);
322 rtx mem = validize_mem (gen_rtx_MEM (SImode, addr));
323 unsigned i;
325 target_avail_regs = 0;
326 target_clobbered_regs = 0;
327 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
328 if (TEST_HARD_REG_BIT (reg_class_contents[GENERAL_REGS], i)
329 && !fixed_regs[i])
331 target_avail_regs++;
332 if (call_used_regs[i])
333 target_clobbered_regs++;
336 target_res_regs = 3;
338 for (speed = 0; speed < 2; speed++)
340 crtl->maybe_hot_insn_p = speed;
341 /* Set up the costs for using extra registers:
343 1) If not many free registers remain, we should prefer having an
344 additional move to decreasing the number of available registers.
345 (TARGET_REG_COST).
346 2) If no registers are available, we need to spill, which may require
347 storing the old value to memory and loading it back
348 (TARGET_SPILL_COST). */
350 start_sequence ();
351 emit_move_insn (reg1, reg2);
352 seq = get_insns ();
353 end_sequence ();
354 target_reg_cost [speed] = seq_cost (seq, speed);
356 start_sequence ();
357 emit_move_insn (mem, reg1);
358 emit_move_insn (reg2, mem);
359 seq = get_insns ();
360 end_sequence ();
361 target_spill_cost [speed] = seq_cost (seq, speed);
363 default_rtl_profile ();
366 /* Estimates cost of increased register pressure caused by making N_NEW new
367 registers live around the loop. N_OLD is the number of registers live
368 around the loop. If CALL_P is true, also take into account that
369 call-used registers may be clobbered in the loop body, reducing the
370 number of available registers before we spill. */
372 unsigned
373 estimate_reg_pressure_cost (unsigned n_new, unsigned n_old, bool speed,
374 bool call_p)
376 unsigned cost;
377 unsigned regs_needed = n_new + n_old;
378 unsigned available_regs = target_avail_regs;
380 /* If there is a call in the loop body, the call-clobbered registers
381 are not available for loop invariants. */
382 if (call_p)
383 available_regs = available_regs - target_clobbered_regs;
385 /* If we have enough registers, we should use them and not restrict
386 the transformations unnecessarily. */
387 if (regs_needed + target_res_regs <= available_regs)
388 return 0;
390 if (regs_needed <= available_regs)
391 /* If we are close to running out of registers, try to preserve
392 them. */
393 cost = target_reg_cost [speed] * n_new;
394 else
395 /* If we run out of registers, it is very expensive to add another
396 one. */
397 cost = target_spill_cost [speed] * n_new;
399 if (optimize && (flag_ira_region == IRA_REGION_ALL
400 || flag_ira_region == IRA_REGION_MIXED)
401 && number_of_loops (cfun) <= (unsigned) IRA_MAX_LOOPS_NUM)
402 /* IRA regional allocation deals with high register pressure
403 better. So decrease the cost (to do more accurate the cost
404 calculation for IRA, we need to know how many registers lives
405 through the loop transparently). */
406 cost /= 2;
408 return cost;
411 /* Sets EDGE_LOOP_EXIT flag for all loop exits. */
413 void
414 mark_loop_exit_edges (void)
416 basic_block bb;
417 edge e;
419 if (number_of_loops (cfun) <= 1)
420 return;
422 FOR_EACH_BB_FN (bb, cfun)
424 edge_iterator ei;
426 FOR_EACH_EDGE (e, ei, bb->succs)
428 if (loop_outer (bb->loop_father)
429 && loop_exit_edge_p (bb->loop_father, e))
430 e->flags |= EDGE_LOOP_EXIT;
431 else
432 e->flags &= ~EDGE_LOOP_EXIT;
437 /* Return exit edge if loop has only one exit that is likely
438 to be executed on runtime (i.e. it is not EH or leading
439 to noreturn call. */
441 edge
442 single_likely_exit (struct loop *loop)
444 edge found = single_exit (loop);
445 vec<edge> exits;
446 unsigned i;
447 edge ex;
449 if (found)
450 return found;
451 exits = get_loop_exit_edges (loop);
452 FOR_EACH_VEC_ELT (exits, i, ex)
454 if (probably_never_executed_edge_p (cfun, ex)
455 /* We want to rule out paths to noreturns but not low probabilities
456 resulting from adjustments or combining.
457 FIXME: once we have better quality tracking, make this more
458 robust. */
459 || ex->probability <= profile_probability::very_unlikely ())
460 continue;
461 if (!found)
462 found = ex;
463 else
465 exits.release ();
466 return NULL;
469 exits.release ();
470 return found;
474 /* Gets basic blocks of a LOOP. Header is the 0-th block, rest is in dfs
475 order against direction of edges from latch. Specially, if
476 header != latch, latch is the 1-st block. */
478 vec<basic_block>
479 get_loop_hot_path (const struct loop *loop)
481 basic_block bb = loop->header;
482 vec<basic_block> path = vNULL;
483 bitmap visited = BITMAP_ALLOC (NULL);
485 while (true)
487 edge_iterator ei;
488 edge e;
489 edge best = NULL;
491 path.safe_push (bb);
492 bitmap_set_bit (visited, bb->index);
493 FOR_EACH_EDGE (e, ei, bb->succs)
494 if ((!best || e->probability > best->probability)
495 && !loop_exit_edge_p (loop, e)
496 && !bitmap_bit_p (visited, e->dest->index))
497 best = e;
498 if (!best || best->dest == loop->header)
499 break;
500 bb = best->dest;
502 BITMAP_FREE (visited);
503 return path;