[LLVMdev] Separate loop condition and loop body

Benoit Boissinot bboissin+llvm at gmail.com
Mon May 10 12:48:41 PDT 2010


On Mon, May 10, 2010 at 12:32:06PM -0700, Trevor Harmon wrote:
> On May 10, 2010, at 11:35 AM, Benoit Boissinot wrote:
> 
> >To me it looks like any basic block from the loop body with a
> >successor not in the loop body is a BB "building the condition" (an
> >"exit" block).
> 
> I assume you mean "any basic block from the loop header".

No really, loop body.
> 
> I don't think your rule will work. Consider this counterexample:
> 
>    while (j < 10 && j > 5 && j % 2 == 0) {
>       j++;
>    }
> 
> This will give you the attached CFG. bb1 is the loop header; bb2 and
> bb3 are the other loop conditionals; bb is the loop body.
> 
> Note that bb3 is part of the condition but is not a basic block from
> the loop header.

At least in the CFG/graph theory I know, the loop body is the set of
nodes which form the strongly connected component (it contains the
headers). In this case that would be {bb1, bb2, bb3, bb}, with bb1 as
header. (the header is un-ambiguous in this case since the CFG is
natural/reducible there is only one possible header for the loop).

>From this set, bb1, bb2 and bb3 have exit edges, those are the
conditional blocks.

cheers,

Benoit

-- 
:wq



More information about the llvm-dev mailing list