[llvm-dev] Implement Loop Fusion Pass
Vikram TV via llvm-dev
llvm-dev at lists.llvm.org
Fri Feb 19 09:16:02 PST 2016
Hi,
Thanks for the reply. Few thoughts inlined.
On Fri, Feb 19, 2016 at 8:00 AM, Adam Nemet <anemet at apple.com> wrote:
> Hi Vikram,
>
> On Feb 18, 2016, at 9:21 AM, Vikram TV via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
> Hi all,
>
> I have created a patch (up for review at: http://reviews.llvm.org/D17386)
> that does Loop Fusion implementation.
>
> Approach:
> Legality: Currently it can fuse two adjacent loops whose iteration spaces
> are same and are at same depth.
>
> Dependence legality: Currently, dependence legality cannot be checked
> across loops. Hence the loops are cloned along a versioned path,
> unconditionally fused along that path and then the dependence legality is
> checked on the fused loop keeping the instructions from original loops in
> context. Fusion is illegal if there is a backward dependence between memory
> accesses whose source was in first loop and sink was in second loop.
> Currently, LoopAccessAnalysis is used to check dependence legality.
>
>
> Thanks for writing up the design here.
>
> I think we have a pretty strong policy against creating temporary
> instructions and here you actually create an entire loop just to check
> legality.
>
I didn't understand the consequences here. A subsequent DCE pass or
explicit removal in this case is taking care of the temporaries. Any
pointers in this regard would be helpful.
>
> It would probably be a better design to add the capability of adding two
> LAI objects together. This would effectively simulate the fusion on the
> analysis side so you could query the legality from that.
>
I am not sure how the underlying analysis like SCEV would behave in this
case. As per my understanding, it queries for a particular loop while we
have populated accesses from two different loops. But assuming that it
works, we would lose the ability to try/test using DependenceAnalysis in
future. Currently, it is very easy to replace LoopAccessAnalysis with
DependenceAnalysis.
>
> Specifically, you could check if you have backward dependences between
> instructions in L2 to instructions in L1 which would be illegal.
>
> As a side effect you’d also get the total set of memchecks which you could
> filter to only include checks where the participating pointers come from
> different loops. (This is quite similar to LoopDistribution.)
>
I am happy to add a routine in a subsequent patch that filter the checks.
>
> Also I don’t think it should be too hard to teach LVer to be able to
> version two consecutive loops (or arbitrary CFG?).
>
I think yes. Instead of Loop Versioning deciding to version, code can be
factored out so that it versions unconditionally "also" as requested by the
pass that uses it.
>
> Let me know what you think,
> Adam
>
>
> A basic diagram below tries to explain the approach taken to test
> dependence legality on two adjacent loops (L1 and L2).
>
> L1PH (PH: Preheader)
> |
> L1
> |
> CB (L1Exit/L2PH: ConnectingBlock (CB) )
> |
> L2
> |
> L2Exit
>
> is versioned as:
>
> BooleanBB
> /\
> L1PH L1PH.clone
> | |
> L1 L1.clone
> | |
> CB CB.clone
> | |
> L2 L2.clone
> \ /
> L2Exit
>
> And fused as:
>
> BooleanBB
> /\
> L1PH FusedPH
> | |
> L1 L1Blocks
> | | \
> CB L2Blocks |
> | | |/
> L2 |
> \ /
> CommonExit
>
> Profitability: Yet to be added.
>
> Further, based on legality and profitability success, the fused loop is
> either retained or removed. If runtime checks are necessary, both original
> and fused loops are retained; otherwise the original loops are removed.
>
> Currently, I have scheduled the fusion pass after distribution pass. Such
> a schedule negates the effect of the other pass, but given that the
> distribution (and fusion) pass is experimental and off by default, I felt
> it was okay to schedule that way till a global profitability is implemented.
>
> Please share your feedback about the design and implementation.
>
> Thank you
> --
>
> Good time...
> Vikram TV
> CompilerTree Technologies
> Mysore, Karnataka, INDIA
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
>
--
Good time...
Vikram TV
CompilerTree Technologies
Mysore, Karnataka, INDIA
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160219/60d2ee4d/attachment.html>
More information about the llvm-dev
mailing list