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

uint256_t via llvm-dev llvm-dev at lists.llvm.org
Mon Mar 22 22:35:36 PDT 2021


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://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_classllvm-5F1-5F1PassManager-5F3-5F01Loop-5F00-5F01LoopAnalysisManager-5F00-5F01LoopStandardAnalysisResults-5F01-5F6-5F00-5F01LPMUpdater-5F01-5F6-5F01-5F4.html&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=VO1MvXw-cyt9Eux2SyzPWCnjAt7FTDEn-21TlLa6emY&e=>
> LPM2(DebugLogging);
>
> LPM2.addPass(LoopIdiomRecognizePass
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_classllvm-5F1-5F1LoopIdiomRecognizePass.html&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=zT88OFp3DjdtfeL61FZnvACBnEBuBn6Kev6csSS7I24&e=>
> ());
> LPM2.addPass(IndVarSimplifyPass
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_classllvm-5F1-5F1IndVarSimplifyPass.html&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=5JiPKlMnVXnGB19EcyRykS-gIuojTq9YDMfbowRa6wE&e=>
> ());
>
> for (auto &C
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_README-5F-5FALTIVEC-5F8txt.html-23a9aacd9146afe44bf656cd664e2a88c8c&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=bADrxeYblE8QaL6xuXPkUIH4Z6BAoswihLzXx6H5zI0&e=>
> : LateLoopOptimizationsEPCallbacks)
> C
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_README-5F-5FALTIVEC-5F8txt.html-23a9aacd9146afe44bf656cd664e2a88c8c&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=bADrxeYblE8QaL6xuXPkUIH4Z6BAoswihLzXx6H5zI0&e=>(LPM2,
> Level
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_namespacellvm-5F1-5F1PICLevel.html-23a66ddbf1bb21f90ddc44260d1ca677b6b&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=fDNQgJPblWk_XqJYM5QZz4ionfC0bPG1Kf26Bk09UGA&e=>
> );
>
> LPM2.addPass(LoopDeletionPass
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_classllvm-5F1-5F1LoopDeletionPass.html&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=NrdQXlgDr30LUEmEzu4iPGYz0mF-OZMGaHf-iF7YTUA&e=>
> ());
>
> if (Phase
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_AArch64FalkorHWPFFix-5F8cpp.html-23a780618ccf661aebc12f8d991d294c950&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=6GqmPHUAgZNcbeHiyCpbQEtvdpBxnuoFKWYjsSaBWHg&e=>
> != ThinOrFullLTOPhase::ThinLTOPreLink
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_namespacellvm.html-23a5d737fb4258bb27586a1bffd557fbb49ad94cc56b0a9155d607f2609b0f5c39d3&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=_vlP0s1ZTdT_RzLK7UEqbAIsCuvgazCbEHFthPEGqSs&e=>
> || !PGOOpt ||
> PGOOpt->Action != PGOOptions::SampleUse
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_structllvm-5F1-5F1PGOOptions.html-23a13bd589bcabdfc073bac5711f76dd2b6a9cbf1cb1b0731fc75926a6930592968a&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=0joLN7ItQ-bBnPm_obAtCq8GlxpEOItz7mlKD1127I4&e=>
> )
> LPM2.addPass(LoopFullUnrollPass
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_classllvm-5F1-5F1LoopFullUnrollPass.html&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=IJH5UWNHazAZopVGn0-zH608f0GuB_qjWnSLZI_6_n4&e=>
> (Level
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_namespacellvm-5F1-5F1PICLevel.html-23a66ddbf1bb21f90ddc44260d1ca677b6b&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=fDNQgJPblWk_XqJYM5QZz4ionfC0bPG1Kf26Bk09UGA&e=>
> .getSpeedupLevel(),
> /* OnlyWhenForced= */ !PTO.LoopUnrolling
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_classllvm-5F1-5F1PipelineTuningOptions.html-23af5b2b612c2769e79040e34bc4be7a77f&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=5Dfb5UT0qna_Z5c4tHB7GiORlosgYjVzC_HlLWpteOE&e=>
> ,
> PTO.ForgetAllSCEVInLoopUnroll
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_classllvm-5F1-5F1PipelineTuningOptions.html-23ac4261b710708d3ffd351693d268dbc2b&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=sbQZllB-TgD7_0NMlEtD5vY970XHLAUxr-QvO7a4AnU&e=>
> ));
>
> for (auto &C
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_README-5F-5FALTIVEC-5F8txt.html-23a9aacd9146afe44bf656cd664e2a88c8c&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=bADrxeYblE8QaL6xuXPkUIH4Z6BAoswihLzXx6H5zI0&e=>
> : LoopOptimizerEndEPCallbacks)
> (LPM2, Level
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_namespacellvm-5F1-5F1PICLevel.html-23a66ddbf1bb21f90ddc44260d1ca677b6b&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=fDNQgJPblWk_XqJYM5QZz4ionfC0bPG1Kf26Bk09UGA&e=>
> );
>
> FPM.addPass
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_classllvm-5F1-5F1PassManager.html-23a314ff184ce4ace8801e1158ef909e22e&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=NjRAg5oFdVWwQJ99pDBjsUazROeK5TVodwW-3dKWkgE&e=>
> (createFunctionToLoopPassAdaptor
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_namespacellvm.html-23a5118c8cfac85abdec7366d89d023a1ef&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=Rty4O5qYeXivnVfrcKEnBtxIko71GPiTCHUxgMMk_xU&e=>
> (
> std::move
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_doxygen_lib-5F2Target-5F2ARM-5F2README-5F8txt.html-23ad3a99906764c35b2694ae90fa57744a5&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=p0DGcdtx8-l1bvwJTLSk1zBTXpb78Y1slqHKTsTpRTE&m=-1rK1PP7u3GOjDK9_MrikSqTedxsHUf50A8UOx2ZAow&s=yT7-RnOrw1YD9xJRj5Rpoy-BBQ8YQKdHk5n7y7FapSU&e=>(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/20210323/feabddf1/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Image.1783ba913de308fca931.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210323/feabddf1/attachment-0001.gif>


More information about the llvm-dev mailing list