Exemplo n.º 1
0
/* Main entry point.  Perform loop unswitching on all suitable LOOPS.  */
void
unswitch_loops (struct loops *loops)
{
    int i, num;
    struct loop *loop;

    /* Go through inner loops (only original ones).  */
    num = loops->num;

    for (i = 1; i < num; i++)
    {
        /* Removed loop?  */
        loop = loops->parray[i];
        if (!loop)
            continue;

        if (loop->inner)
            continue;

        unswitch_single_loop (loops, loop, NULL_RTX, 0);
#ifdef ENABLE_CHECKING
        verify_dominators (CDI_DOMINATORS);
        verify_loop_structure (loops);
#endif
    }

    iv_analysis_done ();
}
Exemplo n.º 2
0
/* Main entry point.  Perform loop unswitching on all suitable loops.  */
void
unswitch_loops (void)
{
  struct loop *loop;
  bool changed = false;

  /* Go through inner loops (only original ones).  */

  FOR_EACH_LOOP (loop, LI_ONLY_INNERMOST)
    changed |= unswitch_single_loop (loop, NULL_RTX, 0);

  iv_analysis_done ();

  /* If we unswitched any loop discover new loops that are eventually
     exposed by making irreducible regions reducible.  */
  if (changed)
    {
      calculate_dominance_info (CDI_DOMINATORS);
      fix_loop_structure (NULL);
    }
}
Exemplo n.º 3
0
void
doloop_optimize_loops (struct loops *loops)
{
    unsigned i;
    struct loop *loop;

    for (i = 1; i < loops->num; i++)
    {
        loop = loops->parray[i];
        if (!loop)
            continue;

        doloop_optimize (loop);
    }

    iv_analysis_done ();

#ifdef ENABLE_CHECKING
    verify_dominators (CDI_DOMINATORS);
    verify_loop_structure (loops);
#endif
}