[LLVMdev] Disable loop unroll pass

Shuxin Yang shuxin.llvm at gmail.com
Fri Nov 23 10:35:47 PST 2012


I omit your following comment in your previous mail. Please ignore my 
previous mail.

 >There are already some internals parameters in loop unroller to drive 
the heuristics. We use -unroll-count to skip unrolling.
 >But someone may want to enable unrolling even if the target says 
otherwise. IMHO, each target could provide internal flags to disable hw 
 >loop building and let the unroller works "normally"


On 11/23/2012 10:20 AM, Shuxin Yang wrote:
> Hi, Ivan:
>
>   Sorry for deviating the topic a bit. As I told you before I'm a LLVM 
> newbie, I cannot
> give you conclusive answer if the proposed interface is ok or not.
>
>   My personal opinion on these two interface is summarized bellow:
>
> - hasZeroCostLoop()
>    pro: it is clearly state the HW support.
>    con: Having zero cost loop doesn't imply the benefit HW loop could 
> achieve.
>            It is not clear as to if HW-loop conflict with unrolling 
> etc. So optimizer
>            has no idea how to use this interface.  If you just call 
> this interface to disable
>            unrolling, that would be overkill on some arch which has HW 
> support, as
>            on such arch HW-loop and unrolling are orthogonal.
>
>  - hasLoopZeroCostTopology(Loop *L, unsigend TripCount)
>       Why trip-count? It can be derived from the loop itself.
>       Which optimizer will call this interface?
>
>
>  I would suggest following interface:
>
>    /// get unrolling factor of given *INNERMOST* loop from HW's 
> perspective.
>    /// Note: this interface is for innermost loop only. Getting the 
> factor
>    /// for unroll-and-jam should call other interface.
>    virtual int getHwUnrollFactor (Loop*, unsigned CurUnrollingFactor) {
>        // by default, no object to the proposed unrolling factor.
>        return CurUnrollingFactor;
>    }
>
>   I think this interface would completely shield "zero-cost-loop" from 
> higher level
> optimizer, and you certainly can achieve whatever you want in your 
> virtual function
> implementation.
>
>    How does this sound to you? Eli?
>
> Thanks
> Shuxin
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> On 11/23/2012 02:41 AM, Ivan Llopard wrote:
>> Hi Shuxin,
>>
>> On 23/11/2012 00:17, Shuxin Yang wrote:
>>> Hi, Gang:
>>>
>>>   I don't want to discuss Open64 internal in LLVM mailing list. Let 
>>> us only focus on the design per se.
>>> As your this mail and your previous mail combined give me a 
>>> impression that :
>>>
>>>    The only reason you introduce the specific operator for HW loop 
>>> in Scalar Opt simply  because
>>> you have hard time in figure out the trip count in CodeGen.
>>>
>>>    This might be true for Open64's CodeGen (I don't want to discuss 
>>> this issue on this mailling list), but
>>> in general it is not true for other compilers.
>>
>> In LLVM, IR and machine code (till reg alloc pipeline) are in SSA, 
>> then trip count detection is almost the same on both sides.
>>
>>>
>>>    I'm dubious about "It greatly simplify the design".  The 
>>> downstream passes need to be fully aware
>>> of this new operator, which doesn't make things any simpler.
>>
>> I think we are going off-topic. I'm not proposing new llvm 
>> instructions to introduce hw loop semantics. What I'd like to do is 
>> to find a good interface between the loop unroller and targets to 
>> prevent loop unrolling.
>> hasZeroCostLoop() and hasLoopZeroCostTopology(Loop *L, unsigend 
>> TripCount) has been proposed so far.
>>
>> Ivan
>>
>>>
>>> Thanks
>>> Shuxin
>>>
>>> On 11/22/2012 02:56 PM, Gang Yu wrote:
>>>> Hi shuxin,
>>>>
>>>> Promote while-loop to do-loop is the job of loop induction 
>>>> recognized, not this transformation. The scalar transform for 
>>>> hwloop in optimizer is for that it is a trouble to discriminate 
>>>> trip counting code with the real production code stuff and do the 
>>>> elimination in cg,  we have to write customized code to handle this 
>>>> general stuff in ervey targets. So, we take the help from optimizer 
>>>> DCE,  make the trip count code hidden in emitted whirl, that 
>>>> greatly simply the design, especially interact with cg unroll, you 
>>>> can see the code, we add  validity check functionality , but the 
>>>> code reduced, more stable.
>>>>
>>>> Gang
>>>>
>>>
>>
>




More information about the llvm-dev mailing list