[llvm-dev] [GSoC 2021] Utilize LoopNest Pass

uint256_t via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 8 04:07:14 PDT 2021


Thank you for your comments.
I've totally forgot that utilities for analysis that aren't implemented as
analysis passes can be candidate. It'll be nice for them to utilize
LoopNest as a primary object.

Best,
Toshiki Maekawa

On Mon, Apr 5, 2021, 10:00 PM Whitney T Tsang <whitneyt at ca.ibm.com> wrote:

> Here are some comments:
>
>    1. Not sure LoopFusionPass can be changed to be a LoopNest pass, as it
>    operates on more than 1 LoopNest.
>    2. We can also consider changing analysis on top of transformation.
>    For example, you mentioned LoopCachePrinterPass, which is a transformation
>    that print the result of the analysis/utility  LoopCacheAnalysis.
>    3. Some loop passes used in a loop pipeline can be good candidate in a
>    later phase of the project, when you are more familiar with the idea, e.g.
>    LoopIdiomRecognizePass.
>    4. I prefer to study the impact and collect data needed for each pass,
>    instead of at the end of the project.
>
> Best,
> Whitney Tsang
>
> ----- Original message -----
> From: uint256_t <konndennsa at gmail.com>
> To: Whitney T Tsang <whitneyt at ca.ibm.com>
> Cc: Ettore Tiotto <etiotto at ca.ibm.com>, llvm-dev <llvm-dev at lists.llvm.org>
> Subject: [EXTERNAL] Re: [llvm-dev] [GSoC 2021] Utilize LoopNest Pass
> Date: Sun, Apr 4, 2021 9:00 PM
>
> Hi, it's been a while.
>
> I submitted a draft of project proposal to the website of GSoC.
> Could you give me some advice about it?
>
> (or should I share a draft on this ML?)
>
> Best,
> Toshiki Maekawa
>
> On Tue, Mar 23, 2021, 2:35 PM uint256_t <konndennsa at gmail.com> wrote:
>
> I didn't realize LoopUnrollAndJam used to be implemented as LoopPass. I
> should have checked the commit log.
>
> Thanks,
> Toshiki Maekawa
>
> 2021年3月23日(火) 1:01 Whitney T Tsang <whitneyt at ca.ibm.com>:
>
> LoopUnrollAndJam was changed from LoopPass to FunctionPass, which was a
> good choice as LoopNestPass didn't exists at that time.
> https://reviews.llvm.org/D72230
>
> You can see that `simplifyLoop` and `formLCSSARecursively` was adding in
> that patch.
> Those changes may not be needed anymore if we are using LoopNestPass, and
> if the PassManager itself can make sure the loops are simplified and in
> LCSSA form.
>
> Regards,
> Whitney Tsang
>
> ----- Original message -----
> From: uint256_t <konndennsa at gmail.com>
> To: Whitney T Tsang <whitneyt at ca.ibm.com>
> Cc: etiotto at ca.ibm.com, llvm-dev <llvm-dev at lists.llvm.org>
> Subject: [EXTERNAL] Re: [llvm-dev] [GSoC 2021] Utilize LoopNest Pass
> Date: Sat, Mar 20, 2021 10:40 AM
>
> Hi,
>
> I tried to utilize LoopNest pass for LoopUnrollAndJam pass, but found it
> difficult.
> LoopUnrollAndJam is currently implemented as FunctionPass, and using some
> functions that may add new loops like simplifyLoop().
>
> We need to track such mutations by LPMUpdater, so need to make the
> functions that may add loops use the updater.
> This could lead to a big code change. What do you think about this change?
>
> Thanks,
> Toshiki Maekawa
>
> 2021年3月17日(水) 0:47 uint256_t <konndennsa at gmail.com>:
>
> Thank you for your advice. I understand which passes are good for this
> change.
> I'll avoid transformation passes already used in a loop pipeline as much
> as possible.
>
> Best,
> Toshiki Maekawa
>
>
> 2021年3月15日(月) 22:17 Whitney T Tsang <whitneyt at ca.ibm.com>:
>
> Passes implemented as a loop pass can still be good for this change.
> I am referring to passes implemented as a loop pass and used as a loop
> pass in a loop pipeline *may *not be a good candidate.
> Take the LoopFullUnrollPass as an example, LoopFullUnrollPass is added in
> LPM2 with other loop passes, e.g. LoopIdiomRecognizePass,
> IndVarSimplifyPass, ...
> Loops are processed from inner to outer loop, where each loop is processed
> by all the passes in LPM2, before process its outer loops.
> If we change LoopFullUnrollPass to a LoopNest pass, then there is no way
> we can preserve the same order of processing loops.
> It *may *still be good to change such passes, but there can be huge
> performance impact, which we need to analyze and handle, and probably not
> the best choice to look at first.
>
> ```
> LoopPassManager
> <https://llvm.org/doxygen/classllvm_1_1PassManager_3_01Loop_00_01LoopAnalysisManager_00_01LoopStandardAnalysisResults_01_6_00_01LPMUpdater_01_6_01_4.html>
> LPM2(DebugLogging);
>
> LPM2.addPass(LoopIdiomRecognizePass
> <https://llvm.org/doxygen/classllvm_1_1LoopIdiomRecognizePass.html>());
> LPM2.addPass(IndVarSimplifyPass
> <https://llvm.org/doxygen/classllvm_1_1IndVarSimplifyPass.html>());
>
> for (auto &C
> <https://llvm.org/doxygen/README__ALTIVEC_8txt.html#a9aacd9146afe44bf656cd664e2a88c8c>
> : LateLoopOptimizationsEPCallbacks)
> C
> <https://llvm.org/doxygen/README__ALTIVEC_8txt.html#a9aacd9146afe44bf656cd664e2a88c8c>(LPM2,
> Level
> <https://llvm.org/doxygen/namespacellvm_1_1PICLevel.html#a66ddbf1bb21f90ddc44260d1ca677b6b>
> );
>
> LPM2.addPass(LoopDeletionPass
> <https://llvm.org/doxygen/classllvm_1_1LoopDeletionPass.html>());
>
> if (Phase
> <https://llvm.org/doxygen/AArch64FalkorHWPFFix_8cpp.html#a780618ccf661aebc12f8d991d294c950>
> != ThinOrFullLTOPhase::ThinLTOPreLink
> <https://llvm.org/doxygen/namespacellvm.html#a5d737fb4258bb27586a1bffd557fbb49ad94cc56b0a9155d607f2609b0f5c39d3>
> || !PGOOpt ||
> PGOOpt->Action != PGOOptions::SampleUse
> <https://llvm.org/doxygen/structllvm_1_1PGOOptions.html#a13bd589bcabdfc073bac5711f76dd2b6a9cbf1cb1b0731fc75926a6930592968a>
> )
> LPM2.addPass(LoopFullUnrollPass
> <https://llvm.org/doxygen/classllvm_1_1LoopFullUnrollPass.html>(Level
> <https://llvm.org/doxygen/namespacellvm_1_1PICLevel.html#a66ddbf1bb21f90ddc44260d1ca677b6b>
> .getSpeedupLevel(),
> /* OnlyWhenForced= */ !PTO.LoopUnrolling
> <https://llvm.org/doxygen/classllvm_1_1PipelineTuningOptions.html#af5b2b612c2769e79040e34bc4be7a77f>
> ,
> PTO.ForgetAllSCEVInLoopUnroll
> <https://llvm.org/doxygen/classllvm_1_1PipelineTuningOptions.html#ac4261b710708d3ffd351693d268dbc2b>
> ));
>
> for (auto &C
> <https://llvm.org/doxygen/README__ALTIVEC_8txt.html#a9aacd9146afe44bf656cd664e2a88c8c>
> : LoopOptimizerEndEPCallbacks)
> (LPM2, Level
> <https://llvm.org/doxygen/namespacellvm_1_1PICLevel.html#a66ddbf1bb21f90ddc44260d1ca677b6b>
> );
>
> FPM.addPass
> <https://llvm.org/doxygen/classllvm_1_1PassManager.html#a314ff184ce4ace8801e1158ef909e22e>
> (createFunctionToLoopPassAdaptor
> <https://llvm.org/doxygen/namespacellvm.html#a5118c8cfac85abdec7366d89d023a1ef>
> (
> std::move
> <https://llvm.org/doxygen/lib_2Target_2ARM_2README_8txt.html#ad3a99906764c35b2694ae90fa57744a5>(LPM2),
> /*UseMemorySSA=*/false, /*UseBlockFrequencyInfo=*/false,
> DebugLogging));
> ```
>
> Regards,
> Whitney Tsang
>
> [image: Inactive hide details for uint256_t ---2021/03/14 08:48:39
> PM---Hello, I have a question about finding good passes for utilizin]uint256_t
> ---2021/03/14 08:48:39 PM---Hello, I have a question about finding good
> passes for utilizing LoopNest pass.
>
> From: uint256_t <konndennsa at gmail.com>
> To: Whitney T Tsang <whitneyt at ca.ibm.com>
> Cc: etiotto at ca.ibm.com, llvm-dev <llvm-dev at lists.llvm.org>
> Date: 2021/03/14 08:48 PM
> Subject: [EXTERNAL] Re: [llvm-dev] [GSoC 2021] Utilize LoopNest Pass
> ------------------------------
>
>
>
> Hello,
>
> I have a question about finding good passes for utilizing LoopNest pass.
>
> > The LoopFullUnrollPass is not a good candidate for the change, as it is
> a loop pass and it is being used as a loop pass.
> Then you mean that passes which are  implemented as not a loop pass (=
> function pass) and not already used as a loop pass are good for this
> change?
> I didn't get that. Could you tell me why it is?
>
> Thanks in advance,
> Toshiki Maekawa
>
> On Fri, Mar 12, 2021, 1:20 AM uint256_t <*konndennsa at gmail.com*
> <konndennsa at gmail.com>> wrote:
>
>    - Thank you for your advice. As you mentioned, LoopUnrollAndJam seems
>    to be a good candidate.
>    I'm going to find another analyse/transform pass suitable for loop
>    nest pass.
>
>    Best,
>    Toshiki Maekawa
>
>    2021年3月10日(水) 23:32 Whitney T Tsang <*whitneyt at ca.ibm.com*
>    <whitneyt at ca.ibm.com>>:
>    Sure, in this project, we plan to utilize the LoopNest pass in some
>    existing passes.
>    As an example, here is one of the patches to transform the loop
>    interchange pass: *https://reviews.llvm.org/D97847*
>    <https://reviews.llvm.org/D97847>.
>    On top of doing the code changes, we want to understand what are the
>    pros and cons of the change.
>    We can do that by collecting some data, e.g. compile time.
>
>    There are two loop unroller, LoopFullUnrollPass and LoopUnrollPass.
>    The LoopFullUnrollPass is not a good candidate for the change, as it
>    is a loop pass and it is being used as a loop pass.
>    It is written to be traverse from inner to outer loop, with other loop
>    transformations in between in the loop pipeline.
>    The LoopUnrollPass could be a candidate, but the LoopUnrollAndJamPass
>    can be an easier to understand candidate,
>    as unroll and jam transformation naturally operate on more than one
>    loop (LoopNest).
>
>    Regards,
>    Whitney Tsang
>
>    [image: Inactive hide details for uint256_t ---2021/03/10 07:52:17
>    AM---I'm glad to get in touch with you two. I'm planning to utilize]uint256_t
>    ---2021/03/10 07:52:17 AM---I'm glad to get in touch with you two. I'm
>    planning to utilize LoopNest pass for some passes like lo
>
>    From: uint256_t <*konndennsa at gmail.com* <konndennsa at gmail.com>>
>    To:
>    Cc: llvm-dev <*llvm-dev at lists.llvm.org* <llvm-dev at lists.llvm.org>>,
>    *etiotto at ca.ibm.com* <etiotto at ca.ibm.com>, *whitneyt at ca.ibm.com*
>    <whitneyt at ca.ibm.com>
>    Date: 2021/03/10 07:52 AM
>    Subject: [EXTERNAL] Re: [llvm-dev] [GSoC 2021] Utilize LoopNest Pass
>    ------------------------------
>
>
>    ZjQcmQRYFpfptBannerEnd
>    I'm glad to get in touch with you two.
>    I'm planning to utilize LoopNest pass for some passes like loop
>    unrolling.
>    Could you tell me more about this project if any?
>
>    2021年3月9日(火) 20:47 Whitney Tsang <*whitney.uwaterloo at gmail.com*
>    <whitney.uwaterloo at gmail.com>>:
>       -
>          - + Whitney, Ettore
>
>          On Tue, Mar 9, 2021, 3:00 AM uint256_t via llvm-dev <
>          *llvm-dev at lists.llvm.org* <llvm-dev at lists.llvm.org>> wrote:
>          Hello,
>
>          I'm thinking of participating in GSoC at LLVM.
>          I've already talked about ideas with some project mentors but a
>          newly added project idea "Utilize LoopNest Pass" attracted me.
>          I want to get in touch with its mentors (Whitney Tsang, Ettore
>          Tiotto), whose email I couldn't find out.
>
>          Sincerely,
>          Toshiki Maekawa
>          _______________________________________________
>          LLVM Developers mailing list
>          *llvm-dev at lists.llvm.org* <llvm-dev at lists.llvm.org>
>          *https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev*
>          <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>
>
>
>
>
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210408/a848f622/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Image.1785d9126d05483523b1.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210408/a848f622/attachment.gif>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Image.1785d9126d05483523b1.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210408/a848f622/attachment-0001.gif>


More information about the llvm-dev mailing list