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

uint256_t via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 16 08:47:06 PDT 2021


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://urldefense.proofpoint.com/v2/url?u=https-3A__reviews.llvm.org_D97847&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=jWroZycNsW6nd1M_1mY-ewIVdwzOlw5vCcjh1dbGSe4&s=EkAhMZOMb7Zi_Wl2c2bPJ96JVP-RJ4Pyr8TFI1w5e2g&e=>
>    .
>    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://urldefense.proofpoint.com/v2/url?u=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Ddev&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=xZta8ysMk2YLuaeN6hu48YbOcAibTj8EHetJ7EUKsC8&s=HbDn2cNobhWts-Cp8E5W7XgWSCD6ebFSWkwl_zDmusk&e=>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210317/5004f098/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graycol.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210317/5004f098/attachment.gif>


More information about the llvm-dev mailing list