[LLVMdev] Regions according to LLVM
Félix Cloutier
felixcca at yahoo.ca
Fri Jul 17 09:32:06 PDT 2015
Thank you for your answer.
Félix
> Le 2015-07-17 à 01:08:11, Tobias Grosser <tobias at grosser.es> a écrit :
>
> On 07/16/2015 08:01 PM, Félix Cloutier wrote:
>> Hi all,
>>
>> I'm working with regions, and I was surprised by the region set of this function:
>>
>>> define void @foo() {
>>> br i1 false, label %loop, label %end
>>>
>>> loop:
>>> br i1 false, label %loop, label %end
>>>
>>> end:
>>> ret void
>>> }
>>
>>
>> .dot file as generated by opt —view-regions attached. Essentially, there are 3 regions: one that has the whole function, one that has the entry block and the loop, and one that has the loop only.
>>
>> The second one puzzles me. The definition of single-entry single-exit region that I know of uses edges instead of blocks but can rather easily be extended to blocks: edge A dominates edge B, edge B postdominates edge A, and any cycle containing edge A also contains edge B.
>>
>> I'm confused because in the case of the second region, the loop block does not postdominate the entry, and I can't think of a pair of edges around these that work without being equivalent to the last region.
>>
>> Am I missing something?
>
> Hi Felix,
>
> you may want to try the option -only-simple-regions when looking at the regions, which illustrates that there are two kind of regions, simple ones (which follow what you expect) and extended regions (which do not have a simple exit edge, but which can be transformed to a single region by inserting a single BB).
>
> For details, have a look into the RegionInfo.h file, starting line 185 with: /// @brief A single entry single exit Region.
>
> Tobias
More information about the llvm-dev
mailing list