/* 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 (); }
/* 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); } }
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 }