Whitney T Tsang via llvm-dev
2021-Mar-22 16:01 UTC
[llvm-dev] [GSoC 2021] Utilize LoopNest Pass
An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210322/c679196e/attachment.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/20210322/c679196e/attachment.gif>
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>
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://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/20210405/ce902fb3/attachment.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/20210405/ce902fb3/attachment.gif>
Whitney T Tsang via llvm-dev
2021-Apr-05 13:00 UTC
[llvm-dev] [GSoC 2021] Utilize LoopNest Pass
An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210405/65b1c2b1/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/20210405/65b1c2b1/attachment.gif>