On Wed, Jul 8, 2015 at 5:51 PM, Richard Biener <richard.guent...@gmail.com> wrote: > On Wed, Jul 8, 2015 at 8:52 AM, Bin.Cheng <amker.ch...@gmail.com> wrote: >> Hi, >> Function fill_always_executed_in_1 computes basic blocks' always >> executed information, and it has below code and comment: >> >> /* In a loop that is always entered we may proceed anyway. >> But record that we entered it and stop once we leave it. */ >> inn_loop = bb->loop_father; >> >> Then in following iterations, it breaks the loop if basic block not >> belonging to the inner loop is encountered. This means basic blocks >> after inner loop won't have always executed information computed, even >> they dominates the original loop's latch. >> >> Am I missing something? Why is that? > > To improve here it would need to verify that all exits of the inner loop > exit to the same BB of the outer loop and that no exit skips any blocks > in the outer loop. Like for But we are working on dominating tree anyway. Won't dominating latch be enough?
Thanks, bin > > for (;;) > { > for (;;) { if (x) goto skip; if (y) break } > foo(); > skip: > } > > so it is just a simple and conservative algorithm it seems. It's also > quadratic in the number of BBs of the outermost loop. > >> Thanks, >> bin