[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