This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Question about always executed info computed in tree-ssa-loop-im.c

On Wed, Jul 8, 2015 at 12:01 PM, Bin.Cheng <> wrote:
> On Wed, Jul 8, 2015 at 5:58 PM, Bin.Cheng <> wrote:
>> On Wed, Jul 8, 2015 at 5:51 PM, Richard Biener
>> <> wrote:
>>> On Wed, Jul 8, 2015 at 8:52 AM, Bin.Cheng <> 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?

Hmm, yes.

>> 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?


          FOR_EACH_EDGE (e, ei, bb->succs)
            if (!flow_bb_inside_loop_p (loop, e->dest))
          if (e)

catch this?


> Thanks,
> bin

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]