[LLVMdev] Make LoopBase inherit from "RegionBase"?

ether etherzhhb at gmail.com
Thu Jan 14 18:03:49 PST 2010


hi,

about region class, i think provide some method to extract the top level 
loop from a given region is useful in polly(our polyhedral optimization 
framework), because the we are only doing optimization on the region 
with loop.

and a long term consideration about "region pass":

if we want to integrate region analysis and optimization framework into 
llvm,  i think we can use an approach that similar to loop analysis and 
optimization: write a class "regionpass" inherit from "pass", and the 
corresponding pass manger "RegionPassManager". (a kind of function pass)
if we follow this approach, we need to push the region pass manager into 
the llvm pass manager stack.
the first question of this approach is, whats the relationship between 
"loop pass manager" and "region pass manager"?

way 1: make region pass manager below loop pass manager in the stack

pass manager stack:

bb pass manager <---top
loop pass manager
region pass manager
function pass manager
... <---bottom

in this way the region hierarchy need to be reconstruct when a loop 
transform change it.

way 2: make region pass manager above loop pass manager in the stack

pass manager stack:

bb pass manager <---top
region pass manager
loop pass manager
function pass manager
     ... <---bottom

in this way the loop hierarchy need to be reconstruct when a region pass 
change it.

now we need to choose a way to minimize the loop reconstruction or 
region reconstruction. i think that the chance that a region transform 
affect the loop structure is smaller, so maybe way 2 is better.


at last, i have some idea about finding a interesting region: (maybe 
make the region analysis too complex)

we can introduce some thing like "region filter" that determine the 
property of a region, the region filter will like a "pass", which can 
run on an instruction at a time, a basic block at a time, or even a sub 
region at a time, then we can write a "filter manager" like "pass 
manager " to stream the filtering process, so that we can promote the 
the performance of the region finding process.

comment and suggestion is appreciate.

best regards
--ether


On 2010-1-13 7:56, Jan Sjodin wrote:
> Why not use the "standard" algorithm for detecting SESE-regions and building a program structure tree?
> It should handle everything you want. It also becomes much simpler to specify a connected SESE-region
> by entry/exit edges, while a disconnected region is specified by entry/exit blocks. Only defining regions on
> blocks is not enough to be able to quickly determine how to replace/move a region in a CFG.
>
> The algorithm can be found in this paper:
> The Program Structure Tree: Computing Control Regions in Linear Time
> by Richard Johnson ,  David Pearson , KeshavPingali
>
> - Jan
>
> ----- Original Message ----
> From: Tobias Grosser<grosser at fim.uni-passau.de>
> To: ether<etherzhhb at gmail.com>
> Cc: LLVM Developers Mailing List<llvmdev at cs.uiuc.edu>
> Sent: Tue, January 12, 2010 12:59:45 PM
> Subject: Re: [LLVMdev] Make LoopBase inherit from "RegionBase"?
>
> On 01/08/10 14:20, ether wrote:
>    
>> sorry that i forgot to change the subjuect
>>
>>
>> hi all,
>>      
> Hi ether,
>
> now a kind of more complete answer.
>
>    
>> On 2010-1-7 0:11, John Mosby wrote:
>>      
>>> In LLVM we could add support for generalized CFG regions and
>>> RegionPasses. A region is a part of the CFG. The only information we
>>> have is, that it has one entry and one exit, this it can be optimized
>>> separately.
>>> I think this is the best way to add region analysis. I must admit this
>>> approach
>>> helps me on another, similar project I'm working on in parallel (no
>>> pun intended).
>>> Tobias, is this how you are architecting your region analysis already?
>>>
>>> John
>>>
>>>        
>> i just implementing the skeleton of Region/RegionInfo like LoopBase and
>> LoopInfoBase[1] in the llvm existing codes, and found that theres lots
>> of common between "Region" and "Loop":
>>
>> 1. both of them are consist of several BasicBlocks
>>      
> Correct.
>
>    
>> 2. both of them have some kind of nested structures, so both a loop and
>> a region could have parent or childrens
>>      
> Correct.
>
>    
>> 3. both of them have a BasicBlocks(header of a loop and "entry" of  a
>> region) that dominates all others
>>      
> Correct.
>
>
>    
>> and the Region class will have the most stuffs very similar in LoopBase,
>> like: ParentRegion, SubRegions, Blocks, getRegionDepth(),
>>      
> Correct.
>
>    
>> getExitBlock(), getExitingBlock() ......
>>      
> This might need some thoughts,
>
>
>    
>> so, could us just treat "Loop" as some kind of general "Region" of
>> BasicBlocks, and make Loop and Region inherit from "RegionBase"?
>>      
> I would like to do so, as I like the structure of this approach.
> However until now my pass was written on the side, as a proof of concept.
>
> I wrote two Passes:
>
> 1. Regions
> Detect the regions and print the regions tree. Try it with:
> opt -regions -analyze file.bc
>
> 2. RegionsWithoutLoops
> Find the maximal regions that do not contain any loops. Try it with:
> opt -regions-without-loops file.bc
> opt -view-regions-without-loops file.bc (needs graphviz)
>
> Both ATM only work on BasicBlocks. However I have seen the patches in
> your sandbox and I really like the idea to keep the analysis general.
>
> If you are interested you could have a look at my sandbox (not yet well
> documented and cleanly formatted).
>
> We might want to think about, how to merge our work.
>
> Tobi
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu          http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>    



More information about the llvm-dev mailing list