On Wed, Jul 8, 2015 at 5:58 PM, Bin.Cheng <amker.ch...@gmail.com> wrote:
> 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.
What we need to do is check if inner loop's exit goes to basic block
not belonging to outer loop?

Thanks,
bin

Reply via email to