[LLVMdev] An unexpected behavior in RegionInfo's block_iterator

Tobias Grosser tobias at grosser.es
Fri May 2 15:30:13 PDT 2014


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?

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



More information about the llvm-dev mailing list