- body = get_loop_body (loop);
-
- invariant_regs = INITIALIZE_REG_SET (invariant_regs_head);
- single_set_regs = xmalloc (max_reg_num () * sizeof (rtx));
-
- blocks_invariant_registers (body, loop->num_nodes, invariant_regs);
- blocks_single_set_registers (body, loop->num_nodes, single_set_regs);
-
- n_branches = 0;
- for (i = 0; i < loop->num_nodes; i++)
- {
- for (e = body[i]->succ; e; e = e->succ_next)
- if (!flow_bb_inside_loop_p (loop, e->dest)
- && simple_loop_exit_p (loops, loop, e,
- invariant_regs, single_set_regs, &act))
- {
- /* Prefer constant iterations; the less the better. */
- if (!any)
- any = true;
- else if (!act.const_iter
- || (desc->const_iter && act.niter >= desc->niter))
- continue;
- *desc = act;
- }
-
- if (body[i]->succ && body[i]->succ->succ_next)
- n_branches++;
- }
- desc->n_branches = n_branches;
-
- if (rtl_dump_file && any)
- {
- fprintf (rtl_dump_file, "; Simple loop %i\n", loop->num);
- if (desc->postincr)
- fprintf (rtl_dump_file,
- "; does postincrement after loop exit condition\n");
-
- fprintf (rtl_dump_file, "; Induction variable:");
- print_simple_rtl (rtl_dump_file, desc->var);
- fputc ('\n', rtl_dump_file);
-
- fprintf (rtl_dump_file, "; Initial values:");
- print_simple_rtl (rtl_dump_file, desc->var_alts);
- fputc ('\n', rtl_dump_file);
-
- fprintf (rtl_dump_file, "; Stride:");
- print_simple_rtl (rtl_dump_file, desc->stride);
- fputc ('\n', rtl_dump_file);
-
- fprintf (rtl_dump_file, "; Compared with:");
- print_simple_rtl (rtl_dump_file, desc->lim);
- fputc ('\n', rtl_dump_file);
-
- fprintf (rtl_dump_file, "; Alternative values:");
- print_simple_rtl (rtl_dump_file, desc->lim_alts);
- fputc ('\n', rtl_dump_file);
-
- fprintf (rtl_dump_file, "; Exit condition:");
- if (desc->neg)
- fprintf (rtl_dump_file, "(negated)");
- fprintf (rtl_dump_file, "%s\n", GET_RTX_NAME (desc->cond));
-
- fprintf (rtl_dump_file, "; Number of branches:");
- fprintf (rtl_dump_file, "%d\n", desc->n_branches);
-
- fputc ('\n', rtl_dump_file);
- }