diff options
Diffstat (limited to 'gcc/tree-ssa-loop-unswitch.c')
-rw-r--r-- | gcc/tree-ssa-loop-unswitch.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/tree-ssa-loop-unswitch.c b/gcc/tree-ssa-loop-unswitch.c index eaf41e7..b24f3d7 100644 --- a/gcc/tree-ssa-loop-unswitch.c +++ b/gcc/tree-ssa-loop-unswitch.c @@ -78,6 +78,7 @@ tree_ssa_unswitch_loops (void) loop_iterator li; struct loop *loop; bool changed = false; + HOST_WIDE_INT iterations; /* Go through inner loops (only original ones). */ FOR_EACH_LOOP (li, loop, LI_ONLY_INNERMOST) @@ -102,6 +103,16 @@ tree_ssa_unswitch_loops (void) continue; } + /* If the loop is not expected to iterate, there is no need + for unswitching. */ + iterations = estimated_loop_iterations_int (loop); + if (iterations >= 0 && iterations <= 1) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, ";; Not unswitching, loop is not expected to iterate\n"); + continue; + } + changed |= tree_unswitch_single_loop (loop, 0); } |