[LLVMdev] An unexpected behavior in RegionInfo's block_iterator

Paul Vario paul.paul.mit at gmail.com
Fri May 2 16:01:48 PDT 2014


On Fri, May 2, 2014 at 5:30 PM, Tobias Grosser <tobias at grosser.es> wrote:

> On 03/05/2014 00:15, Paul Vario wrote:
>
>> Hi Tobias,
>>
>>       Thanks so much for the quick response. Your approach fixes the
>> issue.
>>       On a bigger context, would it make more sense to make the region
>> exit
>> part of the region? For example, a while loop gets lowered down to LLVM IR
>> contains while.cond, while.body and while.end. If one tries to use
>> RegionInfo as a substitute for structural analysis, she might think
>> while.end should belong to the region/structure ... is it necessary to
>> exclude the exit from being part of the region or both ways are equally
>> correct in terms of uniquely representing regions?
>>
>
> The region provides both the exiting blocks as well as the exit block. So
> you should have all you need, no?
>
Yes, the region interface suffices all my needs. It just does not contain
an "iterator" that can iterate all the basic blocks
in the region plus the exit at once. What I usually do, under this kind of
situation, is to define a std::vector of basicblocks,
push all the basic blocks in the region using block_iterator in a for loop.
And then, at the end, push_back(region->getExit()).


>
> An example, where it is beneficial to use the block after the region as to
> define a region is the following:
>
>     IF-1
>    /    \
>   |    IF-2
>   |   /   \
>   |   |   |
>    \  |  /
>     \ | /
>      \|/
>      END
>
> Here, we would like to model two regions IF-1 => END and IF-2 => END. The
> first region contains IF-1 and IF-2, the second one just IF-2. Obviously,
> neither of these regions has a single exit edge, but for both it is
> possible to create a single exit edge by introducing two
> new basic blocks on the outgoing edges of each region.
>
> Cheers,
> Tobias
>
Got it! Thanks for the example.

Best,
Paul
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140502/d6b5c0bf/attachment.html>


More information about the llvm-dev mailing list